1
2
3 import os
4 import dbus
5 from GenericPlayer import GenericAPI
6 import urllib
7 from urlparse import urlparse
8
10 __name__ = 'Rhythmbox'
11 __version__ = '0.0'
12 __author__ = 'vrunner'
13 __desc__ = 'API to the Rhythmbox Music Player'
14
15 ns = "org.gnome.Rhythmbox"
16 playerAPI = None
17 shellAPI = None
18
19 callback_fn = None
20
21
22
25
27 if self.ns in dbus_iface.ListNames(): return True
28 else: return False
29
31 proxy_obj1 = self.session_bus.get_object(self.ns, '/org/gnome/Rhythmbox/Player')
32 proxy_obj2 = self.session_bus.get_object(self.ns, '/org/gnome/Rhythmbox/Shell')
33 self.playerAPI = dbus.Interface(proxy_obj1, self.ns+".Player")
34 self.shellAPI = dbus.Interface(proxy_obj2, self.ns+".Shell")
35
37 tmp = self.getProperty('rb:stream-song-title')
38 if tmp: return tmp
39 else: return self.getProperty('title')
40
42 tmp = self.getProperty('rb:stream-song-album')
43 if tmp: return tmp
44 else: return self.getProperty('album')
45
47 tmp = self.getProperty('rb:stream-song-artist')
48 if tmp: return tmp
49 else: return self.getProperty('artist')
50
51
52
53
55
56
57
58 coverFile = self.getProperty('rb:coverArt-uri')
59 if coverFile != None:
60 if os.path.isfile(coverFile):
61 return coverFile
62
63 coverFile = os.environ['HOME']+"/.cache/rhythmbox/covers/"+self.get_artist()+" - "+self.get_album()+".jpg"
64 if not os.path.isfile(coverFile):
65 baseURL = urlparse( urllib.url2pathname( self.playerAPI.getPlayingUri() ) )
66 basePath = os.path.dirname( baseURL.path )
67 names = ['Album', 'Cover', 'Folde']
68 for x in os.listdir(basePath):
69 if os.path.splitext(x)[1] in [".jpg", ".png"] and (x.capitalize()[:5] in names):
70 coverFile = basePath + '/' + x
71 return coverFile
72 return coverFile
73
74
75
77 try:
78 test_playing = self.playerAPI.getPlaying()
79 if self.playerAPI.getPlaying() == 1: return True
80 else: return False
81 except DBusException:
82 return False
83
89
92
95
103
104
106 try:
107 val = self.shellAPI.getSongProperties(self.playerAPI.getPlayingUri())[name]
108 return val
109 except:
110 return None
111
114