Added some things about brisa 0.9
authorAndré L. V. Loureiro <loureiro.andrew@gmail.com>
Fri, 29 May 2009 22:42:48 +0000 (18:42 -0400)
committerAndré L. V. Loureiro <loureiro.andrew@gmail.com>
Fri, 29 May 2009 22:42:48 +0000 (18:42 -0400)
zukebox_server/src/bin/zukebox-server
zukebox_server/src/plugins/audio_library/library.py
zukebox_server/src/server/zb_server.py
zukebox_server/src/services/playlist/zb_playlist.py
zukebox_server/src/xml_descriptions/zukebox-playlist-scpd.xml

index 232d84d..1aa81d6 100755 (executable)
@@ -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")
index 8dca824..ee1f0bb 100644 (file)
@@ -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:
index 8fda553..f8813c6 100644 (file)
@@ -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()
index b72424d..bbc5c01 100644 (file)
@@ -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):
index d370a09..fb348e5 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<scpd xmls="urn:schemas-upnp-org:service-1-0">
+<scpd xmlns="urn:schemas-upnp-org:service-1-0">
        <specVersion>
                <major>1</major>
                <minor>0</minor>
                        </argumentList>
                </action>
                <action>
-                       <name>IsAvailble</name>
+                       <name>IsAvailable</name>
                        <argumentList>
                                <argument>
-                                       <name>Availble</name>
+                                       <name>Available</name>
                                        <direction>out</direction>
-                                       <relatedStateVariable>ListIsAvailble</relatedStateVariable>
+                                       <relatedStateVariable>ListIsAvailable</relatedStateVariable>
                                </argument>
                        </argumentList>
                </action>
                                <argument>
                                        <name>PlayListSize</name>
                                        <direction>out</direction>
-                                       <relatedStateVariable>SizeOfPlayList</relatedStateVariable>
+                                       <relatedStateVariable>A_ARG_TYPE_SizeOfPlayList</relatedStateVariable>
                                </argument>
                        </argumentList>
                </action>
                <action>
-                       <name>GetCurrent</name>
+                       <name>GetCurrentItem</name>
                        <argumentList>
                                <argument>
-                                       <name>CurrentPosition</name>
+                                       <name>CurrentItem</name>
                                        <direction>out</direction>
-                                       <relatedStateVariable>CurrPosition</relatedStateVariable>
+                                       <relatedStateVariable>A_ARG_TYPE_Item</relatedStateVariable>
+                               </argument>
+                       </argumentList>
+               </action>
+               <action>
+                       <name>GetNextItem</name>
+                       <argumentList>
+                               <argument>
+                                       <name>NextItem</name>
+                                       <direction>out</direction>
+                                       <relatedStateVariable>A_ARG_TYPE_Item</relatedStateVariable>
+                               </argument>
+                       </argumentList>
+               </action>
+               <action>
+                       <name>GetPreviousItem</name>
+                       <argumentList>
+                               <argument>
+                                       <name>PreviousItem</name>
+                                       <direction>out</direction>
+                                       <relatedStateVariable>A_ARG_TYPE_Item</relatedStateVariable>
                                </argument>
                        </argumentList>
                </action>
        </actionList>
        <serviceStateTable>
-               <stateVariable>
+               <stateVariable sendEvents="no">
                        <name>ListIsLocked</name>
                        <dataType>boolean</dataType>
+                       <defaultValue>0</defaultValue>
                </stateVariable>
-               <stateVariable>
-                       <name>ListIsAvailble</name>
+               <stateVariable sendEvents="no">
+                       <name>ListIsAvailable</name>
                        <dataType>boolean</dataType>
+                       <defaultValue>1</defaultValue>
                </stateVariable>
-               <stateVariable>
+               <stateVariable sendEvents="yes">
                        <name>AVTransportURI</name>
                        <dataType>string</dataType>
                </stateVariable>
-               <stateVariable>
+               <stateVariable sendEvents="yes">
                        <name>AVTransportURIMetaData</name>
                        <dataType>string</dataType>
                </stateVariable>
-               <stateVariable>
+               <stateVariable sendEvents="no">
                        <name>SenderName</name>
                        <dataType>string</dataType>
                </stateVariable>
-               <stateVariable>
+               <stateVariable sendEvents="no">
                        <name>DestinyName</name>
                        <dataType>string</dataType>
                </stateVariable>
-               <stateVariable>
+               <stateVariable sendEvents="no">
                        <name>PositionOfList</name>
                        <dataType>ui4</dataType>
                        <allowedValueRange>
                        </allowedValueRange>
                </stateVariable>
                <stateVariable>
-                       <name>SizeOfPlayList</name>
+                       <name>A_ARG_TYPE_SizeOfPlayList</name>
                        <dataType>ui4</dataType>
                        <allowedValueRange>
                                <minimum>0</minimum>
                        </allowedValueRange>
                </stateVariable>
                <stateVariable>
-                       <name>CurrPosition</name>
-                       <dataType>ui4</dataType>
-                       <allowedValueRange>
-                               <minimum>0</minimum>
-                               <maximum>9</maximum>
-                               <step>1</step>
-                       </allowedValueRange>
+                       <name>A_ARG_TYPE_Item</name>
+                       <dataType>string</dataType>
                </stateVariable>
        </serviceStateTable>
 </scpd>