1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import os
17 import dbus
18 from GenericPlayer import GenericAPI
19 import urllib
20 from urlparse import urlparse
21
23 __name__ = 'Rhythmbox'
24 __version__ = '0.0'
25 __author__ = 'vrunner'
26 __desc__ = 'API to the Rhythmbox Music Player'
27
28 ns = "org.gnome.Rhythmbox"
29 playerAPI = None
30 shellAPI = None
31
32 callback_fn = None
33
34
35
38
40 if self.ns in dbus_iface.ListNames(): return True
41 else: return False
42
44 proxy_obj1 = self.session_bus.get_object(self.ns, '/org/gnome/Rhythmbox/Player')
45 proxy_obj2 = self.session_bus.get_object(self.ns, '/org/gnome/Rhythmbox/Shell')
46 self.playerAPI = dbus.Interface(proxy_obj1, self.ns+".Player")
47 self.shellAPI = dbus.Interface(proxy_obj2, self.ns+".Shell")
48
50 tmp = self.getProperty('rb:stream-song-title')
51 if tmp: return tmp
52 else: return self.getProperty('title')
53
55 tmp = self.getProperty('rb:stream-song-album')
56 if tmp: return tmp
57 else: return self.getProperty('album')
58
60 tmp = self.getProperty('rb:stream-song-artist')
61 if tmp: return tmp
62 else: return self.getProperty('artist')
63
64
65
66
68
69
70
71 coverFile = self.getProperty('rb:coverArt-uri')
72 if coverFile != None:
73 if os.path.isfile(coverFile):
74 return coverFile
75
76 coverFile = os.environ['HOME']+"/.cache/rhythmbox/covers/"+self.get_artist()+" - "+self.get_album()+".jpg"
77 if not os.path.isfile(coverFile):
78 baseURL = urlparse( urllib.url2pathname( self.playerAPI.getPlayingUri() ) )
79 basePath = os.path.dirname( baseURL.path )
80 names = ['Album', 'Cover', 'Folde']
81 for x in os.listdir(basePath):
82 if os.path.splitext(x)[1] in [".jpg", ".png"] and (x.capitalize()[:5] in names):
83 coverFile = basePath + '/' + x
84 return coverFile
85 return coverFile
86
87
88
90 try:
91 test_playing = self.playerAPI.getPlaying()
92 if self.playerAPI.getPlaying() == 1: return True
93 else: return False
94 except DBusException:
95 return False
96
102
105
108
116
117
119 try:
120 val = self.shellAPI.getSongProperties(self.playerAPI.getPlayingUri())[name]
121 return val
122 except:
123 return None
124
127