[gnome-music/wip/jfelder/lastfm-ui-part-2: 19/24] scrobbler: Add a "not available" state
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/lastfm-ui-part-2: 19/24] scrobbler: Add a "not available" state
- Date: Sat, 15 Feb 2020 11:16:30 +0000 (UTC)
commit 13aec830b47467afefa5da021ae50eedb87c2b4f
Author: Jean Felder <jfelder src gnome org>
Date: Tue Jan 14 21:02:40 2020 +0100
scrobbler: Add a "not available" state
GNOME onlince accounts can be compiled without Last.fm support. In
that case, it is useless to look for an existing account. It also
means that no account can be configured.
gnomemusic/scrobbler.py | 46 +++++++++++++++++++++++++++++++++++--------
gnomemusic/widgets/appmenu.py | 2 +-
meson.build | 2 +-
3 files changed, 40 insertions(+), 10 deletions(-)
---
diff --git a/gnomemusic/scrobbler.py b/gnomemusic/scrobbler.py
index ac3cc17f..a9b5fd9e 100644
--- a/gnomemusic/scrobbler.py
+++ b/gnomemusic/scrobbler.py
@@ -39,11 +39,18 @@ class GoaLastFM(GObject.GObject):
"""
class State(IntEnum):
- """GoaLastFM account State"""
+ """GoaLastFM account State.
- NOT_CONFIGURED = 0
- DISABLED = 1
- ENABLED = 2
+ NOT_AVAILABLE: GOA does not handle Last.fm accounts
+ NOT_CONFIGURED: GOA handles Last.fm but no user account has
+ been configured
+ DISABLED: a user account exists, but it is disabled
+ ENABLED: a user account exists and is enabled
+ """
+ NOT_AVAILABLE = 0
+ NOT_CONFIGURED = 1
+ DISABLED = 2
+ ENABLED = 3
def __init__(self):
super().__init__()
@@ -51,15 +58,15 @@ class GoaLastFM(GObject.GObject):
self._log = MusicLogger()
self._client = None
+ self._state = GoaLastFM.State.NOT_AVAILABLE
+ self.notify("state")
self._reset_attributes()
Goa.Client.new(None, self._new_client_callback)
def _reset_attributes(self):
self._account = None
self._authentication = None
- self._state = GoaLastFM.State.NOT_CONFIGURED
self._music_disabled_id = None
- self.notify("state")
def _new_client_callback(self, source, result):
try:
@@ -69,6 +76,27 @@ class GoaLastFM(GObject.GObject):
Goa.Error(error.code), error.message))
return
+ manager = self._client.get_manager()
+ try:
+ manager.call_is_supported_provider(
+ "lastfm", None, self._lastfm_is_supported_cb)
+ except TypeError:
+ self._log.warning("Error: Unable to check if last.fm is supported")
+
+ def _lastfm_is_supported_cb(self, proxy, result):
+ try:
+ lastfm_supported = proxy.call_is_supported_provider_finish(result)
+ except GLib.Error as e:
+ self._log.warning(
+ "Error: Unable to check if last.fm is supported: {}".format(
+ e.message))
+ return
+
+ if lastfm_supported is False:
+ return
+
+ self._state = GoaLastFM.State.NOT_CONFIGURED
+ self.notify("state")
self._client.connect("account-added", self._goa_account_added)
self._client.connect("account-removed", self._goa_account_removed)
self._find_lastfm_account()
@@ -80,7 +108,9 @@ class GoaLastFM(GObject.GObject):
account = obj.get_account()
if account.props.provider_type == "lastfm":
self._account.disconnect(self._music_disabled_id)
+ self._state = GoaLastFM.State.NOT_CONFIGURED
self._reset_attributes()
+ self.notify("state")
def _find_lastfm_account(self):
accounts = self._client.get_accounts()
@@ -153,7 +183,7 @@ class LastFmScrobbler(GObject.GObject):
self._report = self._settings.get_boolean("lastfm-report")
self._scrobbled = False
- self._account_state = GoaLastFM.State.NOT_CONFIGURED
+ self._account_state = GoaLastFM.State.NOT_AVAILABLE
self._goa_lastfm = GoaLastFM()
self._goa_lastfm.bind_property(
@@ -162,7 +192,7 @@ class LastFmScrobbler(GObject.GObject):
self._soup_session = Soup.Session.new()
self._scrobble_cache = []
- @GObject.Property(type=int, default=GoaLastFM.State.NOT_CONFIGURED)
+ @GObject.Property(type=int, default=GoaLastFM.State.NOT_AVAILABLE)
def account_state(self):
"""Get the Last.fm account state
diff --git a/gnomemusic/widgets/appmenu.py b/gnomemusic/widgets/appmenu.py
index 80590751..997be53d 100644
--- a/gnomemusic/widgets/appmenu.py
+++ b/gnomemusic/widgets/appmenu.py
@@ -51,7 +51,7 @@ class AppMenu(Gtk.PopoverMenu):
def _on_scrobbler_state_changed(self, klass, args):
state = self._lastfm_scrobbler.props.account_state
- if state == GoaLastFM.State.NOT_CONFIGURED:
+ if state <= GoaLastFM.State.NOT_CONFIGURED:
self._lastfm_box.props.sensitive = False
if self._lastfm_switcher_id is not None:
self._lastfm_switch.disconnect(self._lastfm_switcher_id)
diff --git a/meson.build b/meson.build
index 1f4122b1..2f7596c5 100644
--- a/meson.build
+++ b/meson.build
@@ -36,7 +36,7 @@ PKGDATA_DIR = join_paths(get_option('prefix'), get_option('datadir'), APPLICATIO
PKGLIB_DIR = join_paths(get_option('prefix'), get_option('libdir'), APPLICATION_ID)
# Dependencies
-dependency('goa-1.0')
+dependency('goa-1.0', version: '>= 3.35.90')
dependency('gobject-introspection-1.0', version: '>= 1.35.0')
dependency('gtk+-3.0', version: '>= 3.24.7')
dependency('libdazzle-1.0', version: '>= 3.28.0')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]