hamster-applet r742 - trunk/hamster



Author: tbaugis
Date: Wed Feb 18 21:29:56 2009
New Revision: 742
URL: http://svn.gnome.org/viewvc/hamster-applet?rev=742&view=rev

Log:
more brains in db - splitting activities that span over several 
days and setting delta

Modified:
   trunk/hamster/applet.py
   trunk/hamster/db.py
   trunk/hamster/reports.py
   trunk/hamster/stats.py
   trunk/hamster/stuff.py

Modified: trunk/hamster/applet.py
==============================================================================
--- trunk/hamster/applet.py	(original)
+++ trunk/hamster/applet.py	Wed Feb 18 21:29:56 2009
@@ -248,7 +248,6 @@
     
         # Load today's data, activities and set label
         self.last_activity = None
-        self.today = datetime.date.today()
 
         self.load_day()
         self.update_label()
@@ -382,9 +381,6 @@
     """UI functions"""
     def refresh_hamster(self):
         """refresh hamster every x secs - load today, check last activity etc."""        
-        prev_date = self.today
-        self.today = datetime.date.today()
-
         # stop tracking task if computer is idle for X minutes
         if self.timeout_enabled and self.last_activity and \
            self.last_activity['end_time'] == None:
@@ -402,10 +398,7 @@
                 self.check_user()
 
             # if we have date change - let's finish previous task and start a new one
-            if prev_date and prev_date != self.today: 
-                storage.touch_fact(self.last_activity)
-                storage.add_fact(self.last_activity['name'])
-            elif self.button.get_active(): # otherwise if we the day view is visible - update day's durations
+            if self.button.get_active(): # otherwise if we the day view is visible - update day's durations
                 self.load_day()
                     
         self.update_label()
@@ -448,7 +441,7 @@
     def load_day(self):
         """sets up today's tree and fills it with records
            returns information about last activity"""
-        day = DayStore(self.today);
+        day = DayStore(datetime.date.today());
         self.treeview.set_model(day.fact_store)
 
         if len(day.facts) == 0:

Modified: trunk/hamster/db.py
==============================================================================
--- trunk/hamster/db.py	(original)
+++ trunk/hamster/db.py	Wed Feb 18 21:29:56 2009
@@ -34,7 +34,7 @@
 import hamster
 import hamster.storage
 import datetime as dt
-
+import copy
         
 class Storage(hamster.storage.Storage):
     # we are saving data under $HOME/.gnome2/hamster-applet/hamster.db
@@ -336,11 +336,59 @@
                 LEFT JOIN activities b ON a.activity_id = b.id
                 LEFT JOIN categories c on b.category_id = c.id
                     WHERE date(a.start_time) >= ? and date(a.start_time) <= ?
+                       OR date(a.end_time) >= ? and date(a.end_time) <= ?
                  ORDER BY a.start_time
         """
-        end_date = end_date or date        
+        end_date = end_date or date
+        
+        facts = self.fetchall(query, (_("Unsorted"), date, end_date, date, end_date))
+        res = []
 
-        return self.fetchall(query, (_("Unsorted"), date, end_date))
+
+        for fact in facts:
+            
+            start_date = fact["start_time"].date()
+            if fact["end_time"]:
+                end_date = fact["end_time"].date()
+            else:
+                end_date = None
+                                   
+            f = dict(
+                id = fact["id"],
+                start_time = fact["start_time"],
+                end_time = fact["end_time"],
+                description = fact["description"],
+                name = fact["name"],
+                activity_id = fact["activity_id"],
+                category = fact["category"],
+                category_id = fact["category_id"]
+            )
+            
+            
+            if not end_date or start_date == end_date:
+                if end_date:
+                    f["delta"] = fact["end_time"] - fact["start_time"]
+                elif start_date == dt.date.today() \
+                          and fact["start_time"] < dt.datetime.now():
+                    f["delta"] = dt.datetime.now() -  fact["start_time"]
+                else:
+                    f["delta"] = None
+
+                res.append(f)
+            else:
+                #if start and end dates do not much, let's populate two entries!
+                if date <= f["start_time"].date()  <= end_date:
+                    start_fact = copy.copy(f)
+                    start_fact["end_time"] = dt.datetime.combine(start_fact["start_time"], dt.time(23, 59))
+                    start_fact["delta"] = start_fact["end_time"] - start_fact["start_time"]
+                    res.append(start_fact)
+
+                if date <= fact["end_time"].date()  <= end_date:
+                    end_fact = copy.copy(f)
+                    end_fact["start_time"] = dt.datetime.combine(end_fact["end_time"], dt.time(0, 0))
+                    end_fact["delta"] = end_fact["end_time"] - end_fact["start_time"]
+                    res.append(end_fact)
+        return res
 
     def __get_popular_categories(self):
         """returns categories used in the specified interval"""

Modified: trunk/hamster/reports.py
==============================================================================
--- trunk/hamster/reports.py	(original)
+++ trunk/hamster/reports.py	Wed Feb 18 21:29:56 2009
@@ -120,15 +120,13 @@
         end_time = fact["end_time"]
         
         # ongoing task in current day
-        if not end_time and last_activity and fact["id"] == last_activity["id"]:
-            end_time = dt.datetime.now()
-
         end_time_str = ""
         if end_time:
-            delta = end_time - fact["start_time"]
-            duration = 24 * 60 * delta.days + delta.seconds / 60
             end_time_str = end_time.strftime('%H:%M')
 
+        if fact["delta"]:
+            duration = 24 * 60 * fact["delta"].days + fact["delta"].seconds / 60
+
         category = ""
         if fact["category"] != _("Unsorted"): #do not print "unsorted" in list
             category = fact["category"]

Modified: trunk/hamster/stats.py
==============================================================================
--- trunk/hamster/stats.py	(original)
+++ trunk/hamster/stats.py	Wed Feb 18 21:29:56 2009
@@ -218,12 +218,8 @@
             start_date = fact["start_time"].date()
 
             duration = None
-            if fact["end_time"]: # not set if just started
-                delta = fact["end_time"] - fact["start_time"]
-                duration = 24 * delta.days + delta.seconds / 60
-            elif fact["start_time"].date() == dt.date.today():
-                delta = dt.datetime.now() - fact["start_time"]
-                duration = 24 * delta.days + delta.seconds / 60
+            if fact["delta"]:
+                duration = 24 * fact["delta"].days + fact["delta"].seconds / 60
 
             self.fact_store.append(by_day[start_date]["row_pointer"],
                                    [fact["id"],

Modified: trunk/hamster/stuff.py
==============================================================================
--- trunk/hamster/stuff.py	(original)
+++ trunk/hamster/stuff.py	Wed Feb 18 21:29:56 2009
@@ -132,12 +132,8 @@
         for fact in self.facts:
             duration = None
             
-            if fact["end_time"]: # not set if just started
-                delta = fact["end_time"] - fact["start_time"]
-                duration = 24 * delta.days + delta.seconds / 60
-            elif fact["start_time"].date() == dt.date.today():  # give duration to today's last activity
-                delta = dt.datetime.now() - fact["start_time"]
-                duration = 24 * delta.days + delta.seconds / 60
+            if fact["delta"]:
+                duration = 24 * fact["delta"].days + fact["delta"].seconds / 60
             
             fact_category = fact['category']
             



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]