Much improved error handling
authorVolker Christian <voc@users.schwerkraft.elitedvb.net>
Tue, 10 Jun 2008 22:09:47 +0000 (22:09 +0000)
committerVolker Christian <voc@users.schwerkraft.elitedvb.net>
Tue, 10 Jun 2008 22:09:47 +0000 (22:09 +0000)
vlcplayer/src/VlcFileList.py
vlcplayer/src/VlcPlayList.py
vlcplayer/src/VlcServer.py

index b825b24..9215d6c 100755 (executable)
@@ -17,6 +17,8 @@ from Tools.LoadPixmap import LoadPixmap
 from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
 from Components.MenuList import MenuList
 
+from pyexpat import ExpatError
+
 from VlcServerConfig import vlcPluginInfo
 
 
@@ -62,29 +64,35 @@ def VlcFileListEntry(name, path, isDir = False):
 
 
 class VlcFileList(MenuList):
-       def __init__(self, server, matchingPattern):
+       def __init__(self, server, getFilesAndDirsCB, matchingPattern):
                MenuList.__init__(self, list, False, eListboxPythonMultiContent)
                self.l.setFont(0, gFont("Regular", 18))
                self.l.setItemHeight(23)
                self.server = server
+               self.getFilesAndDirsCB = getFilesAndDirsCB
                self.currentDirectory = self.server.getBasedir()
                self.changeRegex(matchingPattern)
 
        def update(self):
-               files, directories = self.server.getFilesAndDirs(self.currentDirectory, self.regex)
+               success = False
+               filelistEntries = self.getFilesAndDirsCB(self.currentDirectory, self.regex)
                fileEntries = []
-               for file in files:
-                       [name, path] = file
-                       fileEntries.append(VlcFileListEntry(name, path))
                directoryEntries = []
-               for directory in directories:
-                       [name, path] = directory
-                       directoryEntries.append(VlcFileListEntry(name, path, True))
-               fileEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
-               directoryEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
+               if filelistEntries is not None:
+                       files, directories = filelistEntries
+                       for file in files:
+                               [name, path] = file
+                               fileEntries.append(VlcFileListEntry(name, path))
+                       for directory in directories:
+                               [name, path] = directory
+                               directoryEntries.append(VlcFileListEntry(name, path, True))
+                       fileEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
+                       directoryEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
+                       success = True
                self.list = directoryEntries + fileEntries
                self.l.setList(self.list)
                self.moveToIndex(0)
+               return success
 
        def isVideoTS(self):
                for e in self.list:
@@ -97,12 +105,20 @@ class VlcFileList(MenuList):
                        if self.getCurrent()[0][1]:
                                previousDirectory = self.currentDirectory
                                self.currentDirectory = self.getCurrent()[0][0]
-                               self.update()
-                               if self.isVideoTS():
-                                       ret = "dvdsimple://" + self.currentDirectory + "/VIDEO_TS", self.currentDirectory
+                               try:
+                                       if self.update():
+                                               if self.isVideoTS():
+                                                       ret = "dvdsimple://" + self.currentDirectory + "/VIDEO_TS", self.currentDirectory
+                                                       self.currentDirectory = previousDirectory
+                                                       self.update()
+                                               else:
+                                                       ret = None, self.currentDirectory
+                                       else:
+                                               self.currentDirectory = previousDirectory
+                                               ret = None, None
+                               except ExpatError, e:
                                        self.currentDirectory = previousDirectory
                                        self.update()
-                               else:
                                        ret = None, self.currentDirectory
                        else:
                                ret = self.getCurrent()[0][0], self.getCurrent()[1][7]
index 1eb5ecc..c0fe0cf 100644 (file)
@@ -17,8 +17,8 @@ from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
 from Components.MenuList import MenuList
 
 
-def VlcPlayListEntry(name, path, id):
-       res = [ (path, id) ]
+def VlcPlayListEntry(name, path):
+       res = [ path ]
        res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
 
        png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/movie.png"))
@@ -30,38 +30,40 @@ def VlcPlayListEntry(name, path, id):
 
 
 class VlcPlayList(MenuList):
-       def __init__(self, server):
+       def __init__(self, server, getPlaylistEntriesCB):
                MenuList.__init__(self, list, False, eListboxPythonMultiContent)
                self.l.setFont(0, gFont("Regular", 18))
                self.l.setItemHeight(23)
                self.server = server
+               self.getPlaylistEntriesCB = getPlaylistEntriesCB
 
        def update(self):
-               files = self.server.getPlaylistEntries()
+               files = self.getPlaylistEntriesCB()
                fileEntries = []
-               for file in files:
-                       [name, path, id, isCurrent] = file
-                       fileEntries.append(VlcPlayListEntry(name, path, id))
-               fileEntries.sort(cmp = lambda x, y: cmp(x[1][7], y[1][7]))
+               if files is not None:
+                       for file in files:
+                               [name, path] = file
+                               fileEntries.append(VlcPlayListEntry(name, path))
+                       fileEntries.sort(cmp = lambda x, y: cmp(x[1][7], y[1][7]))
                self.list = fileEntries
                self.l.setList(self.list)
                self.moveToIndex(0)
 
        def activate(self):
                if self.getCurrent() is not None:
-                       ret = self.getCurrent()[0][0], self.getCurrent()[1][7]
+                       ret = self.getCurrent()[0], self.getCurrent()[1][7]
                return ret
 
        def getNextFile(self):
                i = self.getSelectedIndex() + 1
                if i < len(self.list):
                        self.moveToIndex(i)
-                       return self.getCurrent()[0][0], self.getCurrent()[1][7]
+                       return self.getCurrent()[0], self.getCurrent()[1][7]
                return None, None
 
        def getPrevFile(self):
                i = self.getSelectedIndex() - 1
                if i < len(self.list):
                        self.moveToIndex(i)
-                       return self.getCurrent()[0][0], self.getCurrent()[1][7]
+                       return self.getCurrent()[0], self.getCurrent()[1][7]
                return None, None
index 1bec733..cdf9282 100644 (file)
@@ -192,7 +192,7 @@ class VlcServer:
                                if len(name) >= 50:
                                        name = "..." + name[-50:]
                                path = e.getAttribute("uri").encode("utf8")
-                               files.append([name, path, int(e.getAttribute("id")), e.hasAttribute("current")])
+                               files.append([name, path])
                return files
 
        def getCurrentElement(self):
@@ -201,14 +201,6 @@ class VlcServer:
                        if e.hasAttribute("current"):
                                return e
                return None
-               
-       def getCurrentId(self):
-               files = self.getPlaylistEntries()
-               for file in files:
-                       [name, path, id, isCurrent] = file
-                       if isCurrent:
-                               return id
-               return None
 
        def playFile(self, filename, videoPid, audioPid):
                streamName = "dream" + str(randint(0, maxint))
@@ -283,10 +275,6 @@ class VlcServer:
        def delete(self, id):
                self.__xmlRequest("status", {"command": "pl_delete", "id": str(id)})
 
-       def deleteCurrent(self):
-               listid = self.getCurrentId()
-               self.delete(listid)
-
        def deleteCurrentTree(self):
                print "[VLC] delete current tree"
                currentElement = self.getCurrentElement()