Re-factor MPD currentsong parsing
[khatus.git] / bin / khatus_controller
index 2e483b0..ae4a8dc 100755 (executable)
@@ -3,7 +3,7 @@
 
 /^in:ENERGY/\
 {
-    split_msg_parts()
+    fields_shift()
     sub("%$", "", $2)
     db["energy_state_prev"] = db["energy_state_curr"]
     db["energy_state_curr"] = $1
 
 /^in:MEMORY/\
 {
-    split_msg_parts()
+    fields_shift()
     db["memory_total"] = $1
     db["memory_used"]  = $2
 }
 
 /^in:FAN +status:/\
 {
-    split_msg_parts()
+    fields_shift()
     db["fan_status"] = $2
 }
 
 /^in:FAN +speed:/\
 {
-    split_msg_parts()
+    fields_shift()
     db["fan_speed"] = $2
 }
 
 /^in:FAN +level:/\
 {
-    split_msg_parts()
+    fields_shift()
     db["fan_level"] = $2
 }
 
 /^in:TEMPERATURE/\
 {
-    split_msg_parts()
+    fields_shift()
     db["temperature"] = $1
 }
 
 /^in:LOAD_AVG/\
 {
-    split_msg_parts()
+    fields_shift()
     set_load_avg()
 }
 
 /^in:DISK_IO/\
 {
-    split_msg_parts()
+    fields_shift()
     set_disk_io()
 }
 
 /^in:DISK_SPACE/\
 {
-    split_msg_parts()
-    db["disk_space_used"] = msg_body
+    fields_shift()
+    db["disk_space_used"] = $0
 }
 
 /^in:NET_ADDR_IO/\
 {
-    split_msg_parts()
+    fields_shift()
     set_net_addr_io()
 }
 
 /^in:NET_WIFI_STATUS/\
 {
-    split_msg_parts()
-    db["net_wifi_status"] = msg_body
+    fields_shift()
+    db["net_wifi_status"] = $0
 }
 
 /^in:BLUETOOTH_POWER/\
 {
-    split_msg_parts()
-    db["bluetooth_power"] = msg_body
+    fields_shift()
+    db["bluetooth_power"] = $0
 }
 
 /^in:SCREEN_BRIGHTNESS/\
 {
-    split_msg_parts()
+    fields_shift()
     set_screen_brightness()
 }
 
 /^in:VOLUME/\
 {
-    split_msg_parts()
-    db["volume"] = msg_body
+    fields_shift()
+    db["volume"] = $0
 }
 
-/^in:MPD_STATE/\
+/^in:MPD_SONG +file:/\
 {
-    split_msg_parts()
-    db["mpd_state"]             = $1
-    db["mpd_curr_song_time"]    = $2
-    db["mpd_curr_song_percent"] = $3
+    fields_shift()
+    fields_shift()
+    db["mpd_song_curr_file"] = $0
 }
 
-/^in:MPD_SONG/\
+/^in:MPD_SONG +Title:/\
 {
-    split_msg_parts()
-    db["mpd_curr_song_name"] = msg_body
+    fields_shift()
+    fields_shift()
+    db["mpd_song_curr_title"] = $0
+}
+/^in:MPD_SONG +Name:/\
+{
+    fields_shift()
+    fields_shift()
+    db["mpd_song_curr_name"] = $0
+}
+
+/^in:MPD_STATE /\
+{
+    fields_shift()
+    db["mpd_status_state"]   = $1
+    db["mpd_status_time"]    = $2
+    db["mpd_status_percent"] = $3
 }
 
 /^in:WEATHER/\
 {
-    split_msg_parts()
-    db["weather_temperature"] = msg_body
+    fields_shift()
+    db["weather_temperature"] = $0
 }
 
 /^in:DATE_TIME/\
 {
-    split_msg_parts()
-    db["datetime"] = msg_body
+    fields_shift()
+    db["datetime"] = $0
     output_msg_status_bar(make_status_bar())
 }
 
@@ -260,13 +274,11 @@ function set_screen_brightness(    max, cur) {
     db["screen_brightness"] = (cur / max) * 100
 }
 
-function split_msg_parts(    dbg) {
-    msg_head = $1
-    sub("^" msg_head " +", "")
-    msg_body = $0
-    dbg["msg_head"] = msg_head
-    dbg["msg_body"] = msg_body
-    debug("split_msg_parts", dbg)
+function fields_shift(    dbg) {
+    dbg["head"] = $1
+    sub("^" $1 " +", "")
+    dbg["body"] = $0
+    debug("fields_shift", dbg)
 }
 
 function make_status_bar(    position, bar, sep, i, j) {
@@ -381,7 +393,7 @@ function make_status_net(    \
 }
 
 function make_status_mpd(    state, status) {
-    state = db["mpd_state"]
+    state = db["mpd_status_state"]
 
     if (state == "play") {
         status = make_status_mpd_state_known("▶")
@@ -396,13 +408,29 @@ function make_status_mpd(    state, status) {
     return sprintf("[%s]", status)
 }
 
-function make_status_mpd_state_known(symbol) {
+function make_status_mpd_state_known(symbol,    \
+    currently_playing, name, title, file\
+) {
+    name  = db["mpd_song_curr_name"]
+    title = db["mpd_song_curr_title:"]
+    file  = db["mpd_song_curr_file"]
+
+    if (name) {
+        currently_playing = name
+    } else if (title) {
+        currently_playing = title
+    } else if (file) {
+        last = split(file, parts, "/")
+        currently_playing = parts[last]
+    } else {
+        currently_playing = ""
+    }
     return sprintf(\
         "%s %s %s %s",
         symbol,
-        db["mpd_curr_song_time"],
-        db["mpd_curr_song_percent"],
-        substr(db["mpd_curr_song_name"], 1, opt_mpd_song_max_chars)\
+        db["mpd_status_time"],
+        db["mpd_status_percent"],
+        substr(currently_playing, 1, opt_mpd_song_max_chars)\
     )
 }
 
This page took 0.055078 seconds and 4 git commands to generate.