added revised preferences allowing to configure what providers to be used and in what order

Esse commit está contido em:
fossfreedom
2013-02-12 21:01:55 +00:00
commit 1591660d4f
4 arquivos alterados com 323 adições e 192 exclusões
+19 -14
Ver Arquivo
@@ -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)
+98 -27
Ver Arquivo
@@ -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()
@@ -1,40 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema path="/org/gnome/rhythmbox/plugins/coverart_search_providers/" id="org.gnome.rhythmbox.plugins.coverart_search_providers">
<key type="b" name="embedded-search">
<default>true</default>
<summary>Search coverart embedded in files</summary>
<description>Search coverart embedded in files.</description>
</key>
<key type="b" name="discogs-search">
<default>false</default>
<summary>Search for coverart on DISCOGS</summary>
<description>Search coverart on the internet service DISCOGS.</description>
</key>
<key type="b" name="coverartarchive-search">
<default>false</default>
<summary>Search for coverart on CoverartArchive.org</summary>
<description>Search coverart on the internet service CoverartArchive.</description>
</key>
<key type="b" name="local-search">
<default>true</default>
<summary>Search for coverart in the albums local folder</summary>
<description>Search coverart in the albums local folder</description>
</key>
<key type="b" name="cache-search">
<default>true</default>
<summary>Search for coverart in the local cache</summary>
<description>Search coverart in the local cache</description>
</key>
<key type="b" name="lastfm-search">
<default>false</default>
<summary>Search for coverart on LastFM</summary>
<description>Search coverart on the internet service LastFM.</description>
</key>
<key type="b" name="musicbrainz-search">
<default>false</default>
<summary>Search for coverart on MusicBrainz</summary>
<description>Search coverart on the internet service MusicBrainz.</description>
<key type="s" name="providers">
<default>'embedded-search,local-search,cache-search'</default>
<summary>list of search providers</summary>
<description>list of search providers, by default local disk based search providers.</description>
</key>
</schema>
</schemalist>
+202 -117
Ver Arquivo
@@ -1,6 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-back</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-forward</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-up</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
<object class="GtkListStore" id="provider_liststore">
<columns>
<!-- column-name provider -->
<column type="gchararray"/>
<!-- column-name key -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="search_liststore">
<columns>
<!-- column-name search -->
<column type="gchararray"/>
<!-- column-name key -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkGrid" id="maingrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -18,7 +54,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Providers</property>
<property name="label" translatable="yes">Choose Search Providers:</property>
</object>
<packing>
<property name="expand">False</property>
@@ -27,17 +63,172 @@
</packing>
</child>
<child>
<object class="GtkCheckButton" id="embedded_checkbox">
<property name="label" translatable="yes">Search for embedded coverart</property>
<property name="use_action_appearance">False</property>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes">Search for coverart embedded within tracks for an album</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="provider_list">
<property name="height_request">200</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">provider_liststore</property>
<property name="headers_clickable">False</property>
<property name="enable_search">False</property>
<property name="show_expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="sizing">autosize</property>
<property name="min_width">200</property>
<property name="title" translatable="yes">Provider</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkTreeView" id="search_list">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">search_liststore</property>
<property name="headers_clickable">False</property>
<property name="reorderable">True</property>
<property name="enable_search">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection2"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
<property name="sizing">autosize</property>
<property name="min_width">200</property>
<property name="title" translatable="yes">Search</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext2"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="back_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="image">image1</property>
<signal name="clicked" handler="back_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="forward_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="image">image2</property>
<signal name="clicked" handler="forward_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="up_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="image">image3</property>
<signal name="clicked" handler="on_up_button_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="down_button">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="image">image4</property>
<signal name="clicked" handler="on_down_button_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@@ -45,112 +236,6 @@
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="local_checkbox">
<property name="label" translatable="yes">Search in local folder</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="cache_checkbox">
<property name="label" translatable="yes">Search in cache folder</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="lastfm_checkbox">
<property name="label" translatable="yes">Search on LastFM</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="musicbrainz_checkbox">
<property name="label" translatable="yes">Search on MusicBrainz</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="discogs_checkbox">
<property name="label" translatable="yes">Search on DISCOGS</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes">Search for coverart on the internet provider DISCOGS</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="archive_checkbox">
<property name="label" translatable="yes">Search on Cover Art Archive</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes">Search for coverart on the internet provider Cover Art Archive</property>
<property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>