From 6433766740a6ff7f4aeeeedd2111a20ca52ab839 Mon Sep 17 00:00:00 2001 From: =?utf8?q?"Andr=C3=A9=20L.=20V.=20Loureiro"?= Date: Fri, 29 May 2009 18:42:48 -0400 Subject: [PATCH] Added some things about brisa 0.9 --- zukebox_server/src/bin/zukebox-server | 7 +- .../src/plugins/audio_library/library.py | 6 +- zukebox_server/src/server/zb_server.py | 10 +- .../src/services/playlist/zb_playlist.py | 111 +++++++++++--------- .../src/xml_descriptions/zukebox-playlist-scpd.xml | 65 +++++++----- 5 files changed, 115 insertions(+), 84 deletions(-) diff --git a/zukebox_server/src/bin/zukebox-server b/zukebox_server/src/bin/zukebox-server index 232d84d..1aa81d6 100755 --- a/zukebox_server/src/bin/zukebox-server +++ b/zukebox_server/src/bin/zukebox-server @@ -20,6 +20,8 @@ zb_base_path = pjoin(home_path, ".zukebox") zb_database_path = pjoin(zb_base_path, "audio_library.db") zb_module_path = zukebox_server.__path__[0] zb_plugins_path = pjoin(zb_module_path, "plugins") +zb_services_path = pjoin(zb_module_path, "services") +zb_xml_path = pjoin(zb_module_path, "xml_descriptions") plugin_section = "zukebox_server_plugin-audio-library" @@ -50,8 +52,10 @@ def setup_zukebox(): # ZBox Server config.manager.set_parameter("zukebox_server", "name", "ZukeBox Server") config.manager.set_parameter("zukebox_server", "owner", "zukebox-server") - config.manager.set_parameter("zukebox_server", "home", zb_module_path) + config.manager.set_parameter("zukebox_server", "module_path", zb_module_path) config.manager.set_parameter("zukebox_server", "plugins", zb_plugins_path) + config.manager.set_parameter("zukebox_server", "services", zb_services_path) + config.manager.set_parameter("zukebox_server", "xml_path", zb_xml_path) # ZBox Plugins config.manager.set_parameter(plugin_section, "owner", @@ -70,6 +74,7 @@ def setup_zukebox(): def init_server(): log.info("ZukeBox Server starting....") listen_url, daemon = options.parse_args("ZukeBox Server") + print listen_url, deamon if daemon: daemonize() server_name = config.get_parameter("zukebox_server", "name") diff --git a/zukebox_server/src/plugins/audio_library/library.py b/zukebox_server/src/plugins/audio_library/library.py index 8dca824..ee1f0bb 100644 --- a/zukebox_server/src/plugins/audio_library/library.py +++ b/zukebox_server/src/plugins/audio_library/library.py @@ -54,15 +54,13 @@ class ZAudioLibrary(PluginInterface): if self.lms is not None: self.lms.process(self.audio_folder) else: - raise Exception("Could not process audio folder lightmediascanner is - None") + raise Exception("Could not process audio folder lms is None") def check_audio_folder(self): if self.lms is not None: self.lms.check(self.audio_folder) else: - raise Exception("Could not check audio folder lightmediascanner is - None") + raise Exception("Could not check audio folder lms is None") def browse(self,id, browse_flag, filter, starting_index, requested_count, sort_criteria): if id in self.containers: diff --git a/zukebox_server/src/server/zb_server.py b/zukebox_server/src/server/zb_server.py index 8fda553..f8813c6 100644 --- a/zukebox_server/src/server/zb_server.py +++ b/zukebox_server/src/server/zb_server.py @@ -74,15 +74,13 @@ class ZukeBoxServer(ZIface, dbus.service.Object): manufacturer="Zagaia Laboratory", manufacturer_url=project_page, model_description=model_description, - model_name=model_name, model_number=serial_no, + model_name=model_name, model_number="1.0", model_url=project_page, serial_number=serial_no) def _create_services(self): - self.cds = ContentDirectory(self.plugins_folder, - self.plugins_module_path) + self.cds = ContentDirectory(self.plugins_folder, self.plugins_module_path) cm = ConnectionManagerServer() - mod_path = config.get_parameter("zukebox_server", "home") - x_path = os.path.join(mod_path, "xml_descriptions") + x_path = config.get_parameter("zukebox_server", "xml_path") playlist = PlayList(positions=10, xml_path=x_path) self.device.add_service(self.cds) @@ -93,8 +91,6 @@ class ZukeBoxServer(ZIface, dbus.service.Object): """Start the ZukeBox Server""" self._create_device() self._create_services() - #pm = self.cds.control_controller.plugin_manager - #pm.plugins_instances["audio_library"].do_scan() self.device.start() reactor.add_after_stop_func(self.device.stop) reactor.main() diff --git a/zukebox_server/src/services/playlist/zb_playlist.py b/zukebox_server/src/services/playlist/zb_playlist.py index b72424d..bbc5c01 100644 --- a/zukebox_server/src/services/playlist/zb_playlist.py +++ b/zukebox_server/src/services/playlist/zb_playlist.py @@ -9,8 +9,8 @@ from brisa.upnp.device import Service, ServiceController pjoin = os.path.join class PlayListOutBoundExcept(Exception): - def __rep__(self): - return "Play List Out of Bounds!" + def __init__(self, *args, **kwargs): + Exception.__init__(self, args, kwargs) @@ -18,24 +18,19 @@ class PlayList(Service): """Class PlayList Introduction ============ - Implements a playlist for ZukeBox server. + Implements a playlist for ZukeBox server as a service. + For now the playlist works with a range of 10 positions, but in the + future that should change to range of undefined positions, thus + the playlist will be "sizeable". """ - service_type = "urn:schemas-upnp-org:service:PlayList:1" - service_name = "PlayList" + srvc_type = "urn:schemas-upnp-org:service:PlayList:1" + srvc_name = "PlayList" def __init__(self, positions=10, xml_path=''): scpd_path = pjoin(xml_path, "zukebox-playlist-scpd.xml") - Service.__init__(self, self.service_name, self.service_type, '', scpd_path, - PlayListControl(positions, self.service_type)) - - def get_playlist(self): - return self.control_controller.get_playlist() - -class PlayListControl(ServiceController): - - def __init__(self, positions, serv_type): - ServiceController.__init__(self, serv_type) + log.info("PlayList service scpd_path = %s" % scpd_path) + Service.__init__(self, self.srvc_name, self.srvc_type, '', scpd_path) self.positions = positions self.list = [] self.current = 0 @@ -45,65 +40,85 @@ class PlayListControl(ServiceController): self.to_name = None self.current_uri = None self.current_uri_metadata = None + self.locked = 0 + self.available = 1 def soap_IsLocked(self, *args, **kwargs): - locked = True - if not len(self.list) == self.positions: - locked = False - rt = {"Locked": locked} - return {"IsLockedResponse": rt} - - def soap_IsAvailble(self, *args, **kwargs): - availble = False - if not len(self.list) == 0: - availble = True - rt = {"Availble": availble} - return {"IsAvailbleResponse": rt} - - def soap_IsAvailble(self, *args, **kwargs): - availble = False - if not len(self.list) == 0: - availble = True - rt = {"Availble": availble} - return {"IsAvailbleResponse": rt} + if len(self.list) == self.positions: + self.locked = 1 + return {"Locked": self.locked} + + def soap_IsAvailable(self, *args, **kwargs): + if not len(self.list) < 10: + self.available = 0 + return {"Available": self.available} def soap_Append(self, *args, **kwargs): """Put a object in the playlist """ - if not self.is_locked(): + if not self.locked: self.current_uri = kwargs["CurrentURI"] self.current_uri_metadata = kwargs["CurrentURIMetaData"] self.from_name = kwargs["FromName"] self.to_name = kwargs["ToName"] - self.list.append(self.current_uri) + req = {"cur_uri": self.current_uri, + "cur_uri_data": self.current_uri_metadata, + "from_name": self.from_name, + "to_name": self.to_name} + self.list.append(req) - return {"Append": {}} + return {} else: - raise PlayListOutBoundExcept() + raise PlayListOutBoundExcept("Playlist is full") def soap_Drop(self, *args, **kwargs): """Pop the object at position passed by index """ - if self.is_availble(): + if self.available: index = kwargs["Index"] self.list.pop(index) - return {"Drop": {}} + return {} else: - raise PlayListOutBoundExcept() + raise PlayListOutBoundExcept("Playlist unavailable") def soap_GetSizeOfPlayList(self, *args, **kwargs): """Return the size of playlist""" lenght = len(self.list) - rt = {"PlayListSize": lenght} - return {"GetSizeOfPlayListResponse": rt} + return {"PlayListSize": lenght} + + def soap_GetCurrentItem(self, *args, **kwargs): + """Get the current position from playlist""" + if self.available: + curr = self.list[self.current] + #for now get only uri + curr_uri = curr["cur_uri"] + return {"CurrentItem": curr_uri} + + def soap_GetNextItem(self, *args, **kwargs): + """Get the next item position from playlist""" + if self.current == len(self.list) - 1: + self.next = self.current + else: + self.next = self.current + 1 + self.current = self.next + next = self.list[self.next] + #for now get only next uri + next_uri = next["cur_uri"] + return {"NextItem": next_uri} + + def soap_GetPreviousItem(self, *args, **kwargs): + """Get the previous item position from playlist""" + if self.current != 0: + self.prev = self.current - 1 + self.current = self.prev + prev = self.list[self.prev] + #for now get only previous uri + prev_uri = prev["cur_uri"] + return {"PreviousItem": prev_uri} - def soap_GetCurrent(self, *args, **kwargs): - if self.is_availble(): - rt = {"CurrentPosition": self.list[self.current]} - return {"GetCurrentResponse": rt} def clean_playlist(self): - if self.is_availble(): + if self.available: self.list = [] def get_playlist(self): diff --git a/zukebox_server/src/xml_descriptions/zukebox-playlist-scpd.xml b/zukebox_server/src/xml_descriptions/zukebox-playlist-scpd.xml index d370a09..fb348e5 100644 --- a/zukebox_server/src/xml_descriptions/zukebox-playlist-scpd.xml +++ b/zukebox_server/src/xml_descriptions/zukebox-playlist-scpd.xml @@ -1,5 +1,5 @@ - + 1 0 @@ -16,12 +16,12 @@ - IsAvailble + IsAvailable - Availble + Available out - ListIsAvailble + ListIsAvailable @@ -66,47 +66,69 @@ PlayListSize out - SizeOfPlayList + A_ARG_TYPE_SizeOfPlayList - GetCurrent + GetCurrentItem - CurrentPosition + CurrentItem out - CurrPosition + A_ARG_TYPE_Item + + + + + GetNextItem + + + NextItem + out + A_ARG_TYPE_Item + + + + + GetPreviousItem + + + PreviousItem + out + A_ARG_TYPE_Item - + ListIsLocked boolean + 0 - - ListIsAvailble + + ListIsAvailable boolean + 1 - + AVTransportURI string - + AVTransportURIMetaData string - + SenderName string - + DestinyName string - + PositionOfList ui4 @@ -116,7 +138,7 @@ - SizeOfPlayList + A_ARG_TYPE_SizeOfPlayList ui4 0 @@ -125,13 +147,8 @@ - CurrPosition - ui4 - - 0 - 9 - 1 - + A_ARG_TYPE_Item + string -- 1.7.9.5