45 lines
1.4 KiB
Fish
Executable File
45 lines
1.4 KiB
Fish
Executable File
#!/usr/bin/env fish
|
|
|
|
# Ensure we have the required arguments
|
|
if test (count $argv) -lt 2
|
|
echo "Usage: script.fish <user_genres> <query>"
|
|
exit 1
|
|
end
|
|
|
|
set user_genres $argv[1]
|
|
set query $argv[2..]
|
|
|
|
echo "User-supplied genre list is '$user_genres'."
|
|
echo "Database query is '$query'"
|
|
|
|
# Get the current genres from beets
|
|
set beet_output (beet list -af '$genre' $query)
|
|
|
|
set query_lines (string split0 $beet_output)
|
|
|
|
if test (count $query_lines) -gt 1
|
|
echo "Database query has to be a single line"
|
|
#exit 1
|
|
end
|
|
|
|
function list_merge_sort
|
|
string split "\n" (echo -e (string join "\n" $argv) | sort)
|
|
end
|
|
|
|
function list_merge_unique
|
|
string split "\n" (echo -e (string join "\n" $argv) | sort -u)
|
|
end
|
|
|
|
set -l current_genres (string split ', ' $beet_output)
|
|
set -l current_genres_count (count $current_genres)
|
|
echo "Current genres ($current_genres_count): $(string join ", " $(list_merge_sort $current_genres))"
|
|
set -l additional_genres (string split ', ' $user_genres)
|
|
echo "Additional genres ($(count $additional_genres)): $(string join ", " $(list_merge_sort $additional_genres))"
|
|
|
|
set -l combined_genres (list_merge_unique $current_genres $additional_genres)
|
|
set -l combined_genres_count (count $combined_genres)
|
|
echo "Combined genres ($combined_genres_count): $(string join ", " $combined_genres)"
|
|
echo "Unique new genres: $(math $combined_genres_count - $current_genres_count)"
|
|
|
|
beet modify -a genre="$(string join ", " $combined_genres)" $query
|