Merge lp:~arkahys/docky/rhythmbox_control into lp:docky

Proposed by maxime Cheval
Status: Merged
Merge reported by: Rico Tzschichholz
Merged at revision: not available
Proposed branch: lp:~arkahys/docky/rhythmbox_control
Merge into: lp:docky
Diff against target: 89 lines (+83/-0)
1 file modified
scripts/rhythmbox_control.py (+83/-0)
To merge this branch: bzr merge lp:~arkahys/docky/rhythmbox_control
Reviewer Review Type Date Requested Status
Rico Tzschichholz Approve
Review via email: mp+16513@code.launchpad.net
To post a comment you must log in.
Revision history for this message
maxime Cheval (arkahys) wrote :

python extension for rhythmbox.
controls already works,
dev on : display time elapsed + icon of jacket

Revision history for this message
Rico Tzschichholz (ricotz) wrote :

please upload your script to the branch you have create so we can have look at it.

lp:~arkahys/docky/rhythmbox_control updated
1. By maxime Cheval

initial import, controls buttons

Revision history for this message
Rico Tzschichholz (ricotz) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'scripts'
2=== renamed directory 'scripts' => 'scripts.moved'
3=== added file 'scripts/rhythmbox_control.py'
4--- scripts/rhythmbox_control.py 1970-01-01 00:00:00 +0000
5+++ scripts/rhythmbox_control.py 2009-12-23 14:16:20 +0000
6@@ -0,0 +1,83 @@
7+#!/usr/bin/env python
8+
9+import atexit
10+import gobject
11+import glib
12+import dbus
13+import dbus.glib
14+import sys
15+import os
16+
17+try:
18+ from docky.docky import DockyItem, DockySink
19+ from signal import signal, SIGTERM
20+ from sys import exit
21+except ImportError, e:
22+ exit()
23+
24+rhythmboxbus = "org.gnome.Rhythmbox"
25+playerpath = "/org/gnome/Rhythmbox/Player"
26+playeriface = "org.gnome.Rhythmbox.Player"
27+
28+class DockyrhythmboxItem(DockyItem):
29+ def __init__(self, path):
30+ self.timer = 0
31+ DockyItem.__init__(self, path)
32+ self.init_rhythmbox_objects()
33+ if self.player.getPlaying() == True:
34+ state = True
35+ else:
36+ state = False
37+ self.set_menu_buttons(state)
38+ dbus.SessionBus().add_signal_receiver(self.set_menu_buttons, "playingChanged", playeriface, rhythmboxbus, playerpath)
39+
40+ def init_rhythmbox_objects(self):
41+ bus = dbus.SessionBus()
42+ obj = bus.get_object(rhythmboxbus, playerpath)
43+ self.player = dbus.Interface(obj, playeriface)
44+
45+ def set_menu_buttons(self, state):
46+ self.clear_menu_buttons()
47+ self.add_menu_item("Previous", "media-skip-backward.svg", "", "Previous")
48+ if (state == True):
49+ self.add_menu_item("Pause", "media-playback-pause.svg", "", "Pause")
50+ else:
51+ self.add_menu_item("Play", "media-playback-start.svg", "", "Play")
52+ self.add_menu_item("Next", "media-skip-forward.svg", "", "Next")
53+
54+ def clear_menu_buttons(self):
55+ for k, v in self.id_map.iteritems():
56+ try:
57+ self.iface.RemoveItem(k)
58+ except:
59+ break;
60+
61+ def menu_pressed(self, menu_id):
62+ if self.id_map[menu_id] == "Next":
63+ self.player.next()
64+ elif self.id_map[menu_id] == "Previous":
65+ self.player.previous()
66+ else:
67+ self.player.playPause(1)
68+
69+ def add_menu_item(self, name, icon, group, ident):
70+ menu_id = self.iface.AddMenuItem(name, icon, group)
71+ self.id_map[menu_id] = ident
72+
73+class DockyrhythmboxSink(DockySink):
74+ def item_path_found(self, pathtoitem, item):
75+ if item.GetOwnsDesktopFile() and item.GetDesktopFile().endswith ("rhythmbox.desktop"):
76+ self.items[pathtoitem] = DockyrhythmboxItem(pathtoitem)
77+
78+dockysink = DockyrhythmboxSink()
79+
80+def cleanup ():
81+ dockysink.dispose ()
82+
83+if __name__ == "__main__":
84+ mainloop = gobject.MainLoop(is_running=True)
85+
86+ atexit.register (cleanup)
87+ signal(SIGTERM, lambda signum, stack_frame: exit(1))
88+
89+ mainloop.run()

Subscribers

People subscribed via source and target branches

to status/vote changes: