[gnome-music/wip/merge: 43/343] Almost ready to run :)



commit 043af2fe1d1e1e86f0248b0bc3d717b47d11dcbd
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date:   Sat Jul 13 17:21:29 2013 +0200

    Almost ready to run :)

 data/Makefile.am             |   69 ++++++++++++++++++++++++++++++++++++++++++
 gnome-music/albumArtCache.py |   16 ++++++++++
 gnome-music/application.py   |    8 ++---
 gnome-music/grilo.py         |   23 +++++++++-----
 gnome-music/player.py        |   54 ++++++++++++++++++--------------
 gnome-music/window.py        |    2 +-
 6 files changed, 134 insertions(+), 38 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index e69de29..4e58aa1 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -0,0 +1,69 @@
+resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies 
$(srcdir)/gnome-music.gresource.xml)
+gnome-music.gresource: gnome-music.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) $<
+
+resourcedir = $(pkgdatadir)
+resource_DATA = gnome-music.gresource
+
+appsdir = $(datadir)/applications
+apps_DATA = gnome-music.desktop
+
+# icons
+icon16dir = $(datadir)/icons/hicolor/16x16/apps
+icon16_DATA = icons/hicolor/16x16/apps/gnome-music.png
+icon22dir = $(datadir)/icons/hicolor/22x22/apps
+icon22_DATA = icons/hicolor/22x22/apps/gnome-music.png
+icon32dir = $(datadir)/icons/hicolor/32x32/apps
+icon32_DATA = icons/hicolor/32x32/apps/gnome-music.png
+icon48dir = $(datadir)/icons/hicolor/48x48/apps
+icon48_DATA = icons/hicolor/48x48/apps/gnome-music.png
+icon256dir = $(datadir)/icons/hicolor/256x256/apps
+icon256_DATA = icons/hicolor/256x256/apps/gnome-music.png
+icon_files = \
+       $(icon16_DATA) \
+       $(icon22_DATA) \
+       $(icon32_DATA) \
+       $(icon48_DATA) \
+       $(icon256_DATA) \
+       icons/hicolor/gnome-music.svg
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+
+install-data-hook: update-icon-cache
+uninstall-hook: update-icon-cache
+update-icon-cache:
+       @-if test -z "$(DESTDIR)"; then \
+               echo "Updating Gtk icon cache."; \
+               $(gtk_update_icon_cache); \
+       else \
+               echo "*** Icon cache not updated.  After (un)install, run this:"; \
+               echo "***   $(gtk_update_icon_cache)"; \
+       fi
+
+
+ INTLTOOL_DESKTOP_RULE@
+
+gsettings_SCHEMAS = org.gnome.Music.gschema.xml
+
+ GSETTINGS_RULES@
+
+EXTRA_DIST = \
+       $(icon_files) \
+       $(resource_files) \
+       gnome-music.desktop.in \
+       gnome-music.gresource.xml \
+       org.gnome.Music.gschema.xml \
+       $(NULL)
+
+CLEANFILES = \
+       gnome-music.gresource \
+       $(apps_DATA) \
+       *.valid \
+       gschemas.compiled \
+       $(NULL)
+
+# For uninstalled use
+all-local:
+       $(GLIB_COMPILE_SCHEMAS) $(builddir)
+
+-include $(top_srcdir)/git.mk
diff --git a/gnome-music/albumArtCache.py b/gnome-music/albumArtCache.py
index 5bdb212..c2adb1a 100644
--- a/gnome-music/albumArtCache.py
+++ b/gnome-music/albumArtCache.py
@@ -1,3 +1,19 @@
+def getDefault():
+    if instance:
+        return instance
+    else:
+        instance
+
 class AlbumArtCache:
+    instance = None
+
+    @classmethod
     def getDefault(self):
+        if self.instance:
+            return self.instance
+        else:
+            self.instance = AlbumArtCache()
+        return self.instance
+
+    def makeDefaultIcon(self, width, height):
         pass
diff --git a/gnome-music/application.py b/gnome-music/application.py
index 98984b2..a131097 100644
--- a/gnome-music/application.py
+++ b/gnome-music/application.py
@@ -1,5 +1,4 @@
 from gi.repository import Gtk, Gio, GLib
-
 from window import Window
 
 
@@ -12,12 +11,11 @@ class Application(Gtk.Application):
         GLib.set_application_name("Music")
 
     def do_startup(self):
-        Gtk.Application.startup(self)
+        Gtk.Application.do_startup(self)
 
     def do_activate(self):
-        if self._window is not None:
-            self._window = Window(self)
-        self._window.present()
+        self._window = Window(self)
+        self._window.show_all()
 
     def quit(self):
         self.quit()
diff --git a/gnome-music/grilo.py b/gnome-music/grilo.py
index cd66252..c0b7016 100644
--- a/gnome-music/grilo.py
+++ b/gnome-music/grilo.py
@@ -1,9 +1,13 @@
-from gi.repository import Grl
+from gi.repository import Grl, GLib, GObject
 
 from query import Query
 
 
