Redesign component interfaces
[khatus.git] / bin / khatus_parse_mpd_status_currentsong
CommitLineData
75b23ff8
SK
1#! /usr/bin/awk -f
2
3BEGIN {
4 OFS = msg_fs ? msg_fs : "|"
5 Kfs = key_fs ? key_fs : ":"
6}
7
8# Msg separator
9/^OK/ {msg_count++; next}
10
11# Msg content
12/^[a-zA-Z-]+: / {
13 key = $1
14 val = $0
15 sub(".*" key " *", "", val)
16 sub(":$", "", key)
17 key = tolower(key)
18 # Note that we expect a particular order of response messages (also
19 # reflected in the name of this script file): "status" THEN "currentsong"
20 if (msg_count == 1) {status[key] = val}
21 else if (msg_count == 2) {currentsong[key] = val}
22 else {
23 printf("Unexpected msg_count in mpd response: %d\n", msg_count) \
24 > "/dev/stderr"
25 exit 1
26 }
27 next
28}
29
30END {
31 name = currentsong["name"]
32 title = currentsong["title"]
33 file = currentsong["file"]
34
35 if (name) {
36 song = name
37 } else if (title) {
38 song = title
39 } else if (file) {
40 last = split(file, parts, "/")
41 song = parts[last]
42 } else {
43 song = "?"
44 }
45
46 format_time(status["time"], time)
47 output["play_time_minimal_units"] = time["minimal_units"]
48 output["play_time_percentage"] = time["percentage"]
49 output["state"] = status["state"]
50 output["song"] = song
51 for (key in output) {
52 print(key, output[key])
53 }
54}
55
56function format_time(time_str, time_arr, \
57 \
58 time_str_parts,
59 seconds_current,
60 seconds_total,
61 hours,
62 secs_beyond_hours,
63 mins,
64 secs,
65 time_percentage \
66) {
67 split(time_str, time_str_parts, ":")
68 seconds_current = time_str_parts[1]
69 seconds_total = time_str_parts[2]
70
71 hours = int(seconds_current / 60 / 60);
72 secs_beyond_hours = seconds_current - (hours * 60 * 60);
73 mins = int(secs_beyond_hours / 60);
74 secs = secs_beyond_hours - (mins * 60);
75
76 if (hours > 0) {
77 time_arr["minimal_units"] = sprintf("%d:%.2d:%.2d", hours, mins, secs)
78 } else {
79 time_arr["minimal_units"] = sprintf("%.2d:%.2d", mins, secs)
80 }
81
82 if (seconds_total > 0) {
83 time_percentage = (seconds_current / seconds_total) * 100
84 time_arr["percentage"] = sprintf("%d%%", time_percentage)
85 } else {
86 time_arr["percentage"] = "~"
87 }
88}
This page took 0.027495 seconds and 4 git commands to generate.