From 1591660d4f8d2b7eba5e5ebcd9446a56f55f5069 Mon Sep 17 00:00:00 2001 From: fossfreedom Date: Tue, 12 Feb 2013 21:01:55 +0000 Subject: [PATCH] added revised preferences allowing to configure what providers to be used and in what order --- coverart_search_providers.py | 33 +- coverart_search_providers_prefs.py | 125 +++++-- ...gins.coverart_search_providers.gschema.xml | 38 +-- ui/coverart_search_providers_prefs.ui | 319 +++++++++++------- 4 files changed, 323 insertions(+), 192 deletions(-) diff --git a/coverart_search_providers.py b/coverart_search_providers.py index 7cae2e5..540e9b1 100644 --- a/coverart_search_providers.py +++ b/coverart_search_providers.py @@ -94,21 +94,26 @@ class CoverArtAlbumSearchPlugin(GObject.Object, Peas.Activatable): gs = GSetting() setting = gs.get_setting(gs.Path.PLUGIN) - if setting[gs.PluginKey.EMBEDDED_SEARCH]: - searches.append(CoverAlbumSearch()) - if setting[gs.PluginKey.LOCAL_SEARCH]: - searches.append(LocalSearch()) - if setting[gs.PluginKey.CACHE_SEARCH]: - searches.append(OldCacheSearch()) - if setting[gs.PluginKey.LASTFM_SEARCH]: - searches.append(LastFMSearch()) - if setting[gs.PluginKey.MUSICBRAINZ_SEARCH]: - searches.append(MusicBrainzSearch()) - if setting[gs.PluginKey.DISCOGS_SEARCH]: - searches.append(DiscogsSearch()) - if setting[gs.PluginKey.COVERARTARCHIVE_SEARCH]: - searches.append(CoverartArchiveSearch()) + current_providers = setting[gs.PluginKey.PROVIDERS] + current_list = current_providers.split(',') + + for provider in current_list: + if provider == SearchPreferences.EMBEDDED_SEARCH: + searches.append(CoverAlbumSearch()) + if provider == SearchPreferences.LOCAL_SEARCH: + searches.append(LocalSearch()) + if provider == SearchPreferences.CACHE_SEARCH: + searches.append(OldCacheSearch()) + if provider == SearchPreferences.LASTFM_SEARCH: + searches.append(LastFMSearch()) + if provider == SearchPreferences.MUSICBRAINZ_SEARCH: + searches.append(MusicBrainzSearch()) + if provider == SearchPreferences.DISCOGS_SEARCH: + searches.append(DiscogsSearch()) + if provider == SearchPreferences.COVERARTARCHIVE_SEARCH: + searches.append(CoverartArchiveSearch()) + s = CoverSearch(store, key, last_time, searches) return s.next_search(True) diff --git a/coverart_search_providers_prefs.py b/coverart_search_providers_prefs.py index 9a52baa..70bdfeb 100644 --- a/coverart_search_providers_prefs.py +++ b/coverart_search_providers_prefs.py @@ -24,6 +24,8 @@ from gi.repository import RB from gi.repository import Peas import rb +import copy +from collections import OrderedDict class GSetting: ''' @@ -45,13 +47,7 @@ class GSetting: PLUGIN='org.gnome.rhythmbox.plugins.coverart_search_providers') self.PluginKey = self._enum( - EMBEDDED_SEARCH='embedded-search', - DISCOGS_SEARCH='discogs-search', - COVERARTARCHIVE_SEARCH='coverartarchive-search', - LOCAL_SEARCH='local-search', - CACHE_SEARCH='cache-search', - LASTFM_SEARCH='lastfm-search', - MUSICBRAINZ_SEARCH='musicbrainz-search') + PROVIDERS='providers') self.setting = {} @@ -111,38 +107,113 @@ class SearchPreferences(GObject.Object, PeasGtk.Configurable): __gtype_name__ = 'CoverArtSearchProvidersPreferences' object = GObject.property(type=GObject.Object) + EMBEDDED_SEARCH='embedded-search' + DISCOGS_SEARCH='discogs-search' + COVERARTARCHIVE_SEARCH='coverartarchive-search' + LOCAL_SEARCH='local-search' + CACHE_SEARCH='cache-search' + LASTFM_SEARCH='lastfm-search' + MUSICBRAINZ_SEARCH='musicbrainz-search' + def __init__(self): ''' Initialises the preferences, getting an instance of the settings saved by Gio. ''' GObject.Object.__init__(self) - gs = GSetting() - self.settings = gs.get_setting(gs.Path.PLUGIN) def do_create_configure_widget(self): ''' Creates the plugin's preferences dialog ''' + + self.gs = GSetting() + self.settings = self.gs.get_setting(self.gs.Path.PLUGIN) + + self.provider = OrderedDict() + + self.provider[self.EMBEDDED_SEARCH] = _("Embedded coverart") + self.provider[self.LOCAL_SEARCH] = _("Local folder coverart") + self.provider[self.CACHE_SEARCH] = _("Cached coverart") + self.provider[self.LASTFM_SEARCH] = _("LastFM Internet Provider") + self.provider[self.MUSICBRAINZ_SEARCH] = _("MusicBrainz Internet Provider") + self.provider[self.DISCOGS_SEARCH] = _("Discogs Internet Provider") + self.provider[self.COVERARTARCHIVE_SEARCH] = _("Coverart Archive Internet Provider") + + + current_providers = copy.deepcopy(self.provider) + + current = self.settings[self.gs.PluginKey.PROVIDERS] + current_list = current.split(',') + # create the ui - self.builder = Gtk.Builder() - self.builder.add_from_file(rb.find_plugin_file(self, "ui/coverart_search_providers_prefs.ui")) - #self.builder.connect_signals(self) - gs = GSetting() - # bind the toggles to the settings - self.search = {} - self._checkboxbind('embedded_checkbox', gs.PluginKey.EMBEDDED_SEARCH) - self._checkboxbind('discogs_checkbox', gs.PluginKey.DISCOGS_SEARCH) - self._checkboxbind('archive_checkbox', gs.PluginKey.COVERARTARCHIVE_SEARCH) - self._checkboxbind('local_checkbox', gs.PluginKey.LOCAL_SEARCH) - self._checkboxbind('cache_checkbox', gs.PluginKey.CACHE_SEARCH) - self._checkboxbind('lastfm_checkbox', gs.PluginKey.LASTFM_SEARCH) - self._checkboxbind('musicbrainz_checkbox', gs.PluginKey.MUSICBRAINZ_SEARCH) + builder = Gtk.Builder() + builder.add_from_file(rb.find_plugin_file(self, "ui/coverart_search_providers_prefs.ui")) + builder.connect_signals(self) + self.provider_liststore = builder.get_object('provider_liststore') + self.search_liststore = builder.get_object('search_liststore') + self.provider_list = builder.get_object('provider_list') + self.search_list = builder.get_object('search_list') + for key in current_list: + del current_providers[key] + self.search_liststore.append([self.provider[key], key]) + + for key, value in current_providers.items(): + self.provider_liststore.append( [value, key] ) + # return the dialog - return self.builder.get_object('maingrid') + return builder.get_object('maingrid') - def _checkboxbind(self, field, key): - self.search[field] = self.builder.get_object(field) - self.settings.bind(key, - self.search[field], 'active', Gio.SettingsBindFlags.DEFAULT) + def back_clicked(self, *args): + + if len(self.search_liststore) == 1: + return # keep at least one search provider + + model, iterval = self.search_list.get_selection().get_selected() + + if iterval: + key = self.search_liststore[iterval][1] + self.provider_liststore.append([self.provider[key], key]) + self.search_liststore.remove(iterval) + + self._store_search_providers() + + def forward_clicked(self, *args): + model, iterval = self.provider_list.get_selection().get_selected() + + if iterval: + key = self.provider_liststore[iterval][1] + self.search_liststore.append([self.provider[key], key]) + self.provider_liststore.remove(iterval) + + self._store_search_providers() + + def _store_search_providers(self): + item = self.search_liststore.get_iter_first () + current_providers = [] + + while ( item != None ): + current_providers.append (self.search_liststore.get_value (item, 1)) + item = self.search_liststore.iter_next(item) + + self.settings[self.gs.PluginKey.PROVIDERS] = ','.join(current_providers) + + def on_up_button_clicked(self, *args): + selection = self.search_list.get_selection() + sel = selection.get_selected() + if not sel[1] == None: + previous = self.search_liststore.iter_previous(sel[1]) + if previous: + self.search_liststore.swap(sel[1], previous) + self._store_search_providers() + + + def on_down_button_clicked(self, *args): + selection = self.search_list.get_selection() + sel = selection.get_selected() + if not sel[1] == None: + next = self.search_liststore.iter_next(sel[1]) + if next: + self.search_liststore.swap(sel[1], next) + self._store_search_providers() diff --git a/schema/org.gnome.rhythmbox.plugins.coverart_search_providers.gschema.xml b/schema/org.gnome.rhythmbox.plugins.coverart_search_providers.gschema.xml index 8121e9c..01b848a 100644 --- a/schema/org.gnome.rhythmbox.plugins.coverart_search_providers.gschema.xml +++ b/schema/org.gnome.rhythmbox.plugins.coverart_search_providers.gschema.xml @@ -1,40 +1,10 @@ - - true - Search coverart embedded in files - Search coverart embedded in files. - - - false - Search for coverart on DISCOGS - Search coverart on the internet service DISCOGS. - - - false - Search for coverart on CoverartArchive.org - Search coverart on the internet service CoverartArchive. - - - true - Search for coverart in the albums local folder - Search coverart in the albums local folder - - - true - Search for coverart in the local cache - Search coverart in the local cache - - - false - Search for coverart on LastFM - Search coverart on the internet service LastFM. - - - false - Search for coverart on MusicBrainz - Search coverart on the internet service MusicBrainz. + + 'embedded-search,local-search,cache-search' + list of search providers + list of search providers, by default local disk based search providers. diff --git a/ui/coverart_search_providers_prefs.ui b/ui/coverart_search_providers_prefs.ui index dd5ae15..ccdc7d5 100644 --- a/ui/coverart_search_providers_prefs.ui +++ b/ui/coverart_search_providers_prefs.ui @@ -1,6 +1,42 @@ + + True + False + gtk-go-back + + + True + False + gtk-go-forward + + + True + False + gtk-go-up + + + True + False + gtk-go-down + + + + + + + + + + + + + + + + + True False @@ -18,7 +54,7 @@ True False 0 - Providers + Choose Search Providers: False @@ -27,17 +63,172 @@ - - Search for embedded coverart - False + True - True - False - True - Search for coverart embedded within tracks for an album - False - 0 - True + False + + + 200 + True + True + provider_liststore + False + False + False + + + + + + autosize + 200 + Provider + + + + 0 + + + + + + + 0 + 0 + 1 + 1 + + + + + True + True + search_liststore + False + True + False + + + + + + autosize + 200 + Search + + + + 0 + + + + + + + 2 + 0 + 1 + 1 + + + + + True + False + center + vertical + + + + + + False + True + True + True + False + image1 + + + + False + True + 1 + + + + + False + True + True + True + False + image2 + + + + False + True + 2 + + + + + + + + 1 + 0 + 1 + 1 + + + + + True + False + center + vertical + + + False + True + True + True + False + image3 + + + + False + True + 0 + + + + + False + True + True + True + False + image4 + + + + False + True + 1 + + + + + 3 + 0 + 1 + 1 + + False @@ -45,112 +236,6 @@ 1 - - - Search in local folder - False - True - True - False - False - 0 - True - - - False - True - 2 - - - - - Search in cache folder - False - True - True - False - False - 0 - True - - - False - True - 3 - - - - - Search on LastFM - False - True - True - False - False - 0 - True - - - False - True - 4 - - - - - Search on MusicBrainz - False - True - True - False - False - 0 - True - - - False - True - 5 - - - - - Search on DISCOGS - False - True - True - False - True - Search for coverart on the internet provider DISCOGS - False - 0 - True - - - False - True - 6 - - - - - Search on Cover Art Archive - False - True - True - False - True - Search for coverart on the internet provider Cover Art Archive - False - 0 - True - - - False - True - 7 - - 0