From: Mike Frysinger Date: Sun, 1 Sep 2013 08:24:17 +0000 (-0400) Subject: mpc: merge old state with new state X-Git-Tag: v3.0~15 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=f5b43479dc2259c3582e264fe04276f852bb4139;p=chrome-ext%2Fmusic-player-client.git mpc: merge old state with new state Since mpd will, when it is stopped, return garbage or nothing at all for many values, we need to filter/merge the results so the player looks sane. --- diff --git a/js/mpc.js b/js/mpc.js index e005eaf..37db8cd 100644 --- a/js/mpc.js +++ b/js/mpc.js @@ -41,16 +41,30 @@ Mpc.prototype.recv_msg = function(lines) { case 'stats': case 'status': state = {}; + keys = []; lines.forEach(function(line) { i = line.indexOf(':'); if (i == -1) return; // Ignores the OK line key = line.substr(0, i); + keys.push(key); val = line.substr(i + 2); state[key] = val; }); - this.state = state; - this._cb_update_state(state); + + // When mpd is stopped, it gives us back crap values for some things. + if ('state' in state && state.state == 'stop') { + if ('volume' in state && state.volume == '-1') + keys.splice(keys.indexOf('volume'), 1); + } + // Now merge the current state with the previous one so that we don't + // lose information like volume or song position. + curr_state = this.state; + keys.forEach(function(key) { + curr_state[key] = state[key]; + }); + + this._cb_update_state(curr_state); break; default: this._cb_update_state(lines, curr);