only refresh metadata/playlist tabs when the underlying data has changed v3.1
authorMike Frysinger <vapier@gentoo.org>
Tue, 3 Sep 2013 18:18:17 +0000 (14:18 -0400)
committerMike Frysinger <vapier@gentoo.org>
Tue, 3 Sep 2013 18:18:17 +0000 (14:18 -0400)
This avoids rewriting a lot of HTML code upon a normal state refresh.

js/mpc.js
main.js
manifest.json

index 1e3390b27b7d21100dfe22d95837c9c508323efe..84eea050a9970ff47ff69ae6e3867dad378f2bef 100644 (file)
--- a/js/mpc.js
+++ b/js/mpc.js
@@ -78,11 +78,13 @@ Mpc.prototype.recv_msg = function(lines) {
                                ++i;
                }
                this.state.Playlist = playlist;
+               this.state.Playlist.lastUpdate = (new Date()).getTime();
                this._cb_update_state(this.state);
                break;
 
        case 'currentsong':
                this.state.Currentsong = this._parse_result(lines).state;
+               this.state.Currentsong.lastUpdate = (new Date()).getTime();
                this._cb_update_state(this.state);
                break;
 
diff --git a/main.js b/main.js
index 208f996183fdad1ea0ad87420a0d734b603e7be9..a5bf7841f730014dac609bb68e3145552b829e82 100644 (file)
--- a/main.js
+++ b/main.js
@@ -309,51 +309,54 @@ function update_ui(state, cmd) {
                return;
        }
 
-       /* Update the metadata tab. */
-       var currentsong = {};
-       if ('Currentsong' in state)
-               currentsong = state.Currentsong;
-       ui_mpc_metadata_album.innerText = currentsong.Album;
-       ui_mpc_metadata_artist.innerText = currentsong.Artist;
-       ui_mpc_metadata_title.innerText = currentsong.Title;
-       ui_mpc_metadata_date.innerText = currentsong.Date;
-       ui_mpc_metadata_file.innerText = currentsong.file;
-
-       /* Update the playlist tab. */
-       var playlist = [];
-       if ('Playlist' in state)
-               playlist = state.Playlist;
-       ui_mpc_playlist.innerHTML = '';
-       playlist.forEach(function(song) {
-               var cell, row = ui_mpc_playlist.insertRow(-1);
-               if (song.Pos == currentsong.Pos)
-                       row.style.fontWeight = 'bold';
-
-               cell = row.insertCell(-1);
-               cell.id = 'playlist_del';
-               cell.innerHTML = '&#164;';
-               cell.song_id = song.Id;
-               cell.title = 'delete';
-               cell.onclick = playlist_del;
-
-               cell = row.insertCell(-1);
-               cell.innerText = song.Pos;
-               cell.style.textAlign = 'right';
-               cell.song_id = song.Id;
-               cell.title = 'play';
-               cell.onclick = playlist_play;
-
-               if ('Artist' in song) {
-                       row.insertCell(-1).innerText = song.Artist;
-                       row.insertCell(-1).innerText = song.Album;
-                       row.insertCell(-1).innerText = song.Title;
-               } else {
+       /* Update the metadata tab only when things have changed. */
+       if ('Currentsong' in state && ui_mpc_metadata_file.lastUpdate != state.Currentsong.lastUpdate) {
+               var currentsong = state.Currentsong;
+               ui_mpc_metadata_album.innerText = currentsong.Album;
+               ui_mpc_metadata_artist.innerText = currentsong.Artist;
+               ui_mpc_metadata_title.innerText = currentsong.Title;
+               ui_mpc_metadata_date.innerText = currentsong.Date;
+               ui_mpc_metadata_file.innerText = currentsong.file;
+       }
+
+       /* Update the playlist tab only when things have changed. */
+       if ('Playlist' in state && ui_mpc_playlist.lastUpdate != state.Playlist.lastUpdate) {
+               var playlist = state.Playlist;
+
+               ui_mpc_playlist.innerHTML = '';
+               playlist.forEach(function(song) {
+                       var cell, row = ui_mpc_playlist.insertRow(-1);
+                       if (song.Pos == currentsong.Pos)
+                               row.style.fontWeight = 'bold';
+
                        cell = row.insertCell(-1);
-                       cell.innerText = song.file;
-                       cell.colSpan = 3;
-               }
-               row.insertCell(-1).innerText = pretty_time(song.Time);
-       });
+                       cell.id = 'playlist_del';
+                       cell.innerHTML = '&#164;';
+                       cell.song_id = song.Id;
+                       cell.title = 'delete';
+                       cell.onclick = playlist_del;
+
+                       cell = row.insertCell(-1);
+                       cell.innerText = song.Pos;
+                       cell.style.textAlign = 'right';
+                       cell.song_id = song.Id;
+                       cell.title = 'play';
+                       cell.onclick = playlist_play;
+
+                       if ('Artist' in song) {
+                               row.insertCell(-1).innerText = song.Artist;
+                               row.insertCell(-1).innerText = song.Album;
+                               row.insertCell(-1).innerText = song.Title;
+                       } else {
+                               cell = row.insertCell(-1);
+                               cell.innerText = song.file;
+                               cell.colSpan = 3;
+                       }
+                       row.insertCell(-1).innerText = pretty_time(song.Time);
+               });
+
+               ui_mpc_playlist.lastUpdate = playlist.lastUpdate;
+       }
 
        /* Update the status tab. */
        var time, percent;
index 0e1073d290550512b9b9cfeee7001d7d47f3396f..1ec8ed4b30cff76e7b76632b63bad4e5afff739c 100644 (file)
@@ -2,7 +2,7 @@
   "manifest_version": 2,
   "minimum_chrome_version": "24",
   "name": "Music Player Client",
-  "version": "3.0",
+  "version": "3.1",
   "description": "Control a Music Player Daemon (MPD)",
   "icons": {
     "128": "images/icon-128x128.png"