Modify the setup.py to get the zukebox-scan
[zukebox] / control_point / zukebox_control_point.py
1 # Simple UPnP control point using BRisa framework
2
3 from brisa.core.reactors import install_default_reactor
4 reactor = install_default_reactor()
5
6 from brisa.core.network import parse_url
7 from brisa.core.threaded_call import run_async_function
8
9 from brisa.upnp.control_point.control_point import ControlPoint
10 from brisa.upnp.control_point.control_point_av import ControlPointAV
11
12 service = ('u','urn:schemas-upnp-org:service:PlayList:1')
13 zukebox_type = 'urn:schemas-upnp-org:device:ZukeBoxServer:1'
14
15 class ZukeboxControlPoint(ControlPointAV):
16
17     devices=[]
18
19     def __init__(self):
20         ControlPointAV.__init__(self)
21         devices=[]
22
23     def start(self):
24
25         self.cp = self.create_control_point()
26         self.cp.start()
27         print 'Create control point'
28         #reactor.add_after_stop_func(self.cp.stop)
29         #reactor.main()
30         #print 'Reactor main() criado'
31         self.cp.start_search(300, 'upnp:rootdevice')
32         print 'Start_search'
33         while True:
34             if self.set_zukebox_server(self.cp):
35                 print 'Searching Zukebox Server'
36                 break
37
38         print 'After searching'
39         print self.cp.get_current_server().services()
40         return self.cp
41
42
43     def create_control_point(self):
44         """ Creates the control point and binds callbacks to device events.
45         """
46         cp = ControlPointAV()
47         cp.subscribe('new_device_event', self.on_new_device)
48         cp.subscribe('removed_device_event', self.on_removed_device)
49         return cp
50
51
52     def on_new_device(self, dev):
53
54         if not dev:
55             return
56
57         devices.append(dev)
58
59
60     def on_removed_device(self, udn):
61
62         for dev in devices:
63             if dev.udn == udn:
64                 devices.remove(dev)
65
66
67     def get_switch_service(self, device):
68         return device.services[service[1]]
69
70
71     def set_zukebox_server(self, cp):
72         
73         for device in cp.get_devices():
74             print 'set_zukebox_server'
75             if device.values().friendly_name == 'Zukebox-Server':
76                 cp.set_current_server(device)
77                 return True
78
79         return False
80
81
82     def get_playlist(self, cp):
83
84         playlist = {}
85         try:
86             device = cp.get_current_server()
87             service = device.get_service_by_type('urn:schemas-upnp-org:service:Playlist:1')
88             playlist = service.GetPlaylist()
89         except Exception, e:
90             if not service:
91                 print 'Service not discovered. Exception: %s' %e
92             elif not playlist:
93                 print 'Error in get current playlist. Exception: %s' %e
94             else:
95                 print '%s'%e
96             playlist = None
97         
98         return playlist
99
100
101     def searchGenreList(self, cp, genreType):
102
103         genre = {}
104         try:
105             device = cp.get_current_server()
106             service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
107             GenreType = {'GenreType':genreType}
108             genre = service.SearchGenreList(GenreType)
109         except Exception, e:
110             if not service:
111                 print 'Service not discovered. Exception: %s' %e
112             elif not genre:
113                 print 'Error in get genre type list. Exception: %s' %e
114             else:
115                 print '%s' %e
116             genre = None
117
118         return genre
119
120
121     def searchMusicList(self, cp, music_name):
122
123         music = {}
124         try:
125             device = cp.get_current_server()
126             service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
127             MusicName = {'MusicName':music_name}
128             music = service.SearchMusicList(MusicName)
129         except Exception, e:
130             if not service:
131                 print 'Service not discovered. Exception: %s' %e
132             elif not music:
133                 print 'Error in get music list by name. Exception: %s' %e
134             else:
135                 print '%s' %e
136             music = None
137
138         return music
139             
140
141     def searchArtistList(self, cp, artist_name):
142
143         artist = {}
144         try:
145             device = cp.get_current_server()
146             service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
147             ArtistName = {'ArtistName':artist_name}
148             artist = service.SearchMusicList(ArtistName)
149         except Exception, e:
150             if not service:
151                 print 'Service not discovered. Exception: %s' %e
152             elif not artist:
153                 print 'Error in get artist list by name. Exception: %s' %e
154             else:
155                 print '%s' %e
156             artist = None
157
158         return artist
159
160
161     def searchAllAudioList(self, cp):
162
163         all_audio = {}
164         try:
165             device = cp.get_current_server()
166             service = device.get_service_by_type('urn:schemas-upnp-org:service:Search:1')
167             all_audio = service.SearchMusicList()
168         except Exception, e:
169             if not service:
170                 print 'Service not discovered. Exception: %s' %e
171             elif not all_audio:
172                 print 'Error in get music list by name. Exception: %s' %e
173             else:
174                 print '%s' %e
175             all_audio = None
176
177         return all_audio
178
179
180     def content_directory(self, cp):
181         print 'Testing content_directory acess '
182
183
184     def stop(self, cp):
185         cp.stop()
186         reactor.main_quit()