From a229f6e13d2136c6760fabab437b33909bc78509 Mon Sep 17 00:00:00 2001 From: Volker Christian Date: Tue, 10 Jun 2008 22:09:47 +0000 Subject: [PATCH] Much improved error handling --- vlcplayer/src/VlcFileList.py | 44 ++++++++++++++++++++++++++++++-------------- vlcplayer/src/VlcPlayList.py | 24 +++++++++++++----------- vlcplayer/src/VlcServer.py | 14 +------------- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/vlcplayer/src/VlcFileList.py b/vlcplayer/src/VlcFileList.py index b825b24..9215d6c 100755 --- a/vlcplayer/src/VlcFileList.py +++ b/vlcplayer/src/VlcFileList.py @@ -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] diff --git a/vlcplayer/src/VlcPlayList.py b/vlcplayer/src/VlcPlayList.py index 1eb5ecc..c0fe0cf 100644 --- a/vlcplayer/src/VlcPlayList.py +++ b/vlcplayer/src/VlcPlayList.py @@ -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 diff --git a/vlcplayer/src/VlcServer.py b/vlcplayer/src/VlcServer.py index 1bec733..cdf9282 100644 --- a/vlcplayer/src/VlcServer.py +++ b/vlcplayer/src/VlcServer.py @@ -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() -- 2.7.4