From 8558438e01cd78bb320807f89d88c2e4bf1fb0a7 Mon Sep 17 00:00:00 2001 From: Emily Frost Date: Tue, 14 Jun 2022 10:22:56 -0500 Subject: [PATCH 1/3] Fixed array expansion bug in mkvmerge-add-subtitles. --- functions/mkvmerge-add-subtitles | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/functions/mkvmerge-add-subtitles b/functions/mkvmerge-add-subtitles index be61f1e..4eccc37 100644 --- a/functions/mkvmerge-add-subtitles +++ b/functions/mkvmerge-add-subtitles @@ -30,9 +30,10 @@ _mkvmerge_add_subtitles_mkvmerge () { # For example [basename].[language code].srt coded_subtitle_files=(${original_file:r}.*.srt(N)) if [[ ! -z $coded_subtitle_files ]]; then - for fname in "$coded_subtitle_files"; do + for fname in $coded_subtitle_files; do language_code="${${fname:r}:e}" subtitle_options_array+=("--language" "0:${language_code}" "$fname") + echo "Found coded subtitle file ${fname} for language ${language_code}." done fi @@ -41,6 +42,8 @@ _mkvmerge_add_subtitles_mkvmerge () { uncoded_subtitle_name="${original_file:r}.srt" if [[ -f "$uncoded_subtitle_name" ]]; then subtitle_options_array+=("--language" "0:${DEFAULT_LANGUAGE_CODE}" "$uncoded_subtitle_name") + echo "Found uncoded subtitle file ${uncoded_subtitle_name}, assuming \ + ${DEFAULT_LANGUAGE_CODE}." fi # Finally, actually mux all the subtitles in if there are any. @@ -48,7 +51,7 @@ _mkvmerge_add_subtitles_mkvmerge () { echo "No subtitles found for file ${original_file}" else echo "Remuxing ${original_file}..." - mkvmerge --quiet -o "$partial_file" "$original_file" ${(@)subtitle_options_array} \ + mkvmerge --quiet -o "$partial_file" "$original_file" ${^subtitle_options_array} \ || rm "$partial_file" echo "Done!" From b2f2f7d86e6016c82f75549bc181b5c5a06f436a Mon Sep 17 00:00:00 2001 From: Emily Frost Date: Tue, 14 Jun 2022 14:24:27 -0500 Subject: [PATCH 2/3] Updated mkvmerge-add-subtitles to use named subtitle files. --- functions/mkvmerge-add-subtitles | 56 ++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/functions/mkvmerge-add-subtitles b/functions/mkvmerge-add-subtitles index 4eccc37..c6e83de 100644 --- a/functions/mkvmerge-add-subtitles +++ b/functions/mkvmerge-add-subtitles @@ -6,6 +6,11 @@ DEFAULT_LANGUAGE_CODE="eng" # TODO: This needs to be used in the glob, but I don't know how. VIDEO_EXTENSIONS="mkv,mp4,avi" +typeset -A LANGUAGE_NAMES +LANGUAGE_NAMES=( \ + 'english' 'en' \ + ) + _mkvmerge_add_subtitles_mkvmerge () { original_file="$1" results_directory="$2" @@ -26,6 +31,15 @@ _mkvmerge_add_subtitles_mkvmerge () { # TODO: Support the other patterns listed in the above comment. video_basename="$1" + # Include subtitles without language codes, assuming $DEFAULT_LANGUAGE_CODE is correct. + # For example: [basename].srt + uncoded_subtitle_name="${original_file:r}.srt" + if [[ -f "$uncoded_subtitle_name" ]]; then + subtitle_options_array+=("--language" "0:${DEFAULT_LANGUAGE_CODE}" "$uncoded_subtitle_name") + echo "Found uncoded subtitle file ${uncoded_subtitle_name}, assuming \ + ${DEFAULT_LANGUAGE_CODE}." + fi + # Include subtitles with language codes in their filenames. # For example [basename].[language code].srt coded_subtitle_files=(${original_file:r}.*.srt(N)) @@ -37,13 +51,41 @@ _mkvmerge_add_subtitles_mkvmerge () { done fi - # Include subtitles without language codes, assuming $DEFAULT_LANGUAGE_CODE is correct. - # For example: [basename].srt - uncoded_subtitle_name="${original_file:r}.srt" - if [[ -f "$uncoded_subtitle_name" ]]; then - subtitle_options_array+=("--language" "0:${DEFAULT_LANGUAGE_CODE}" "$uncoded_subtitle_name") - echo "Found uncoded subtitle file ${uncoded_subtitle_name}, assuming \ - ${DEFAULT_LANGUAGE_CODE}." + # Include subtitles in the Subs directory + named_subtitle_files=(${original_file:h}/Subs/*.srt) + if [[ ! -z $named_subtitle_files ]]; then + existing_language_codes=() + for fname in $named_subtitle_files; do + file_basename=${fname:t} + + # determine language code from filenames like 2_English.srt + # This character soup does three things + # * #[0-9]*_ removes the preceding track number, such as 2_ or 13_ + # * :r removes the file extension + # * :l makes it all lowercase + language_name="${${file_basename#[0-9]*_}:r:l}" + echo "Found subtitle file ${fname}." + + if [[ $LANGUAGE_NAMES[$language_name] ]]; then + language_code=$LANGUAGE_NAMES[$language_name] + echo "Checking if subtitle file ${fname} is usable." + + # TODO: This is absolutely an ugly way to do this, but this is what works. + if $(echo ${existing_language_codes} > grep ${language_code}); then + subtitle_options_array+=("--language" "0:${language_code}" "$fname") + existing_language_codes+=$language_code + echo "Found ${language_code} subtitles at ${fname}." + + else + echo "Duplicate subtitle files for ${language_code}." + exit 1 + fi + + else + echo "Unknown language name ${language_name}." + exit 1 + fi + done fi # Finally, actually mux all the subtitles in if there are any. From 7b8580be9c84397a1bb90e3fb2cf759d683df35f Mon Sep 17 00:00:00 2001 From: Emily Frost Date: Wed, 3 Aug 2022 21:31:24 -0500 Subject: [PATCH 3/3] Fixed a bug in which get-ssh-agent would not actually source the env file when run the first time. --- functions/get-ssh-agent | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/functions/get-ssh-agent b/functions/get-ssh-agent index c23ed1d..c8e6353 100755 --- a/functions/get-ssh-agent +++ b/functions/get-ssh-agent @@ -13,9 +13,11 @@ else fi function _start_new_ssh_agent () { + ssh_agent_file=$1 killall ssh-agent # start a new ssh-agent and write its output to the env file. - ssh-agent | grep -v echo >&"$ssh_agent_env_file" + ssh-agent | grep -v echo >& "$ssh_agent_file" + source "$ssh_agent_file" echo "New ssh-agent started." ssh-add } @@ -27,9 +29,9 @@ if [[ -e "$ssh_agent_env_file" ]]; then echo "Existing ssh-agent environment configured with pid ${SSH_AGENT_PID}." else echo "Existing ssh-agent appears to be dead." - _start_new_ssh_agent + _start_new_ssh_agent "$ssh_agent_env_file" fi else echo "No existing ssh-agent found." - _start_new_ssh_agent + _start_new_ssh_agent "$ssh_agent_env_file" fi