From 8919a7d838f95fccced3ff0a2d0d500ddff2b2c3 Mon Sep 17 00:00:00 2001 From: MrS0m30n3 Date: Sat, 5 Apr 2014 13:00:38 +0300 Subject: [PATCH] Fix IndexError SignalHandler.py handle() --- youtube_dl_gui/SignalHandler.py | 44 ++++++++++++++++++++------------- youtube_dl_gui/YoutubeDLGUI.py | 2 ++ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/youtube_dl_gui/SignalHandler.py b/youtube_dl_gui/SignalHandler.py index f1d7df7..9d8f666 100644 --- a/youtube_dl_gui/SignalHandler.py +++ b/youtube_dl_gui/SignalHandler.py @@ -13,7 +13,11 @@ class DownloadHandler(): self.finished = False self.closed = False self.error = False - self.handlers = [] + self.init_handlers() + + def init_handlers(self): + ''' Initialise handlers ''' + self.handlers = [None for i in range(self.ListCtrl.ListIndex)] def _has_closed(self): return self.closed @@ -24,26 +28,32 @@ class DownloadHandler(): def _has_error(self): return self.error + def _add_empty_handler(self): + self.handlers.append(None) + def handle(self, msg): ''' Handles msg base to Signals.txt ''' pack = msg.data - index = pack.index - ''' Manage global index = -1 ''' - if index == -1: - if pack.header == 'close': - self.closed = True - elif pack.header == 'finish': - self.finished = True + if pack.index == -1: + self.global_handler(pack) else: - ''' Manage handlers for its index ''' - if index == len(self.handlers): - ''' Create new IndexDownloadHandler and add it to handlers ''' - self.handlers.append(IndexDownloadHandler(self.ListCtrl, index)) - ''' Let IndexDownloadHandler handle message data for current index ''' - self.handlers[index].handle(pack) - if self.handlers[index].has_error(): - self.error = True - + self.index_handler(pack) + + def global_handler(self, pack): + ''' Manage global index = -1 ''' + if pack.header == 'close': + self.closed = True + elif pack.header == 'finish': + self.finished = True + + def index_handler(self, pack): + ''' Manage handlers base on index ''' + if self.handlers[pack.index] == None: + self.handlers[pack.index] = IndexDownloadHandler(self.ListCtrl, pack.index) + self.handlers[pack.index].handle(pack) + if self.handlers[pack.index].has_error(): + self.error = True + class IndexDownloadHandler(): def __init__(self, ListCtrl, index): diff --git a/youtube_dl_gui/YoutubeDLGUI.py b/youtube_dl_gui/YoutubeDLGUI.py index 2f0d2a7..3d35255 100644 --- a/youtube_dl_gui/YoutubeDLGUI.py +++ b/youtube_dl_gui/YoutubeDLGUI.py @@ -250,6 +250,8 @@ class MainFrame(wx.Frame): if url not in self.urlList and url != '': ''' Add url into original download list ''' self.urlList.append(url) + ''' Add handler for url ''' + self.downloadHandler._add_empty_handler() ''' Add url into statusList ''' self.statusList._add_item(url) ''' Retrieve last item as {url:url, index:indexNo} '''