[gnome-music/wip/merge: 43/343] Almost ready to run :)
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/merge: 43/343] Almost ready to run :)
- Date: Thu, 25 Jul 2013 11:17:07 +0000 (UTC)
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]