From fe1b60ea170bdf620a5e4111987ce1a67da4514e Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 24 Dec 2017 15:47:12 +0100 Subject: [PATCH] Add status information to new Server panel (close #37) --- data/gtk.glade | 137 +++++++++++++++++++++++++++++++++++++++++++++++++ mcg/client.py | 14 ++++- mcg/widgets.py | 37 +++++++++++-- 3 files changed, 184 insertions(+), 4 deletions(-) diff --git a/data/gtk.glade b/data/gtk.glade index 4e8fa14..c2ec509 100644 --- a/data/gtk.glade +++ b/data/gtk.glade @@ -571,6 +571,143 @@ True False + + + True + False + + + + + + True + False + vertical + + + + + + True + False + 2 + 5 + + + True + False + start + file: + + + 0 + 0 + + + + + True + False + start + audio: + + + 0 + 1 + + + + + True + False + start + bitrate: + + + 0 + 2 + + + + + True + False + start + error: + + + 0 + 3 + + + + + True + False + start + True + + + 1 + 2 + + + + + True + False + start + True + + + 1 + 1 + + + + + True + False + start + True + + + 1 + 0 + + + + + True + False + start + True + + + 1 + 3 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + page0 + Status + + diff --git a/mcg/client.py b/mcg/client.py index 2ddd75a..39c8764 100644 --- a/mcg/client.py +++ b/mcg/client.py @@ -375,10 +375,14 @@ class Client(Base): if 'error' in status: error = status['error'] # Album + file = None album = None pos = 0 song = self._parse_dict(self._call("currentsong")) if song: + # File + if 'file' in song: + file = song['file'] # Track track = self._extract_playlist_track(song) if track: @@ -391,7 +395,15 @@ class Client(Base): album = palbum break pos = pos - len(palbum.get_tracks()) - self._callback(Client.SIGNAL_STATUS, state, album, pos, time, volume, error) + # Audio + audio = None + if 'audio' in status: + audio = status['audio'] + # Bitrate + bitrate = None + if 'bitrate' in status: + bitrate = status['bitrate'] + self._callback(Client.SIGNAL_STATUS, state, album, pos, time, volume, file, audio, bitrate, error) def _load_albums(self): diff --git a/mcg/widgets.py b/mcg/widgets.py index 4f5ea08..dbe53b1 100644 --- a/mcg/widgets.py +++ b/mcg/widgets.py @@ -361,7 +361,7 @@ class Window(): self._panel_action.set_enabled(False) - def on_mcg_status(self, state, album, pos, time, volume, error): + def on_mcg_status(self, state, album, pos, time, volume, file, audio, bitrate, error): # Album GObject.idle_add(self._panels[Window._PANEL_INDEX_COVER].set_album, album) # State @@ -375,6 +375,8 @@ class Window(): self._play_action.set_state(GLib.Variant.new_boolean(False)) # Volume GObject.idle_add(self._header_bar.set_volume, volume) + # Audio + self._panels[Window._PANEL_INDEX_SERVER].set_status(file, audio, bitrate, error) # Error if error is None: self._infobar.hide() @@ -470,8 +472,7 @@ class Window(): def _save_visible_panel(self): panels = [panel.get() for panel in self._panels] panel_index_selected = panels.index(self._stack.get_visible_child()) - if panel_index_selected > 0: - self._settings.set_int(Window.SETTING_PANEL, panel_index_selected) + self._settings.set_int(Window.SETTING_PANEL, panel_index_selected) def _set_menu_visible_panel(self): @@ -803,6 +804,12 @@ class ServerPanel(GObject.GObject): self._toolbar = builder.get_object('server-toolbar') self._stack = builder.get_object('server-stack') + # Status widgets + self._status_file = builder.get_object('server-status-file') + self._status_audio = builder.get_object('server-status-audio') + self._status_bitrate = builder.get_object('server-status-bitrate') + self._status_error = builder.get_object('server-status-error') + def get(self): return self._panel @@ -812,6 +819,30 @@ class ServerPanel(GObject.GObject): return self._toolbar + def set_status(self, file, audio, bitrate, error): + if not file: + file = "" + self._status_file.set_text(file) + # Audio information + if audio: + parts = audio.split(":") + if len(parts) == 3: + audio = "{} Hz, {} bit, {} channels".format(parts[0], parts[1], parts[2]) + else: + audio = "" + self._status_audio.set_text(audio) + # Bitrate + if bitrate: + bitrate = bitrate + " kb/s" + else: + bitrate = "" + self._status_bitrate.set_text(bitrate) + # Error + if not error: + error = "" + self._status_error.set_markup(error) + + class CoverPanel(GObject.GObject):