diff --git a/README.org b/README.org index 2f2c3a8..42d8352 100644 --- a/README.org +++ b/README.org @@ -53,6 +53,7 @@ - Query multiple remote directories with one command - Play remote files on other machines - Synchronize playback positions with remote machines + - Sleeptimer You can access your local machine also via SSH, so every occurrence of /remote/ in the list can be replaced with /local/. @@ -96,6 +97,7 @@ -m, --media-directories MEDIA_DIRECTORIES Use given media directories, config is ignored -o, --or Use a logical OR for queries (default: AND) -p, --playback-directory DIRECTORY Playback files directory + -q, --quit TIME_IN_MINUTES Quit after a given time -r, --remote SSH_CONNECTION_STRING Execute strm with other given arguments on remote machine (-f is set by default) -s, --shuffle Play files in random order -t, --tidy Don't resume playback and don't synchronize playback positions diff --git a/strm b/strm index 02e0197..b67b9dd 100755 --- a/strm +++ b/strm @@ -17,6 +17,7 @@ function print_usage { echo " -m, --media-directories MEDIA_DIRECTORIES Use given media directories, config is ignored" echo " -o, --or Use a logical OR for queries (default: AND)" echo " -p, --playback-directory DIRECTORY Playback files directory" + echo " -q, --quit TIME_IN_MINUTES Quit after a given time" echo " -r, --remote SSH_CONNECTION_STRING Execute strm with other given arguments on remote machine (-f is set by default)" echo " -s, --shuffle Play files in random order" echo " -t, --tidy Don't resume playback and don't synchronize playback positions" @@ -50,6 +51,7 @@ media_directories="" tidy=false or=false queries=() +quit="" remote="" remote_arguments=() tmp_playback_directory="" @@ -106,6 +108,15 @@ while (( "$#" )); do remote_arguments+=("$1") shift ;; + -q|--quit) + if [ -n "$2" ] && [ "${2:0:1}" != "-" ]; then + quit="$2" + remote_arguments+=("$1" "$2") + shift 2 + else + error "Argument for '$1' is missing" + fi + ;; -r|--remote) if [ -n "$2" ] && [ "${2:0:1}" != "-" ]; then remote="$2" @@ -356,7 +367,15 @@ if [ "$list" == false ]; then fi # Play all remote files - mpv --msg-level=all=error,statusline=status --watch-later-directory="$HOME/.cache/strm" --term-status-msg='${playlist-pos-1}/${playlist-count} - ${time-pos}/${duration} - \e[1m${metadata/artist:}${?metadata/artist: - }${metadata/album:}${?metadata/album: - }${metadata/title:}${!metadata/title:${filename/no-ext}}\e[0m' "${mpv_arguments[@]}" "${sftp_results[@]}" + if [ "$quit" != "" ]; then + + # Convert minutes to seconds + ((quit=quit*60)) + + timeout --foreground --signal QUIT "$quit" mpv --msg-level=all=error,statusline=status --watch-later-directory="$HOME/.cache/strm" --term-status-msg='${playlist-pos-1}/${playlist-count} - ${time-pos}/${duration} - \e[1m${metadata/artist:}${?metadata/artist: - }${metadata/album:}${?metadata/album: - }${metadata/title:}${!metadata/title:${filename/no-ext}}\e[0m' "${mpv_arguments[@]}" "${sftp_results[@]}" + else + mpv --msg-level=all=error,statusline=status --watch-later-directory="$HOME/.cache/strm" --term-status-msg='${playlist-pos-1}/${playlist-count} - ${time-pos}/${duration} - \e[1m${metadata/artist:}${?metadata/artist: - }${metadata/album:}${?metadata/album: - }${metadata/title:}${!metadata/title:${filename/no-ext}}\e[0m' "${mpv_arguments[@]}" "${sftp_results[@]}" + fi # Synchronize playback directory back if not tidy and directory is set if [ "$tidy" == false ] && [ "$playback_directory" != "" ]; then