Maemo 5: Refactor notification handling
Take advantage of an entry in the file /etc/hildon-desktop/notification-groups.conf. If the entry exists, the notification is layered on top of the (existing) gPodder window, covering it in the task switcher.
This commit is contained in:
parent
3f86b26671
commit
b93da51215
|
@ -0,0 +1,9 @@
|
|||
|
||||
[gpodder-new-episodes]
|
||||
Destination=Gpodder
|
||||
Icon=gpodder
|
||||
Title-Text-Empty=gPodder
|
||||
Secondary-Text=New episodes available
|
||||
Text-Domain=gpodder
|
||||
LED-Pattern=PatternCommonNotification
|
||||
|
|
@ -73,6 +73,7 @@ dbus_gui_object_path = '/gui'
|
|||
dbus_podcasts_object_path = '/podcasts'
|
||||
dbus_interface = 'org.gpodder.interface'
|
||||
dbus_podcasts = 'org.gpodder.podcasts'
|
||||
dbus_session_bus = None
|
||||
|
||||
# Set "win32" to True if we are on Windows
|
||||
win32 = (platform.system() == 'Windows')
|
||||
|
|
|
@ -114,7 +114,7 @@ class HeAboutDialog(gtk.Dialog):
|
|||
self.donate_url = url
|
||||
|
||||
def open_webbrowser(self, url):
|
||||
bus = dbus.SessionBus()
|
||||
bus = gpodder.dbus_session_bus
|
||||
proxy = bus.get_object('com.nokia.osso_browser', '/com/nokia/osso_browser/request', 'com.nokia.osso_browser')
|
||||
proxy.load_url(url, dbus_interface='com.nokia.osso_browser')
|
||||
|
||||
|
|
|
@ -31,10 +31,14 @@
|
|||
import gtk
|
||||
import gobject
|
||||
import dbus
|
||||
import dbus.mainloop
|
||||
import dbus.service
|
||||
import dbus.glib
|
||||
import urllib
|
||||
import time
|
||||
|
||||
import gpodder
|
||||
|
||||
class gPodderPlayer(dbus.service.Object):
|
||||
# Empty class with method definitions to send D-Bus signals
|
||||
|
||||
|
@ -59,7 +63,6 @@ class MafwPlaybackMonitor(object):
|
|||
MAFW_RENDERER_SIGNAL_STATE = 'state_changed'
|
||||
|
||||
MAFW_SENDER_PATH = '/org/gpodder/maemo/mafw'
|
||||
MAFW_SENDER_NAME = 'org.gpodder.maemo.mafw'
|
||||
|
||||
class MafwPlayState(object):
|
||||
Stopped = 0
|
||||
|
@ -75,7 +78,7 @@ class MafwPlaybackMonitor(object):
|
|||
self._start_position = 0
|
||||
|
||||
self._player = gPodderPlayer(self.MAFW_SENDER_PATH, \
|
||||
dbus.service.BusName(self.MAFW_SENDER_NAME, self.bus))
|
||||
dbus.service.BusName(gpodder.dbus_bus_name, self.bus))
|
||||
|
||||
state, object_id = self.get_status()
|
||||
|
||||
|
@ -111,6 +114,10 @@ class MafwPlaybackMonitor(object):
|
|||
self.on_state_changed(-1)
|
||||
self.on_state_changed(self.MafwPlayState.Playing)
|
||||
|
||||
# We have to return True here, or otherwise this filter
|
||||
# would eat all D-Bus method calls to other objects.
|
||||
return True
|
||||
|
||||
def object_id_to_filename(self, object_id):
|
||||
# Naive, but works for now...
|
||||
if object_id.startswith('localtagfs::'):
|
||||
|
@ -177,11 +184,3 @@ class MafwPlaybackMonitor(object):
|
|||
self._player.PlaybackStopped(self._start_position, position, 0, self._filename)
|
||||
self._is_playing = False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
DBusGMainLoop(set_as_default=True)
|
||||
bus = dbus.SessionBus()
|
||||
monitor = MafwPlaybackMonitor(bus)
|
||||
gtk.main()
|
||||
|
||||
|
|
|
@ -49,7 +49,8 @@ except ImportError:
|
|||
pass
|
||||
class glib:
|
||||
class DBusGMainLoop:
|
||||
pass
|
||||
def __init__(self, *args, **kwargs):
|
||||
pass
|
||||
class service:
|
||||
@staticmethod
|
||||
def method(*args, **kwargs):
|
||||
|
@ -238,8 +239,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
# Create a D-Bus monitoring object that takes care of
|
||||
# tracking MAFW (Nokia Media Player) playback events
|
||||
# and sends episode playback status events via D-Bus
|
||||
session_bus = dbus.SessionBus(mainloop=dbus.glib.DBusGMainLoop())
|
||||
self.mafw_monitor = MafwPlaybackMonitor(session_bus)
|
||||
self.mafw_monitor = MafwPlaybackMonitor(gpodder.dbus_session_bus)
|
||||
|
||||
self.gPodder.connect('key-press-event', self.on_key_press)
|
||||
|
||||
|
@ -2115,8 +2115,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
PANUCCI_NAME = 'org.panucci.panucciInterface'
|
||||
PANUCCI_PATH = '/panucciInterface'
|
||||
PANUCCI_INTF = 'org.panucci.panucciInterface'
|
||||
session_bus = dbus.SessionBus(mainloop=dbus.glib.DBusGMainLoop())
|
||||
o = session_bus.get_object(PANUCCI_NAME, PANUCCI_PATH)
|
||||
o = gpodder.dbus_session_bus.get_object(PANUCCI_NAME, PANUCCI_PATH)
|
||||
i = dbus.Interface(o, PANUCCI_INTF)
|
||||
|
||||
def on_reply(*args):
|
||||
|
@ -2144,8 +2143,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
MEDIABOX_NAME = 'de.pycage.mediabox'
|
||||
MEDIABOX_PATH = '/de/pycage/mediabox/control'
|
||||
MEDIABOX_INTF = 'de.pycage.mediabox.control'
|
||||
session_bus = dbus.SessionBus(mainloop=dbus.glib.DBusGMainLoop())
|
||||
o = session_bus.get_object(MEDIABOX_NAME, MEDIABOX_PATH)
|
||||
o = gpodder.dbus_session_bus.get_object(MEDIABOX_NAME, MEDIABOX_PATH)
|
||||
i = dbus.Interface(o, MEDIABOX_INTF)
|
||||
|
||||
def on_reply(*args):
|
||||
|
@ -2694,11 +2692,11 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
n.set_urgency(pynotify.URGENCY_CRITICAL)
|
||||
n.set_hint('dbus-callback-default', ' '.join([
|
||||
gpodder.dbus_bus_name,
|
||||
gpodder.gui_object_path,
|
||||
gpodder.dbus_gui_object_path,
|
||||
gpodder.dbus_interface,
|
||||
'offer_new_episodes',
|
||||
]))
|
||||
n.set_hint('led-pattern', 'PatternCommunicationCall')
|
||||
n.set_category('gpodder-new-episodes')
|
||||
n.show()
|
||||
except Exception, e:
|
||||
log('Error: %s', str(e), sender=self, traceback=True)
|
||||
|
@ -3982,8 +3980,10 @@ def main(options=None):
|
|||
gtk.about_dialog_set_url_hook(lambda dlg, link, data: util.open_website(link), None)
|
||||
|
||||
try:
|
||||
session_bus = dbus.SessionBus(mainloop=dbus.glib.DBusGMainLoop())
|
||||
bus_name = dbus.service.BusName(gpodder.dbus_bus_name, bus=session_bus)
|
||||
dbus_main_loop = dbus.glib.DBusGMainLoop(set_as_default=True)
|
||||
gpodder.dbus_session_bus = dbus.SessionBus(dbus_main_loop)
|
||||
|
||||
bus_name = dbus.service.BusName(gpodder.dbus_bus_name, bus=gpodder.dbus_session_bus)
|
||||
except dbus.exceptions.DBusException, dbe:
|
||||
log('Warning: Cannot get "on the bus".', traceback=True)
|
||||
dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, \
|
||||
|
|
|
@ -31,6 +31,7 @@ except ImportError:
|
|||
# Import Mock D-Bus interfaces when D-Bus bindings are not installed
|
||||
from gpodder.gui import dbus
|
||||
|
||||
import gpodder
|
||||
|
||||
class MediaPlayerDBusReceiver(object):
|
||||
INTERFACE = 'org.gpodder.player'
|
||||
|
@ -40,7 +41,7 @@ class MediaPlayerDBusReceiver(object):
|
|||
def __init__(self, on_play_event):
|
||||
self.on_play_event = on_play_event
|
||||
|
||||
self.bus = dbus.SessionBus()
|
||||
self.bus = gpodder.dbus_session_bus
|
||||
self.bus.add_signal_receiver(self.on_playback_started, \
|
||||
self.SIGNAL_STARTED, \
|
||||
self.INTERFACE, \
|
||||
|
|
Loading…
Reference in New Issue