summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile10
-rw-r--r--aur/clerk_fzf-git/.SRCINFO20
-rw-r--r--aur/clerk_fzf-git/PKGBUILD29
-rw-r--r--aur/clerk_fzf-git/clerk-git.install8
-rw-r--r--aur/clerk_fzf-git/clerk_fzf-git.install8
-rwxr-xr-xclerk2127
-rw-r--r--clerk.pl199
-rw-r--r--clerk_fzf/Makefile9
-rwxr-xr-xclerk_fzf/clerk_fzf381
-rw-r--r--clerk_fzf/clerk_fzf.conf35
-rw-r--r--clerk_fzf/tmux.clerk54
-rwxr-xr-xclerk_helper366
-rw-r--r--completion/_clerk112
-rw-r--r--config.clerk84
14 files changed, 199 insertions, 3243 deletions
diff --git a/Makefile b/Makefile
deleted file mode 100644
index f721c8d..0000000
--- a/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-ifndef PREFIX
- PREFIX=/usr/local
-endif
-
-install:
- install -Dm755 clerk $(DESTDIR)$(PREFIX)/bin/clerk
- install -Dm755 clerk_helper $(DESTDIR)$(PREFIX)/bin/clerk_helper
- install -Dm644 config.clerk $(DESTDIR)$(PREFIX)/share/doc/clerk/config.example
- install -Dm644 config.clerk $(DESTDIR)/etc/clerk.conf
- install -Dm644 README.md $(DESTDIR)$(PREFIX)/share/doc/clerk/README.md
diff --git a/aur/clerk_fzf-git/.SRCINFO b/aur/clerk_fzf-git/.SRCINFO
deleted file mode 100644
index 881b9f4..0000000
--- a/aur/clerk_fzf-git/.SRCINFO
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by mksrcinfo v8
-# Thu Jul 21 11:14:48 UTC 2016
-pkgbase = clerk_fzf-git
- pkgdesc = clerk - mpd client for rofi
- pkgver = 799.7cac52d
- pkgrel = 1
- url = https://github.com/carnager/clerk
- arch = any
- license = GPL
- makedepends = git
- depends = tmux
- depends = mpc
- depends = fzf
- depends = util-linux
- optdepends = sl: fancy update animation
- source = git+https://git.53280.de/clerk
- md5sums = SKIP
-
-pkgname = clerk_fzf-git
-
diff --git a/aur/clerk_fzf-git/PKGBUILD b/aur/clerk_fzf-git/PKGBUILD
deleted file mode 100644
index a48d350..0000000
--- a/aur/clerk_fzf-git/PKGBUILD
+++ /dev/null
@@ -1,29 +0,0 @@
-# Maintainer: Rasmus Steinke <rasi at xssn dot at>
-# Contributor: Christian Rebischke
-
-pkgname=clerk_fzf-git
-pkgver=799.7cac52d
-pkgrel=1
-pkgdesc="clerk - mpd client for rofi"
-arch=('any')
-url='https://github.com/carnager/clerk'
-license=('GPL')
-depends=('tmux' 'mpc' 'fzf' 'util-linux')
-optdepends=('sl: fancy update animation')
-makedepends=('git')
-source=('git+https://git.53280.de/clerk')
-
-pkgver() {
- cd clerk
- printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
-}
-
-package() {
- cd clerk/clerk_fzf
- ls
- make DESTDIR="$pkgdir/" \
- PREFIX='/usr' \
- install
-}
-
-md5sums=('SKIP')
diff --git a/aur/clerk_fzf-git/clerk-git.install b/aur/clerk_fzf-git/clerk-git.install
deleted file mode 100644
index 3f40820..0000000
--- a/aur/clerk_fzf-git/clerk-git.install
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-post_install() {
-echo '
-Copy /etc/clerk_fzf.conf to $HOME/.config/clerk/clerk_fzf.conf
-To initialize cache files, run "clerk_update --create-caches". clerk_fzf is started with clerk_starter.
-'
-}
-#post_install
diff --git a/aur/clerk_fzf-git/clerk_fzf-git.install b/aur/clerk_fzf-git/clerk_fzf-git.install
deleted file mode 100644
index 7f4b1ef..0000000
--- a/aur/clerk_fzf-git/clerk_fzf-git.install
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-post_install() {
-echo '
-to use clerk you need to copy /usr/share/doc/clerk/config.example to $HOME/.config/clerk/config
-and edit it to your needs.
-'
-}
-#post_install
diff --git a/clerk b/clerk
deleted file mode 100755
index 7725216..0000000
--- a/clerk
+++ /dev/null
@@ -1,2127 +0,0 @@
-#!/usr/bin/env bash
-
-shopt -s globstar
-
-
-# load default settings
-# custom rofi settings (rofi reads settings from ~/.Xresources)
-# but you can override settings here.
-_rofi () {
- rofi -i -lines 30 -width 1500 -no-levenshtein-sort "$@"
- }
-
-# custom mpd host
-mpd_host=
-mpd_port=
-mpd_password=
-
-# Number of Songs to be added for "Random Tracks"
-value=20
-
-# stop on suspend?
-stop_after_suspend=no
-
-# use artist or albumartist for random tracks
-random_artist=artist
-
-# scrobbler to use. possible values: mpdscribble, mpdas
-scrobbler=mpdscribble
-
-# Fill these if scrobbler runs on a different host
-# set to 0 if mpdscribble runs locally
-ssh_lastfm=0
-ssh_host=
-
-# color of the help messages
-help_color="#0C73C2"
-help_separator_color="#5F5F5F"
-
-# custom keybindings
-# global
-albumlist="Alt+F1"
-tracklist="Alt+F2"
-queue="Alt+F3"
-toggle="Alt+F6"
-prev="Alt+F5"
-next="Alt+F8"
-stop="Alt+F7"
-seek="Alt+f"
-nextalbum="Alt+Shift+F5"
-prevalbum="Alt+Shift+F8"
-
-# Adding of songs/albums
-add="Alt+1"
-insert="Alt+2"
-replace="Alt+3"
-rate="Alt+r"
-addplay="Alt+4"
-insertplay="Alt+5"
-savefav="Alt+s"
-
-# playlist menu
-# also used: rate
-delete="Alt+Delete"
-crop="Alt+x"
-clear="Alt+c"
-movedown="Alt+Down"
-moveup="Alt+Up"
-goalbum="Alt+a"
-gotrack="Alt+t"
-chplaylist="Alt+p"
-
-# table customization
-track_width="2"
-title_width="40"
-artist_width="40"
-date_width="6"
-# album is much longer in order to keep filename off screen
-album_width="200"
-
-# custom widths for playlist
-pl_title_width="60"
-pl_artist_width="40"
-
-# XDG base directory Specification
-xdg_config="${XDG_CONFIG_HOME:-$HOME/.config}"
-xdg_data="${XDG_DATA_HOME:-$HOME/.local/share}"
-
-# base clerk directories
-config_root="${xdg_config}/clerk"
-data_root="${xdg_data}/clerk"
-
-# clerk files
-config_rc="${config_root}/config"
-podcast_list="${config_root}/podcasts"
-cache_album="${data_root}/albums.cache"
-cache_track="${data_root}/tracks.cache"
-cache_latest="${data_root}/latest.cache"
-last_update="${data_root}/.lastupdate"
-suspend_state="${data_root}/suspend"
-last_track_rate_bak="${data_root}/.last_trackratings_backup"
-db_rate_track="${data_root}/trackratings.json"
-db_rate_album="${data_root}/albumratings.json"
-
-# set clerk_helper environment variable by making the herebelow variables
-# available to subprocceses (i.e. clerk_helper)
-export cache_album
-export cache_track
-export db_rate_album
-export db_rate_track
-
-# make sure the xdg user data directory for clerk exists
-mkdir -p "$data_root"
-
-# override settings from global config file, if present
-if [[ ! -f $config_rc ]] && [[ ! -f /etc/clerk ]]; then
- echo "Error: could not find configuration file \"$config_rc\""
- echo "You can use the provided example configuration file (config.clerk), copy it to the above location and edit it to your needs."
- exit
-fi
-
-if [[ -f /etc/clerk.conf ]]; then
- source /etc/clerk.conf
-fi
-
-# override settings from local config, if present
-if [[ -f $config_rc ]]; then
- source $config_rc
-fi
-
-if [[ -n $mpd_host ]]; then
- if [[ -n $mpd_password ]]; then
- export MPD_HOST="${mpd_password}@${mpd_host}"
- else
- export MPD_HOST="${mpd_host}"
- fi
-fi
-
-if [[ -n $mpd_port ]]; then
- export MPD_PORT="${mpd_port}"
-fi
-
-# check for scrobbler
-if [[ $scrobbler == mpdas ]]; then
- export scrobbler="mpdas -d"
- export scrobbler_kill="mpdas"
-elif [[ $scrobbler == mpdscribble ]]; then
- export scrobbler_kill="mpdscribble"
-fi
-
-# set help color
-if [[ $help_color == "" ]]; then
- help_color=$(rofi -dump-xresources | grep -P '^rofi.color.normal' | awk -F ',' '{ print $2 }' | xargs)
- help_separator_color=$(rofi -dump-xresources | grep -P 'rofi.color.normal' | awk -F ',' '{ print $2 }' | xargs)
-fi
-
-fix_date_format() {
- # provided by Thorsten Wißmann:
- # https://github.com/t-wissmann/dotfiles/blob/master/menu/rofi-mpd.sh
- # reformats the date given in column $1 from format %c of locale LC_TIME=C
- # (see man strftime) to the format specified in argument $2 column indices
- # start with 1
- column_index="$1"
- gawk -F $'\t' '
- # parse a date which was formated using %c to unix time
- BEGIN {
- # generated by the following bash one-liner:
- # for i in {1..12} ; do LC_TIME=C date -d "1972-$i-01" +month2num[\"%b\"]\ =\ %_m ; done
- month2num["Jan"] = 1
- month2num["Feb"] = 2
- month2num["Mar"] = 3
- month2num["Apr"] = 4
- month2num["May"] = 5
- month2num["Jun"] = 6
- month2num["Jul"] = 7
- month2num["Aug"] = 8
- month2num["Sep"] = 9
- month2num["Oct"] = 10
- month2num["Nov"] = 11
- month2num["Dec"] = 12
- }
- function reformat_c_date(str) {
- monthname = gensub(/^([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)$/, "\\2", "g", str)
- monthnum = month2num[monthname]
- nicedate = gensub(/^([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)$/, "\\5 " monthnum " \\3 \\4", "g", str)
- nicedate = gensub(/:/, " ", "g", nicedate)
- return nicedate
- }
- {
- # modify the $column_index-th field
- $'"$1"' = strftime("'"$2"'", mktime(reformat_c_date($'"$1"')))
- print $0
- }
- '
-}
-
-
-updateCache () {
- notify-send "clerk" "updating cache files"
- cd $data_root
- rm -f *.cache
-
- mpc --format '%mtime%\t[%albumartist%|%artist%] ○ (%date%) ○ %album% [(CD %disc%)] ○ %file%' \
- search filename '' \
- | fix_date_format 1 '%Y-%m-%d-%H:%M:%S' \
- | sort -nr \
- | gawk '{for (i=2; i<NF; i++) printf $i " "; print $NF }' \
- | perl -ne 'print unless $seen{$_}++' \
- | sed 's:/[^/]*$::' | awk -F ' ○ ' '!seen[$1 $2 $3 $4]++' \
- | uniq \
- | gawk -F ' ○ ' '{ printf "%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.300s\n", $1, $2, $3, $4 }' \
- > $cache_latest
- mpc --format '[%albumartist%|%artist%]\t(%date%)\t%album% [(CD %disc%)]\t%file%' \
- search filename '' \
- | sed 's:/[^/]*$::' \
- | awk -F '\t' '!seen[$1 $2 $3 $4]++' \
- | sort \
- | gawk -F '\t' '{ printf "%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.300s\n", $1, $2, $3, $4 }' \
- > $cache_album
- mpc --format '%track%\t%title%\t%artist%\t(%date%)\t%album%\t%file%' \
- search filename '' \
- | gawk -F '\t' '{ printf "%-"'${track_width}'"."'${track_width}'"s\t%-"'${title_width}'"."'${title_width}'"s\t%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.500s\n", $1, $2, $3, $4, $5, $6 }' \
- > $cache_track
- notify-send "clerk" "finished updating cache files"
- date=$(mpc stats | grep 'DB Updated: ')
- file="$last_update"
- echo "${date}" > "${file}"
-# | gawk -F '\t' '{ printf "%.2s\t%.40s\t%.40s\t%.200s\t%.500s\n", $1, $2, $3, $4, $5, $6 }' \
- if [[ $forceupdate == "true" ]]; then
- exit
- fi
-}
-if [[ $1 == "--update" ]]; then
- :
-else
- date=$(mpc stats | grep 'DB Updated: ')
- file="$last_update"
- if [ "$(< $file)" = "$date" ] && [ -f "$file" ] ; then
- :
- else
- updateCache
- date=$(mpc stats | grep 'DB Updated: ')
- echo "${date}" > "${file}"
- fi
-fi
-
-# Use GNU coreutils on OSX
-sed=$([[ "$OSTYPE" == "darwin"* ]] && echo 'gsed' || echo 'sed')
-shuf=$([[ "$OSTYPE" == "darwin"* ]] && echo 'gshuf' || echo 'shuf')
-tac=$([[ "$OSTYPE" == "darwin"* ]] && echo 'gtac' || echo 'tac')
-
-
-# main Menu
-dplayPrompt () {
- if [[ -z $(mpc status | grep "/") ]]; then
- song="No Song is playing"
- else
- song=$(mpc current)
- fi
- menu=$(echo -e "< Exit\n---\n1 [ Browse Library ]>\n2 [ Current Artist ]>\n3 [ Current Queue ]>\n---\n4 [ Options ]>\n5 [ Ratings ]>\n6 [ Help ]" \
- | _rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -lines 17 \
- -mesg "<span color='$help_color'>Currently Playing: ${song}</span>" \
- -auto-select \
- -kb-custom-1 ${prev} \
- -kb-custom-2 ${toggle} \
- -kb-custom-3 ${stop} \
- -kb-custom-4 ${next} \
- -kb-custom-5 ${albumlist} \
- -kb-custom-6 ${tracklist} \
- -kb-custom-7 ${queue} \
- -kb-custom-8 ${seek} \
- -kb-custom-9 ${nextalbum} \
- -kb-custom-10 ${prevalbum} \
- -p "clerk > ")
-
- val=$?
-
- if [[ $val -eq 1 ]]; then
- exit
- elif [[ $val -eq 10 ]]; then
- mpc prev
- dplayPrompt
- elif [[ $val -eq 11 ]]; then
- mpc toggle
- dplayPrompt
- elif [[ $val -eq 12 ]]; then
- mpc stop
- dplayPrompt
- elif [[ $val -eq 13 ]]; then
- mpc next
- dplayPrompt
- elif [[ $val -eq 14 ]]; then
- addAlbum alphabet
- elif [[ $val -eq 15 ]]; then
- addTrackTags
- elif [[ $val -eq 16 ]]; then
- dplayQueue
- elif [[ $val -eq 17 ]]; then
- seekMenu
- elif [[ $val -eq 18 ]]; then
- skipAlbum next
- unset IFS
- dplayPrompt
- elif [[ $val -eq 19 ]]; then
- skipAlbum prev
- unset IFS
- dplayPrompt
- fi
-
- if [[ "$menu" == "< Exit" ]]; then
- exit
- elif [[ "$menu" == "2 "* ]]; then
- currentMenu
- elif [[ "$menu" == "3 "* ]]; then
- dplayQueue
- elif [[ "$menu" == "1 "* ]]; then
- browseLibPrompt
- elif [[ "$menu" == "4 "* ]]; then
- dplayOptionsPrompt
- elif [[ "$menu" == "5 "* ]]; then
- ratingPrompt
- elif [[ "$menu" == "6 "* ]]; then
- helpMenu
- elif [[ -z "$menu" ]]; then
- exit
- fi
-
-}
-
-helpMenu () {
- showhelp=$(echo -e "< Return\n \
----\n \
-# Global\n \
-Album List: "${albumlist}"\n \
-Track List: "$tracklist"\n \
-Queue: "$queue"\n \
-Toggle Playback "$toggle"\n \
-Previous: "$prev"\n \
-Previous Album: "$prevalbum"\n \
-Next: "$next"\n \
-Next Album: "$nextalbum"\n \
-Stop: "$stop"\n \
-Seek: "$seek"\n \
-\n \
-# Adding of Songs/Albums\n \
-Add: "$add"\n \
-Insert: "$insert"\n \
-Replace: "$replace"\n \
-Rate: "$rate"\n \
-Add & Play: "$addplay"\n \
-Insert & Play: "$insertplay"\n \
-Save to Favs: "$savefav"\n \
-\n \
-# Playlist Menu\n \
-Delete selected "$delete"\n \
-Crop Playlist: "$crop"\n \
-Clear Playlist: "$clear"\n \
-Move Down: "$movedown"\n \
-Move Up: "$moveup"\n \
-Go to Album: "$goalbum"\n \
-Go to Track: "$gotrack"\n \
-Load/Save: "$playlist"" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Hotkeys > ")
-
- val=$?
-
- if [[ $val -eq 1 ]]; then
- exit
- fi
-
- if [[ $showhelp == "< Return" ]]; then
- dplayPrompt
- else
- helpMenu
- fi
-
-}
-
-
-seekMenu () {
- seekval="$((echo -e "< Return\n---\n$(for i in $(seq 0 10 100); do echo "${i}%"; done)") \
- | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu \
- -p "Seek > ")"
-
- if [[ $seekval == *"%" ]]; then
- mpc seek "${seekval}"
- unset seekval
- $*
- elif [[ $seekval == "< Return" ]]; then
- unset seekval
- $*
- elif [[ $seekval == "---" ]]; then
- unset seekval
- $*
- fi
-}
-
-# start/stop scrobbler. locally or remote
-lastFM () {
-# Some Variables to clean up the code
-
- if [[ $ssh_lastfm == 1 ]]; then
- mpds_check="$(ssh $ssh_host -q -t "pgrep $scrobbler_kill")"
- if [ -n "$mpds_check" ];
- then
- ssh $ssh_host -q -t "killall $scrobbler_kill" && notify-send "MPD" "LastFM Scrobbling Disabled"
- else
- ssh $ssh_host -q "$scrobbler" && notify-send "MPD" "LastFM Scrobbling Enabled"
- fi
- else
- if pgrep $scrobbler_kill
- then
- killall $scrobbler_kill && notify-send "MPD" "LastFM Scrobbling Disabled"
- else
- $scrobbler && notify-send "MPD" "LastFM Scrobbling Enabled"
- fi
- fi
-}
-
-
-lastFMCheck () {
-# Some Variables to clean up the code
-
- if ((ssh_lastfm)); then
- mpds_check="$(ssh $ssh_host -q -t "pgrep $scrobbler_kill")"
- if [ -n "$mpds_check" ]; then
- echo "lastfm: off"
- else
- echo "lastfm: on"
- fi
- else
- if pgrep $scrobbler_kill
- then
- echo "lastfm: on"
- else
- echo "lastfm: off"
- fi
- fi
-}
-
-currentMenu () {
- if [[ $1 == "album" ]]; then
- album_entry="${filename}" addAlbum alphabet
- elif [[ $1 == "track" ]]; then
- entry="${filename}" addTrackTags
- fi
-
- menu=$(echo -e "< Return\n---\n1 [ Browse Albums ]>\n2 [ Browse Tracks ]>" \
- | _rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -p "Browse for $(mpc current -f '%artist%')")
-
- if [[ $menu == "1 [ Browse Albums ]>" ]]; then
- filter=$(mpc current -f '%artist%')
- firstsong=$(mpc -f '%album% %album%' search artist "$(mpc current -f '%artist%')" album "$(mpc current -f '%album%')" | head -1)
- album_entry="$firstsong" filter="^$filter\s" addAlbum alphabet
-
- elif [[ $menu == "2 [ Browse Tracks ]>" ]]; then
- filter=$(mpc current -f '%artist%')
- firstsong=$(mpc -f '%file%' search artist "$(mpc current -f '%artist%')" title "$(mpc current -f '%title%')" album "$(mpc current -f '%album%')" | head -1)
- entry="$firstsong" filter="$filter" addTrackTags
-
- elif [[ $menu == "" ]]; then
- dplayPrompt
-
- elif [[ $menu == "< Return" ]]; then
- dplayPrompt
-
- else
- :
- fi
-}
-
-# rating menu
-ratingPrompt () {
- menu=("< Return"
- "---"
- "1 Rate current Album"
- "2 Load Rated Albums"
- "3 Load Random Rated Album"
- "---"
- "4 Rate current Track"
- "5 Load Rated Tracks"
- "6 Load Random Rated Tracks"
- "---"
- "7 Love current Song on LastFM"
- "---"
- "0 Backup/Restore")
-
- prompt() {
- printf "%s\n" "$@" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Ratings > "
- }
-
- case "$(prompt "${menu[@]}")" in
- 1*) rateAlbum ;;
- 2*) loadRatedAlbums ;;
- 3*) loadRandomRating ;;
- 4*) rateTrack ;;
- 5*) loadRatedTracks ;;
- 6*) loadRandomRatedTracks ;;
- 7*) loveLast ;;
- 0*) backupPrompt ;;
- \<*) dplayPrompt ;;
- *) exit
- esac
-}
-
-# create rating json files from mpd sticker database and vice versa
-backupPrompt () {
- menu=("< Return"
- "---"
- "1 Backup Album Ratings to File"
- "2 Backup Track Ratings to File"
- "---"
- "3 Restore Ratings from File")
-
- prompt() {
- printf "%s\n" "$@" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Backup/Restore > "
- }
-
- case "$(prompt "${menu[@]}")" in
- 1*) clerk_helper importalbumratings & ;;
- 2*) clerk_helper importtrackratings & ;;
- 3*) clerk_helper sendstickers & ;;
- \<*) ratingPrompt ;;
- *) exit
- esac
-}
-
-# if mpdas is used use mpc to love track on last.fm. otherwise try
-# lastfm-mpd-cli
-loveLast () {
- if [[ "$scrobbler" == "mpdscribble" ]]; then
- lastfm-mpd-cli love > /dev/null && notify-send "MPD" "Loved $(mpc current -f '%title%') on LastFM" && exit
- elif [[ "$scrobbler" == "mpdas" ]]; then
- mpc sendmessage mpdas love
- fi
-}
-
-infoPrompt () {
- menu=("0 Return to Main Menu"
- "---"
- "1 Artist Info"
- "2 Album Info"
- "3 Current Track Lyrics"
- "4 Current Track Tags")
-
- prompt() {
- printf "%s\n" "$@" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "MPD Menu > "
- }
-
- case "$(prompt "${menu[@]}")" in
-# 1*) surfraw yubnub allmusic $(mpc current -f %artist%) ;;
- 1*) artistinfo ;;
- 2*) surfraw yubnub allmusic $(mpc current -f %album%) && exit;;
-# 3*) surfraw yubnub google $(mpc current -f %title%) $(mpc current -f %artist%) lyrics ;;
- 3*) lyrics ;;
- 4*) currentTag ;;
- \<*) dplayPrompt ;;
- *) exit
- esac
-}
-
-currentTag () {
- declare -i seen=0
- while read line
- do
- seen=1
- if [[ "$line" == "0 Return to Main Menu" ]]; then
- dplayPrompt
- elif [[ "$line" == "Show all Tags" ]]; then
- readComments
- elif [[ "$line" == "" ]]; then
- return
- fi
- done < <(echo -e "0 Return to Main Menu\n---\nShow all Tags\n---\n$(mpc current --format "Artist: %artist%\nAlbum: %album%\nDate: %date%\nTrack: %track%\nTitle: %title%")" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p 'Current Song > ')
-
- if [[ $seen = 0 ]]
- then
- exit
- fi
-}
-
-# read all tags from file. Note that mpd can only read vorbiscomment properly
-readComments () {
- declare -i seen=0
- while read line
- do
- seen=1
- if [[ "$line" == "0 Return to Main Menu" ]]; then
- dplayPrompt
- elif [[ "$line" == "Show Tags" ]]; then
- currentTag
- elif [[ "$line" == "" ]]; then
- return
- fi
- done < <(echo -e "0 Return to Main Menu\n---\nShow Tags\n---\n$(mpc current --format '%file%' | clerk_helper readcomments)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p 'Current Song > ')
-
- if [[ $seen = 0 ]]
- then
- exit
- fi
-}
-
-# Messy options menu.
-dplayOptionsPrompt () {
-
- # define variables to be used in menu
- export status="$(mpc status)"
- single=$(echo "$status" | tail -1 | gawk -F ':' '{ print $5 }' | cut -d ' ' -f 2)
- random=$(echo "$status" | tail -1 | gawk -F ':' '{ print $4 }' | cut -d ' ' -f 2)
- consume=$(echo "$status" | tail -1 | gawk -F ':' '{ print $6 }' | cut -d ' ' -f 2)
- repeat=$(echo "$status" | tail -1 | gawk -F ':' '{ print $3 }' | cut -d ' ' -f 2)
-
- if [[ -a /tmp/mpd-sima.pid ]]; then
- export sima=on
- else
- export sima=off
- fi
-
- if [[ "$ssh_lastfm" == "1" ]]; then
- mpds_check="$(ssh $ssh_host -q -t "pgrep $scrobbler_kill")"
- if [ -n "$mpds_check" ];
- then export scrobble=on
- else export scrobble=off
- fi
- else
- if pgrep $scrobbler_kill
- then
- export scrobble=on
- else
- export scrobble=off
- fi
- fi
-
- export rgain="$(mpc replaygain | cut -d ' ' -f 2)"
- replayGain () {
- if [[ $(mpc replaygain | cut -d ' ' -f 2) == album ]]; then
- mpc replaygain track > /dev/null && export rgain="track"
- elif [[ $(mpc replaygain | cut -d ' ' -f 2) == track ]]; then
- mpc replaygain off > /dev/null && export rgain="off"
- elif [[ $(mpc replaygain | cut -d ' ' -f 2) == off ]]; then
- mpc replaygain album > /dev/null && export rgain="album"
- fi
- }
-
- menu=("< Return"
- "---"
- "1 Random: $(echo $random)"
- "2 Repeat: $(echo $repeat)"
- "3 Single Mode: $(echo $single)"
- "4 Consume Mode: $(echo $consume)"
- "5 Replaygain: $(echo $rgain)"
- "6 Scrobbling: $(echo $scrobble)"
- "7 Similar Artists Mode: $(echo $sima)"
- "---"
- "8 Set Crossfade $(mpc crossfade | cut -d ':' -f2)"
- "9 Manage Outputs"
- "0 Number of Random Songs: $(echo $value)")
-
- prompt() {
- printf "%s\n" "$@" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -auto-select -p "MPD Options > "
- }
-
- case "$(prompt "${menu[@]}")" in
- 1*) mpc random && dplayOptionsPrompt ;;
- 2*) mpc repeat && dplayOptionsPrompt ;;
- 3*) mpc single && dplayOptionsPrompt ;;
- 4*) mpc consume && dplayOptionsPrompt ;;
- 5*) replayGain && dplayOptionsPrompt ;;
- 6*) lastFM && dplayOptionsPrompt ;;
- 7*) mpdSima && dplayOptionsPrompt ;;
- 8*) crossfadePrompt ;;
- 9*) outputPrompt ;;
- 0*) optionRandomPrompt ;;
- \<*) dplayPrompt ;;
- *) exit
- esac
-}
-
-# toggle similar artist playback
-mpdSima () {
- if [[ -a /tmp/mpd-sima.pid ]]; then
- kill $(cat /tmp/mpd-sima.pid)
- sleep 1
- else
- mpd-sima -d -p /tmp/mpd-sima.pid
- sleep 1
- fi
-}
-
-# function to change number of random songs in config file
-optionRandomPrompt() {
- number="$(echo -e " " | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p 'Set No. of random Songs > ')"
- $sed -i "s/value=.*/value="$number"/" $config_rc
- export value="$number"
- dplayOptionsPrompt
-}
-
-crossfadePrompt () {
- menu=$(echo -e "< Return\n---\n0\n1\n2\n3\n4\n5" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Crossfade")
-
- if [[ $menu == "< Return" ]]; then
- dplayOptionsPrompt
- else
- mpc crossfade ${menu};
- dplayOptionsPrompt
- fi
-}
-
-# read list of available podcasts. Not using mpd playlists, because mpd does
-# not support custom names for urls. format of podcast in file is "Name \ URL"
-loadRSS () {
- podcast=$(echo -e "< Return\n---\n$(cat $podcast_list | cut -d '\' -f1)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Choose Podcast > ")
- val=$?
-
- if [[ $val -eq 1 ]]; then
- exit
- fi
- if [[ $podcast == "< Return" ]]; then
- dplayQueue
- else
- mpc clear
- mpc load $(grep "$podcast" $podcast_list | cut -d '\' -f2)
- episode=$(mpc playlist --format "%position% — %artist% — %title%" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Choose Episode > ")
- POS=$(echo "$episode" | gawk -F " — " '{ print $1 }')
- mpc play "$POS"
- fi
-}
-
-# suspend current playlist. playlist, song id and play-position are saved to
-# $XDG_DATA_HOME:-$HOME/.local/share/clerk/suspend
-suspendPlaylist () {
- playing=$(! mpc status | grep 'playing\|paused')
- time=$(mpc status | $sed '2!d;s;/.:.*;;;s;.* ;;')
- position=$(mpc current --format '%position%')
- if [[ -z "$playing" ]]; then
- notify-send "clerk" "mpd is not playing, no state to suspend"
- else
- mpc rm suspended
- mpc save suspended
- rm -f $suspend_state
- echo "pos="$position"" >> $suspend_state
- echo "time="$time"" >> $suspend_state
- if [[ "$stop_after_suspend" == yes ]]; then
- mpc stop
- else
- echo " "
- fi
- notify-send "Clerk" "Playlist suspended"
- if [[ $cli == "true" ]]; then
- exit
- else
- dplayQueue
- fi
- fi
-}
-
-# read $XDG_DATA_HOME/clerk/suspend:-$HOME/.local/share/clerk/suspend and
-# restore playlist. Then start playing # from same position that was saved in
-# suspend file
-resumePlaylist () {
- http=$(! mpc current --format %file% | grep 'http://')
- source $suspend_state
- mpc clear
- mpc load suspended
- mpc play $pos
- mpc toggle
- sleep 2
- mpc seek "$time"
- mpc toggle
- notify-send "Clerk" "Resumed last-suspended Playlist"
- if [[ $cli == "true" ]]; then
- exit
- else
- dplayQueue
- fi
-}
-
-# Play or delete items from current Queue
-dplayQueue () {
- while true; do
- if [[ $val -eq 1 ]]; then
- exit
- fi
- re='^[0-9]+$'
- if [[ "$POS" =~ $re ]]; then
- if [[ $last != $(mpc -f '%file%' playlist | tail -1) ]]; then
- POS=$(echo $(( $POS + 1 )))
- elif [[ -z $last ]]; then
- POS=$(echo $(( $POS + 2 )))
- else
- POS=$(echo $(( $POS + 2 )))
- fi
- else
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 1 )))
- else
- POS=$(echo $(( $(mpc current -f '%position%') + 2 )))
- fi
- fi
- select="-selected-row $POS"
-
- help_text="$(echo -e "${delete}: Delete - ${crop}: Crop - ${moveup}: Move Up - ${goalbum}: Go to Album - ${chplaylist}: Load/Save\n${clear}: Clear - ${rate}: Rate - ${movedown}: Move Down - ${gotrack}: Go to Track" | column -s '-' -t | perl -pe "s/ - /<span color='$help_separator_color'\>\|\<\/span\>/g")"
- line1=$(echo "${help_text}" | head -1)
- line2=$(echo "${help_text}" | tail -1)
-HELP="<span color='$help_color'>${line1}
-${line2}</span>"
-
-songs () {
- mpc --format '%position%\t%track%\t%title%\t%artist%\t(%date%)\t%album%' playlist \
- | gawk -F '\t' '{ printf "%.4s\t%."'${track_width}'"s\t%."'${pl_title_width}'"s\t%."'${pl_artist_width}'"s\t%."'${date_width}'"s\t%."'${album_width}'"s\n", $1, $2, $3, $4, $5, $6 }' \
- | column -s $'\t' -t
-}
-
- if [[ -n $(mpc current) ]]; then
- current=$(mpc current -f '%position%')
- highlight="-a $(echo $(( $current +1 )))"
- else
- :
- fi
-
- TRACKDISPLAY=$(echo -e "< Return\n---\n$(songs)" \
- | _rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -kb-custom-1 "${delete}" \
- -kb-custom-2 "${rate}" \
- -kb-custom-4 "${prevalbum}" \
- -kb-custom-3 "${nextalbum}" \
- -kb-custom-5 "${clear}" \
- -kb-custom-6 "${moveup}" \
- -kb-custom-7 "${movedown}" \
- -kb-custom-8 "${toggle}" \
- -kb-custom-9 "${stop}" \
- -kb-custom-10 "${albumlist}" \
- -kb-custom-11 "${tracklist}" \
- -kb-custom-12 "${goalbum}" \
- -kb-custom-13 "${gotrack}" \
- -kb-custom-14 "${chplaylist}" \
- -kb-custom-15 "${next}" \
- -kb-custom-16 "${crop}" \
- -kb-custom-18 "${stop}" \
- -kb-custom-19 "${seek}" \
- -kb-custom-17 "${prev}" \
- -dmenu $(echo "${select}") $(echo "${highlight}") \
- -mesg "${HELP}" \
- -p "Current Queue > ")
-
- val=$?
-
- TRACKDISPLAY_NEW=$(echo "${TRACKDISPLAY}" | perl -pe "s/ +/\t/g")
- POS=$(echo "${TRACKDISPLAY_NEW}" | gawk -F '\t' '{ print $1 }')
- ARTIST=$(echo "${TRACKDISPLAY_NEW}" | gawk -F '\t' '{ print $4 }')
- TITLE=$(echo "${TRACKDISPLAY_NEW}" | gawk -F '\t' '{ print $3 }')
-
- if [[ $val -eq 1 ]]; then
- exit
-
- elif [[ $val -eq 10 ]]; then
- last=$(mpc playlist -f '%file%' | tail -1)
- mpc del $POS;
- POS2=$(echo "$POS" | head -1)
- POS=$(( $POS2 - 1));
- dplayQueue
-
- elif [[ $val -eq 19 ]]; then
- addAlbum alphabet
-
- elif [[ $val -eq 20 ]]; then
- addTrackTags
-
- elif [[ $val -eq 23 ]]; then
- plMenu
-
- elif [[ $val -eq 24 ]]; then
- mpc next
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 0 )))
- fi
-
- elif [[ $val -eq 26 ]]; then
- mpc prev
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 0 )))
- fi
-
- elif [[ $val -eq 27 ]]; then
- mpc stop
-
- elif [[ $val -eq 28 ]]; then
- seekMenu
-
- elif [[ $val -eq 21 ]]; then
- temp=$(mpc playlist --format '%position%\t%file%' | grep -P "^${POS}\t" | gawk -F '\t' '{ print $2 }')
- info=$(mpc --format '%albumartist%\t%album%\t%date%\t%track%\t%title%' search filename "${temp}")
-
- ARTIST=$(echo "${info}" \
- | gawk -F '\t' '{ print $1 }')
- ALBUM=$(echo "${info}" \
- | gawk -F '\t' '{ print $2 }')
- DATE=$(echo "${info}" \
- | gawk -F '\t' '{ print $3 }')
-
- filename="${ARTIST} ${ALBUM}" currentMenu album
-
-
- elif [[ $val -eq 22 ]]; then
- filename=$(mpc playlist --format '%position%\t%file%' | grep -P "^${POS}\t" | grep "${ARTIST}" | gawk -F '\t' '{ print $2 }') currentMenu track
-
- elif [[ $val -eq 25 ]]; then
- unset last
- if [[ $TRACKDISPLAY_NEW == *">"* || $TRACKDISPLAY_NEW == *"<"* || $TRACKDISPLAY_NEW == "---" ]]; then
- mpc crop
- else
- mpc play $POS;
- mpc crop
- fi
-
- elif [[ $val -eq 16 ]]; then
- if [[ $(echo "$TRACKDISPLAY_NEW" | wc -l) -gt 1 ]]; then
- :
-# unset last
-# posSelect=$(echo "$(songs)" | _rofi -kb-move-word-forward '' -dmenu -mesg "Move after >")
-# if [[ $posSelect == "" ]]; then
-# exit;
-# else
-# chosenPos=$(echo "$posSelect" | awk -F ' ' '{print $1}')
-# trackids="$(echo -e "$POS\n" | sed \$d)"
-# POS=$(echo -e "$trackids" | head -1)
-# echo "$trackids" | sort -n | tac | while read POS2; do
-# mpc mv $POS2 $chosenPos
-# chosenPos=$chosenPos
-# done
-# POS=$(echo "${chosenPos}");
-# fi
- else
- unset last
- mpc mv $POS $(echo $(( $POS + 1 )))
- POS=$(echo $(( $POS + 1 )));
- fi
-
-
-
- elif [[ $val -eq 15 ]]; then
- if [[ $(echo "$TRACKDISPLAY_NEW" | wc -l) -gt 1 ]]; then
- :
-# unset last
-# posSelect=$(echo "$(songs)" | _rofi -kb-move-word-forward '' -dmenu -mesg "Move after >")
-# if [[ $posSelect == "" ]]; then
-# exit;
-# else
-# chosenPos=$(echo "$posSelect" | awk -F ' ' '{print $1}')
-# trackids="$(echo -e "$POS\n" | sed \$d)"
-# POS=$(echo -e "$trackids" | head -1)
-# echo "$trackids" | sort -n | tac | while read POS2; do
-# mpc mv $POS2 $chosenPos
-# chosenPos=$chosenPos
-# done
-# POS=$(echo "${chosenPos}");
-# fi
- else
- unset last
- mpc mv $POS $(echo $(( $POS - 1 )))
- POS=$(echo $(( $POS - 1 )));
- fi
-
-
- elif [[ $val -eq 17 ]]; then
- unset last
- mpc toggle
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 0 )))
- fi
-
- elif [[ $val -eq 18 ]]; then
- unset last
- mpc stop
-
- elif [[ $val -eq 12 ]]; then
- unset last
- skipAlbum next
- unset IFS
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 0 )))
- fi
- dplayQueue
-
- elif [[ $val -eq 13 ]]; then
- unset last
- skipAlbum prev
- unset IFS
- mpd_play=$(mpc status | mpc status | grep -E '\[playing\]|\[paused\]')
- if [[ -n ${mpd_play} ]]; then
- POS=$(echo $(( $(mpc current -f '%position%') + 0 )))
- fi
- dplayQueue
-
- elif [[ $val -eq 14 ]]; then
- unset last
- if [[ $TRACKDISPLAY_NEW == *""* ]]; then
- mpc clear
- fi
-
- elif [[ $val -eq 0 ]]; then
- unset last
- if [[ $TRACKDISPLAY_NEW == "< Return" ]]; then
- dplayPrompt
- else
- mpc play $POS;
- fi
-
- elif [[ $val -eq 11 ]]; then
- unset last
-
- filename=$(mpc playlist --format '%position%\t%file%' | grep "^${POS}" | grep "${ARTIST}" | gawk -F '\t' '{ print $2 }')
- info=$(mpc --format '%artist%\t%album%\t%date%\t%track%\t%title%' search filename "${filename}")
- echo "${info}"
-
- ARTIST=$(echo "${info}" \
- | gawk -F '\t' '{ print $1 }')
- ALBUM=$(echo "${info}" \
- | gawk -F '\t' '{ print $2 }')
- DATE=$(echo "${info}" \
- | gawk -F '\t' '{ print $3 }')
- TRACK=$(echo "${info}" \
- | gawk -F '\t' '{ print $4 }')
- TITLE=$(echo "${info}" \
- | gawk -F '\t' '{ print $5 }')
- rateartist="${ARTIST}" ratealbum="${ALBUM}" ratetrack="${TRACK}" ratetitle="${TITLE}" rateTrack
-
- elif [[ $TRACKDISPLAY_NEW == "< Return" ]]; then
- dplayQueue
- fi
- done
-}
-
-plMenu () {
- plmenu=$(echo -e "< Return\n---\n1 [ Load Playlist ]\n2 [ Save Playlist ]" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -auto-select -dmenu -p "Load/Save Playlist > ")
- if [[ $plmenu == "1"* ]]; then
- dplayQueueLoad
- elif [[ $plmenu == "2"* ]]; then
- dplayQueueSave
- elif [[ $plmenu == "< Return" ]]; then
- dplayQueue
- elif [[ $plmenu == "" ]]; then
- exit
- fi
-}
-
-skipAlbum () {
-IFS='
-'
-
- _PLAYLISTTEMP=$(mpc playlist --format "%album%" | awk -F'\n' '{print "_" $1}')
- _PLAYLIST=($_PLAYLISTTEMP)
- ACTNR=$(mpc --format "%position%" | head -n 1) # works >= mpc git 2009-11-28
- ACTALBUM="_"$(mpc --format "%album%" | head -n 1)
- SONGSANZ=${#_PLAYLIST[*]}
-
- case $1 in
- next)
- # Next album
- for (( IDX=$ACTNR; $IDX<$SONGSANZ; IDX++ ))
- do
- if [ ${_PLAYLIST[$IDX]} != $ACTALBUM ]; then
- let IDX+=1
- mpc play $IDX
- echo New album \(next\) IDX: $IDX
- break
- fi
- done
- ;;
- prev)
- # Previous album
- #GETEND=FALSE
- ACTNRTEMP=$ACTNR
- let ACTNRTEMP-=2
- for (( IDX=$ACTNR-2; $IDX>=0; IDX-- ))
- do
- #echo TEST0 IDX $IDX
- echo IDX: $IDX - ${_PLAYLIST[$IDX]}
- if [ ${_PLAYLIST[$IDX]} != $ACTALBUM ]; then
- # if [ $GETEND = TRUE ]; then
- if [ $IDX -ne $ACTNRTEMP ]; then
- #echo TEST: IDX:$IDX $ACTNRTEMP
- let IDX+=2
- mpc play $IDX
- echo New album \(prev\) IDX: $IDX
- break
- fi
- ACTALBUM=${_PLAYLIST[$IDX]}
- #echo ALBUMENDE ERKANNT BEI IDX: $IDX
- #GETEND=TRUE
- fi
- if [ $IDX = 0 ]; then
- #if [ $GETEND = FALSE ]; then
- # mpc play 1
- # break
- #fi
- mpc play 1
- break
- fi
- done
- ;;
- *)
- echo "usage: $0 {prev|next}"
- ;;
- esac
-}
-
-# show all mpd playlists and load them to queue
-dplayQueueLoad () {
- _playlist=$(echo -e "< Return\n---\n$(mpc lsplaylists | sort)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Load Playlist > ")
- val=$?
- if [[ $val -eq 1 ]]; then
- exit
- fi
- if [[ "$_playlist" == "< Return" ]]; then
- dplayQueue
- else
- mpc clear
- mpc load "$_playlist" && dplayQueue
- fi
-}
-
-# save current playlist to playlist file.
-dplayQueueSave () {
- while read playlists
- do
- val=$?
- if [[ $val -eq 1 ]]; then
- exit
- fi
- if [[ "$playlists" == "< Return" ]]; then
- dplayQueue
- elif [[ "$playlists" == "Save new Playlist" ]]; then
- playlist=$(echo "" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Type Name for Playlist > ")
- if [[ "$playlist" == "" ]]; then
- dplayQueueSave
- else
- mpc save "$playlist"
- dplayQueue
- fi
- else
- playlist=$(echo -e "0 Return to Playlist Menu\n---\nYes\nNo" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Overwrite Playlist? > ")
- if [[ "$playlist" == "Yes" ]]; then
- mpc rm "$playlists"
- mpc save "$playlists"
- elif [[ "$playlist" == "No" ]]; then
- playlist=$(echo "" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Type Name for Playlist > ")
- if [[ "$playlist" == "" ]]; then
- dplayQueue
- else
- mpc save "$playlist"
- dplayQueue
- fi
- fi
- fi
- done < <(echo -e "< Return\n---\nSave new Playlist\n---\n$(mpc lsplaylists)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Choose Playlist > ")
- exit
-}
-
-# enable/disable outputs
-outputPrompt () {
- menu="$(echo -e "0 Return to Options Menu\n---\n$(mpc outputs)" \
- | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Outputs > ")";
-
- if [[ "$menu" == "0 Return to Options Menu" ]]
- then dplayOptionsPrompt;
- elif [[ "$menu" == "" ]]; then
- exit
- else
- mpc toggleoutput $(echo "$menu" \
- | gawk '{print $2}');
-
- notify-send "MPD" "$(echo "$menu" \
- | $sed -e 's/enabled$/disabled/;ta;s/disabled$/enabled/;:a;')";
-
- outputPrompt
- fi
-}
-
-# rate any album
-rateAlbum () {
- rating="$(seq 10 | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Select Album Rating: > ")"
-
- if [[ $rating == "" ]]; then
- exit
- else
- # check if rateartist was defined, if it wasn't use currently playing
- # track for rating, otherwise use what was delivered in the rate*
- # variables.
- if [[ -z "$rateartist" ]]; then
- artist=$(mpc current -f '%artist%')
- album=$(mpc current -f '%album%')
- date=$(mpc current -f '%date%')
- if [[ -n $(mpc find track "1" albumartist "${artist}" album "${album}" date "${date}") ]]; then
- track="1"
- else
- track="01"
- fi
- disc=$(mpc current -f '%disc%')
- export disc=${disc}
- export track=${track}
- clerk_helper ratealbum "${artist}" "${album}" "${date}" "${rating}"
- notify-send "clerk" "rated ${artist} - ${album} with ${rating}"
- else
- export disc=${disc}
- export track=${track}
- clerk_helper ratealbum "${rateartist}" "${ratealbum}" "${ratedate}" "${rating}"
- notify-send "clerk" "rated ${rateartist} - ${ratealbum} with ${rating}"
- fi
- fi
-}
-
-rateTrack () {
- rating="$(echo -e "< Return\n---\n$(seq 10)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Select Track Rating: > ")"
-
- if [[ $rating == "" ]]; then
- exit
- elif [[ $rating == "< Return" ]]; then
- dplayQueue
- else
- if [[ -z "$rateartist" ]]; then
- export rating=${rating}
- rateartist=$(mpc current -f '%artist%')
- ratetitle=$(mpc current -f '%title%')
- ratetrack=$(mpc current -f '%track%')
- ratealbum=$(mpc current -f '%album%')
-
- clerk_helper ratetrack "${rateartist}" "${ratealbum}" "${ratetrack}" "${ratetitle}" "${rating}"
- notify-send "clerk" "rated $(mpc current) with $(echo ${rating})"
- else
- clerk_helper ratetrack "${rateartist}" "${ratealbum}" "${ratetrack}" "${ratetitle}" "${rating}"
- notify-send "clerk" "rated ${rateartist} - ${ratetitle} with $(echo ${rating})"
- fi
- if [[ $auto_track_rating_backup == "true" ]]; then
- if [[ -f $last_track_rate_bak ]]; then
- read -r lastbackup<$last_track_rate_bak
- else
- lastbackup=$(date "+%s")
- fi
- if [[ $(date "+%s") -gt $(( $lastbackup + 3600)) ]]; then
- rm -f $db_rate_track
- clerk_helper importtrackratings
- rm -f $last_track_rate_bak
- fi
- date "+%s" > $last_track_rate_bak
- fi
- fi
-}
-
-# function to instantly rate a track without a submenu. rating is defined on
-# commandline
-instantRateTrack () {
- rateartist=$(mpc current -f '%artist%')
- ratetitle=$(mpc current -f '%title%')
- ratetrack=$(mpc current -f '%track%')
- ratealbum=$(mpc current -f '%album%')
- export rating=$1
- clerk_helper ratetrack "${rateartist}" "${ratealbum}" "${ratetrack}" "${ratetitle}" "${rating}"
- notify-send "clerk" "rated ${rateartist} - ${ratetitle} with $(echo ${rating})"
- if [[ $auto_track_rating_backup == "true" ]]; then
- if [[ -f $last_track_rate_bak ]]; then
- read -r lastbackup<$last_track_rate_bak
- else
- lastbackup=$(date "+%s")
- fi
- if [[ $(date "+%s") -gt $(( $lastbackup + 3600)) ]]; then
- rm -f $db_rate_track
- clerk_helper importtrackratings
- rm -f $last_track_rate_bak
- fi
- date "+%s" > $last_track_rate_bak
- fi
-}
-
-# load rated albums with minimum rating of xx
-loadRatedAlbums () {
- rating="$(seq 10 | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Minimum Rating > ")"
-
- if [[ $rating == "" ]]; then
- exit
- else
- albums="$(while read -a line; do
- dirname "${line[*]}";
- done <<< "$(mpc sticker "" find albumrating \
- | grep -E "albumrating=$rating")" \
- | $sed 's/\/\CD.*//g' \
- | sort \
- | uniq \
- | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Choose Album > ")"
-
- if [[ $albums == "" ]]; then
- exit
- else
- mpc clear;
- mpc add "$albums";
- mpc play
-
- fi
- fi
-}
-
-
-loadRatedTracks () {
- rating="$(seq 10 | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Rating > ")"
- if [ rating = "" ]; then
- exit
- else
- cd $config_root
- mpc clear
- songs="$(mpc sticker "" find rating | grep "rating=$rating" | gawk -F ': rating=' '{ print $1 }')"
- echo "$songs" | mpc add
- mpc play
- fi
-}
-
-loadRandomRatedTracks () {
- number="$(echo " " | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Number of Songs > " | xargs echo)"
- rating="$(seq 10 | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Minimum Rating > ")"
- if [ rating = "" ]; then
- exit
- else
- cd $config_root
- mpc clear
- songs="$(mpc sticker "" find rating \
- | grep -E "rating=$rating|rating=$(echo $(( $rating + 1 )))|rating=$(echo $(( $rating + 2 )))|rating=$(echo $(( $rating + 3 )))|rating=$(echo $(( $rating + 4 )))" \
- | gawk -F ':' '{ print $1 }')"
-
- echo "$songs" \
- | $shuf -n $number \
- | mpc add
-
- mpc play
- rm -f /tmp/clerk_tracklist
- fi
-}
-
-loadRandomRating () {
- rating="$(seq 10 | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Minimum Rating > ")"
- if [ rating = "" ]; then
- exit
- else
- album="$(while read -a line; do
- dirname "${line[*]}";
- done <<< "$(mpc sticker "" find albumrating \
- | grep -E "albumrating=$rating|albumrating=$(echo $(( $rating+1 )))|albumrating=$(echo $(( $rating+2 )))|albumrating=$(echo $(( $rating+3 )))|albumrating=$(echo $(( $rating+4 )))|albumrating=$(echo $(( $rating+5 )))|albumrating=$(echo $(( $rating+6 )))")" \
- | $sed 's/\/\CD.*//g' \
- | $shuf -n1)"
-
- mpc clear;
- mpc add "$album";
- mpc play
- fi
-}
-
-# load random album. Make sure to make each sub item random. this way each
-# artist has equal chances of being played, no matter how many albums it has.
-playRandomAlbum () {
- mpc clear > /dev/null
- artist="$(mpc list "albumartist" | $shuf -n 1)"
- album="$(mpc list album "albumartist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "albumartist" "$artist";
- mpc play > /dev/null
-}
-
-# same for tracks, no artist should be preferred because it has more tracks.
-playRandomTracks () {
- mpc clear > /dev/null
- artist="$(mpc list "$random_artist" | $shuf -n 1)"
- album="$(mpc list album "$random_artist" "$artist" | $shuf -n 1)"
- title="$(mpc list title album "$album" "$random_artist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "$random_artist" "$artist" title "$title";
- mpc play > /dev/null
-
- n=0; while (( n++ < $value -1 )); do
- artist="$(mpc list "$random_artist" | $shuf -n 1)"
- album="$(mpc list album "$random_artist" "$artist" | $shuf -n 1)"
- title="$(mpc list title album "$album" "$random_artist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "$random_artist" "$artist" title "$title"
- done
- mpc play > /dev/null
- exit
-}
-
-exitAfterAdd () {
- if [[ $exit_after_add == "yes" ]]; then
- exit
- elif [[ $exit_after_add == "no" ]]; then
- :
- fi
-}
-
-addAlbum() {
-
- displaystyle () {
- mode="$1"
- help_text="$(echo -e "${add}: Add - ${insert}: Insert - ${replace}: Replace (Default) - ${savefav}: Save\n${rate}: Rate - ${addplay}: Add + Play - ${insertplay}: Insert + Play" | column -s '-' -t | perl -pe "s/ - /<span color='$help_separator_color'\>\|\<\/span\>/g")"
- line1=$(echo "${help_text}" | head -1)
- line2=$(echo "${help_text}" | tail -1)
- HELP="<span color='$help_color'>${line1}
-${line2}</span>"
-
- if [[ $1 == "latest" ]]; then
- album_list="latest.cache"
- elif [[ $1 == "alphabet" ]]; then
- album_list="albums.cache"
- fi
-
- ALBUM_TEMP="$(_rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -sep '\n' \
- -matching regex \
- -kb-custom-1 "${add}" \
- -kb-custom-2 "${insert}" \
- -kb-custom-3 "${replace}" \
- -kb-custom-8 "${rate}" \
- -kb-custom-4 "${addplay}" \
- -kb-custom-5 "${insertplay}" \
- -kb-custom-6 ${tracklist} \
- -kb-custom-7 ${queue} \
- -kb-custom-9 ${prev} \
- -kb-custom-10 ${toggle} \
- -kb-custom-11 ${stop} \
- -multi-select \
- -kb-custom-12 ${next} \
- -kb-custom-13 ${seek} \
- -kb-custom-14 ${savefav} \
- -kb-accept-alt "Tab" \
- -kb-custom-15 ${nextalbum} \
- -kb-custom-16 ${prevalbum} \
- -dmenu -filter "$filter" \
- -select "$album_entry" \
- -format "f¬s" \
- -input "$data_root/${album_list}" \
- -p "Choose Album > ")"
- }
- returnto () {
- if [[ $mode == "latest" ]]; then
- addAlbum latest
- elif [[ $mode == "alphabet" ]]; then
- addAlbum alphabet
- fi
- }
-
- mode=$1
- displaystyle $mode
-
- val=$?
-
- ALBUM_ORIG="${ALBUM_TEMP#*¬}"
- firstline=$(echo "$ALBUM_ORIG" | sed 's/.*¬//g' | tail -1 | awk -F '\t' '{ print $NF }')
- unset filter
- export filter_temp="${ALBUM_TEMP%¬*}"
- ALBUM=$(echo "${ALBUM_ORIG}" | sed 's/.*¬//g' | awk -F '\t' '{ print $NF }')
- export filter=$(echo "$filter_temp" | head -1 | sed 's/¬.*//g')
-
- if [[ -z "$ALBUM" ]]; then
- exit
- else
- if [[ $val -eq 11 ]]; then
- echo -e "$ALBUM" | uniq | while read line; do
- mpc insert "${line}"
- exit
- done
- album_entry="$firstline"
- exitAfterAdd
- returnto
-
- elif [[ $val -eq 12 ]]; then
- mpc clear;
- echo -e "$ALBUM" | uniq | while read line; do
- mpc add "${line}"
- done
- mpc play
- album_entry="$firstline"
- exitAfterAdd
- returnto
-
- elif [[ $val -eq 0 ]]; then
- if [[ "$ALBUM" == "< Return" ]]; then
- unset artist
- browseLibPrompt
-
- elif [[ "$ALBUM" == "" ]]; then
- returnto $mode
-
- else
- mpc clear
- echo -e "$ALBUM" | uniq | while read line; do
- mpc add "${line}"
- done
- mpc play
- album_entry="$firstline"
- exitAfterAdd
- returnto
- fi
-
- elif [[ $val -eq 10 ]]; then
- echo "$ALBUM" | uniq | while read line; do
- mpc add "$(echo -e "${line}" | awk -F '\t' '{ print $NF }')"
- done
- album_entry="$firstline"
- exitAfterAdd
- returnto
-
- elif [[ $val -eq 15 ]]; then
- album_entry="${firstline}"
- addTrackTags
- returnto
-
- elif [[ $val -eq 16 ]]; then
- album_entry="${firstline}"
- dplayQueue
-
- elif [[ $val -eq 13 ]]; then
- currentid=$(mpc current -f "%position%")
- echo -e "$ALBUM" | uniq | while read line; do
- mpc add "$(echo -e "${line}" | awk -F '\t' '{ print $NF }')"
- done
- mpc play "$(echo "$(( $currentid + 1 ))")"
- album_entry="$firstline"
-
- elif [[ $val -eq 18 ]]; then
- mpc prev
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 19 ]]; then
- mpc toggle
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 20 ]]; then
- mpc stop
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 21 ]]; then
- mpc next
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 22 ]]; then
- album_entry="${firstline}"
- seekMenu addAlbum $1
-
- elif [[ $val -eq 23 ]]; then
- album_entry="${firstline}"
- ALBUM="$ALBUM" saveAlbumToPlaylist selection
-
- elif [[ $val -eq 24 ]]; then
- skipAlbum next
- unset IFS
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 25 ]]; then
- skipAlbum prev
- unset IFS
- album_entry="${firstline}"
- returnto
-
- elif [[ $val -eq 17 ]]; then
- if [[ -n $(mpc find -f '%disc%' albumartist "${artist}" album "${album}" date "${date}") ]]; then
- disc=$(mpc find -f '%disc%' albumartist "${artist}" album "${album}" date "${date}" | head -1)
- else
- disc=""
- fi
- if [[ -n $(mpc find track "1" albumartist "${artist}" album "${album}" date "${date}") ]]; then
- track="1"
- else
- track="01"
- fi
- disc=${disc} track=${track} rateartist="${artist}" ratealbum="${album}" ratedate="${date}" rateAlbum
- album_entry="$firstline"
-
- elif [[ $val -eq 14 ]]; then
- currentid=$(mpc current -f "%position%")
- echo -e "$ALBUM" | uniq | while read line; do
- mpc insert "$(echo -e "${line}" | awk -F '\t' '{ print $NF }')"
- done
- mpc play "$(echo "$(( $currentid + 1 ))")"
- album_entry="$firstline"
-
- elif [[ $val -eq 1 ]]; then
- exit
- fi
- returnto
- fi
-}
-
-addTrackTags() {
- help_text=$(echo -e "${add}: Add (Default) - ${insert}: Insert - ${replace}: Replace \
- \n${rate}: Rate - ${addplay}: Add + Play - ${insertplay}: Insert + Play" \
- | column -s '-' -t | perl -pe "s/ - /<span color='$help_separator_color'\>\|\<\/span\>/g")
- # -o "<span color='$help_separator_color'>|</span>" -t)
- line1=$(echo "${help_text}" | head -1)
- line2=$(echo "${help_text}" | tail -1)
-HELP="<span color='$help_color'>${line1}
-${line2}</span>"
-
-
-TRACK_TEMP="$(_rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -kb-custom-1 "${add}" \
- -kb-custom-2 "${insert}" \
- -kb-custom-3 "${replace}" \
- -kb-custom-8 "${rate}" \
- -kb-custom-4 "${addplay}" \
- -kb-accept-alt "Tab" \
- -multi-select \
- -kb-custom-5 "${insertplay}" \
- -kb-custom-6 ${albumlist} \
- -kb-custom-7 ${queue} \
- -kb-custom-9 ${prev} \
- -kb-custom-10 ${toggle} \
- -kb-custom-11 ${stop} \
- -kb-custom-12 ${next} \
- -kb-custom-13 ${seek} \
- -kb-custom-14 ${nextalbum} \
- -kb-custom-15 ${prevalbum} \
- -dmenu -filter "$filter" \
- -select "$entry" \
- -format "f¬s" \
- -mesg "${HELP}" \
- -input "$cache_track" \
- -p "Choose Track > ")"
-
- val=$?
- TRACK_ORIG="${TRACK_TEMP#*¬}"
- firstline=$(echo "${TRACK_ORIG}" | sed 's/.*¬//g' | tail -1)
- unset filter
- export filter_temp="${TRACK_TEMP%¬*}"
- TRACK="$(echo "${TRACK_ORIG}" | perl -pe "s/ +/\t/g" | sed 's/.*¬//g')"
- export filter=$(echo "$filter_temp" | head -1 | sed 's/¬.*//g')
-
- if [[ -z "$TRACK" ]]; then
- exit
- else
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
-
- if [[ $val -eq 11 ]]; then
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- echo "$filename" | uniq | while read line; do
- mpc insert "${line}"
- done
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 12 ]]; then
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- mpc clear;
- echo "$filename" | uniq | while read line; do
- mpc add "${line}"
- done
- mpc play
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 10 ]]; then
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- echo "$filename" | uniq | while read line; do
- mpc add "${line}"
- done
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 0 ]]; then
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- echo "$filename" | uniq | while read line; do
- mpc add "${line}"
- done
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 13 ]]; then
- title=$(echo "$TRACK" | gawk -F '\t' '{print $2}' | head -1)
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- echo "$filename" | uniq | while read line; do
- mpc add "${line}"
- done
- mpc searchplay "${title}"
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 15 ]]; then
- addAlbum alphabet
-
- elif [[ $val -eq 16 ]]; then
- dplayQueue
-
- elif [[ $val -eq 14 ]]; then
- title=$(echo "$TRACK" | gawk -F '\t' '{print $2}' | head -1)
- filename=$(echo "$TRACK" | gawk -F '\t' '{print $NF}')
- echo "$filename" | uniq | while read line; do
- mpc insert "${line}"
- done
- mpc searchplay "${title}"
- entry="$firstline"
- exitAfterAdd
-
- elif [[ $val -eq 18 ]]; then
- mpc prev
-
- elif [[ $val -eq 19 ]]; then
- mpc toggle
- entry="${firstline}"
-
- elif [[ $val -eq 20 ]]; then
- mpc stop
- entry="${firstline}"
-
- elif [[ $val -eq 21 ]]; then
- mpc next
- entry="${firstline}"
-
- elif [[ $val -eq 22 ]]; then
- entry="${firstline}"
- seekMenu addTrackTags
-
- elif [[ $val -eq 23 ]]; then
- skipAlbum next
- unset IFS
- entry="${firstline}"
-
- elif [[ $val -eq 24 ]]; then
- skipAlbum prev
- unset IFS
- entry"${firstline}"
-
- elif [[ $val -eq 17 ]]; then
- info=$(mpc search --format '%artist%\t%album%\t%date%\t%track%\t%title%' filename "${filename}")
- artist="$(echo "$info" \
- | gawk -F '\t' '{ print $1 }')"
- album="$(echo "$info" \
- | gawk -F '\t' '{ print $2 }')"
- date="$(echo "$info" \
- | gawk -F '\t' '{ print $3 }')"
- track="$(echo "$info" \
- | gawk -F '\t' '{ print $4 }')"
- title="$(echo "$info" \
- | gawk -F '\t' '{ print $5 }')"
-
- echo "${artist} ${album} ${date} ${track} ${title}"
- rateartist="${artist}" ratealbum="${album}" ratetrack="${track}" ratetitle="${title}" rateTrack
- entry="$firstline"
- elif [[ $val -eq 1 ]]; then
- exit
- fi
- addTrackTags
- fi
-}
-
-browseLibPrompt() {
- menu="$((echo -e "< Return\n---\n1 [ Choose Albums ]>\n2 [ Choose Track ]>\n3 [ Browse Latest Additions ]>\n---\n4 [ Play Random Album ]\n5 [ Play Random Tracks ]\n---\n6 [ Update Album/Track Cache ]") \
- | _rofi -kb-move-word-forward '' \
- -kb-row-tab '' \
- -dmenu \
- -auto-select \
- -kb-custom-1 ${albumlist} \
- -kb-custom-2 ${tracklist} \
- -kb-custom-3 ${queue} \
- -p "Library Menu > ")"
-
- val=$?
-
- if [[ $val -eq 1 ]]; then
- exit
- elif [[ $val -eq 10 ]]; then
- addAlbum alphabet
- elif [[ $val -eq 11 ]]; then
- addTrackTags
- elif [[ $val -eq 12 ]]; then
- dplayQueue
- elif [[ $val -eq 13 ]]; then
- nowPlaying
- fi
-
- if [[ "${menu}" == "1 "* ]]; then
- addAlbum alphabet
- elif [[ "${menu}" == "2 "* ]]; then
- addTrackTags
- elif [[ "${menu}" == "6 "* ]]; then
- updateCache;
- browseLibPrompt
- elif [[ "${menu}" == "< "* ]]; then
- dplayPrompt
- elif [[ "${menu}" == "3 "* ]]; then
- addAlbum latest
- elif [[ "${menu}" == "4 "* ]]; then
- playRandomAlbum
- elif [[ "${menu}" == "5 "* ]]; then
- playRandomTracks
- fi
-}
-
-saveAlbumToPlaylist() {
- if [[ $1 == "selection" ]]; then
- TRACK="${TRACK}"
- else
- TRACK="$((echo -e "< Return\n---"; cat $cache_album) | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Save Album to Playlist > ")"
- fi
-
- val=$?
-
- if [[ $val -eq 1 ]]; then
- exit
- fi
-
- if [[ "$TRACK" == "< Return" ]]; then
- dplayPrompt
- elif [[ "$TRACK" == "---" ]]; then
- saveAlbumToPlaylist
- else
- artist=$(echo -en "$TRACK" \
- | gawk -F '\t' '{ print $1 }' \
- | sed -e 's/[[:space:]]*$//')
- group2=$(echo -en "$TRACK" \
- | gawk -F '\t' '{ print $2 "\t" $3}' \
- | sed -e 's/[[:space:]]*$//')
- album=$(echo -en "$group2" \
- | gawk -F "\t" '{print $2}')
- date=$(echo -en "$group2" \
- | gawk -F "\t" '{print $1}' \
- | gawk '{print substr($0, 2, length($0) - 2)}')
- clear
- echo "${artist} ${album} ${date}"
-
- mpc search date "$date" album "$album" albumartist "$artist" | clerk_helper saveto
- fi
- saveAlbumToPlaylist
-}
-
-
-saveLatestToPlaylist() {
- declare -i seen=0
- while read TRACK
- do
- seen=1
- if [[ "$TRACK" == "0 Return to Main Menu" ]]
- then dplayPrompt
- else
- artist=$(echo -en "$TRACK" \
- | gawk -F '\t' '{ print $1 }' \
- | sed -e 's/[[:space:]]*$//')
- group2=$(echo -en "$TRACK" \
- | gawk -F '\t' '{ print $2 }' \
- | sed -e 's/[[:space:]]*$//')
- album=$(echo "$group2" \
- | gawk -F " — " '{print $2}')
- date=$(echo "$group2" \
- | gawk -F " — " '{print $1}' \
- | gawk '{print substr($0, 2, length($0) - 2)}')
-
- mpc search date "$date" album "$album" albumartist "$artist" | clerk_helper saveto
- fi
- done < <(echo -e "0 Return to Main Menu\n---\n$(cat $cache_latest)" | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -p "Save Album to Playlist > ")
-
- if [[ $seen = 0 ]]
- then
- exit
- fi
-}
-
-saveTrackToPlaylist() {
- TRACK_TEMP="$((echo -e "0 Return to Main Menu\n---"; cat $cache_track) | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -filter "$filter" -select "$entry" -format "f¬s" -dmenu -p "Save Track to Playlist > ")"
-
- TRACK="${TRACK_TEMP#*¬}"
- unset filter
- export filter="$(echo ${TRACK_TEMP} | gawk -F '¬' '{ print $1 }')"
-
-
- if [[ "$TRACK" == "0 Return to Main Menu" ]]
- then dplayPrompt
- elif [[ -z "$TRACK" ]]; then
- exit
- else
- filename=$(echo "$TRACK" | gawk -F "\t" '{print $3}')
- info=$(mpc search --format '%artist%\t%album%\t%date%\t%track%\t%title%' filename "${filename}")
- artist="$(echo "$info" \
- | gawk -F '\t' '{ print $1 }')"
- album="$(echo "$info" \
- | gawk -F '\t' '{ print $2 }')"
- date="$(echo "$info" \
- | gawk -F '\t' '{ print $3 }')"
- track="$(echo "$info" \
- | gawk -F '\t' '{ print $4 }')"
- title="$(echo "$info" \
- | gawk -F '\t' '{ print $5 }')"
-
- mpc search track "$track" album "$album" title "$title" albumartist "$artist" | clerk_helper saveto
- entry="$TRACK"
- saveTrackToPlaylist
- fi
-}
-
-getAlbumsFromPlaylist () {
- current=$(mpc save temp)
- pl="clerk"
- mpc clear
- mpc load "${pl}"
- list=$(mpc playlist -f '%artist% - %album% - %date%' | sort -u | _rofi -kb-move-word-forward '' -kb-row-tab '' -dmenu -mesg "${add}: Add, ${insert}: Insert, ${replace}: Replace")
-
- val=$?
-
- mpc clear
- if [[ $val == 12 ]]; then
- mpc searchadd artist "$(echo $list | gawk -F ' - ' '{print $1}')" album "$(echo $list | gawk -F ' - ' '{print $2}')" date "$(echo $list | gawk -F ' - ' '{print $3}')"
- mpc play
- elif [[ $val == 11 ]]; then
- mpc load temp
- mpc search artist "$(echo $list | gawk -F ' - ' '{print $1}')" album "$(echo $list | gawk -F ' - ' '{print $2}')" date "$(echo $list | gawk -F ' - ' '{print $3}')" | mpc insert
- elif [[ $val == 10 ]]; then
- mpc load temp
- mpc searchadd artist "$(echo $list | gawk -F ' - ' '{print $1}')" album "$(echo $list | gawk -F ' - ' '{print $2}')" date "$(echo $list | gawk -F ' - ' '{print $3}')"
- fi
- mpc rm temp
-}
-
-################################################################################
-
-
-
-while :; do
- case $1 in
- --nextalbum)
- skipAlbum next
- exit
- ;;
- --prevalbum)
- skipAlbum prev
- exit
- ;;
- --add)
- if [[ ! $2 ]]; then
- echo "Missing argument for --add"
- echo "Possible values: track, album, latest"
- elif [[ $2 == track ]]; then
- addTrackTags
- elif [[ $2 == album ]]; then
- addAlbum alphabet
- elif [[ $2 == latest ]]; then
- addAlbum latest
- fi
- break
- ;;
- --rate)
- if [[ ! $2 ]]; then
- echo "Missing arguemtn for --rate"
- echo "Possible values: track, album, instant"
- echo "Launching rating menu"
- ratingPrompt
- elif [[ $2 == track ]]; then
- rateTrack
- elif [[ $2 == album ]]; then
- rateAlbum
- elif [[ $2 == instant ]]; then
- if [[ ! $3 ]]; then
- echo "Missing argument for --rate instant"
- echo "Please define rating between 1-10"
- else
- instantRateTrack $3
- fi
- elif [[ $2 == load ]]; then
- mpc clear && mpc sticker "" find rating | grep -E "rating=6|rating=7|rating=8|rating=9|rating=10" | gawk -F ':' '{print $1}' | $shuf -n $value | mpc add && mpc play
- fi
- break
- ;;
- --random)
- if [[ ! $2 ]]; then
- echo "Missing argument for --random"
- echo "Possible values: track, album"
- elif [[ $2 == track ]]; then
- playRandomTracks
- elif [[ $2 == album ]]; then
- playRandomAlbum
- fi
- break
- ;;
- --current)
- currentTag
- break
- ;;
- --browse)
- if [[ ! $2 ]]; then
- echo "Missing argument for --browse"
- echo "Possible values: artist, date, genre, folder, system"
- elif [[ $2 == artist ]]; then
- browseArtist
- elif [[ $2 == albumartist ]]; then
- browseAlbumArtist
- elif [[ $2 == date ]]; then
- browseDate
- elif [[ $2 == genre ]]; then
- browseGenre
- elif [[ $2 == system ]]; then
- browseFilesystem
- elif [[ $2 == folder ]]; then
- browseFolders
- fi
- break
- ;;
- --backup)
- if [[ ! $2 ]]; then
- echo "Missing argument for --backup"
- echo "Possible values: track, album"
- elif [[ $2 == track ]]; then
- backupTrackRatings
- elif [[ $2 == album ]]; then
- backupAlbumRatings
- fi
- break
- ;;
- --restore)
- if [[ ! $2 ]]; then
- echo "Missing argument for --restore"
- echo "Possible values: track, album"
- elif [[ $2 == track ]]; then
- restoreTrackRatings
- elif [[ $2 == album ]]; then
- restoreAlbumRatings
- fi
- break
- ;;
- --queue)
- if [[ ! $2 ]]; then
- echo "Missing argument for --queue"
- echo "Possible values: show, delete, suspend, resume"
- elif [[ $2 == show ]]; then
- dplayQueue
- elif [[ $2 == delete ]]; then
- dplayQueueDelete
- elif [[ $2 == suspend ]]; then
- cli=true suspendPlaylist
- elif [[ $2 == resume ]]; then
- cli=true resumePlaylist
- fi
- break
- ;;
- --rss)
- loadRSS
- break
- ;;
- --playlist)
- if [[ $2 == savealbum ]]; then
- saveAlbumToPlaylist
- elif [[ $2 == load ]]; then
- dplayQueueLoad
- elif [[ $2 == savelast ]]; then
- saveLatestToPlaylist
- elif [[ $2 == savetrack ]]; then
- saveTrackToPlaylist
- elif [[ $2 == loadalbum ]]; then
- getAlbumsFromPlaylist
- fi
- break
- ;;
- --lastfm)
- if [[ ! $2 ]]; then
- echo "Missing argument for --lastfm"
- echo "Possible values: toggle, check, love"
- elif [[ $2 == toggle ]]; then
- lastFM
- elif [[ $2 == check ]]; then
- lastFMCheck
- elif [[ $2 == love ]]; then
- if [[ scrobbler=mpdscribble ]]; then
- lastfm-mpd-cli love > /dev/null && notify-send "MPD" "Loved $(mpc current -f '%title%') on LastFM"
- elif [[ scrobbler=mpdas ]]; then
- mpc sendmessage mpdas love
- fi
- fi
- break
- ;;
- --update)
- forceupdate=true updateCache
- ;;
- --help|-h)
- echo "---"
- echo "clerk: rofi based MPD Interface"
- echo "Copyright © 2013 - 2015 Rasmus Steinke"
- echo "---"
- echo "General"
- echo " --help, -h this help message"
- echo " --current show currently playing track"
- echo " --update update album/track caches"
- echo ""
- echo "Library"
- echo " --add <track, album, latest> adds selection at the end of the queue"
- echo " --random <track, album> play random track or album"
- echo ""
- echo "Playlist"
- echo " --queue <show, suspend, resume> manage current queue"
- echo " --playlist <savealbum, savelast, savetrack> save selection to playlist \"clerk\""
- echo " --playlist <load> load playlist"
- echo " --rss load podcast"
- echo " (podcast should be placed in \$XDG_CONFIG_HOME/clerk/podcasts"
- echo " with format NAME \ URL)"
- echo ""
- echo "Ratings"
- echo " --rate <menu, track, album, load, instant ##> rate albums or tracks"
- echo " "load" adds random rated tracks to queue"
- echo ""
- echo " --backup <track, album> backup ratings from mpd sticker database to json file."
- echo " --restore <track, album> restore ratings back to mpd sticker database"
- echo ""
- echo "LastFM"
- echo " --lastfm <toggle, check, love> toggle or check last.fm status, love current track"
- break
- ;;
- *)
- dplayPrompt ;;
- esac
- shift
-done
diff --git a/clerk.pl b/clerk.pl
new file mode 100644
index 0000000..b047ea1
--- /dev/null
+++ b/clerk.pl
@@ -0,0 +1,199 @@
+#!/usr/bin/env perl
+
+use Net::MPD;
+use v5.10;
+use File::stat;
+use Data::Dumper;
+use warnings;
+use IO::Select;
+use File::Basename;
+use strict;
+use IPC::Run qw( timeout start );
+use autodie;
+use utf8;
+use File::Slurper 'read_binary';
+binmode(STDOUT, ":utf8");
+use Data::MessagePack;
+use Config::Simple;
+
+my $config_file = $ENV{'HOME'} . "/.config/clerk/clerk.conf";
+
+# read configuration file
+my $cfg = new Config::Simple(filename=>"$config_file");
+
+my $general_cfg = $cfg->param(-block=>"General");
+my $mpd_host = $general_cfg->{mpd_host};
+my $db_file = $general_cfg->{database};
+my $backend = $general_cfg->{backend};
+
+my $columns_cfg = $cfg->param(-block=>"Columns");
+my $albumartist_l = $columns_cfg->{albumartist_l};
+my $album_l = $columns_cfg->{album_l};
+my $date_l = $columns_cfg->{date_l};
+my $title_l = $columns_cfg->{title_l};
+my $track_l = $columns_cfg->{track_l};
+my $artist_l = $columns_cfg->{artist_l};
+
+
+# open connection to MPD
+my $mpd = Net::MPD->connect($ENV{MPD_HOST} // $mpd_host // 'localhost');
+
+sub main {
+ create_db();
+ list_albums();
+}
+
+
+sub create_db {
+ # Get database copy and save as messagepack file, if file is either missing
+ # or older than latest mpd database update.
+ # get number of songs to calculate number of searches needed to copy mpd database
+ my $mpd_stats = $mpd->stats();
+ my $songcount = $mpd_stats->{songs};
+ my $last_update = $mpd_stats->{db_update};
+
+ if (!-f "$db_file" || stat("$db_file")->mtime < $last_update) {
+ print STDERR "::: MPD database copy missing or out of date\n";
+ print STDERR "::: Starting database sync\n";
+ print STDERR "::: Songs in database: $songcount\n";
+ my $times = int($songcount / 1000 + 1);
+ print STDERR "==> Requesting $times chunks from MPD\n";
+ my @db;
+ # since mpd will silently fail, if response is larger than command buffer, let's split the search.
+ my $chunk_size = 1000;
+ for (my $i=0;$i<=$songcount;$i+=$chunk_size) {
+ my $endnumber = $i+$chunk_size;
+ my @temp_db = $mpd->search('filename', '', 'window', "$i:$endnumber");
+ push @db, @temp_db;
+ }
+
+ # only save relevant tags to keep messagepack file small
+ # note: maybe use a proper database instead? See list_album function.
+ my @filtered = map { {$_->%{'Album', 'Artist', 'Date', 'AlbumArtist', 'Title', 'Track', 'uri', 'Last-Modified'}} } @db;
+ pack_msgpack(\@filtered);
+ }
+ print STDERR "::: MPD database copy up to date\n";
+}
+
+# sub backend_call {
+# my ($in) = @_;
+# my $input = join "", (@{$in});
+# my $out;
+# my %backends = (
+# fzf => [ qw(fzf --reverse --no-sort -m -e -i --with-nth=1,2,3 -d "\t" --tabstop=4 +s --ansi --expect=alt-v,alt-b) ],
+# rofi => [qw(rofi -dmenu -width 1800)]);
+# my $handle = run (($backends{$backend} // die('backend not found')), \$input, \$out) or die('No selection');
+#
+# return $out;
+# }
+
+sub backend_call {
+ my ($in) = @_;
+ my $input;
+ my $out;
+ my %backends = ( fzf => [ qw(fzf --reverse --no-sort -m -e -i --with-nth=1,2,3 -d "\t" --tabstop=4 +s --ansi) ], rofi => ['rofi', '-width', '1300', '-dmenu', '-i', '-p', '> ']);
+ my $handle = start $backends{$backend} // die('backend not found'), \$input, \$out;
+ $input = join "", (@{$in});
+ finish $handle or die "No selection";
+ return $out;
+}
+
+sub pack_msgpack {
+ my ($filtered_db) = @_;
+ my $msg = Data::MessagePack->pack($filtered_db);
+ my $filename = "$db_file";
+ open(my $out, '>:raw', $filename) or die "Could not open file '$filename' $!";
+ print $out $msg;
+ close $out;
+}
+
+sub unpack_msgpack {
+ my $mp = Data::MessagePack->new->utf8();
+ my $msgpack = read_binary("$db_file");
+ my $rdb = $mp->unpack($msgpack);
+ return $rdb;
+}
+
+# read messagepack file and output strings
+sub list_albums {
+ print STDERR "::: Creating list of albums\n";
+ my $rdb = unpack_msgpack();
+ my @album_db = do {my %seen; grep { !defined($_->{AlbumArtist}) or !defined($_->{Album}) or
+ !defined($_->{Date}) or !$seen{$_->{AlbumArtist}}{$_->{Album}}{$_->{Date}}++ } @{$rdb}};
+ my @sorted_db = sort { lc($a->{AlbumArtist}) cmp lc($b->{AlbumArtist}) } @album_db;
+
+ # push list to rofi and receive selected item
+ my @output;
+ my $in;
+ for my $entry (@sorted_db) {
+ my $album_dir = dirname($entry->{uri});
+ $album_dir =~ s/\/CD.*$//g;
+ $in = sprintf "%-${albumartist_l}.${albumartist_l}s\t%-${date_l}.${date_l}s\t%-${album_l}.${album_l}s\t%s\n", $entry->{AlbumArtist},$entry->{Date}, $entry->{Album}, $album_dir;
+ push @output, $in;
+ }
+ my $out = backend_call(\@output);
+ print $out;
+ # call rofi function to display possible actions
+ my @action_items = ("Add\n", "Insert\n", "Replace\n");
+ my $action = backend_call(\@action_items);
+
+ # split output into tag variables and remove possible whitespace
+ if ($action eq "Add\n") {
+ my $line;
+ foreach my $line (split /\n/, $out) {
+ my $uri = (split /[\t\n]/, $line)[-1];
+ my ($artist, $date, $album) = map { s/\s+$//r } split /[\t\n]/, $line;
+ print STDERR "::: Selected album \"$album\" from \"$artist\" released in $date\n";
+ print STDERR "==> Adding selected album(s) to current playlist\n";
+ $mpd->add($uri);
+ }
+ }
+ elsif ($action eq "Replace\n") {
+ my $uri = (split /[\t\n]/, $out)[-1];
+ my ($artist, $date, $album) = map { s/\s+$//r } split /[\t\n]/, $out;
+ print STDERR "==> Replacing current playlist with selected album(s)\n";
+ $mpd->clear();
+ $mpd->search_add('Artist' => $artist, 'Album' => $album, 'Date' => $date);
+ $mpd->play();
+ }
+ list_albums();
+}
+
+sub list_tracks {
+ print STDERR "::: Creating list of tracks\n";
+ my $rdb = unpack_msgpack();
+ my @output;
+ my $in;
+ for my $entry (@{$rdb}) {
+ $in = sprintf "%-${track_l}.${track_l}s\t%-${title_l}.${title_l}s\t%-${artist_l}.${artist_l}s\t%-${album_l}.${album_l}s\t%-s\n", $entry->{Track},$entry->{Title}, $entry->{Artist}, $entry->{Album}, $entry->{uri};
+ push @output, $in;
+ }
+ my $out = backend_call(\@output);
+ my $uri = (split /[\t\n]/, $out)[-1];
+ my $songinfo = $mpd->search('filename' => $uri);
+
+ my $artist=$songinfo->{Artist};
+ my $album=$songinfo->{Album};
+ my $title=$songinfo->{Title};
+ my $track=$songinfo->{Track};
+ my $date=$songinfo->{Date};
+ print "::: Selected \"$title\" from artist \"$artist\" of album \"$album\"\n";
+
+ my @action_items = ("Add\n", "Insert\n", "Replace\n");
+ my $action = backend_call(\@action_items);
+
+ if ($action eq "Add\n") {
+ print "debug test text";
+ print STDERR "==> Adding selected track to current playlist\n";
+ $mpd->search_add('Artist' => $artist, 'Album' => $album, 'Title' => $title, 'Date' => $date);
+ }
+ elsif ($action eq "Replace\n") {
+ print STDERR "==> Replacing current playlist with selected track\n";
+ $mpd->clear();
+ $mpd->search_add('Artist' => $artist, 'Album' => $album, 'Title' => $title, 'Date' => $date);
+ $mpd->play();
+ }
+}
+
+
+main;
diff --git a/clerk_fzf/Makefile b/clerk_fzf/Makefile
deleted file mode 100644
index f2f7abc..0000000
--- a/clerk_fzf/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-ifndef PREFIX
- PREFIX=/usr/local
-endif
-
-install:
- install -Dm755 clerk_fzf $(DESTDIR)$(PREFIX)/bin/clerk_fzf
- install -Dm644 tmux.clerk $(DESTDIR)/etc/clerk/tmux.conf
- install -Dm644 clerk_fzf.conf $(DESTDIR)/etc/clerk_fzf.conf
-
diff --git a/clerk_fzf/clerk_fzf b/clerk_fzf/clerk_fzf
deleted file mode 100755
index 81f53c7..0000000
--- a/clerk_fzf/clerk_fzf
+++ /dev/null
@@ -1,381 +0,0 @@
-#!/usr/bin/env bash
-
-TMUX_TMPDIR="/tmp/clerk/tmux"
-
-# default tmux config
-tmux_config="/etc/clerk/tmux.conf"
-
-# set default settings
-script="$0 $1"
-random_artist="albumartist"
-shuf=$([[ "$OSTYPE" == "darwin"* ]] && echo 'gshuf' || echo 'shuf')
-value=20
-# table customization
-track_width="2"
-title_width="40"
-artist_width="50"
-date_width="6"
-# album is much longer in order to keep filename off screen
-album_width="200"
-pl_title_width="110"
-
-# read global config
-if [[ -f "/etc/clerk_fzf.conf" ]]; then
- source /etc/clerk_fzf.conf
-fi
-
-# create config dir, if needed
-if [[ ! -d $HOME/.config/clerk ]]; then
- mkdir $HOME/.config/clerk
-fi
-
-# read user config
-if [[ -f "$HOME/.config/clerk/clerk_fzf.conf" ]]; then
- source $HOME/.config/clerk/clerk_fzf.conf
-fi
-
-if [[ -n $mpd_host ]]; then
- if [[ -n $mpd_password ]]; then
- export MPD_HOST="${mpd_password}@${mpd_host}"
- else
- export MPD_HOST="${mpd_host}"
- fi
-fi
-
-if [[ -n $mpd_port ]]; then
- ┆ export MPD_PORT="${mpd_port}"
-fi
-
-
-date=$(mpc stats | grep 'DB Updated: ')
-file="$HOME/.config/clerk/.lastupdate"
-if [ "$(< $file)" = "$date" ] && [ -f "$file" ] ; then
- :
-else
- updateCache
- date=$(mpc stats | grep 'DB Updated: ')
- echo "${date}" > "${file}"
-fi
-
-albums () {
- script="$0 --albums"
- tracklist="$(cat ~/.config/clerk/albums.cache | fzf --no-sort -m -e --reverse -i --with-nth=1,2,3 -d '\t' --tabstop=4 +s --ansi --bind "ctrl-a:select-all,ctrl-n:deselect-all")"
- val=$?
- if [[ $val -eq 130 ]]; then
- albums
- fi
- track="$(echo "${tracklist}" | gawk -F "\t" '{print $NF}')"
- actions
-}
-
-latest () {
- script="$0 --latest"
- tracklist=$(cat ~/.config/clerk/latest.cache | fzf --no-sort -m -e --reverse -i --with-nth=1,2,3 -d '\t' --tabstop=4 +s --ansi --bind "ctrl-a:select-all,ctrl-n:deselect-all")
- val=$?
- if [[ $val -eq 130 ]]; then
- latest
- fi
- track="$(echo "${tracklist}" | gawk -F "\t" '{print $NF}')"
- actions
-}
-
-tracks () {
- script="$0 --tracks"
- tracklist=$(cat ~/.config/clerk/tracks.cache | fzf -m --reverse -i -e --with-nth=1,2,3,4,5 -d '\t' --tabstop=4 +s --ansi --bind "ctrl-a:select-all,ctrl-n:deselect-all")
- val=$?
- if [[ $val -eq 130 ]]; then
- tracks
- fi
- if [[ $tracklist == "< Go to Albumlist"* ]]; then
- latest
- fi
- track="$(echo "${tracklist}" | gawk -F "\t" '{print $NF}')"
- actions
-}
-
-actions () {
- action=$(echo -e "1. Replace\n2. Add\n3. Insert" | fzf --reverse -i --header="Choose Action or quit with ESC" --inline-info)
-
- if [[ $action == "1. Replace" ]]; then
- mpc clear > /dev/null
- echo "${track}" | while read line; do
- mpc add "${line}" > /dev/null
- done
- mpc play > /dev/null
- elif [[ $action == "2. Add" ]]; then
- echo "${track}" | while read line; do
- mpc add "${line}" > /dev/null
- done
- elif [[ $action == "3. Insert" ]]; then
- echo "${track}" | while read line; do
- mpc insert "${line}" > /dev/null
- done
- elif [[ $action -eq 130 ]]; then
- exit
- fi
- tmux findw -t music queue
- $(${script})
-}
-
-playRandomAlbum () {
- mpc clear > /dev/null
- artist="$(mpc list "albumartist" | $shuf -n 1)"
- album="$(mpc list album "albumartist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "albumartist" "$artist" > /dev/null;
- mpc play > /dev/null
- tmux findw -t music queue
-}
-
-# same for tracks, no artist should be preferred because it has more tracks.
-playRandomTracks () {
- mpc clear > /dev/null
- artist="$(mpc list "$random_artist" | $shuf -n 1)"
- album="$(mpc list album "$random_artist" "$artist" | $shuf -n 1)"
- title="$(mpc list title album "$album" "$random_artist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "$random_artist" "$artist" title "$title" > /dev/null
- mpc play > /dev/null
-
- n=0; while (( n++ < $value -1 )); do
- artist="$(mpc list "$random_artist" | $shuf -n 1)"
- album="$(mpc list album "$random_artist" "$artist" | $shuf -n 1)"
- title="$(mpc list title album "$album" "$random_artist" "$artist" | $shuf -n 1)"
- mpc findadd album "$album" "$random_artist" "$artist" title "$title" > /dev/null
- done
- mpc play > /dev/null
- tmux findw -t music queue
-}
-
-fix_date_format() {
- # provided by Thorsten Wißmann:
- # https://github.com/t-wissmann/dotfiles/blob/master/menu/rofi-mpd.sh
- # reformats the date given in column $1 from format %c of locale LC_TIME=C
- # (see man strftime) to the format specified in argument $2 column indices
- # start with 1
- column_index="$1"
- gawk -F $'\t' '
- # parse a date which was formated using %c to unix time
- BEGIN {
- # generated by the following bash one-liner:
- # for i in {1..12} ; do LC_TIME=C date -d "1972-$i-01" +month2num[\"%b\"]\ =\ %_m ; done
- month2num["Jan"] = 1
- month2num["Feb"] = 2
- month2num["Mar"] = 3
- month2num["Apr"] = 4
- month2num["May"] = 5
- month2num["Jun"] = 6
- month2num["Jul"] = 7
- month2num["Aug"] = 8
- month2num["Sep"] = 9
- month2num["Oct"] = 10
- month2num["Nov"] = 11
- month2num["Dec"] = 12
- }
- function reformat_c_date(str) {
- monthname = gensub(/^([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)$/, "\\2", "g", str)
- monthnum = month2num[monthname]
- nicedate = gensub(/^([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)[ ]+([^ ]*)$/, "\\5 " monthnum " \\3 \\4", "g", str)
- nicedate = gensub(/:/, " ", "g", nicedate)
- return nicedate
- }
- {
- # modify the $column_index-th field
- $'"$1"' = strftime("'"$2"'", mktime(reformat_c_date($'"$1"')))
- print $0
- }
- '
-}
-
-updateCache () {
- notify-send "clerk" "updating cache files"
- cd $HOME/.config/clerk
- rm -f *.cache
-
- mpc --format '%mtime%\t[%albumartist%|%artist%] ○ (%date%) ○ %album% [(CD %disc%)] ○ %file%' \
- search filename '' \
- | fix_date_format 1 '%Y-%m-%d-%H:%M:%S' \
- | sort -nr \
- | gawk '{for (i=2; i<NF; i++) printf $i " "; print $NF }' \
- | perl -ne 'print unless $seen{$_}++' \
- | sed 's:/[^/]*$::' | awk -F ' ○ ' '!seen[$1 $2 $3 $4]++' \
- | uniq \
- | gawk -F ' ○ ' '{ printf "%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.300s\n", $1, $2, $3, $4 }' \
- > $HOME/.config/clerk/latest.cache
- mpc --format '[%albumartist%|%artist%]\t(%date%)\t%album% [(CD %disc%)]\t%file%' \
- search filename '' \
- | sed 's:/[^/]*$::' \
- | awk -F '\t' '!seen[$1 $2 $3 $4]++' \
- | sort \
- | gawk -F '\t' '{ printf "%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.300s\n", $1, $2, $3, $4 }' \
- > $HOME/.config/clerk/albums.cache
- mpc --format '%track%\t%title%\t%artist%\t(%date%)\t%album%\t%file%' \
- search filename '' \
- | gawk -F '\t' '{ printf "%-"'${track_width}'"."'${track_width}'"s\t%-"'${title_width}'"."'${title_width}'"s\t%-"'${artist_width}'"."'${artist_width}'"s\t%-"'${date_width}'"."'${date_width}'"s\t%-"'${album_width}'"."'${album_width}'"s\t%.500s\n", $1, $2, $3, $4, $5, $6 }' \
- > $HOME/.config/clerk/tracks.cache
- notify-send "clerk" "finished updating cache files"
- date=$(mpc stats | grep 'DB Updated: ')
- file="$HOME/.config/clerk/.lastupdate"
- echo "${date}" > "${file}"
-# | gawk -F '\t' '{ printf "%.2s\t%.40s\t%.40s\t%.200s\t%.500s\n", $1, $2, $3, $4, $5, $6 }' \
- if [[ $forceupdate == "true" ]]; then
- exit
- fi
-}
-
-clerk_update () {
-screen=$(tmux list-panes -F "#W")
-
-if [[ $1 == "--create-caches" ]]; then
- if [[ $animation == "1" ]]; then
- tmux new-session -s notify -n 'Updating Cache Files. Please wait a moment' -d 'sl'
- else
- tmux new-session -s notify -n 'Updating Cache Files. Please wait a moment' -d 'sh'
- fi
- tmux switchc -t notify
- clerk_fzf --caches &
- pid=$!
- wait $pid
-fi
-
-tmux new-session -s music2 -n albums -d 'clerk_fzf --albums'
-tmux new-window -t music2 -n tracks 'clerk_fzf --tracks'
-tmux new-window -t music2 -n latest 'clerk_fzf --latest'
-tmux new-window -t music2 -n playlists 'clerk_fzf --playlists'
-tmux new-window -t music2 -n queue "${player}"
-
-tmux rename-session -t music music_old
-tmux rename-session -t music2 music
-tmux switchc -t music
-tmux findw -t music ${screen}
-tmux kill-session -t music_old
-
-if [[ $1 == "--create-caches" ]]; then
- tmux kill-session -t notify
-fi
-}
-
-playlists () {
- pls=(
- "$(mpc lsplaylists)"
- "---"
- "Save current Queue as Playlist")
-
-
- plsmenu="$(printf '%s\n' "${pls[@]}" | fzf --no-sort -m -e --reverse -i --ansi --bind "ctrl-a:select-all,ctrl-n:deselect-all")"
- val=$?
- if [[ $val -eq 130 ]]; then
- playlists
- fi
- if [[ $plsmenu == "Save current Queue as Playlist" ]]; then
- mpc save "$(date +'%Y-%m-%d_%H:%M:%S')"
- tmux findw -t music queue
- $(${script})
- else
- playlistactions
- fi
-}
-
-playlistactions () {
- menu_content=("Load Playlist"
- "Append Playlist"
- "Delete Playlist"
- "Cancel")
-
- plmenu="$(printf '%s\n' "${menu_content[@]}" | fzf -m -e --reverse -i --ansi)"
-
- if [[ $val -eq 130 ]]
- then
- tmux findw -t playlists
- fi
-
- case $plmenu in
- "Load Playlist")
- mpc clear > /dev/null; mpc load "${plsmenu}" > /dev/null; mpc play > /dev/null
- tmux findw -t music queue
- $(${script})
- ;;
- "Add Playlist")
- mpc load "${plsmenu}" > /dev/null
- tmux findw -t music queue
- $(${script})
- ;;
- "Delete Playlist")
- del_content=("Yes"
- "No")
-
- delmenu="$(printf '%s\n' "${del_content[@]}" | fzf --reverse -i --ansi --header="Delete Playlist ${plsmenu}?")"
-
- case $delmenu in
- "Yes")
- mpc rm "${plsmenu}"
- playlists
- ;;
- "No")
- playlists
- ;;
- esac
- ;;
- "Cancel")
- playlists
- ;;
- esac
-}
-
-clerk_help () {
- grep -A14 '^## Key Bindings' "${tmux_config}" | awk -F '-n ' '{ print $2 }' | \
- sed 's/clerk_fzf --//g; s/run-shell//g; s/findw//g; s/\x27//g; s/--quiet//g; s/mpc //g; s/clerk_update --create-caches/create caches/; s/_/ /g; s/kill-session -t music/ kill session/g; s/ /\t/g' | \
- sed 's/clerk update/update views/' | column -t -s $'\t'
-}
-
-
-
-tmux_config="/etc/clerk/tmux.conf"
-
-# read global config
-if [[ -f "/etc/clerk_fzf.conf" ]]; then
- source /etc/clerk_fzf.conf
-fi
-
-clerk_start () {
-export TMUX_TMPDIR="/tmp/clerk/tmux"
-
-if [[ ! -d "${TMUX_TMPDIR}" ]]; then
- mkdir -p "${TMUX_TMPDIR}"
-fi
-main
-}
-
-main() {
- tmux has-session -t music
- if [ $? != 0 ]; then
- tmux -f "${tmux_config}" new-session -s music -n albums -d 'clerk_fzf --albums'
- tmux new-window -t music -n tracks 'clerk_fzf --tracks'
- tmux new-window -t music -n latest 'clerk_fzf --latest'
- tmux new-window -t music -n playlists 'clerk_fzf --playlists'
- tmux new-window -t music -n queue "${player}"
- fi
- tmux attach -t music
-}
-
-helpCmd () {
- cat <<'EOF'
-clerk: MPD Interface using fzf and tmux
-Copyright © 2016 Rasmus Steinke
-
---help, -h this help message
---kill kill running clerk sessions
-EOF
-}
-
-case $1 in
- "--help | -h") helpCmd;;
- "--kill") tmux kill-session -t music;;
- "--albums") albums;;
- "--tracks") tracks;;
- "--latest") latest;;
- "--random_album") playRandomAlbum;;
- "--random_tracks") playRandomTracks;;
- "--help") clerk_help;;
- "--caches") updateCache;;
- "--playlists") playlists;;
- *) clerk_start
-esac
diff --git a/clerk_fzf/clerk_fzf.conf b/clerk_fzf/clerk_fzf.conf
deleted file mode 100644
index 8188721..0000000
--- a/clerk_fzf/clerk_fzf.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-
-# always use the provided tmux config to change values
-# especially make sure, the Bindings section is complete
-# tmux config to use
-tmux_config="/etc/clerk/tmux.conf"
-
-# custom mpd host
-mpd_host=
-mpd_port=
-mpd_password=
-
-
-script="$0 $1"
-random_artist="albumartist"
-shuf=$([[ "$OSTYPE" == "darwin"* ]] && echo 'gshuf' || echo 'shuf')
-
-# number of tracks to add for random songs
-value=20
-
-# table customization
-track_width="2"
-title_width="40"
-artist_width="50"
-date_width="6"
-pl_title_width="110"
-
-# album is much longer in order to keep filename off screen
-album_width="200"
-
-# player used for queue
-player=ncmpcpp
-
-# animate updates
-animation=1
diff --git a/clerk_fzf/tmux.clerk b/clerk_fzf/tmux.clerk
deleted file mode 100644
index 9081e2a..0000000
--- a/clerk_fzf/tmux.clerk
+++ /dev/null
@@ -1,54 +0,0 @@
-# Status bar
-set-option -g status-position top
-set -g status-interval 30
-set -g status-justify centre
-set -g status-left-length 40
-set -g status-left ''
-set -g status-right ''
-
-
-# Colors
-set -g status-bg colour235
-set -g status-fg default
-setw -g window-status-current-bg default
-setw -g window-status-current-fg default
-setw -g window-status-current-attr dim
-setw -g window-status-bg default
-setw -g window-status-fg white
-setw -g window-status-attr bright
-setw -g window-status-format ' #[fg=colour243,bold]#W '
-setw -g window-status-current-format ' #[fg=yellow,bold]#[bg=colour235]#W '
-
-# !Dont remove this keybinding header! (used to generate help)
-## Key Bindings
-bind-key -n F1 findw albums
-bind-key -n F2 findw tracks
-bind-key -n F3 findw latest
-bind-key -n F4 findw playlists
-bind-key -n F5 findw queue
-bind-key -n C-F5 run-shell 'mpc prev --quiet'
-bind-key -n C-F6 run-shell 'mpc toggle --quiet'
-bind-key -n C-F7 run-shell 'mpc stop > /dev/null'
-bind-key -n C-F8 run-shell 'mpc next --quiet'
-bind-key -n C-F12 run-shell 'forceupdate="true" clerk_fzf --update'
-bind-key -n F12 run-shell 'clerk_fzf --update'
-bind-key -n F9 run-shell 'clerk_fzf --random_album'
-bind-key -n F10 run-shell 'clerk_fzf --random_tracks'
-bind-key -n C-h run-shell 'clerk_fzf --help'
-bind-key -n C-q kill-session -t music
-
-
-# tmux options
-set -g set-titles on
-set -g set-titles-string '#T'
-set -g default-terminal "screen-256color"
-setw -g mode-keys vi
-set -sg escape-time 1
-set -g repeat-time 1000
-set -g base-index 1
-setw -g pane-base-index 1
-set -g renumber-windows on
-unbind C-b
-set -g prefix C-a
-unbind C-p
-bind C-p paste-buffer
diff --git a/clerk_helper b/clerk_helper
deleted file mode 100755
index 4418cb6..0000000
--- a/clerk_helper
+++ /dev/null
@@ -1,366 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-import os
-import json
-import argparse
-from mpd import MPDClient
-
-client = MPDClient()
-
-mpd_host = 'localhost'
-mpd_port = '6600'
-mpd_pass = ''
-
-if 'MPD_HOST' in os.environ:
- mpd_connection = os.environ['MPD_HOST'].split('@')
- if len(mpd_connection) == 1:
- mpd_host = mpd_connection[0]
- elif len(mpd_connection) == 2:
- mpd_host = mpd_connection[1]
- mpd_pass = mpd_connection[0]
- else:
- print('Unable to parse MPD_HOST, using defaults')
-
-if 'MPD_PORT' in os.environ:
- mpd_port = os.environ['MPD_PORT']
-
-client.connect(mpd_host, mpd_port)
-if mpd_pass:
- client.password(mpd_pass)
-
-
-def track_sort(track_num):
- if track_num == '':
- return 0
- else:
- return int(track_num.split('/')[0])
-
-
-def loadjson(fname):
- with open(fname) as data_file:
- data = json.load(data_file)
- return data
-
-def extract_key(entry):
- return entry["albumartist"] + entry["album"] + entry["date"]
-
-def hashdata(jdata):
- hashmap = {}
- for i in range(len(jdata)):
- key = extract_key(jdata[i])
- hashmap[key] = i
- return hashmap
-
-def has_entry(fastlist, albumartist, album, date):
- key = albumartist+album+date
- if key in fastlist[1]:
- return True
- else:
- return False
-
-def get_entry(fastlist, albumartist, album, date):
- return fastlist[0][fastlist[1][albumartist+album+date]]
-
-def load_fastlist(fname):
- jdata = loadjson(fname)
- hdata = hashdata(jdata)
- return (jdata, hdata)
-
-def save_fastlist(fname, fastlist):
- with open(fname, "w") as data_file:
- json.dump(fastlist[0], data_file, ensure_ascii=False)
-
-def append_entry(fastlist, entry):
- index = len(fastlist[0])
- fastlist[0].append(entry)
- fastlist[1][extract_key(entry)] = index
-
-def prune_fastlist(fastlist, mpdcachefile):
- mpdlist = loadjson(mpdcachefile)
- data = fastlist[0]
- new = []
- for e in mpdlist:
- key = (e["albumartist"], e["album"], e["date"])
- if has_entry(fastlist, *key):
- entry = get_entry(fastlist, *key)
- new.append(entry)
- newhdata = hashdata(new)
- return (new, newhdata)
-
-def rateAlbum(args):
- try:
- fastlist = load_fastlist(os.getenv('db_rate_album'))
- entry = get_entry(fastlist, args.artist, args.album, args.date)
- entry["rating"] = args.rating
- except KeyError:
- entry = {'albumartist': args.artist, 'album': args.album, 'date': args.date, 'disc': os.getenv('disc'), 'track': os.getenv('track'), 'rating': args.rating}
- append_entry(fastlist, entry)
- except FileNotFoundError:
- fastlist = ([], {})
- entry = {'albumartist': args.artist, 'album': args.album, 'date': args.date, 'disc': os.getenv('disc'), 'track': os.getenv('track'), 'rating': args.rating}
- fastlist[0].append(entry)
- finally:
- save_fastlist(os.getenv('db_rate_album'), fastlist)
- uri = client.find('albumartist', args.artist, 'album', args.album, 'date', args.date, 'track', os.getenv('track'), 'disc', os.getenv('disc'))
- for i in uri:
- client.sticker_set("song", i['file'], "albumrating", args.rating)
-
-
-
-def loadjsonTrack(fname):
- with open(fname) as data_file:
- data = json.load(data_file)
- return data
-
-def extract_keyTrack(entry):
- return entry["artist"] + entry["album"] + entry["track"] + entry["title"]
-
-def hashdataTrack(jdata):
- hashmap = {}
- for i in range(len(jdata)):
- key = extract_keyTrack(jdata[i])
- hashmap[key] = i
- return hashmap
-
-def has_entryTrack(fastlist, artist, album, track, title):
- key = artist+album+track+title
- if key in fastlist[1]:
- return True
- else:
- return False
-
-def get_entryTrack(fastlist, artist, album, track, title):
- return fastlist[0][fastlist[1][artist+album+track+title]]
-
-def load_fastlistTrack(fname):
- jdata = loadjsonTrack(fname)
- hdata = hashdataTrack(jdata)
- return (jdata, hdata)
-
-def save_fastlistTrack(fname, fastlist):
- with open(fname, "w") as data_file:
- json.dump(fastlist[0], data_file, ensure_ascii=False)
-
-def append_entryTrack(fastlist, entry):
- index = len(fastlist[0])
- fastlist[0].append(entry)
- fastlist[1][extract_keyTrack(entry)] = index
-
-def prune_fastlistTrack(fastlist, mpdcachefile):
- mpdlist = loadjsonTrack(mpdcachefile)
- data = fastlist[0]
- new = []
- for e in mpdlist:
- key = (e["artist"], e["album"], e["track"], e["title"])
- if has_entryTrack(fastlist, *key):
- entry = get_entryTrack(fastlist, *key)
- new.append(entry)
- newhdata = hashdataTrack(new)
- return (new, newhdata)
-
-def rateTrack(args):
- """ rate a single track: create/update json track database and update mpd
- sticker database
- """
- try:
- fastlist = load_fastlistTrack(os.getenv('db_rate_track'))
- entry = get_entryTrack(fastlist, args.artist, args.album, args.track, args.title)
- entry["rating"] = args.rating
- except KeyError:
- entry = {'artist': args.artist, 'album': args.album, 'track': args.track, 'title': args.title, 'rating': args.rating}
- append_entryTrack(fastlist, entry)
- except FileNotFoundError:
- fastlist = ([], {})
- entry = {'artist': args.artist, 'album': args.album, 'track': args.track, 'title': args.title, 'rating': args.rating}
- fastlist[0].append(entry)
- finally:
- save_fastlistTrack(os.getenv('db_rate_track'), fastlist)
- uri = client.find('artist', args.artist, 'album', args.album, 'track', args.track, 'title', args.title)
- for i in uri:
- client.sticker_set("song", i['file'], "rating", args.rating)
-
-
-
-def cleanRatings(args):
- fastlist = load_fastlist(os.getenv('db_rate_album'))
- prunedlist = prune_fastlist(fastlist, os.getenv('cache_album')+'.json')
- save_fastlist(os.getenv('db_rate_album'), prunedlist)
- fastlist = load_fastlistTrack(os.getenv('db_rate_track'))
- prunedlist = prune_fastlistTrack(fastlist, os.getenv('cache_track')+'.json')
- save_fastlistTrack(os.getenv('db_rate_track'), prunedlist)
-
-
-def importTrackRatings(args):
- tracklist = client.sticker_find('song', "", 'rating')
- rated_tracks = []
- for i in tracklist:
- rating_temp = i['sticker']
- rating = rating_temp.split('=')[1]
- for x in client.find('file', i['file']):
- artist = x['artist']
- title = x['title']
- album = x['album']
- if isinstance(x['track'], list):
- track = x['track'][0]
- else:
- track = x['track']
- entry = {'artist': artist, 'album': album, 'track': track, 'title': title, 'rating': rating}
- rated_tracks.append(entry)
- with open(os.getenv('db_rate_track'), 'w') as ratingfile:
- json.dump(rated_tracks, ratingfile)
-
-def importAlbumRatings(args):
- ratelist = client.sticker_find('song', "", 'albumrating')
- rated_tracks = []
- for i in ratelist:
- rating_temp = i['sticker']
- rating = rating_temp.split('=')[1]
- for x in client.find('file', i['file']):
- artist = x['albumartist']
- album = x['album']
- date = x['date']
- if isinstance(x['track'], list):
- track = x['track'][0]
- else:
- track = x['track']
- if 'disc' in x:
- if isinstance(x['disc'], list):
- disc = x['disc'][0]
- else:
- disc = x['disc']
- else:
- disc = ""
- entry = {'albumartist': artist, 'track': track, 'album': album, 'date': date, 'disc': disc, 'rating': rating}
- rated_tracks.append(entry)
- with open(os.getenv('db_rate_album'), 'w') as ratingfile:
- json.dump(rated_tracks, ratingfile)
-
-def sendStickers(args):
- with open(os.getenv('db_rate_track')) as cache_file:
- content = json.load(cache_file)
- for track in content:
- uri = client.find('artist', track['artist'], 'album', track['album'], 'title', track['title'], 'track', track['track'])
- rating = track['rating']
- for x in uri:
- client.sticker_set('song', x['file'], 'rating', rating)
- print("Imported Rating of "+rating+" for file "+x['file'])
-
- with open(os.getenv('db_rate_album')) as cache_file:
- content = json.load(cache_file)
- for album in content:
- uri = client.find('albumartist', album['albumartist'], 'album', album['album'], 'disc', album['disc'], 'date', album['date'], 'track', album['track'])
- rating = album['rating']
- for x in uri:
- client.sticker_set('song', x['file'], 'albumrating', rating)
- print("Imported Rating of "+rating+" for album "+album['albumartist']+" - "+album['album'])
-
-
-def getAlbumRatings(args):
- ratings = client.sticker_find('song', '', 'albumrating')
- albumlist = []
- for x in ratings:
- rating = x['sticker']
- albums = client.find('file', x['file'])
- for album in albums:
- entry = {'albumartist': album['albumartist'], 'date': album['date'], 'album': album['album'], 'track': album['track'], 'rating': rating}
- print(entry['albumartist']+os.getenv('separator')+entry['date']+os.getenv('separator')+entry['album']+os.getenv('separator')+entry['rating'])
-
-
-def readComments(args):
- args = vars(args)
-
- comments = (client.readcomments(sys.stdin.read()[:-1]))
- for key, value in sorted(comments.items()):
- print('%s : %s' % (key, value))
-
-def prioSong(args):
- for line in sys.stdin.read().splitlines():
- client.prio(255, line)
-
-
-def savetoPlaylist(args):
- for line in sys.stdin:
- if line.strip():
- line = line.strip()
- client.playlistadd("clerk", line)
-# print(line, end="")
-
-def getArtistAlbums(args):
- albums=client.find('artist', args.artist)
- albumlist=[]
- for album in albums:
- albumlist.append(album['date']+os.getenv('separator')+album['album'])
- uni=set(albumlist)
- result = list(uni)
- sorted_results = sorted(result)
- for x in sorted_results:
- print("(Album) "+x)
-
-def getArtistTracks(args):
- tracks=client.find('artist', args.artist)
- tracklist=[]
- for track in tracks:
- entry = {'track': track['track'], 'title': track['title']}
- tracklist.append(entry)
- for x in tracklist:
- print("(Song) "+x['track']+os.getenv('separator')+x['title'])
-
-# create commandline arguments
-parser = argparse.ArgumentParser(prog='clerk_helper', description='Companion script for clerk')
-subparsers = parser.add_subparsers()
-
-parser_prio = subparsers.add_parser('prio', help="prioritize song")
-parser_prio.set_defaults(call=prioSong)
-
-parser_readcomments = subparsers.add_parser('readcomments', help="show all tags of current song")
-parser_readcomments.set_defaults(call=readComments)
-
-parser_saveto = subparsers.add_parser('saveto', help="save stdin to playlist \"clerk\"")
-parser_saveto.set_defaults(call=savetoPlaylist)
-
-parser_ratealbum = subparsers.add_parser('ratealbum', help="rate current Album")
-parser_ratealbum.add_argument('artist', action="store")
-parser_ratealbum.add_argument('album', action="store")
-parser_ratealbum.add_argument('date', action="store")
-parser_ratealbum.add_argument('rating', action="store")
-parser_ratealbum.set_defaults(call=rateAlbum)
-
-parser_ratetrack = subparsers.add_parser('ratetrack', help="rate current Track")
-parser_ratetrack.add_argument('artist', action="store")
-parser_ratetrack.add_argument('album', action="store")
-parser_ratetrack.add_argument('track', action="store")
-parser_ratetrack.add_argument('title', action="store")
-parser_ratetrack.add_argument('rating', action="store")
-parser_ratetrack.set_defaults(call=rateTrack)
-
-parser_cleanratings = subparsers.add_parser('cleanratings', help="Clean up Ratings file.")
-parser_cleanratings.set_defaults(call=cleanRatings)
-
-parser_importtrackratings = subparsers.add_parser('importtrackratings', help="Import track ratings from mpd stickers")
-parser_importtrackratings.set_defaults(call=importTrackRatings)
-
-parser_importalbumratings = subparsers.add_parser('importalbumratings', help="Import album ratings from mpd stickers")
-parser_importalbumratings.set_defaults(call=importAlbumRatings)
-
-parser_sendstickers = subparsers.add_parser('sendstickers', help="Send clerk ratings to mpd")
-parser_sendstickers.set_defaults(call=sendStickers)
-
-parser_getalbumratings = subparsers.add_parser('getalbumratings', help="Print Album Ratings")
-parser_getalbumratings.set_defaults(call=getAlbumRatings)
-
-parser_getartistalbums = subparsers.add_parser('getartistalbums', help="Print all albums by Artist")
-parser_getartistalbums.add_argument('artist', action="store")
-parser_getartistalbums.set_defaults(call=getArtistAlbums)
-
-parser_getartisttracks = subparsers.add_parser('getartisttracks', help="Print all tracks by Artist")
-parser_getartisttracks.add_argument('artist', action="store")
-parser_getartisttracks.set_defaults(call=getArtistTracks)
-
-# parse arguments (thanks jat)
-args = parser.parse_args()
-
-try:
- args.call(args)
-except AttributeError:
- print("No arguments given. Try clerk_helper -h")
diff --git a/completion/_clerk b/completion/_clerk
deleted file mode 100644
index b7282b7..0000000
--- a/completion/_clerk
+++ /dev/null
@@ -1,112 +0,0 @@
-#compdef clerk
-
-local curcontext="$curcontext" state line ret=1
-typeset -A opt_args
-
-_arguments \
- '1: :->option'\
- '*: :->args' && ret=0
-
-case $state in
- option)
- _arguments -S \
- "-h[output help message]" \
- "--help[output help message]" \
- "--current[show currently playing track in the clerk interface]" \
- "--update[update album/track caches]" \
- "--add[open clerk interface in different mode to add music to the current queue]" \
- "--random[play random tracks or album from the cli]" \
- "--queue[manage the current queue]" \
- "--playlist[save selection to playlist/load playlist from the clerk interface]" \
- "--rss[load poadcast]" \
- "--rate[rate albums or track]" \
- "--backup[backup ratings from mpd sticker database to json file]" \
- "--restore[restore ratings back to mpd sticker database]" \
- "--lastfm[last.fm operations]"
- ret=0
- ;;
- args)
- case $words[2] in
- --add)
- if (( CURRENT == 3 )); then
- _values "add parameters" \
- "track[browse music by track mode]" \
- "album[browse music by album mode]" \
- "latest[browse music by most recently added album mode]"
- fi
- ret=0
- ;;
- --random)
- if (( CURRENT == 3 )); then
- _values "random parameters" \
- "track[some random tracks]" \
- "album[one random album]"
- fi
- ret=0
- ;;
- --queue)
- if (( CURRENT == 3 )); then
- _values "queue parameters" \
- "show[show the current queue in the clerk interface]" \
- "suspend[freeze the current playlist and save it]" \
- "resume[load the last suspended playlist]"
- fi
- ret=0
- ;;
- --playlist)
- if (( CURRENT == 3 )); then
- _values "playlist parameters" \
- "savealbum[save album to the 'clerk' playlist]" \
- "savetrack[save track to the 'clerk' playlist]" \
- "savelast[save latest album to the 'clerk' playlist]" \
- "load[choose a playlist to load]"
- fi
- ret=0
- ;;
- --rate)
- if (( CURRENT == 3 )); then
- _values 'rate parameters' \
- 'track[rate the current track from the clerk interface]' \
- 'album[rate the current album from the clerk interface]' \
- 'instant[rate the current track {1-10} from the cli]' \
- 'load[play random rated (6 and over) tracks]'
- else
- case $words[3] in
- instant)
- _values 'rate' '1' '2' '3' '4' '5' '6' '7' '8' '9' '10'
- ret=0
- ;;
- esac
- fi
- ret=0
- ;;
- --backup)
- if (( CURRENT == 3 )); then
- _values "backup parameters" \
- "album[backup album ratings]" \
- "track[backup track ratings]"
- fi
- ret=0
- ;;
- --restore)
- if (( CURRENT == 3 )); then
- _values "restore parameters" \
- "album[restore album ratings]" \
- "track[restore track ratings]"
- fi
- ret=0
- ;;
- --lastfm)
- if (( CURRENT == 3 )); then
- _values "lastfm parameters" \
- "toggle[toogle (on/off) last.fm]" \
- "check[print last.fm status]" \
- "love[love current playing track]"
- fi
- ret=0
- ;;
- esac
- ;;
-esac
-
-return ret
diff --git a/config.clerk b/config.clerk
deleted file mode 100644
index 467878e..0000000
--- a/config.clerk
+++ /dev/null
@@ -1,84 +0,0 @@
-# rofi command. Make sure to have "$@" as last argument
-_rofi () {
- rofi -i -regex -lines 30 -width 1500 -no-levenshtein-sort "$@"
-}
-
-# custom mpd host
-mpd_host=
-mpd_port=
-mpd_password=
-
-# Number of Songs to be added for "Random Tracks"
-value=20
-
-# stop on suspend?
-stop_after_suspend=no
-
-# exit after addition of tracks/albums
-exit_after_add=no
-
-# use artist or albumartist for random tracks
-random_artist=artist
-
-# scrobbler to use. possible values: mpdscribble, mpdas
-scrobbler=mpdscribble
-
-# Fill these if scrobbler runs on a different host
-# set to 0 if mpdscribble runs locally
-ssh_lastfm=0
-ssh_host=
-
-# color of the help messages
-# leave empty for autodetection
-help_color=""
-
-# automatically save json file with track ratings
-auto_track_rating_backup=true
-
-# custom keybindings
-# global
-albumlist="Alt+F1"
-tracklist="Alt+F2"
-queue="Alt+F3"
-toggle="Alt+F6"
-prev="Alt+F5"
-next="Alt+F8"
-stop="Alt+F7"
-seek="Alt+f"
-nextalbum="Alt+Shift+F8"
-prevalbum="Alt+Shift+F5"
-
-# main menu
-help="Alt+h"
-
-# Adding of songs/albums
-add="Alt+1"
-insert="Alt+2"
-replace="Alt+3"
-rate="Alt+r"
-addplay="Alt+4"
-insertplay="Alt+5"
-savefav="Alt+s"
-
-# playlist menu
-# also used: rate
-delete="Alt+Delete"
-crop="Alt+x"
-clear="Alt+c"
-movedown="Alt+Down"
-moveup="Alt+Up"
-goalbum="Alt+a"
-gotrack="Alt+t"
-playlist="Alt+p"
-
-# table customization
-track_width="2"
-title_width="40"
-artist_width="40"
-date_width="6"
-# album is much longer in order to keep filename off screen
-album_width="200"
-
-# custom widths for playlist
-pl_title_width="60"
-pl_artist_width="40"