Skip to content

Commit 3df09d0

Browse files
825itatsumoto-ren
authored andcommitted
push macos silicon compatible impd
1 parent 96c39fd commit 3df09d0

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

impd

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,14 @@ filter_tracks() {
110110
}
111111

112112
preferred_languages() {
113-
local pref_langs=${langs,,}
113+
local pref_langs=$(echo "${langs}" | tr '[:upper:]' '[:lower:]')
114114
echo "${pref_langs//,/$'\n'}"
115115
}
116116

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

122123
# impd wants to use full subtitle tracks and avoid other tracks if possible.
@@ -161,7 +162,7 @@ best_track() {
161162
if [[ -n $tracks ]]; then
162163
while IFS=$'\t' read -r track_num track_lang track_title; do
163164
printf -- '%d\t%d\n' "$track_num" "$(guess_track_priority "$track_lang" "$track_title")"
164-
done <<<"$tracks" | sort --stable -g -k 2 -t $'\t' | cut -f1 | head -1
165+
done <<<"$tracks" | sort -g -k 2 -t $'\t' | cut -f1 | head -1
165166
fi
166167
}
167168

@@ -241,14 +242,13 @@ fetch_episode_number() {
241242
local -r file=${1:?}
242243
{
243244
echo 01
244-
grep -Pio '\[\K\d+(?=\])' <<<"${file%.*}"
245245
sed \
246246
-Ee 's/(\[|\()[^])]*(\]|\))//g' \
247247
-Ee 's/[0-9]{3,4}[pP]//g' \
248248
-Ee 's/(19|20)[0-9]{2}//g' \
249249
-Ee 's/v[.0-9-]{1,4}//g' \
250250
-e 's/_/ /g' <<<"${file%.*}" |
251-
grep -Pio '(?<=[##. pe-])[[:digit:]]{1,3}\b'
251+
grep -Eio '[##. pe-][[:digit:]]{1,3}\b' | grep -Eo '[[:digit:]]{1,3}'
252252
} | tail -1
253253
}
254254

@@ -371,7 +371,7 @@ make_output_basename() {
371371
make_uncondensed() {
372372
local -r input=${1:?}
373373
local -r base=$( make_output_basename "$input" )
374-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "make_uncondensed.job-XXXX")
374+
local -r job_dir=$(mktemp -d "$tmp_dir/make_uncondensed.job-XXXX")
375375
local -r temp_audio=$job_dir/$base.ogg
376376
local -r output=$immersionpod_dir/$current/$base.ogg
377377

@@ -627,12 +627,12 @@ make_condensed() {
627627
local -r video=$( canonicalize "${1:?Video path not set.}" ) # convert to full path
628628
local -r base=$( make_output_basename "$video" )
629629

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

632632
local -r temp_audio=$job_dir/$base.ogg
633633
local -r output=$( canonicalize "${2:-$immersionpod_dir/$current/$base.ogg}" )
634634

635-
local -r chunks_dir=$(mktemp -d --tmpdir="$job_dir" -t "chunks-XXXX")
635+
local -r chunks_dir=$(mktemp -d "$job_dir/chunks-XXXX")
636636
local -r chunks_file=$job_dir/chunks.list
637637

638638
local -r subs_out=$job_dir/$base.srt
@@ -752,7 +752,7 @@ add_file() {
752752

753753
add_remote() {
754754
local -r source_url=${1:?}
755-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "download.job-XXXX")
755+
local -r job_dir=$(mktemp -d "$tmp_dir/download.job-XXXX")
756756
(
757757
cd -- "$job_dir" && curl -L -O "$source_url"
758758
for file in "$job_dir"/*; do
@@ -835,7 +835,7 @@ add() {
835835

836836
file_can_be_added() {
837837
local -r file=$1
838-
grep -Pqv "$filename_skip_pattern" <<<"$file" && is_media "$file"
838+
grep -Eqv "$filename_skip_pattern" <<<"$file" && is_media "$file"
839839
}
840840

841841
add_stdin() {
@@ -888,7 +888,7 @@ download_yt() {
888888

889889
add_yt() {
890890
local -r source_url=${1:?}
891-
local -r job_dir=$(mktemp -d --tmpdir="$tmp_dir" -t "youtube-dl.job-XXXX")
891+
local -r job_dir=$(mktemp -d "$tmp_dir/youtube-dl.job-XXXX")
892892

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

@@ -948,16 +948,19 @@ mkplaylist() {
948948

949949
find "$immersionpod_dir/$current" \
950950
-type f \
951-
-printf '%P\n' \
952-
-regextype posix-extended \
953-
-iregex '.*\.(mp3|opus|ogg|m4a|wav|wma)$' |
951+
-iname '*.mp3' -o -iname '*.opus' -o -iname '*.ogg' -o -iname '*.m4a' -o -iname '*.wav' -o -iname '*.wma' |
954952
shuf > "$m3u_path"
955953
echo "created file '$m3u_path'"
956954
}
957955

958956
grep_mpd_dir() {
959957
# https://wiki.archlinux.org/index.php/Music_Player_Daemon#Configuration
960-
grep -Pos 'music_directory\s*"?\K[^"]*(?="?)' -- ~/.config/mpd/mpd.conf
958+
if command -v ggrep >/dev/null; then
959+
ggrep -Pos 'music_directory\s*"?\K[^"]*(?="?)' -- ~/.config/mpd/mpd.conf 2>/dev/null
960+
else
961+
# Fallback for macOS - extract music directory path from mpd.conf
962+
grep 'music_directory' ~/.config/mpd/mpd.conf 2>/dev/null | sed -E 's/.*music_directory[[:space:]]*"?([^"]*).*/\1/'
963+
fi
961964
}
962965

963966
choose_mpd_dir() {
@@ -966,7 +969,14 @@ choose_mpd_dir() {
966969
# Otherwise, the directory is set to the value from mpd's config.
967970
# Different fallbacks are tried in other cases.
968971
local dir
969-
for dir in "$music_dir" "$(grep_mpd_dir)" "$(xdg-user-dir MUSIC)" ~/Music ~/music; do
972+
# macOS doesn't have xdg-user-dir, so we'll use ~/Music as the default
973+
local music_fallback
974+
if [[ "$(uname)" == "Darwin" ]]; then
975+
music_fallback="$HOME/Music"
976+
else
977+
music_fallback="$(xdg-user-dir MUSIC 2>/dev/null || echo "$HOME/Music")"
978+
fi
979+
for dir in "$music_dir" "$(grep_mpd_dir)" "$music_fallback" ~/Music ~/music; do
970980
dir=${dir/\~/$HOME}
971981
dir=${dir//\/\//\/}
972982
dir=${dir%%/}
@@ -1052,7 +1062,7 @@ version() {
10521062
read_config_file() {
10531063
if [[ -f $config_filepath ]]; then
10541064
# shellcheck source=/dev/null
1055-
source -- <(grep -xP '^[a-z_]+=.+$' -- "$config_filepath")
1065+
source -- <(grep -x '^[a-z_]*=.*$' -- "$config_filepath")
10561066
fi
10571067
}
10581068

0 commit comments

Comments
 (0)