1 # Simple UPnP control point using BRisa framework
5 from brisa.core.reactors import install_default_reactor
6 reactor = install_default_reactor()
8 from brisa.core.network import parse_url
9 from brisa.core.threaded_call import run_async_function
11 from brisa.upnp.control_point.control_point_av import ControlPointAV
13 service = ('u','urn:schemas-upnp-org:service:PlayList:1')
14 zukebox_type = 'urn:schemas-upnp-org:device:ZukeBoxServer:1'
16 class ZukeboxControlPoint(ControlPointAV):
19 ControlPointAV.__init__(self)
22 self.initial_subscribes()
25 def initial_subscribes(self):
26 self.subscribe('new_device_event', self.on_new_device)
27 self.subscribe('removed_device_event', self.on_removed_device)
30 def on_new_device(self, dev):
31 self.devices.append(dev)
34 def on_removed_device(self, udn):
36 for dev in self.devices:
39 self.devices.remove(device)
45 reactor.add_after_stop_func(self.stop)
46 thread.start_new_thread(self.handle_cmds, ())
50 def _list_devices(self):
52 for dev in self.devices:
53 print 'device %d: ' % n
54 print '\tudn:', dev.udn
55 print '\tfriendly_name:', dev.friendly_name
56 print '\tservices:', dev.services
57 print '\ttype:', dev.device_type
61 def _select_zukebox_device(self):
63 for dev in self.devices:
64 if dev.friendly_name == 'ZukeBox Server':
69 def handle_cmds(self):
75 self.start_search(600, 'upnp:rootdevice')
77 self.device = self._select_zukebox_device()
80 self.set_current_server(self.device)
83 ret=self.getPlaylist()
91 print 'Handle_cmds: Exception %s' %e
96 device = self.get_current_server()
97 service = device.get_service_by_type('urn:schemas-upnp-org:service:PlayList:1')
98 locked = service.IsLocked()
99 if locked['Locked'] == '0':
100 d= {'CurrentURI':'teste', 'CurrentURIMetaData':'teste', 'FromName':'teste','ToName':'teste'}
102 print service.GetSizeOfPlayList()
103 print service.IsLocked()
105 print 'Cannot insert the music in the list. Exception: \n %s' %e
110 device = self.get_current_server()
111 service = device.get_service_by_type('urn:schemas-upnp-org:service:PlayList:1')
115 print service.GetSizeOfPlayList()
116 print service.IsLocked()
118 print 'Cannot drop the music of the list. Exception: \n %s' %e
121 def getPlaylist(self):
123 device = self.get_current_server()
124 service = device.get_service_by_type('urn:schemas-upnp-org:service:PlayList:1')
125 playlist = service.GetPlayList()
126 #service.GetCurrentItem()
127 #service.GetNextItem()
128 #service.GetPreviousItem()
131 print 'Service not discovered. Exception: %s' %e
133 print 'Error in get current playlist. Exception: %s' %e
141 def searchGenreList(self, cp, genreType):
143 device = self._select_zukebox_device()
144 service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
145 GenreType = {'GenreType':genreType}
146 genre = service.SearchGenreList(GenreType)
149 print 'Service not discovered. Exception: %s' %e
151 print 'Error in get genre type list. Exception: %s' %e
159 def searchMusicList(self, cp, music_name):
161 device = self._select_zukebox_device()
162 service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
163 MusicName = {'MusicName':music_name}
164 music = service.SearchMusicList(MusicName)
167 print 'Service not discovered. Exception: %s' %e
169 print 'Error in get music list by name. Exception: %s' %e
177 def searchArtistList(self, cp, artist_name):
179 device = self._select_zukebox_device()
180 service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
181 ArtistName = {'ArtistName':artist_name}
182 artist = service.SearchMusicList(ArtistName)
185 print 'Service not discovered. Exception: %s' %e
187 print 'Error in get artist list by name. Exception: %s' %e
195 def searchAllAudioList(self, cp):
197 device = self._select_zukebox_device()
198 service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
199 all_audio = service.SearchMusicList()
202 print 'Service not discovered. Exception: %s' %e
204 print 'Error in get music list by name. Exception: %s' %e
212 def content_directory(self, cp):
213 print 'Testing content_directory acess '