Skip to content

Commit 328b5c9

Browse files
825itatsumoto-ren
authored andcommitted
push macos silicon compatible impd
1 parent 701b5e7 commit 328b5c9

File tree

1 file changed

+61
-23
lines changed

1 file changed

+61
-23
lines changed

impd

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ filter_tracks() {
106106
}
107107

108108
preferred_languages() {
109-
local pref_langs=${langs,,}
109+
local pref_langs=$(echo "${langs}" | tr '[:upper:]' '[:lower:]')
110110
echo "${pref_langs//,/$'\n'}"
111111
}
112112

113113
guess_track_priority() {
114114
# Sets some numeric weight for track. Used when sorting tracks.
115-
local -r track_lang=${1,,} track_title=${2,,}
115+
local -r track_lang=$(echo "${1}" | tr '[:upper:]' '[:lower:]') track_title=$(echo "${2}" | tr '[:upper:]' '[:lower:]')
116116
local weight=0
117117

118118
# impd wants to use full subtitle tracks and avoid other tracks if possible.
@@ -157,7 +157,7 @@ best_track() {
157157
if [[ -n $tracks ]]; then
158158
while IFS=$'\t' read -r track_num track_lang track_title; do
159159
printf -- '%d\t%d\n' "$track_num" "$(guess_track_priority "$track_lang" "$track_title")"
160-
done <<<"$tracks" | sort --stable -g -k 2 -t $'\t' | cut -f1 | head -1
160+
done <<<"$tracks" | sort -g -k 2 -t $'\t' | cut -f1 | head -1
161161
fi
162162
}
163163

@@ -214,14 +214,13 @@ fetch_episode_number() {
214214
local -r file=${1:?}
215215
{
216216
echo 01
217-
grep -Pio '\[\K\d+(?=\])' <<<"${file%.*}"
218217
sed \
219218
-Ee 's/(\[|\()[^])]*(\]|\))//g' \
220219
-Ee 's/[0-9]{3,4}[pP]//g' \
221220
-Ee 's/(19|20)[0-9]{2}//g' \
222221
-Ee 's/v[.0-9-]{1,4}//g' \
223222
-e 's/_/ /g' <<<"${file%.*}" |
224-
grep -Pio '(?<=[##. pe-])[[:digit:]]{1,3}\b'
223+
grep -Eio '[##. pe-][[:digit:]]{1,3}\b' | grep -Eo '[[:digit:]]{1,3}'
225224
} | tail -1
226225
}
227226

@@ -263,10 +262,19 @@ check_output() {
263262
}
264263

265264
extract_audio() {
266-
local -r input=$(readlink -f -- "${1:?}")
267-
local -r output=$(readlink -f -- "${2:-$immersionpod_dir/$current/$(basename -- "${input%.*}").ogg}")
265+
local input="${1:?}"
266+
local output="${2:-$immersionpod_dir/$current/$(basename -- "${input%.*}").ogg}"
268267
local -r track_num=${3:-$(best_track a "$input")}
269268

269+
# Get absolute paths (macOS compatible)
270+
if [[ "$input" != /* ]]; then
271+
input="$(pwd)/$input"
272+
fi
273+
if [[ "$output" != /* ]]; then
274+
output="$(pwd)/$output"
275+
fi
276+
local -r input output
277+
270278
if ! check_output; then
271279
return 1
272280
fi
@@ -306,7 +314,7 @@ extract_audio() {
306314
make_uncondensed() {
307315
local -r input=${1:?}
308316
local -r base=$(basename -- "${input%.*}")
309-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "make_uncondensed.job-XXXX")
317+
local -r job_dir=$(mktemp -d "$tmp_dir/make_uncondensed.job-XXXX")
310318
local -r temp_audio=$job_dir/$base.ogg
311319
local -r output=$immersionpod_dir/$current/$base.ogg
312320

@@ -541,19 +549,34 @@ concat_audio() {
541549
}
542550

543551
make_condensed() {
544-
local -r video=$(readlink -f -- "${1:?}")
552+
local video="${1:?}"
553+
# Get absolute path (macOS compatible)
554+
if [[ "$video" != /* ]]; then
555+
video="$(pwd)/$video"
556+
fi
557+
local -r video
545558
local -r base=$(basename -- "${video%.*}" | tr -d \')
546559

547-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "$base.job-XXXX")
560+
local -r job_dir=$(mktemp -d "$tmp_dir/$base.job-XXXX")
548561

549562
local -r temp_audio=$job_dir/$base.ogg
550-
local -r output=$(readlink -f -- "${2:-$immersionpod_dir/$current/$base.ogg}")
563+
local output="${2:-$immersionpod_dir/$current/$base.ogg}"
564+
# Get absolute path (macOS compatible)
565+
if [[ "$output" != /* ]]; then
566+
output="$(pwd)/$output"
567+
fi
568+
local -r output
551569

552-
local -r chunks_dir=$(mktemp -d --tmpdir="$job_dir" -t "chunks-XXXX")
570+
local -r chunks_dir=$(mktemp -d "$job_dir/chunks-XXXX")
553571
local -r chunks_file=$job_dir/chunks.list
554572

555573
local -r subs_out=$job_dir/$base.srt
556-
local -r subs_external=$(readlink -f -- "${3:-$(find_external_subtitles "$video")}")
574+
local subs_external="${3:-$(find_external_subtitles "$video")}"
575+
# Get absolute path (macOS compatible)
576+
if [[ -n "$subs_external" && "$subs_external" != /* ]]; then
577+
subs_external="$(pwd)/$subs_external"
578+
fi
579+
local -r subs_external
557580

558581
local -r subs_track_num=${4-}
559582
local -r audio_track_num=${5-}
@@ -645,7 +668,12 @@ notify_send() {
645668
}
646669

647670
add_file() {
648-
local -r source_file=$(readlink -f -- "${1:?}")
671+
local source_file="${1:?}"
672+
# Get absolute path (macOS compatible)
673+
if [[ "$source_file" != /* ]]; then
674+
source_file="$(pwd)/$source_file"
675+
fi
676+
local -r source_file
649677

650678
if [[ -f $source_file ]]; then
651679
if [[ -z ${global_no_condense-} ]]; then
@@ -658,7 +686,7 @@ add_file() {
658686

659687
add_remote() {
660688
local -r source_url=${1:?}
661-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "download.job-XXXX")
689+
local -r job_dir=$(mktemp -d "$tmp_dir/download.job-XXXX")
662690
(
663691
cd -- "$job_dir" && curl -L -O "$source_url"
664692
for file in "$job_dir"/*; do
@@ -741,7 +769,7 @@ add() {
741769

742770
file_can_be_added() {
743771
local -r file=$1
744-
grep -Pqv "$filename_skip_pattern" <<<"$file" && is_media "$file"
772+
grep -Eqv "$filename_skip_pattern" <<<"$file" && is_media "$file"
745773
}
746774

747775
add_stdin() {
@@ -794,7 +822,7 @@ download_yt() {
794822

795823
add_yt() {
796824
local -r source_url=${1:?}
797-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "youtube-dl.job-XXXX")
825+
local -r job_dir=$(mktemp -d "$tmp_dir/youtube-dl.job-XXXX")
798826

799827
download_yt -o "$job_dir/%(uploader)s - %(title).60s.%(ext)s" "$source_url"
800828

@@ -854,16 +882,19 @@ mkplaylist() {
854882

855883
find "$immersionpod_dir/$current" \
856884
-type f \
857-
-printf '%P\n' \
858-
-regextype posix-extended \
859-
-iregex '.*\.(mp3|opus|ogg|m4a|wav|wma)$' |
885+
-iname '*.mp3' -o -iname '*.opus' -o -iname '*.ogg' -o -iname '*.m4a' -o -iname '*.wav' -o -iname '*.wma' |
860886
shuf > "$m3u_path"
861887
echo "created file '$m3u_path'"
862888
}
863889

864890
grep_mpd_dir() {
865891
# https://wiki.archlinux.org/index.php/Music_Player_Daemon#Configuration
866-
grep -Pos 'music_directory\s*"?\K[^"]*(?="?)' -- ~/.config/mpd/mpd.conf
892+
if command -v ggrep >/dev/null; then
893+
ggrep -Pos 'music_directory\s*"?\K[^"]*(?="?)' -- ~/.config/mpd/mpd.conf 2>/dev/null
894+
else
895+
# Fallback for macOS - extract music directory path from mpd.conf
896+
grep 'music_directory' ~/.config/mpd/mpd.conf 2>/dev/null | sed -E 's/.*music_directory[[:space:]]*"?([^"]*).*/\1/'
897+
fi
867898
}
868899

869900
choose_mpd_dir() {
@@ -872,7 +903,14 @@ choose_mpd_dir() {
872903
# Otherwise, the directory is set to the value from mpd's config.
873904
# Different fallbacks are tried in other cases.
874905
local dir
875-
for dir in "$music_dir" "$(grep_mpd_dir)" "$(xdg-user-dir MUSIC)" ~/Music ~/music; do
906+
# macOS doesn't have xdg-user-dir, so we'll use ~/Music as the default
907+
local music_fallback
908+
if [[ "$(uname)" == "Darwin" ]]; then
909+
music_fallback="$HOME/Music"
910+
else
911+
music_fallback="$(xdg-user-dir MUSIC 2>/dev/null || echo "$HOME/Music")"
912+
fi
913+
for dir in "$music_dir" "$(grep_mpd_dir)" "$music_fallback" ~/Music ~/music; do
876914
dir=${dir/\~/$HOME}
877915
dir=${dir//\/\//\/}
878916
dir=${dir%%/}
@@ -958,7 +996,7 @@ version() {
958996
read_config_file() {
959997
if [[ -f $config_filepath ]]; then
960998
# shellcheck source=/dev/null
961-
source -- <(grep -xP '^[a-z_]+=.+$' -- "$config_filepath")
999+
source -- <(grep -x '^[a-z_]*=.*$' -- "$config_filepath")
9621000
fi
9631001
}
9641002

0 commit comments

Comments
 (0)