diff options
Diffstat (limited to 'segments/now_playing.sh')
-rwxr-xr-x | segments/now_playing.sh | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/segments/now_playing.sh b/segments/now_playing.sh deleted file mode 100755 index 6fdf251..0000000 --- a/segments/now_playing.sh +++ /dev/null @@ -1,274 +0,0 @@ -# Print current playing song in your music player of choice. - -source "${TMUX_POWERLINE_DIR_LIB}/text_roll.sh" - -TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT="40" -TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT="trim" -TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT="2" -TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT="localhost" -TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT="6600" -TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT="30" -TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT="%artist% - %title%" -TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT="♫" - -generate_segmentrc() { - read -d '' rccontents << EORC -# Music player to use. Can be any of {audacious, banshee, cmus, itunes, lastfm, mocp, mpd, mpd_simple, pithos, rdio, rhythmbox, spotify, spotify_wine}. -export TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER="" -# Maximum output length. -export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT}" -# How to handle too long strings. Can be {trim, roll}. -export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT}" -# Charcters per second to roll if rolling trim method is used. -export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}" - -# Hostname for MPD server in the format "[password@]host" -export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}" -# Port the MPD server is running on. -export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT}" -# Song display format for mpd_simple. See mpc(1) for delimiters. -export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT}" - -# Username for Last.fm if that music player is used. -export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME="" -# How often in seconds to update the data from last.fm. -export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT}" -# Fancy char to display before now playing track -export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT}" -EORC - echo "$rccontents" -} - -run_segment() { - __process_settings - - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER" ]; then - return 1 - fi - - local np - case "$TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER" in - "audacious") np=$(__np_audacious) ;; - "banshee") np=$(__np_banshee) ;; - "cmus") np=$(__np_cmus) ;; - "itunes") np=$(__np_itunes) ;; - "lastfm") np=$(__np_lastfm) ;; - "mocp") np=$(__np_mocp) ;; - "mpd") np=$(__np_mpd) ;; - "mpd_simple") np=$(__np_mpd_simple) ;; - "pithos") np=$(__np_pithos) ;; - "rdio") np=$(__np_rdio) ;; - "rhythmbox") np=$(__np_rhythmbox) ;; - "spotify") np=$(__np_spotify) ;; - "spotify_wine") np=$(__np_spotify_native) ;; - *) - echo "Unknown music player type [${TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER}]"; - return 1 - esac - local exitcode="$?" - if [ "${exitcode}" -ne 0 ]; then - return ${exitcode} - fi - if [ -n "$np" ]; then - case "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" in - "roll") - np=$(roll_text "${np}" ${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN} ${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}) - ;; - "trim") - np=${np:0:TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN} - ;; - esac - echo "${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR} ${np}" - fi - return 0 -} - -__process_settings() { - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT}" - fi - if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR" ]; then - export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT}" - fi -} - -__np_mpd() { - cd "$TMUX_POWERLINE_DIR_SEGMENTS" - - if [ ! -x "np_mpd" ]; then - make clean np_mpd &>/dev/null - fi - - if [ ! -x "np_mpd" ]; then - return 2 - fi - - np=$(MPD_HOST="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" MPD_PORT="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" ./np_mpd) - echo "$np" -} - -__np_mpd_simple() { - np=$(MPD_HOST="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" MPD_PORT="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" mpc current -f "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT" 2>&1) - if [ $? -eq 0 ] && [ -n "$np" ]; then - mpc | grep "paused" > /dev/null - if [ $? -eq 0 ]; then - return 1 - fi - echo "$np" - fi -} - - -__np_audacious() { - audacious_pid=$(pidof audacious) - if [ -n "$audacious_pid" ]; then - if $(audtool playback-playing); then - np=$(audtool current-song) - echo "$np" - fi - fi -} - -__np_banshee() { - banshee_pid=$(pidof banshee) - if [ -n "$banshee_pid" ]; then - banshee_status=$(banshee --query-current-state 2> /dev/null) - if [[ "$banshee_status" == "current-state: playing" ]]; then - np=$(banshee --query-artist --query-title | cut -d ":" -f2 | sed -e 's/ *$//g' -e 's/^ *//g'| sed -e ':a;N;$!ba;s/\n/ - /g' ) - echo "$np" - fi - fi -} - -__np_cmus() { - #cmus-remote returns EXIT_FAILURE/EXIT_SUCCESS depending on whether or not cmus is running. - if cmus-remote -Q > /dev/null 2>&1; then - status=$(cmus-remote -Q | grep "status" | cut -d ' ' -f 2) - artist=$(cmus-remote -Q | grep -m 1 "artist" | cut -d ' ' -f 3-) - title=$(cmus-remote -Q | grep "title" | cut -d ' ' -f 3-) - #The lines below works fine. Just uncomment them and add them - # in np below if you want the track number or album name. - #tracknumber=$(cmus-remote -Q | grep "tracknumber" | cut -d ' ' -f 3) - #album=$(cmus-remote -Q | grep "album" | cut -d ' ' -f 3-) - - np=$(echo "${artist} - ${title}") - - if [ "$status" == "playing" ]; then - echo "$np" - fi - fi -} - -__np_itunes() { - [ ! shell_is_osx ] && return 1 - np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_itunes.script) - echo "$np" -} - -__np_lastfm() { - local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/np_lastfm.txt" - if [ -f "$tmp_file" ]; then - if shell_is_osx || shell_is_bsd; then - last_update=$(stat -f "%m" ${tmp_file}) - elif shell_is_linux; then - last_update=$(stat -c "%Y" ${tmp_file}) - fi - time_now=$(date +%s) - - up_to_date=$(echo "(${time_now}-${last_update}) < ${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD}" | bc) - if [ "$up_to_date" -eq 1 ]; then - np=$(cat ${tmp_file}) - fi - fi - - if [ -z "$np" ]; then - np=$(curl --max-time 2 -s http://ws.audioscrobbler.com/1.0/user/${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME}/recenttracks.txt | head -n 1 | sed -e 's/^[0-9]*,//' | sed 's/\xe2\x80\x93/-/') - if [ "$?" -eq "0" ] && [ -n "$np" ]; then - echo "${np}" > $tmp_file - fi - fi - echo "$np" -} - -__np_pithos() { - if [ "$(dbus-send --reply-timeout=10 --print-reply --dest=net.kevinmehall.Pithos /net/kevinmehall/Pithos net.kevinmehall.Pithos.IsPlaying 2>/dev/null | grep boolean | cut -d' ' -f5)" == "true" ]; then - np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_pithos.py) - echo "$np" - fi -} - -__np_mocp() { - mocp_pid=$(pidof mocp) - if [ -n "$mocp_pid" ]; then - np=$(mocp -i | grep ^Title | sed "s/^Title://") - mocp_paused=$(mocp -i | grep ^State | sed "s/^State: //") - if [ -n "$np" -a "$mocp_paused" != "PAUSE" ]; then - echo "$np" - fi - fi -} - -__np_rdio() { - [ ! shell_is_osx ] && return 1 - np=$(osascript ${TMUX_POWERLINE_DIR_SEGMENTS}/np_rdio_mac.script) - echo "$np" -} - -__np_rhythmbox() { - rhythmbox_pid=$(pidof rhythmbox) - if [ -n "$rhythmbox_pid" ]; then - np=$(rhythmbox-client --no-start --print-playing) # Does not tell if the music is playing or paused. - rhythmbox_paused=$(xwininfo -root -tree | grep "$np" | sed "s/${np}//;s/ //g" | cut -f2 -d '"') - # TODO I cant produce the output "Not playing", using rhythmbox 2.97. - #STATUS=$(rhythmbox-client --no-start --print-playing) - if [[ "$rhythmbox_paused" != "(Paused)" ]]; then - echo "$np" - fi - fi -} - -__np_spotify() { - if shell_is_linux; then - metadata=$(dbus-send --reply-timeout=42 --print-reply --dest=org.mpris.MediaPlayer2.spotify / org.freedesktop.MediaPlayer2.GetMetadata 2>/dev/null) - if [ "$?" -eq 0 ] && [ -n "$metadata" ]; then - # TODO how do one express this with dbus-send? It works with qdbus but the problem is that it's probably not as common as dbus-send. - state=$(qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player PlaybackStatus) - if [[ $state == "Playing" ]]; then - artist=$(echo "$metadata" | grep -PA2 "string\s\"xesam:artist\"" | tail -1 | grep -Po "(?<=\").*(?=\")") - track=$(echo "$metadata" | grep -PA1 "string\s\"xesam:title\"" | tail -1 | grep -Po "(?<=\").*(?=\")") - np=$(echo "${artist} - ${track}") - fi - fi - elif shell_is_osx; then - np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_spotify_mac.script) - fi - echo "$np" -} - -__np_spotify_wine() { - [ ! shell_is_linux ] && return 1 - spotify_id=$(xwininfo -root -tree | grep '("spotify' | cut -f1 -d'"' | sed 's/ //g') - echo $spotify_id - if [ -n "$spotify_id" ]; then - np=$(xwininfo -id "$spotify_id" | grep "xwininfo.*Spotify -" | grep -Po "(?<=\"Spotify - ).*(?=\"$)") - echo "$np" - fi -} |