-class Grilo():
+class Grilo(GObject.GObject):
+
+    __gsignals__ = {
+        'ready': (GObject.SIGNAL_RUN_FIRST, None, ())
+    }
 
     METADATA_KEYS = [
         Grl.METADATA_KEY_ID, Grl.METADATA_KEY_TITLE,
@@ -12,8 +16,12 @@ class Grilo():
         Grl.METADATA_KEY_CREATION_DATE]
 
     def __init__(self):
+        GObject.GObject.__init__(self)
         self.registry = Grl.Registry.get_default()
-        self.registry.load_all_plugins()
+        try:
+            self.registry.load_all_plugins()
+        except GLib.GError:
+            print('Failed to load plugins.')
 
         self.sources = {}
         self.tracker = None
@@ -21,17 +29,16 @@ class Grilo():
         self.registry.connect('source_added', self._onSourceAdded)
         self.registry.connect('source_removed', self._onSourceRemoved)
 
-        if self.registry.load_all is False:
-            print('Failed to load plugins.')
 
     def _onSourceAdded(self, pluginRegistry, mediaSource):
-        if mediaSource.sourceId == "grl-tracker-source":
+        id = mediaSource.get_id()
+        if id == "grl-tracker-source":
             ops = mediaSource.supported_operations()
             if ops & Grl.SupportedOps.SEARCH:
                 print('Detected new source availabe: \'' +
                       mediaSource.get_name() + '\' and it supports search')
 
-                self.sources[mediaSource.sourceId] = mediaSource
+                self.sources[id] = mediaSource
                 self.tracker = mediaSource
 
                 if self.tracker is not None:
@@ -76,6 +83,6 @@ class Grilo():
                           self._searchCallback, source)
 
 
-Grl.init(None, 0)
+Grl.init(None)
 
 grilo = Grilo()
diff --git a/gnome-music/player.py b/gnome-music/player.py
index 21cfe84..146f975 100644
--- a/gnome-music/player.py
+++ b/gnome-music/player.py
@@ -1,7 +1,7 @@
 from gi.repository import GIRepository
 GIRepository.Repository.prepend_search_path('libgd')
 
-from gi.repository import Gtk, Gst, GLib, GstAudio, Gdk, Grl, Gio, GstPbutils
+from gi.repository import Gtk, Gst, GLib, GstAudio, Gdk, Grl, Gio, GstPbutils, GObject
 from random import randint
 from albumArtCache import AlbumArtCache
 
@@ -54,8 +54,16 @@ class RepeatType:
     SHUFFLE = 3
 
 
-class Player():
+class Player(GObject.GObject):
+    nextTrack = None
+    timeout = None
+
+    __gsignals__ = {
+        'playing-changed': (GObject.SIGNAL_RUN_FIRST, None, ())
+    }
+
     def __init__(self):
+        GObject.GObject.__init__(self)
         self.playlist = None
         self.playlistType = None
         self.playlistId = None
@@ -65,7 +73,7 @@ class Player():
         self.cache = AlbumArtCache.getDefault()
         self._symbolicIcon = self.cache.makeDefaultIcon(ART_SIZE, ART_SIZE)
 
-        Gst.init(None, 0)
+        Gst.init(None)
         self.discoverer = GstPbutils.Discoverer()
         self.player = Gst.ElementFactory.make("playbin", "player")
         self.bus = self.player.get_bus()
@@ -75,13 +83,13 @@ class Player():
         self._settings.connect('changed::repeat', self._onSettingsChanged)
         self.repeat = self._settings.get_enum('repeat')
 
-        self._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MediaPlayer2PlayerIface, self)
-        self._dbusImpl.export(Gio.DBus.session, '/org/mpris/MediaPlayer2')
+        #self._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MediaPlayer2PlayerIface, self)
+        #self._dbusImpl.export(Gio.DBus.session, '/org/mpris/MediaPlayer2')
 
         self.bus.connect("message::state-changed", self._onBusStateChanged)
         self.bus.connect("message::error", self._onBusError)
         self.bus.connect("message::eos", self._onBusEos)
-
+        self._setupView()
         if self.nextTrack:
             GLib.idle_add(GLib.PRIORITY_HIGH, self._onGLibIdle)
         elif (self.repeat == RepeatType.NONE):
@@ -98,8 +106,6 @@ class Player():
             self.progressScale.set_value(0)
             self.progressScale.sensitive = False
 
-        self._setupView()
-
     def _onSettingsChanged(self):
         self.repeat = self.settings.get_enum('repeat')
         self._syncPrevNext()
@@ -113,7 +119,7 @@ class Player():
         self._syncPlaying()
         self.emit('playing-changed')
 
-    def _onBussError(self, bus, message):
+    def _onBusError(self, bus, message):
         media = self.playlist.get_value(self.currentTrack, self.playlistField)
         if media is not None:
             uri = media.get_url()
@@ -217,8 +223,8 @@ class Player():
         self.nextBtn.sensitive = hasNext
         self.prevBtn.sensitive = hasPrevious
 
-        self._dbusImpl.emit_property_changed('CanGoNext', GLib.Variant.new('b', hasNext))
-        self._dbusImpl.emit_property_changed('CanGoPrevious', GLib.Variant.new('b', hasPrevious))
+        #self._dbusImpl.emit_property_changed('CanGoNext', GLib.Variant.new('b', hasNext))
+        #self._dbusImpl.emit_property_changed('CanGoPrevious', GLib.Variant.new('b', hasPrevious))
 
     def setPlaying(self, value):
         self.eventBox.show()
@@ -271,9 +277,9 @@ class Player():
         else:
             self.player.nextUrl = None
 
-        self._dbusImpl.emit_property_changed('Metadata', GLib.Variant.new('a{sv}', self.Metadata))
-        self._dbusImpl.emit_property_changed('CanPlay', GLib.Variant.new('b', True))
-        self._dbusImpl.emit_property_changed('CanPause', GLib.Variant.new('b', True))
+        #self._dbusImpl.emit_property_changed('Metadata', GLib.Variant.new('a{sv}', self.Metadata))
+        #self._dbusImpl.emit_property_changed('CanPlay', GLib.Variant.new('b', True))
+        #self._dbusImpl.emit_property_changed('CanPause', GLib.Variant.new('b', True))
 
         self.emit("playlist-item-changed", self.playlist, self.currentTrack)
         self.emit('current-changed')
@@ -296,7 +302,7 @@ class Player():
         if not self.timeout:
             self.timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1000, self._updatePositionCallback)
 
-        self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Playing'))
+        #self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Playing'))
 
     def pause(self):
         if self.timeout:
@@ -304,7 +310,7 @@ class Player():
             self.timeout = 0
 
         self.player.set_state(Gst.State.PAUSED)
-        self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Paused'))
+        #self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Paused'))
 
     def stop(self):
         if self.timeout:
@@ -312,7 +318,7 @@ class Player():
             self.timeout = 0
 
         self.player.set_state(Gst.State.NULL)
-        self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Stopped'))
+        #self._dbusImpl.emit_property_changed('PlaybackStatus', GLib.Variant.new('s', 'Stopped'))
         self.emit('playing-changed')
 
     def playNext(self):
@@ -454,20 +460,20 @@ class Player():
             icon = 'media-playlist-repeat-song-symbolic'
 
         self.repeatBtnImage.icon_name = icon
-        self._dbusImpl.emit_property_changed('LoopStatus', GLib.Variant.new('s', self.LoopStatus))
-        self._dbusImpl.emit_property_changed('Shuffle', GLib.Variant.new('b', self.Shuffle))
+        #self._dbusImpl.emit_property_changed('LoopStatus', GLib.Variant.new('s', self.LoopStatus))
+        #self._dbusImpl.emit_property_changed('Shuffle', GLib.Variant.new('b', self.Shuffle))
 
     def onProgressScaleChangeValue(self, scroll):
         seconds = scroll.get_value() / 60
         if seconds != self.duration:
             self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, seconds * 
1000000000)
-            self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [seconds * 1000000]))
+            #self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [seconds * 1000000]))
         else:
             duration = self.player.query_duration(Gst.Format.TIME, None)
             if duration:
                 #Rewind a second back before the track end
                 self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, 
duration[1] - 1000000000)
-                self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [(duration[1] - 1000000000) / 
1000]))
+                #self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [(duration[1] - 1000000000) / 
1000]))
         return True
 
     #MPRIS
@@ -508,7 +514,7 @@ class Player():
 
         if duration[1] >= offset * 1000:
             self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, offset * 
1000)
-            self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [offset]))
+            #self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [offset]))
         else:
             self.playNext()
 
@@ -525,7 +531,7 @@ class Player():
         duration = self.player.query_duration(Gst.Format.TIME, None)
         if duration and position >= 0 and duration[1] >= position * 1000:
             self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, position 
* 1000)
-            self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [position]))
+            #self._dbusImpl.emit_signal('Seeked', GLib.Variant.new('(x)', [position]))
 
     def OpenUriAsync(self, params, invocation):
         uri = params
@@ -624,7 +630,7 @@ class Player():
 
     def setVolume(self, rate):
         self.player.set_volume(GstAudio.StreamVolumeFormat.LINEAR, rate)
-        self._dbusImpl.emit_property_changed('Volume', GLib.Variant.new('d', rate))
+        #self._dbusImpl.emit_property_changed('Volume', GLib.Variant.new('d', rate))
 
     def getPosition(self):
         return self.player.query_position(Gst.Format.TIME, None)[1] / 1000
diff --git a/gnome-music/window.py b/gnome-music/window.py
index d203602..6056dfc 100644
--- a/gnome-music/window.py
+++ b/gnome-music/window.py
@@ -11,7 +11,7 @@ tracker = Tracker.SparqlConnection.get(None)
 
 class Window(Gtk.ApplicationWindow):
     def __init__(self, app):
-        Gtk.ApplicationWindow.init(self,
+        Gtk.ApplicationWindow.__init__(self,
                                    application=app,
                                    title=_('Music'))
         settings = Gio.Settings.new('org.gnome.Music')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]