[gnome-music] grilo: add sources dynamically and add upnp sources



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]