summaryrefslogtreecommitdiff
path: root/ar/.local/bin/statusbar/sb-music
blob: 1134d1241b1c716ce84c52177598cd83fea42aad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

truncate_string() {
  input="$1"
  max_length="$2"
  if [ "${#input}" -gt "$max_length" ]; then
    echo "${input:0:$((max_length - 2))}.."
  else
    echo "$input"
  fi
}

signal="$(awk -F', *' -v name="${0##*/}" '$2 ~ name {print $3+0}' "${XDG_SOURCES_HOME:-${HOME}/.local/src}/suckless/dwmblocks/config.def.h")"

[ "$signal" -eq 0 ] && {
  pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 &
}

status() {
  if ps -C mpd >/dev/null 2>&1; then
    screen_width=$(xrandr | awk '/\*/ {split($1, res, "x"); print res[1]; exit}')
    artist=$(mpc current -f %artist%)
    title=$(mpc current -f %title%)

    if [ "$screen_width" -le 2048 ]; then
      length="$(grep 'MAX_BLOCK_OUTPUT_LENGTH' ~/.local/src/suckless/dwmblocks/config.def.h | awk '{print $3}')"
      max_length="${length:+$((length / 3))}"
      max_length="${max_length:-15}"
      artist=$(truncate_string "$artist" "$max_length")
      title=$(truncate_string "$title" "$max_length")
    fi

    case "$(mpc status %state%)" in
    "playing") prefix="🎵" ;;
    "paused") prefix="⏸" ;;
    *) return ;;
    esac

    indicators=""
    [ "$(mpc status %single%)" = "on" ] && indicators="${indicators}🔀"
    [ "$(mpc status %random%)" = "on" ] && indicators="${indicators}🔂"
    [ "$(mpc status %repeat%)" = "on" ] && indicators="${indicators}🔁"

    case "$signal" in
    0)
      echo "$prefix$artist - $title${indicators:+$indicators}"
      ;;
    [1-9]*)
      current_time=$(mpc status %currenttime%)
      total_time=$(mpc status %totaltime%)
      echo "$prefix$artist - $title ${current_time:+$current_time/}$total_time${indicators:+$indicators}"
      ;;
    *) return ;;
    esac
  fi
}

mpc status %state% | grep -q "stopped" || status

case $BLOCK_BUTTON in
1) setsid -f "$TERMINAL" -e ncmpcpp ;; # left click, opens ncmpcpp
2) mpc toggle ;;                       # middle click, pause/unpause
3)                                     # right click
  { [ -n "$(mpc current)" ] && [ -n "$(mpc queued)" ]; } && notify-send "🎵 $(mpc current)" "⏭️ $(mpc queued)"
  notify-send "🎵 Music module" "\- Shows mpd song playing and status
- 🎵 if playing
- ⏸ if paused
- 🔂 if single on
- 🔁 if repeat on
- 🔀 if random on
- Left click opens ncmpcpp
- Middle click pauses/unpause
- Scroll changes track"
  ;;
4) mpc prev ;; # scroll up, previous
5) mpc next ;; # scroll down, next
6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;;
esac