Initial commit
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
template.json
|
||||
.vscode
|
||||
settings.ini
|
||||
7
auto_mkvmerge.desktop
Normal file
7
auto_mkvmerge.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=auto_mkvmerge
|
||||
Exec=sh -e -c "exec \\"\\$(dirname \\"\\$0\\")/bin/auto_mkvmerge.sh\\"" %k
|
||||
Icon=mkvmerge
|
||||
Terminal=true
|
||||
Type=Application
|
||||
472
bin/auto_mkvmerge.sh
Normal file
472
bin/auto_mkvmerge.sh
Normal file
@@ -0,0 +1,472 @@
|
||||
#!/bin/bash
|
||||
|
||||
#─────────────────────────────────── user settings ───────────────────────────────────#
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# pathes
|
||||
input_folder=""
|
||||
output_folder=""
|
||||
jsonfile_path="./template.json"
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# determine what to do if the video files have different audio and subtitle tracks
|
||||
# possible values:
|
||||
# normal | if credibility check returns with no errors start merging
|
||||
# check | stops after credibility check
|
||||
# nocheck | merge without a credibility check
|
||||
mode=normal
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# choose which mkvmerge version is used
|
||||
# possible values:
|
||||
# binary | use "/usr/bin/mkvmerge"
|
||||
# flatpak | use "flatpak run org.bunkus.mkvtoolnix-gui mkvmerge"
|
||||
# path | use your own path to mkvmerge
|
||||
mkvmerge=binary
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# get text notifications of errors and when the script is done (via notify-send)
|
||||
# possible values:
|
||||
# on | notifications on
|
||||
# off | notifications off
|
||||
notification_text=on
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# get audio notifications of errors and when the script is done
|
||||
# possible values:
|
||||
# off | no sound
|
||||
# beep | beep sounds via speaker-test
|
||||
# voice | tts via spd-say
|
||||
# file | play wav files from $(pwd)./bin folder namend done.wav & error.wav
|
||||
nofification_audio=beep
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
# overwrite the above settings with the values from a ini file
|
||||
# possible values:
|
||||
# on | ignore above values and use $settings_file
|
||||
# off | use the values from script
|
||||
overwrite_with_settings_ini=on
|
||||
settings_file="./settings.ini"
|
||||
#─────────────────────────────────────────────────────────────────────────────────────#
|
||||
#─────────────────────────────────── script start ────────────────────────────────────#
|
||||
|
||||
|
||||
|
||||
# ffprobe
|
||||
ffprobe_path="/usr/bin/ffprobe"
|
||||
|
||||
|
||||
# global variables
|
||||
declare -a json_array
|
||||
declare -a video_file_list
|
||||
outputpath_index=-1
|
||||
inputpath_index=-1
|
||||
|
||||
|
||||
#colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;92m'
|
||||
BLUE='\033[0;94m'
|
||||
WHITE_ON_GRAY='\033[0;37;100m'
|
||||
BLACK_ON_WHITE='\033[0;30;47m'
|
||||
WHITE_ON_RED='\033[0;37;41m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
|
||||
|
||||
|
||||
# Main Function
|
||||
main() {
|
||||
|
||||
# get the user variables of the ini file
|
||||
if [ "$overwrite_with_settings_ini" = "on" ]; then
|
||||
get_user_variables_from_ini_file
|
||||
fi
|
||||
|
||||
# convert relativ to absolut pathes
|
||||
jsonfile_path=$(relativ_to_fullpath "$jsonfile_path")
|
||||
|
||||
|
||||
# apply user varible $mkvmerge to $mkvmerge_path
|
||||
if [ "$mkvmerge" = "binary" ]; then
|
||||
mkvmerge_path="/usr/bin/mkvmerge"
|
||||
elif [ "$mkvmerge" = "flatpak" ]; then
|
||||
mkvmerge_path="flatpak run org.bunkus.mkvtoolnix-gui mkvmerge"
|
||||
else
|
||||
mkvmerge_path=$mkvmerge
|
||||
fi
|
||||
|
||||
|
||||
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} Auto MKVMerge start ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo " "
|
||||
echo -e "${WHITE_ON_GRAY} Input Folder ${NC} ""$input_folder"""
|
||||
echo -e "${WHITE_ON_GRAY} Output Folder ${NC} ""$output_folder"""
|
||||
echo -e "${WHITE_ON_GRAY} JSON File ${NC} ""$jsonfile_path"""
|
||||
echo -e "${WHITE_ON_GRAY} MKVMerge ${NC} ""$mkvmerge_path"""
|
||||
echo -e "${WHITE_ON_GRAY} Mode ${NC} ""$mode"""
|
||||
echo " "
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
# map json array to bash array
|
||||
check_dependecies
|
||||
init
|
||||
|
||||
|
||||
#credibility check
|
||||
if [ ! "$mode" = "nocheck" ]; then
|
||||
check_credibility "${video_file_list[@]}"
|
||||
fi
|
||||
|
||||
#start merging
|
||||
if [ ! "$mode" = "check" ]; then
|
||||
echo -e "${BLACK_ON_WHITE} Starting MKVMerge ${NC}"
|
||||
local filecount=1 #count variable for the echo output
|
||||
local filecountdecimal="" #same count variable in 3 decimal
|
||||
local filetotaldecimal=$(printf "%03d" ${#video_file_list[@]}) #converting filescount to a 3 decimal output
|
||||
|
||||
for file_path in "${video_file_list[@]}"; do
|
||||
|
||||
# highlight_episode
|
||||
highlighted_episode=$(highlight_episode "$file_path")
|
||||
|
||||
filecountdecimal=$(printf "%03d" $filecount)
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${WHITE_ON_GRAY} ""$filecountdecimal""|""$filetotaldecimal"" ${NC} Merging: $highlighted_episode${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
((filecount++))
|
||||
output_path="$output_folder/$(basename "$file_path")"
|
||||
apply_mkvmerge_on_file "$file_path" "$output_path"
|
||||
done
|
||||
fi
|
||||
|
||||
_exit 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
check_dependecies(){
|
||||
|
||||
# Error check: Input path is invalid
|
||||
if [ ! -e "$input_folder" ]; then
|
||||
_exit 1 "Input path is invalid!"
|
||||
fi
|
||||
|
||||
# Error check: Output path is invalid and cannot be created
|
||||
if [ ! -e "$output_folder" ]; then
|
||||
# try to create the path
|
||||
mkdir -p "$output_folder" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
#echo "Output path is invalid or cannot be created!"
|
||||
_exit 1 "Output path is invalid or cannot be created!"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Error check: Input and Output paths must not be identical
|
||||
if [[ "$input_folder" == "$output_folder" ]]; then
|
||||
_exit 1 "Input and Output paths must not be identical!"
|
||||
fi
|
||||
|
||||
if ! test -x "$ffprobe_path"; then
|
||||
_exit 1 "ffprobe is not installed. Please install it before running this script."
|
||||
fi
|
||||
|
||||
# Error check: Videos.json file not found
|
||||
if [ ! -e "$jsonfile_path" ]; then
|
||||
_exit 1 "Videos.json file not found!"
|
||||
fi
|
||||
|
||||
# Error check: mkvmerge not found
|
||||
if [ "$mkvmerge" = "binary" ]; then
|
||||
if ! test -x "$mkvmerge_path"; then
|
||||
_exit 1 "mkvmerge not found!"
|
||||
fi
|
||||
elif [ "$mkvmerge" = "flatpak" ]; then
|
||||
if ! test -x "/var/lib/flatpak/app/org.bunkus.mkvtoolnix-gui"; then
|
||||
_exit 1 "mkvmerge not found!"
|
||||
fi
|
||||
else
|
||||
if ! test -x "$mkvmerge_path"; then
|
||||
_exit 1 "mkvmerge not found!"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
init() {
|
||||
|
||||
mapfile -t json_array < <(jq -r '.[]' "$jsonfile_path")
|
||||
|
||||
#loop over indices of bash array
|
||||
for index in "${!json_array[@]}";do
|
||||
#get item on current position
|
||||
item="${json_array[$index]}"
|
||||
|
||||
#if current position has value --output the next index is the output path
|
||||
if [[ "$item" == "--output" ]]; then
|
||||
outputpath_index=$(($index + 1))
|
||||
fi
|
||||
|
||||
#if current position has value ( the next index is the input path (hopefully)
|
||||
if [[ "$item" == "(" ]]; then
|
||||
inputpath_index=$(($index + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
#if one path is not found: invalid json
|
||||
if [[ $outputpath_index -eq -1 || $inputpath_index -eq -1 ]]; then
|
||||
_exit 1 "there is an error with the json config file: input or output path not found"
|
||||
fi
|
||||
|
||||
#save all mp4 and mkv file paths in video_file_list array
|
||||
mapfile -t video_file_list < <(find "$input_folder" -type f \( -name "*.mp4" -o -name "*.mkv" -o -name "*.flv" -o -name "*.avi" \) | sort)
|
||||
|
||||
if [ "${#json_array[@]}" -eq 0 ]; then
|
||||
_exit 1 "no files found in $input_folder"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
get_user_variables_from_ini_file() {
|
||||
|
||||
# get absolut path of the ini file
|
||||
settings_file=$(relativ_to_fullpath "$settings_file")
|
||||
|
||||
# abort script if settings file can't be found
|
||||
if [ ! -e "$settings_file" ]; then
|
||||
_exit 1 "Settingsfile not found at: "$settings_file
|
||||
fi
|
||||
|
||||
# read ini values
|
||||
input_folder=$(sed -nr "/^\[pathes\]/ { :l /^input_folder[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
output_folder=$(sed -nr "/^\[pathes\]/ { :l /^output_folder[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
jsonfile_path=$(sed -nr "/^\[pathes\]/ { :l /^jsonfile_path[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
mode=$(sed -nr "/^\[mode\]/ { :l /^mode[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
mkvmerge=$(sed -nr "/^\[mkvmerge\]/ { :l /^mkvmerge[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
notification_text=$(sed -nr "/^\[notification_text\]/ { :l /^notification_text[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
nofification_audio=$(sed -nr "/^\[nofification_audio\]/ { :l /^nofification_audio[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
check_credibility(){
|
||||
|
||||
local global_error=false
|
||||
local file_error=false
|
||||
local first_iteration_audio_language_array=()
|
||||
local first_iteration_subtitle_language_array=()
|
||||
local files=("$@")
|
||||
local filetotaldecimal=$(printf "%03d" ${#files[@]}) #converting filescount to a 3 decimal output
|
||||
local filecount=1 #count variable for the echo output
|
||||
local filecountdecimal="" #same count variable in 3 decimal
|
||||
local audio_language_array_sep=""
|
||||
local subtitle_language_array_sep=""
|
||||
local seperator="|"
|
||||
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Checking credibility ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
|
||||
ffprobe_json=$("$ffprobe_path" -v error -show_streams -of json "$file")
|
||||
|
||||
# Run ffprobe and extract language information using jq, store it in a bash array
|
||||
readarray -t audio_language_array < <(echo "$ffprobe_json" | jq '.streams[] | select(.codec_type == "audio") | .tags.language')
|
||||
readarray -t subtitle_language_array < <(echo "$ffprobe_json" | jq '.streams[] | select(.codec_type == "subtitle") | .tags.language')
|
||||
|
||||
# Debug Print the contents of the array
|
||||
#printf '%s\n' "${language_array[@]}"
|
||||
|
||||
if [[ $filecount = 1 ]]; then
|
||||
first_iteration_audio_language_array=("${audio_language_array[@]}")
|
||||
first_iteration_subtitle_language_array=("${subtitle_language_array[@]}")
|
||||
elif [[ "${first_iteration_audio_language_array[*]}" != "${audio_language_array[*]}" || "${first_iteration_subtitle_language_array[*]}" != "${subtitle_language_array[*]}" ]]; then
|
||||
global_error=true
|
||||
file_error=true
|
||||
fi
|
||||
|
||||
#converting filecount to a 3 decimal output
|
||||
filecountdecimal=$(printf "%03d" $filecount)
|
||||
|
||||
|
||||
#converadding seperator to audio_language_array ($seperator)
|
||||
audio_language_array_sep=$(printf "%s$seperator" "${audio_language_array[@]}")
|
||||
#cutting off last seperator
|
||||
audio_language_array_sep=${audio_language_array_sep%$seperator}
|
||||
|
||||
#adding seperator to subtitle_language_array ($seperator)
|
||||
subtitle_language_array_sep=$(printf "%s$seperator" "${subtitle_language_array[@]}")
|
||||
#cutting last off seperator
|
||||
subtitle_language_array_sep=${subtitle_language_array_sep%$seperator}
|
||||
|
||||
# highlight_episode
|
||||
highlighted_episode=$(highlight_episode "$file")
|
||||
|
||||
if [ $file_error = true ]; then
|
||||
echo -e "${WHITE_ON_GRAY} ""$filecountdecimal""|""$filetotaldecimal"" ${NC} ${RED}Audio: ${#audio_language_array[@]} [${audio_language_array_sep[*]}]${NC} ${WHITE_ON_GRAY}|${NC} ${RED}Subtitle: ${#subtitle_language_array[@]} [${subtitle_language_array_sep[*]}]${NC} $highlighted_episode${NC}"
|
||||
else
|
||||
echo -e "${WHITE_ON_GRAY} ""$filecountdecimal""|""$filetotaldecimal"" ${NC} ${GREEN}Audio: ${#audio_language_array[@]} [${audio_language_array_sep[*]}]${NC} ${WHITE_ON_GRAY}|${NC} ${GREEN}Subtitle: ${#subtitle_language_array[@]} [${subtitle_language_array_sep[*]}]${NC} $highlighted_episode${NC}"
|
||||
fi
|
||||
|
||||
((filecount++))
|
||||
|
||||
file_error=false
|
||||
|
||||
done
|
||||
|
||||
if [ $global_error = true ]; then
|
||||
#echo "────────────────────────────────────────────────────────────────"
|
||||
#echo -e "${WHITE_ON_RED} The credibility check returned with errors! Aborting... ${NC}"
|
||||
#echo "────────────────────────────────────────────────────────────────"
|
||||
_exit 1 "The credibility check returned with errors! Aborting"
|
||||
else
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} The credibility test went smoothly ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# MKV Merge Batch Function
|
||||
apply_mkvmerge_on_file() {
|
||||
#parameter is path of a video file to be merged
|
||||
local input_file=$1
|
||||
local output_file=$2
|
||||
local command="$mkvmerge_path"
|
||||
|
||||
#update input path in video json array
|
||||
json_array[inputpath_index]="$input_file"
|
||||
|
||||
#update output path in video json array
|
||||
json_array[outputpath_index]="$output_file"
|
||||
|
||||
for argument in "${json_array[@]}"; do
|
||||
command+=" \"$argument\""
|
||||
done
|
||||
|
||||
eval "$command"
|
||||
|
||||
}
|
||||
|
||||
#beep sounds via speaker-test
|
||||
playsound_speaker_sound() {
|
||||
(
|
||||
\speaker-test --frequency $1 --test sine > /dev/null 2>&1 &
|
||||
pid=$!
|
||||
\sleep 0.${2}s
|
||||
\kill -9 $pid > /dev/null 2>&1
|
||||
) > /dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
_exit(){
|
||||
|
||||
#get the exit message
|
||||
local error_state="$1"
|
||||
local error_msg="$2"
|
||||
local scriptpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
#script stopted with errors
|
||||
if [ "$error_state" = 1 ]; then
|
||||
|
||||
#echo output
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${WHITE_ON_RED} Error ${NC}"
|
||||
echo
|
||||
echo -e "${RED}$error_msg${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
#notification_text
|
||||
if [ "$notification_text" = "on" ]; then
|
||||
notify-send --urgency=critical "Auto MKVMerge Warning" "$error_msg"
|
||||
fi
|
||||
|
||||
#nofification_audio
|
||||
if [ "$nofification_audio" = "beep" ]; then
|
||||
playsound_speaker_sound 1500 150
|
||||
playsound_speaker_sound 1500 150
|
||||
playsound_speaker_sound 1500 150
|
||||
elif [ "$nofification_audio" = "voice" ]; then
|
||||
spd-say "Auto MKVMerge Error"
|
||||
elif [ "$nofification_audio" = "file" ]; then
|
||||
aplay "$scriptpath/error.wav" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
#normal exit
|
||||
if [ "$error_state" = 0 ]; then
|
||||
|
||||
#echo output
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} Finished! ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
#notification_text
|
||||
if [ "$notification_text" = "on" ]; then
|
||||
notify-send --urgency=normal "Auto MKVMerge" "Finished!"
|
||||
fi
|
||||
|
||||
#nofification_audio
|
||||
if [ "$nofification_audio" = "beep" ]; then
|
||||
playsound_speaker_sound 200 200
|
||||
playsound_speaker_sound 400 200
|
||||
elif [ "$nofification_audio" = "voice" ]; then
|
||||
spd-say "Auto MKVMerge ist fertig"
|
||||
elif [ "$nofification_audio" = "file" ]; then
|
||||
aplay "$scriptpath/done.wav" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
}
|
||||
|
||||
|
||||
# coloring SxxExx in string
|
||||
highlight_episode() {
|
||||
local input="$1"
|
||||
local normal_color=${NC}
|
||||
local episode_color=${BLUE}
|
||||
|
||||
local highlighted_episode=$(echo "$input" | awk -v normal_color="$normal_color" -v episode_color="$episode_color" 'BEGIN { IGNORECASE=1 } { gsub(/s[0-9]{2}e[0-9]{2}([e][0-9]{2})?/, episode_color"&\033[0m", $0); print normal_color$0"\033[0m" }')
|
||||
|
||||
echo "$highlighted_episode"
|
||||
}
|
||||
|
||||
|
||||
relativ_to_fullpath() {
|
||||
|
||||
local path="$1"
|
||||
scriptpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
if [ ! -e "$path" ]; then
|
||||
pathfull=$(realpath "$(dirname "$scriptpath")/$path")
|
||||
else
|
||||
pathfull=$path
|
||||
fi
|
||||
|
||||
echo "$pathfull"
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
# Main
|
||||
main
|
||||
|
||||
|
||||
$SHELL
|
||||
165
bin/auto_sort.sh
Normal file
165
bin/auto_sort.sh
Normal file
@@ -0,0 +1,165 @@
|
||||
#!/bin/bash
|
||||
|
||||
# global variables
|
||||
declare -a video_file_list
|
||||
settings_file="./settings.ini"
|
||||
|
||||
get_user_variables_from_ini_file
|
||||
|
||||
|
||||
#save all mp4 and mkv file paths in video_file_list array
|
||||
mapfile -t video_file_list < <(find "$input_folder" -type f \( -name "*.mp4" -o -name "*.mkv" -o -name "*.avi" \) | sort)
|
||||
|
||||
|
||||
# Funktion, um den kleinsten gemeinsamen übergeordneten Ordner zu finden
|
||||
find_common_parent() {
|
||||
local common_parent
|
||||
local first_file=true
|
||||
|
||||
# Durchlaufe alle übergebenen Dateien
|
||||
for file in "$@"; do
|
||||
# Überprüfe, ob die Datei existiert und eine Datei ist
|
||||
if [ -f "$file" ]; then
|
||||
# Bestimme den Ordner der Datei
|
||||
file_dir=$(dirname "$file")
|
||||
|
||||
# Wenn dies die erste Datei ist, setze den gemeinsamen übergeordneten Ordner auf den Ordner dieser Datei
|
||||
if [ "$first_file" = true ]; then
|
||||
common_parent="$file_dir"
|
||||
first_file=false
|
||||
else
|
||||
# Andernfalls bestimme den gemeinsamen übergeordneten Ordner zwischen dem aktuellen und dem bisherigen
|
||||
common_parent=$(realpath --relative-to="$common_parent" "$file_dir")
|
||||
fi
|
||||
else
|
||||
echo "Datei existiert nicht: $file"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Gib den gemeinsamen übergeordneten Ordner zurück
|
||||
echo "$common_parent"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
get_user_variables_from_ini_file() {
|
||||
|
||||
# get absolut path of the ini file
|
||||
settings_file=$(relativ_to_fullpath "$settings_file")
|
||||
|
||||
# abort script if settings file can't be found
|
||||
if [ ! -e "$settings_file" ]; then
|
||||
_exit 1 "Settingsfile not found at: "$settings_file
|
||||
fi
|
||||
|
||||
# read ini values
|
||||
input_folder=$(sed -nr "/^\[pathes\]/ { :l /^input_folder[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
output_folder=$(sed -nr "/^\[pathes\]/ { :l /^output_folder[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
jsonfile_path=$(sed -nr "/^\[pathes\]/ { :l /^jsonfile_path[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
mode=$(sed -nr "/^\[mode\]/ { :l /^mode[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
mkvmerge=$(sed -nr "/^\[mkvmerge\]/ { :l /^mkvmerge[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
notification_text=$(sed -nr "/^\[notification_text\]/ { :l /^notification_text[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
nofification_audio=$(sed -nr "/^\[nofification_audio\]/ { :l /^nofification_audio[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
relativ_to_fullpath() {
|
||||
|
||||
local path="$1"
|
||||
scriptpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
if [ ! -e "$path" ]; then
|
||||
pathfull=$(realpath "$(dirname "$scriptpath")/$path")
|
||||
else
|
||||
pathfull=$path
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
_exit(){
|
||||
|
||||
#get the exit message
|
||||
local error_state="$1"
|
||||
local error_msg="$2"
|
||||
local scriptpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
#script stopted with errors
|
||||
if [ "$error_state" = 1 ]; then
|
||||
|
||||
#echo output
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${WHITE_ON_RED} Error ${NC}"
|
||||
echo
|
||||
echo -e "${RED}$error_msg${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
#notification_text
|
||||
if [ "$notification_text" = "on" ]; then
|
||||
notify-send --urgency=critical "Auto MKVMerge Warning" "$error_msg"
|
||||
fi
|
||||
|
||||
#nofification_audio
|
||||
if [ "$nofification_audio" = "beep" ]; then
|
||||
playsound_speaker_sound 1500 150
|
||||
playsound_speaker_sound 1500 150
|
||||
playsound_speaker_sound 1500 150
|
||||
elif [ "$nofification_audio" = "voice" ]; then
|
||||
spd-say "Auto MKVMerge Error"
|
||||
elif [ "$nofification_audio" = "file" ]; then
|
||||
aplay "$scriptpath/error.wav" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
#normal exit
|
||||
if [ "$error_state" = 0 ]; then
|
||||
|
||||
#echo output
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} Finished! ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
#notification_text
|
||||
if [ "$notification_text" = "on" ]; then
|
||||
notify-send --urgency=normal "Auto MKVMerge" "Finished!"
|
||||
fi
|
||||
|
||||
#nofification_audio
|
||||
if [ "$nofification_audio" = "beep" ]; then
|
||||
playsound_speaker_sound 200 200
|
||||
playsound_speaker_sound 400 200
|
||||
elif [ "$nofification_audio" = "voice" ]; then
|
||||
spd-say "Auto MKVMerge ist fertig"
|
||||
elif [ "$nofification_audio" = "file" ]; then
|
||||
aplay "$scriptpath/done.wav" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
#exit the script
|
||||
echo
|
||||
read -n 1 -s -r -p "Press any key to exit"
|
||||
exit
|
||||
|
||||
}
|
||||
BIN
bin/done.wav
Normal file
BIN
bin/done.wav
Normal file
Binary file not shown.
BIN
bin/error.wav
Normal file
BIN
bin/error.wav
Normal file
Binary file not shown.
Reference in New Issue
Block a user