summaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authorGravatar mkaay <mkaay@mkaay.de> 2009-12-28 15:32:06 +0100
committerGravatar mkaay <mkaay@mkaay.de> 2009-12-28 15:32:06 +0100
commitce2a8294b5aefe4497c88f24c817084868b8b1eb (patch)
treecf52569c6f52a12a4a2c5d5a6358aea797697ec5 /module
parentDLC Error Log (diff)
downloadpyload-ce2a8294b5aefe4497c88f24c817084868b8b1eb.tar.xz
gui now stable
Diffstat (limited to 'module')
-rw-r--r--module/Plugin.py37
-rw-r--r--module/file_list.py6
-rw-r--r--module/gui/Collector.py184
-rw-r--r--module/gui/MainWindow.py6
-rw-r--r--module/gui/Queue.py217
-rw-r--r--module/plugins/hoster/RapidshareCom.py2
6 files changed, 235 insertions, 217 deletions
diff --git a/module/Plugin.py b/module/Plugin.py
index 9390cbe07..f3830595d 100644
--- a/module/Plugin.py
+++ b/module/Plugin.py
@@ -1,23 +1,22 @@
-#!/usr/bin/env python
# -*- coding: utf-8 -*-
-#
-#Copyright (C) 2009 kingzero, RaNaN
-#
-#This program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 3 of the License,
-#or (at your option) any later version.
-#
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#See the GNU General Public License for more details.
-#
-#You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-###
-import ConfigParser
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN, spoob, mkaay
+"""
+
import logging
import re
from os.path import exists, join
diff --git a/module/file_list.py b/module/file_list.py
index d80310cdd..21e084483 100644
--- a/module/file_list.py
+++ b/module/file_list.py
@@ -127,8 +127,14 @@ class File_List(object):
for thread_list only
"""
files = []
+ for pypack in self.data["queue"] + self.data["packages"]:
+ for pyfile in pypack.files:
+ if pyfile.plugin.props['type'] == "container" and not pyfile.active:
+ files.append(pyfile)
for pypack in self.data["queue"]:
for pyfile in pypack.files:
+ if pyfile in files:
+ continue
if (pyfile.status.type == "reconnected" or pyfile.status.type == None) and not pyfile.active:
files.append(pyfile)
return files
diff --git a/module/gui/Collector.py b/module/gui/Collector.py
index bf0e50349..c2d167291 100644
--- a/module/gui/Collector.py
+++ b/module/gui/Collector.py
@@ -21,6 +21,8 @@ from PyQt4.QtGui import *
from time import sleep
+from module.gui.Queue import ItemIterator
+
class PackageCollector(QThread):
def __init__(self, view, connector):
QThread.__init__(self)
@@ -52,7 +54,7 @@ class PackageCollector(QThread):
pack = self.getPack(data["id"])
if not pack:
pack = self.PackageCollectorPack(self)
- pack.setData(data)
+ pack.setPackData(data)
self.addPack(data["id"], pack)
files = self.connector.getPackageFiles(data["id"])
pack.clear(files)
@@ -61,125 +63,115 @@ class PackageCollector(QThread):
child = pack.getChild(fid)
if not child:
child = self.PackageCollectorFile(self, pack)
- child.setData(info)
- pack.addChild(fid, child)
+ child.setFileData(info)
+ pack.addPackChild(fid, child)
def addPack(self, pid, newPack):
pos = None
try:
- for k, pack in enumerate(self.collector):
- if pack.getData()["id"] == pid:
- pos = k
+ for pack in ItemIterator(self.rootItem):
+ if pack.getPackData()["id"] == pid:
+ pos = self.rootItem.indexOfChild(pack)
break
if pos == None:
raise Exception()
- self.collector[pos] = newPack
+ item = self.rootItem.child(pos)
+ item.setPackData(newPack.getPackData())
except:
- self.collector.append(newPack)
- pos = self.collector.index(newPack)
- item = self.rootItem.child(pos)
- if not item:
- item = QTreeWidgetItem()
- self.rootItem.insertChild(pos, item)
- item.setData(0, Qt.DisplayRole, QVariant(newPack.getData()["package_name"]))
+ self.rootItem.addChild(newPack)
+ item = newPack
+ item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"]))
item.setData(0, Qt.UserRole, QVariant(pid))
def getPack(self, pid):
- for k, pack in enumerate(self.collector):
- if pack.getData()["id"] == pid:
+ for k, pack in enumerate(ItemIterator(self.rootItem)):
+ if pack.getPackData()["id"] == pid:
return pack
return None
def clear(self, ids):
clear = False
- for pack in self.collector:
- if not pack.getData()["id"] in ids:
+ for pack in ItemIterator(self.rootItem):
+ if not pack.getPackData()["id"] in ids:
clear = True
break
if not clear:
return
- self.queue = []
self.rootItem.takeChildren()
- class PackageCollectorPack():
+ class PackageCollectorPack(QTreeWidgetItem):
def __init__(self, collector):
+ QTreeWidgetItem.__init__(self)
self.collector = collector
- self.data = []
- self.children = []
+ self._data = {}
- def addChild(self, cid, newChild):
+ def addPackChild(self, cid, newChild):
pos = None
try:
- for k, child in enumerate(self.getChildren()):
+ for child in ItemIterator(self):
if child.getData()["id"] == cid:
- pos = k
+ pos = self.indexOfChild(child)
break
if pos == None:
raise Exception()
- self.children[pos] = newChild
+ item = self.child(pos)
+ item.setFileData(newChild.getFileData())
except:
- self.children.append(newChild)
- pos = self.children.index(newChild)
- ppos = self.collector.collector.index(self)
- parent = self.collector.rootItem.child(ppos)
- item = parent.child(pos)
- if not item:
- item = QTreeWidgetItem()
- parent.insertChild(pos, item)
- status = "%s (%s)" % (newChild.getData()["status_type"], newChild.getData()["plugin"])
- item.setData(0, Qt.DisplayRole, QVariant(newChild.getData()["filename"]))
+ self.addChild(newChild)
+ item = newChild
+ item.setData(0, Qt.DisplayRole, QVariant(item.getFileData()["filename"]))
item.setData(0, Qt.UserRole, QVariant(cid))
- flags = Qt.ItemIsEnabled
- item.setFlags(flags)
- def getChildren(self):
- return self.children
+ def setPackData(self, data):
+ self._data = data
- def getChild(self, cid):
- try:
- return self.children[cid]
- except:
- return None
-
- def hasChildren(self, data):
- return (len(self.children) > 0)
+ def getPackData(self):
+ return self._data
- def setData(self, data):
- self.data = data
+ def getChildren(self):
+ ret = []
+ for item in ItemIterator(self):
+ ret.append(item)
+ return ret
- def getData(self):
- return self.data
+ def getChild(self, cid):
+ for item in ItemIterator(self):
+ if item.getFileData()["id"] == cid:
+ return item
+ return None
def clear(self, ids):
clear = False
- children = {}
- for file in self.getChildren():
- if not file.getData()["id"] in ids:
- clear = True
- break
- try:
- children[file.getData()["id"]]
- clear = True
- except:
- children[file.getData()["id"]] = True
-
- if not clear:
+ remove = []
+ children = []
+ for k, file in enumerate(self.getChildren()):
+ if not file.getFileData()["id"] in ids:
+ remove.append(file.getFileData()["id"])
+ if file.getFileData()["id"] in children and not file.getFileData()["id"] in remove:
+ remove.append(file.getFileData()["id"])
+ continue
+ children.append(file.getFileData()["id"])
+ if not remove:
return
- ppos = self.collector.collector.index(self)
- parent = self.collector.rootItem.child(ppos)
- parent.takeChildren()
- self.children = []
+ remove.sort()
+ remove.reverse()
+ parent = self
+ for k in remove:
+ parent.takeChild(k)
- class PackageCollectorFile():
+ class PackageCollectorFile(QTreeWidgetItem):
def __init__(self, collector, pack):
+ QTreeWidgetItem.__init__(self)
self.collector = collector
self.pack = pack
+ self._data = {}
+ self.wait_since = None
- def getData(self):
- return self.data
+ def getFileData(self):
+ return self._data
- def setData(self, data):
- self.data = data
+ def setFileData(self, data):
+ self._data = data
def getPack(self):
return self.pack
@@ -189,9 +181,9 @@ class LinkCollector(QThread):
QThread.__init__(self)
self.view = view
self.connector = connector
- self.collector = []
self.interval = 2
self.running = True
+ self.rootItem = self.view.invisibleRootItem()
self.mutex = QMutex()
def run(self):
@@ -211,54 +203,52 @@ class LinkCollector(QThread):
file = self.getFile(id)
if not file:
file = self.LinkCollectorFile(self)
- file.setData(data)
+ file.setFileData(data)
self.addFile(id, file)
def addFile(self, pid, newFile):
pos = None
try:
- for k, file in enumerate(self.collector):
- if file.getData()["id"] == pid:
- pos = k
+ for pack in ItemIterator(self.rootItem):
+ if file.getFileData()["id"] == pid:
+ pos = self.rootItem.indexOfChild(file)
break
if pos == None:
raise Exception()
- self.collector[pos] = newFile
+ item = self.rootItem.child(pos)
+ item.setFileData(newFile.getPackData())
except:
- self.collector.append(newFile)
- pos = self.collector.index(newFile)
- item = self.view.topLevelItem(pos)
- if not item:
- item = QTreeWidgetItem()
- self.view.insertTopLevelItem(pos, item)
- item.setData(0, Qt.DisplayRole, QVariant(newFile.getData()["filename"]))
+ self.rootItem.addChild(newFile)
+ item = newFile
+ item.setData(0, Qt.DisplayRole, QVariant(newFile.getFileData()["filename"]))
item.setData(0, Qt.UserRole, QVariant(pid))
flags = Qt.ItemIsSelectable | Qt.ItemIsDragEnabled | Qt.ItemIsEnabled
item.setFlags(flags)
def getFile(self, pid):
- for k, file in enumerate(self.collector):
- if file.getData()["id"] == pid:
+ for file in ItemIterator(self.rootItem):
+ if file.getFileData()["id"] == pid:
return file
return None
def clear(self, ids):
clear = False
- for pack in self.collector:
- if not pack.getData()["id"] in ids:
+ for file in ItemIterator(self.rootItem):
+ if not file.getFileData()["id"] in ids:
clear = True
break
if not clear:
return
- self.collector = []
- self.view.emit(SIGNAL("clear"))
+ self.rootItem.takeChildren()
- class LinkCollectorFile():
+ class LinkCollectorFile(QTreeWidgetItem):
def __init__(self, collector):
+ QTreeWidgetItem.__init__(self)
self.collector = collector
+ self._data = {}
- def getData(self):
- return self.data
+ def getFileData(self):
+ return self._data
- def setData(self, data):
- self.data = data
+ def setFileData(self, data):
+ self._data = data
diff --git a/module/gui/MainWindow.py b/module/gui/MainWindow.py
index 1e769110b..76f60a5bd 100644
--- a/module/gui/MainWindow.py
+++ b/module/gui/MainWindow.py
@@ -281,7 +281,11 @@ class MainWindow(QMainWindow):
"""
items = self.tabs["collector"]["package_view"].selectedItems()
for item in items:
- id = item.data(0, Qt.UserRole).toPyObject()
+ try:
+ id = item.getFileData()["id"]
+ id = item.parent().getPackData()["id"]
+ except:
+ id = item.getPackData()["id"]
self.emit(SIGNAL("pushPackageToQueue"), id)
def saveWindow(self):
diff --git a/module/gui/Queue.py b/module/gui/Queue.py
index 0def31bf6..c0f43c740 100644
--- a/module/gui/Queue.py
+++ b/module/gui/Queue.py
@@ -28,15 +28,16 @@ class Queue(QThread):
self.connector = connector
self.statusMap = {
"finished": 0,
- "checking": 1,
- "waiting": 2,
- "reconnected": 3,
- "downloading": 4,
- "failed": 5,
- "aborted": 6,
+ "queued": 1,
+ "checking": 2,
+ "waiting": 3,
+ "reconnected": 4,
+ "starting": 5,
+ "downloading": 6,
+ "failed": 7,
+ "aborted": 8,
}
self.statusMapReverse = dict((v,k) for k, v in self.statusMap.iteritems())
- self.queue = []
self.interval = 1
self.running = True
self.wait_dict = {}
@@ -70,10 +71,10 @@ class Queue(QThread):
pack = self.getPack(data["id"])
if not pack:
pack = self.QueuePack(self)
- pack.setData(data)
- self.addPack(data["id"], pack)
+ pack.setPackData(data)
files = self.connector.getPackageFiles(data["id"])
pack.clear(files)
+ self.addPack(data["id"], pack)
for fid in files:
info = self.connector.getLinkInfo(fid)
child = pack.getChild(fid)
@@ -84,35 +85,36 @@ class Queue(QThread):
info["downloading"] = downloading[info["id"]]
except:
pass
- child.setData(info)
- pack.addChild(fid, child)
+ if not info["status_type"]:
+ info["status_type"] = "queued"
+ child.setFileData(info)
+ pack.addPackChild(fid, child)
+ self.addPack(data["id"], pack)
def addPack(self, pid, newPack):
pos = None
try:
- for k, pack in enumerate(self.queue):
- if pack.getData()["id"] == pid:
- pos = k
+ for pack in QueueIterator(self.rootItem):
+ if pack.getPackData()["id"] == pid:
+ pos = self.rootItem.indexOfChild(pack)
break
if pos == None:
raise Exception()
- self.queue[pos] = newPack
+ item = self.rootItem.child(pos)
+ item.setPackData(newPack.getPackData())
except:
- self.queue.append(newPack)
- pos = self.queue.index(newPack)
- item = self.rootItem.child(pos)
- if not item:
- item = QTreeWidgetItem()
- self.rootItem.insertChild(pos, item)
- item.setData(0, Qt.DisplayRole, QVariant(newPack.getData()["package_name"]))
+ self.rootItem.addChild(newPack)
+ item = newPack
+ item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"]))
status = -1
- speed = self.getSpeed(newPack)
+ speed = self.getSpeed(item)
plugins = []
- for child in newPack.getChildren():
- if self.statusMap.has_key(child.data["status_type"]) and self.statusMap[child.data["status_type"]] > status:
- status = self.statusMap[child.data["status_type"]]
- if not child.data["plugin"] in plugins:
- plugins.append(child.data["plugin"])
+ for child in item.getChildren():
+ data = child.getFileData()
+ if self.statusMap.has_key(data["status_type"]) and self.statusMap[data["status_type"]] > status:
+ status = self.statusMap[data["status_type"]]
+ if not data["plugin"] in plugins:
+ plugins.append(data["plugin"])
if status >= 0:
if speed == None:
statustxt = self.statusMapReverse[status]
@@ -121,29 +123,28 @@ class Queue(QThread):
item.setData(2, Qt.DisplayRole, QVariant(statustxt))
item.setData(1, Qt.DisplayRole, QVariant(", ".join(plugins)))
item.setData(0, Qt.UserRole, QVariant(pid))
- item.setData(3, Qt.UserRole, QVariant(newPack))
+ item.setData(3, Qt.UserRole, QVariant(item))
def getPack(self, pid):
- for k, pack in enumerate(self.queue):
- if pack.getData()["id"] == pid:
+ for k, pack in enumerate(ItemIterator(self.rootItem)):
+ if pack.getPackData()["id"] == pid:
return pack
return None
def clear(self, ids):
clear = False
- for pack in self.queue:
- if not pack.getData()["id"] in ids:
+ for pack in ItemIterator(self.rootItem):
+ if not pack.getPackData()["id"] in ids:
clear = True
break
if not clear:
return
- self.queue = []
self.rootItem.takeChildren()
def getWaitingProgress(self, q):
locker = QMutexLocker(self.mutex)
if isinstance(q, self.QueueFile):
- data = q.getData()
+ data = q.getFileData()
if data["status_type"] == "waiting" and data["downloading"]:
until = float(data["downloading"]["wait_until"])
try:
@@ -164,7 +165,7 @@ class Queue(QThread):
def getProgress(self, q):
locker = QMutexLocker(self.mutex)
if isinstance(q, self.QueueFile):
- data = q.getData()
+ data = q.getFileData()
if data["downloading"]:
return int(data["downloading"]["percent"])
if data["status_type"] == "finished" or \
@@ -177,12 +178,12 @@ class Queue(QThread):
perc_sum = 0
for child in children:
val = 0
- data = child.getData()
+ data = child.getFileData()
if data["downloading"]:
val = int(data["downloading"]["percent"])
- elif child.data["status_type"] == "finished" or \
- child.data["status_type"] == "failed" or \
- child.data["status_type"] == "aborted":
+ elif data["status_type"] == "finished" or \
+ data["status_type"] == "failed" or \
+ data["status_type"] == "aborted":
val = 100
perc_sum += val
if count == 0:
@@ -192,7 +193,7 @@ class Queue(QThread):
def getSpeed(self, q):
if isinstance(q, self.QueueFile):
- data = q.getData()
+ data = q.getFileData()
if data["downloading"]:
return int(data["downloading"]["speed"])
elif isinstance(q, self.QueuePack):
@@ -203,7 +204,7 @@ class Queue(QThread):
running = False
for child in children:
val = 0
- data = child.getData()
+ data = child.getFileData()
if data["downloading"]:
if not data["status_type"] == "waiting":
all_waiting = False
@@ -215,91 +216,87 @@ class Queue(QThread):
return speed_sum
return None
- class QueuePack():
+ class QueuePack(QTreeWidgetItem):
def __init__(self, queue):
+ QTreeWidgetItem.__init__(self)
self.queue = queue
- self.data = []
- self.children = []
+ self._data = {}
- def addChild(self, cid, newChild):
+ def addPackChild(self, cid, newChild):
pos = None
try:
- for k, child in enumerate(self.getChildren()):
+ for child in ItemIterator(self):
if child.getData()["id"] == cid:
- pos = k
+ pos = self.indexOfChild(child)
break
if pos == None:
raise Exception()
- self.children[pos] = newChild
+ item = self.child(pos)
+ item.setFileData(newChild.getFileData())
except:
- self.children.append(newChild)
- pos = self.children.index(newChild)
- ppos = self.queue.queue.index(self)
- parent = self.queue.rootItem.child(ppos)
- item = parent.child(pos)
- if not item:
- item = QTreeWidgetItem()
- parent.insertChild(pos, item)
- speed = self.queue.getSpeed(newChild)
- if speed == None or newChild.getData()["status_type"] == "starting":
- status = newChild.getData()["status_type"]
+ self.addChild(newChild)
+ item = newChild
+ speed = self.queue.getSpeed(item)
+ if speed == None or item.getFileData()["status_type"] == "starting":
+ status = item.getFileData()["status_type"]
else:
- status = "%s (%s KB/s)" % (newChild.getData()["status_type"], speed)
- item.setData(0, Qt.DisplayRole, QVariant(newChild.getData()["filename"]))
+ status = "%s (%s KB/s)" % (item.getFileData()["status_type"], speed)
+ item.setData(0, Qt.DisplayRole, QVariant(item.getFileData()["filename"]))
item.setData(2, Qt.DisplayRole, QVariant(status))
- item.setData(1, Qt.DisplayRole, QVariant(newChild.getData()["plugin"]))
+ item.setData(1, Qt.DisplayRole, QVariant(item.getFileData()["plugin"]))
item.setData(0, Qt.UserRole, QVariant(cid))
- item.setData(3, Qt.UserRole, QVariant(newChild))
-
- def getChildren(self):
- return self.children
+ item.setData(3, Qt.UserRole, QVariant(item))
- def getChild(self, cid):
- try:
- return self.children[cid]
- except:
- return None
+ def setPackData(self, data):
+ self._data = data
- def hasChildren(self, data):
- return (len(self.children) > 0)
+ def getPackData(self):
+ return self._data
- def setData(self, data):
- self.data = data
+ def getChildren(self):
+ ret = []
+ for item in ItemIterator(self):
+ ret.append(item)
+ return ret
- def getData(self):
- return self.data
+ def getChild(self, cid):
+ for item in ItemIterator(self):
+ if item.getFileData()["id"] == cid:
+ return item
+ return None
def clear(self, ids):
clear = False
- children = {}
- for file in self.getChildren():
- if not file.getData()["id"] in ids:
- clear = True
- break
- try:
- children[file.getData()["id"]]
- clear = True
- except:
- children[file.getData()["id"]] = True
-
- if not clear:
+ remove = []
+ children = []
+ for k, file in enumerate(self.getChildren()):
+ if not file.getFileData()["id"] in ids:
+ remove.append(file.getFileData()["id"])
+ if file.getFileData()["id"] in children and not file.getFileData()["id"] in remove:
+ remove.append(file.getFileData()["id"])
+ continue
+ children.append(file.getFileData()["id"])
+ if not remove:
return
- ppos = self.queue.queue.index(self)
- parent = self.queue.rootItem.child(ppos)
- parent.takeChildren()
- self.children = []
+ remove.sort()
+ remove.reverse()
+ parent = self
+ for k in remove:
+ parent.takeChild(k)
- class QueueFile():
+ class QueueFile(QTreeWidgetItem):
def __init__(self, queue, pack):
+ QTreeWidgetItem.__init__(self)
self.queue = queue
self.pack = pack
+ self._data = {}
self.wait_since = None
- def getData(self):
- return self.data
+ def getFileData(self):
+ return self._data
- def setData(self, data):
- self.data = data
+ def setFileData(self, data):
+ self._data = data
def getPack(self):
return self.pack
@@ -335,3 +332,25 @@ class QueueProgressBarDelegate(QItemDelegate):
QApplication.style().drawControl(QStyle.CE_ProgressBar, opts, painter)
return
QItemDelegate.paint(self, painter, option, index)
+
+class ItemIterator():
+ def __init__(self, item):
+ self.item = item
+ self.current = -1
+
+ def __iadd__(self, val):
+ self.current += val
+
+ def value(self):
+ return self.item.child(self.current)
+
+ def next(self):
+ self.__iadd__(1)
+ value = self.value()
+ if value:
+ return self.value()
+ else:
+ raise StopIteration
+
+ def __iter__(self):
+ return self
diff --git a/module/plugins/hoster/RapidshareCom.py b/module/plugins/hoster/RapidshareCom.py
index 5da9996fd..754c885ef 100644
--- a/module/plugins/hoster/RapidshareCom.py
+++ b/module/plugins/hoster/RapidshareCom.py
@@ -109,7 +109,7 @@ class RapidshareCom(Plugin):
src = self.req.load(api_url_base, cookies=False, get=api_param_prem)
if src.startswith("ERROR"):
self.config["premium"] = False
- self.logger.info("Rapidshare: Login faild")
+ self.logger.info("Rapidshare: Login failed")
return
fields = src.split("\n")
premkbleft = int(fields[19].split("=")[1])