From 4c39545bbeb661c564b392fe3ff28fab2713a53e Mon Sep 17 00:00:00 2001
From: mkaay <mkaay@mkaay.de>
Date: Sun, 13 Feb 2011 20:45:33 +0100
Subject: collector size

---
 module/gui/Collector.py                | 46 ++++++++++++++++++++++++++--------
 module/gui/Queue.py                    | 14 +----------
 module/remote/thriftbackend/Handler.py | 10 ++++++--
 3 files changed, 44 insertions(+), 26 deletions(-)

(limited to 'module')

diff --git a/module/gui/Collector.py b/module/gui/Collector.py
index 0711a811e..39310a45d 100644
--- a/module/gui/Collector.py
+++ b/module/gui/Collector.py
@@ -41,13 +41,25 @@ statusMapReverse = dict((v,k) for k, v in statusMap.iteritems())
 
 translatedStatusMap = {} # -> CollectorModel.__init__
 
+def formatSize(size):
+    """formats size of bytes"""
+    size = int(size)
+    steps = 0
+    sizes = ["B", "KiB", "MiB", "GiB", "TiB"]
+
+    while size > 1000:
+        size /= 1024.0
+        steps += 1
+
+    return "%.2f %s" % (size, sizes[steps])
+
 class CollectorModel(QAbstractItemModel):
     def __init__(self, view, connector):
         QAbstractItemModel.__init__(self)
         self.connector = connector
         self.view = view
         self._data = []
-        self.cols = 3
+        self.cols = 4
         self.interval = 1
         self.mutex = QMutex()
         
@@ -161,6 +173,16 @@ class CollectorModel(QAbstractItemModel):
         if role == Qt.DisplayRole:
             if index.column() == 0:
                 return QVariant(index.internalPointer().data["name"])
+            elif index.column() == 1:
+                item = index.internalPointer()
+                plugins = []
+                if isinstance(item, Package):
+                    for child in item.children:
+                        if not child.data["plugin"] in plugins:
+                            plugins.append(child.data["plugin"])
+                else:
+                    plugins.append(item.data["plugin"])
+                return QVariant(", ".join(plugins))
             elif index.column() == 2:
                 item = index.internalPointer()
                 status = 0
@@ -171,16 +193,15 @@ class CollectorModel(QAbstractItemModel):
                 else:
                     status = item.data["status"]
                 return QVariant(self.translateStatus(statusMapReverse[status]))
-            elif index.column() == 1:
+            elif index.column() == 3:
                 item = index.internalPointer()
-                plugins = []
-                if isinstance(item, Package):
-                    for child in item.children:
-                        if not child.data["plugin"] in plugins:
-                            plugins.append(child.data["plugin"])
+                if isinstance(item, Link):
+                    return QVariant(formatSize(item.data["size"]))
                 else:
-                    plugins.append(item.data["plugin"])
-                return QVariant(", ".join(plugins))
+                    ms = 0
+                    for c in item.children:
+                        ms += c.data["size"]
+                    return QVariant(formatSize(ms))
         elif role == Qt.EditRole:
             if index.column() == 0:
                 return QVariant(index.internalPointer().data["name"])
@@ -244,10 +265,12 @@ class CollectorModel(QAbstractItemModel):
         if orientation == Qt.Horizontal and role == Qt.DisplayRole:
             if section == 0:
                 return QVariant(_("Name"))
-            elif section == 2:
-                return QVariant(_("Status"))
             elif section == 1:
                 return QVariant(_("Plugin"))
+            elif section == 2:
+                return QVariant(_("Status"))
+            elif section == 3:
+                return QVariant(_("Size"))
         return QVariant()
     
     def flags(self, index):
@@ -331,6 +354,7 @@ class CollectorView(QTreeView):
         self.setColumnWidth(0, 500)
         self.setColumnWidth(1, 100)
         self.setColumnWidth(2, 200)
+        self.setColumnWidth(3, 100)
         
         self.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed)
 
diff --git a/module/gui/Queue.py b/module/gui/Queue.py
index 977dd6e9a..94025c867 100644
--- a/module/gui/Queue.py
+++ b/module/gui/Queue.py
@@ -23,19 +23,7 @@ from module.remote.thriftbackend.thriftgen.pyload.ttypes import *
 
 from time import sleep, time
 
-from module.gui.Collector import CollectorModel, Package, Link, CollectorView, statusMap, statusMapReverse
-
-def formatSize(size):
-    """formats size of bytes"""
-    size = int(size)
-    steps = 0
-    sizes = ["B", "KiB", "MiB", "GiB", "TiB"]
-
-    while size > 1000:
-        size /= 1024.0
-        steps += 1
-
-    return "%.2f %s" % (size, sizes[steps])
+from module.gui.Collector import CollectorModel, Package, Link, CollectorView, statusMap, statusMapReverse, formatSize
 
 def formatSpeed(speed):
     speed = int(speed)
diff --git a/module/remote/thriftbackend/Handler.py b/module/remote/thriftbackend/Handler.py
index 6e1377938..91848941b 100644
--- a/module/remote/thriftbackend/Handler.py
+++ b/module/remote/thriftbackend/Handler.py
@@ -191,7 +191,11 @@ class Handler(Iface):
         Parameters:
          - fid
         """
-        rawData = self.serverMethods.get_file_data(fid).values()[0]
+        rawData = self.serverMethods.get_file_data(fid)
+        if rawData:
+            rawData = rawData.values()[0]
+        else:
+            return None
         fdata = self._convertPyFile(rawData)
         return fdata
 
@@ -372,7 +376,7 @@ class Handler(Iface):
             packs = self.serverMethods.get_collector()
         for pid in packs:
             pack = self.serverMethods.get_package_data(pid)
-            while pack["order"] in order.keys():
+            while pack["order"] in order.keys(): #just in case
                 pack["order"] += 1
             order[pack["order"]] = pack["id"]
         return order
@@ -385,6 +389,8 @@ class Handler(Iface):
         rawData = self.serverMethods.get_package_data(pid)
         order = {}
         for pyfile in rawData["links"]:
+            while pyfile["order"] in order.keys(): #just in case
+                pyfile["order"] += 1
             order[pyfile["order"]] = pyfile["id"]
         return order
 
-- 
cgit v1.2.3