[gnome-music] grilo: add sources dynamically and add upnp sources
- From: Vadim Rutkovsky <vrutkovsky src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] grilo: add sources dynamically and add upnp sources
- Date: Mon, 12 May 2014 08:50:19 +0000 (UTC)
commit 0f1cb8fee59bfb5fe8a7df5e3e2d249f075c1c1e
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date: Sat May 10 19:14:37 2014 +0200
grilo: add sources dynamically and add upnp sources
gnomemusic/grilo.py | 25 ++++++++++++++++------
gnomemusic/searchbar.py | 51 +++++++++++++++++-----------------------------
2 files changed, 37 insertions(+), 39 deletions(-)
---
diff --git a/gnomemusic/grilo.py b/gnomemusic/grilo.py
index ddc7338..ad803f3 100644
--- a/gnomemusic/grilo.py
+++ b/gnomemusic/grilo.py
@@ -36,7 +36,8 @@ class Grilo(GObject.GObject):
__gsignals__ = {
'ready': (GObject.SIGNAL_RUN_FIRST, None, ()),
- 'changes-pending': (GObject.SIGNAL_RUN_FIRST, None, ())
+ 'changes-pending': (GObject.SIGNAL_RUN_FIRST, None, ()),
+ 'new-source-added': (GObject.SIGNAL_RUN_FIRST, None, (Grl.Source, ))
}
METADATA_KEYS = [
@@ -74,8 +75,10 @@ class Grilo(GObject.GObject):
self.tracker = None
self.changed_media_ids = []
self.pending_event_id = 0
-
self.registry = Grl.Registry.get_default()
+
+ @log
+ def _find_sources(self):
self.registry.connect('source_added', self._on_source_added)
self.registry.connect('source_removed', self._on_source_removed)
@@ -126,8 +129,9 @@ class Grilo(GObject.GObject):
id = mediaSource.get_id()
logger.debug("new grilo source %s was added" % id)
try:
+ ops = mediaSource.supported_operations()
+
if id == 'grl-tracker-source':
- ops = mediaSource.supported_operations()
if ops & Grl.SupportedOps.SEARCH:
logger.debug("found searchable tracker source")
self.sources[id] = mediaSource
@@ -138,11 +142,18 @@ class Grilo(GObject.GObject):
self.emit('ready')
self.tracker.notify_change_start()
self.tracker.connect('content-changed', self._on_content_changed)
- elif (mediaSource.supported_operations() & Grl.SupportedOps.SEARCH)\
- and (mediaSource.get_supported_media() & Grl.MediaType.AUDIO)\
- and id not in self.blacklist:
- logger.debug("source is searchable")
+
+ elif (id.startswith('grl-upnp')):
+ logger.debug("found upnp source %s" % id)
+ self.sources[id] = mediaSource
+ self.emit('new-source-added', mediaSource)
+
+ elif (id not in self.blacklist) and (ops & Grl.SupportedOps.SEARCH)\
+ and (mediaSource.get_supported_media() & Grl.MediaType.AUDIO):
+ logger.debug("source %s is searchable" % id)
self.sources[id] = mediaSource
+ self.emit('new-source-added', mediaSource)
+
except Exception as e:
logger.debug("Source %s: exception %s" % (id, e))
diff --git a/gnomemusic/searchbar.py b/gnomemusic/searchbar.py
index 6b1a8f4..b277caa 100644
--- a/gnomemusic/searchbar.py
+++ b/gnomemusic/searchbar.py
@@ -1,7 +1,6 @@
-from gi.repository import Gtk, Gd, GObject, Pango, GLib, Grl
+from gi.repository import Gtk, Gd, GObject, Pango, GLib
from gettext import gettext as _
from gnomemusic.grilo import grilo
-from gnomemusic.query import Query
from gnomemusic import log
import logging
logger = logging.getLogger(__name__)
@@ -68,19 +67,25 @@ class BaseManager:
class SourceManager(BaseManager):
@log
+ def __init__(self, id, label, entry):
+ super(SourceManager, self).__init__(id, label, entry)
+ self.values.append(['', '', self.label])
+ self.values.append(['all', _("All"), ""])
+ self.values.append(['grl-tracker-source', _("Local"), ''])
+
+ @log
def fill_in_values(self, model):
- if self.id == "source":
- self.values.append(['', '', self.label])
- self.values.append(['all', _("All"), ""])
- self.values.append(['grl-tracker-source', _("Local"), ''])
- for key in grilo.sources:
- source = grilo.sources[key]
- if source.get_id() == 'grl-tracker-source':
- continue
- self.values.append([source.get_id(), source.get_name(), ""])
+ self.model = model
super(SourceManager, self).fill_in_values(model)
@log
+ def add_new_source(self, klass, source):
+ value = [source.get_id(), source.get_name(), '']
+ _iter = self.model.append()
+ self.model.set(_iter, [0, 1, 2], value)
+ self.values.append(value)
+
+ @log
def set_active(self, selected_id):
if selected_id == "":
return
@@ -171,6 +176,9 @@ class DropDown(Gd.Revealer):
self.sourcesFilter = FilterView(self.sourcesManager, self)
self._grid.add(self.sourcesFilter.view)
+ grilo.connect('new-source-added', self.sourcesManager.add_new_source)
+ grilo._find_sources()
+
self.searchFieldsManager = BaseManager('search', "Match", searchbar._search_entry)
self.searchFieldsFilter = FilterView(self.searchFieldsManager, self)
self._grid.add(self.searchFieldsFilter.view)
@@ -246,27 +254,6 @@ class Searchbar(Gd.Revealer):
def search_entry_changed(self, widget):
self.timeout = None
- query_matcher = {
- 'Albums': {
- 'search_all': Query.get_albums_with_any_match,
- 'search_artist': Query.get_albums_with_artist_match,
- 'search_album': Query.get_albums_with_album_match,
- 'search_track': Query.get_albums_with_track_match,
- },
- 'Artists': {
- 'search_all': Query.get_artists_with_any_match,
- 'search_artist': Query.get_artists_with_artist_match,
- 'search_album': Query.get_artists_with_album_match,
- 'search_track': Query.get_artists_with_track_match,
- },
- 'Songs': {
- 'search_all': Query.get_songs_with_any_match,
- 'search_artist': Query.get_songs_with_artist_match,
- 'search_album': Query.get_songs_with_album_match,
- 'search_track': Query.get_songs_with_track_match,
- },
- }
-
search_term = self._search_entry.get_text()
if grilo.search_source:
fields_filter = self.dropdown.searchFieldsManager.get_active()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]