Blob Blame History Raw
From 342c71df11125061e393e5374fa28aff50f4187c Mon Sep 17 00:00:00 2001
From: Hendrik Wiese <github@hwiese.com>
Date: Mon, 7 Aug 2017 10:57:37 +0200
Subject: [PATCH 1/2] Hours sum and percentage of viewed time period in Totals
 view

---
 src/hamster/overview.py | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/hamster/overview.py b/src/hamster/overview.py
index 02a6ab30..ac47f7b3 100755
--- a/src/hamster/overview.py
+++ b/src/hamster/overview.py
@@ -202,6 +202,7 @@ def __init__(self, **kwargs):
         self.layout.set_markup("Hamster") # dummy
         self.label_height = self.layout.get_pixel_size()[1]
 
+        self._total = dt.timedelta()
         self._max = 0
 
     def set_values(self, values):
@@ -210,23 +211,31 @@ def set_values(self, values):
         self.height = len(self.values) * 14
         self._max = max(rec[1] for rec in values) if values else 0
 
+    def set_total(self, total):
+        self._total = total
+
     def _draw(self, context, opacity, matrix):
         g = graphics.Graphics(context)
         g.save_context()
         g.translate(self.x, self.y)
 
+        hours = [(value.days * 24.0 + value.seconds / 3600.0 ) for _,value in self.values]
+        total = self._total.days * 24.0 + self._total.seconds / 3600.0
+
         for i, (label, value) in enumerate(self.values):
+            percent = 100.0 * hours[i] / total
+            label += " (%3.2fh; %3.1f%%)" % (hours[i], percent)
             g.set_color("#333")
             self.layout.set_markup(stuff.escape_pango(label))
             label_w, label_h = self.layout.get_pixel_size()
 
             y = int(i * label_h * 1.5)
-            g.move_to(100 - label_w, y)
+            g.move_to(180 - label_w, y)
             pangocairo.show_layout(context, self.layout)
 
-            w = (self.alloc_w - 110) * value.total_seconds() / self._max.total_seconds()
+            w = (self.alloc_w - 200) * value.total_seconds() / self._max.total_seconds()
             w = max(1, int(round(w)))
-            g.rectangle(110, y, int(w), int(label_h))
+            g.rectangle(190, y, int(w), int(label_h))
             g.fill("#999")
 
         g.restore_context()
@@ -287,12 +296,15 @@ def __init__(self):
 
     def set_facts(self, facts):
         totals = defaultdict(lambda: defaultdict(dt.timedelta))
+        total_sums = defaultdict(lambda: dt.timedelta())
         for fact in facts:
             for key in ('category', 'activity'):
                 totals[key][getattr(fact, key)] += fact.delta
+                total_sums[key] += fact.delta
 
             for tag in fact.tags:
                 totals["tag"][tag] += fact.delta
+                total_sums["tag"] += fact.delta
 
 
         for key, group in totals.iteritems():
@@ -300,8 +312,13 @@ def set_facts(self, facts):
         self.totals = totals
 
         self.activities_chart.set_values(totals['activity'])
+        self.activities_chart.set_total(total_sums['activity'])
+
         self.categories_chart.set_values(totals['category'])
+        self.categories_chart.set_total(total_sums['category'])
+
         self.tag_chart.set_values(totals['tag'])
+        self.tag_chart.set_total(total_sums['tag'])
 
         self.stacked_bar.set_items([(cat, delta.total_seconds() / 60.0) for cat, delta in totals['category']])
         self.category_totals.markup = ", ".join("<b>%s:</b> %s" % (stuff.escape_pango(cat), stuff.format_duration(hours)) for cat, hours in totals['category'])

From c5f5e66de0739dc4b695e544510410c810d2276a Mon Sep 17 00:00:00 2001
From: Hendrik Wiese <github@hwiese.com>
Date: Tue, 8 Aug 2017 13:27:21 +0200
Subject: [PATCH 2/2] FIX: strip() categories, activities and tags (remove
 leading/trailing whitespace)

---
 src/hamster/overview.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/hamster/overview.py b/src/hamster/overview.py
index ac47f7b3..91baddc5 100755
--- a/src/hamster/overview.py
+++ b/src/hamster/overview.py
@@ -299,11 +299,11 @@ def set_facts(self, facts):
         total_sums = defaultdict(lambda: dt.timedelta())
         for fact in facts:
             for key in ('category', 'activity'):
-                totals[key][getattr(fact, key)] += fact.delta
+                totals[key][getattr(fact, key).strip()] += fact.delta
                 total_sums[key] += fact.delta
 
             for tag in fact.tags:
-                totals["tag"][tag] += fact.delta
+                totals["tag"][tag.strip()] += fact.delta
                 total_sums["tag"] += fact.delta