#!/usr/bin/env fish # Ensure we have the required arguments if test (count $argv) -lt 2 echo "Usage: script.fish " 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