Skip to content

Commit 2419b03

Browse files
authored
Merge pull request #424 from IngoMeyer441/feature/now-playing-log
Add an optional log to the `now_playing` segment
2 parents 397b631 + 96752c0 commit 2419b03

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

lib/util.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# shellcheck shell=bash
2+
3+
is_flag_enabled() {
4+
local flag_value="$1"
5+
6+
case "$(awk '{print tolower($0)}' <<<"${flag_value}")" in
7+
on | true | y | yes | 1)
8+
return 0
9+
;;
10+
*)
11+
return 1
12+
;;
13+
esac
14+
}

segments/now_playing.sh

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33

44
# shellcheck source=lib/text_roll.sh
55
source "${TMUX_POWERLINE_DIR_LIB}/text_roll.sh"
6+
# shellcheck source=lib/util.sh
7+
source "${TMUX_POWERLINE_DIR_LIB}/util.sh"
68

79
TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT="40"
810
TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT="trim"
911
TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT="2"
1012
TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE:-repeat}"
1113
TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR:-  }"
14+
TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_ENABLE="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_ENABLE:-false}"
15+
TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH:-${HOME}/.now_playing.log}"
16+
TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES:-100}"
1217
TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT="localhost"
1318
TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT="6600"
1419
TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT="30"
@@ -35,6 +40,12 @@ export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYI
3540
# export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE}"
3641
# Separator for "repeat" roll mode
3742
# export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR}"
43+
# If set to 'true', 'yes', 'on' or '1', played tracks will be logged to a file.
44+
# export TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_ENABLE="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_ENABLE}"
45+
# If enabled, log played tracks to the following file:
46+
# export TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH}"
47+
# Maximum number of logged song entries. Set to "unlimited" for unlimited entries.
48+
# export TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES}"
3849
3950
# Hostname for MPD server in the format "[password@]host"
4051
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}"
@@ -120,6 +131,33 @@ run_segment() {
120131
return ${exitcode}
121132
fi
122133
if [ -n "$np" ]; then
134+
if is_flag_enabled "${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_ENABLE}"; then
135+
local last_track
136+
last_track=$(
137+
awk -F': ' 'END { for (i = 2; i <= NF; ++i) printf("%s%s", $i, (i < NF) ? FS : "") }' \
138+
<"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" 2>/dev/null
139+
)
140+
if [[ "$np" != "$last_track" ]]; then
141+
local next_entry
142+
next_entry="$(date +"%Y-%m-%d %H:%M:%S"): ${np}"
143+
if [[ "${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES}" == "unlimited" ]]; then
144+
echo "$next_entry" >>"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH"
145+
else
146+
local tmp_log_file
147+
tmp_log_file="$(mktemp)" &&
148+
{
149+
tail -n $((TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES - 1)) \
150+
"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" 2>/dev/null
151+
echo "$next_entry"
152+
} >"$tmp_log_file" &&
153+
if [[ -f "$tmp_log_file" ]]; then
154+
# Use `cat` to preserve destination file attributes rather than source file attributes
155+
cat "$tmp_log_file" >"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH"
156+
rm "$tmp_log_file"
157+
fi
158+
fi
159+
fi
160+
fi
123161
case "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" in
124162
"roll")
125163
np=$(roll_text "${np}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR}")

0 commit comments

Comments
 (0)