[hamster-applet] do not allow entering activities in future. fixes bug 626661



commit b7d8888cc9e4460beaa778f2ee6ea99d2b6c4aa2
Author: Toms Bauģis <toms baugis gmail com>
Date:   Thu Aug 12 00:57:07 2010 +0100

    do not allow entering activities in future. fixes bug 626661

 src/hamster/edit_activity.py   |   20 ++++++++++++++++++++
 src/hamster/widgets/dayline.py |   13 +++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/src/hamster/edit_activity.py b/src/hamster/edit_activity.py
index 936506a..284e63d 100644
--- a/src/hamster/edit_activity.py
+++ b/src/hamster/edit_activity.py
@@ -74,6 +74,8 @@ class CustomFactController:
             # otherwise let's start at 8am (unless it is today - in that case
             # we will assume that the user wants to start from this moment)
             fact_date = fact_date or dt.date.today()
+            if fact_date > dt.date.today():
+                fact_date = dt.date.today()
 
             last_activity = runtime.storage.get_facts(fact_date)
             if last_activity and last_activity[-1]["end_time"]:
@@ -133,6 +135,9 @@ class CustomFactController:
         self.get_widget("in_progress").set_active(end_time is None)
 
         if end_time:
+            if end_time > dt.datetime.now():
+                end_time = dt.datetime.now()
+
             self.end_time.set_time(end_time)
             self.set_end_date_label(end_time)
 
@@ -242,6 +247,13 @@ class CustomFactController:
         self.validate_fields()
 
     def on_start_date_entered(self, widget):
+        if dt.datetime.combine(self.start_date.get_date(), self.start_time.get_time()) > dt.datetime.now():
+            self.start_date.set_date(dt.date.today())
+
+            # if we are still over - push one more day back
+            if dt.datetime.combine(self.start_date.get_date(), self.start_time.get_time()) > dt.datetime.now():
+                self.start_date.set_date(dt.date.today() - dt.timedelta(days=1))
+
         self.validate_fields()
 
     def on_start_time_entered(self, widget):
@@ -250,6 +262,9 @@ class CustomFactController:
         if not start_time:
             return
 
+        if dt.datetime.combine(self.start_date.get_date(), start_time) > dt.datetime.now():
+            self.start_date.set_date(dt.date.today() - dt.timedelta(days=1))
+
 
         self.end_time.set_start_time(start_time)
         self.validate_fields()
@@ -268,9 +283,14 @@ class CustomFactController:
             end_time = None
         else:
             end_time = self._get_datetime("end")
+            if end_time > dt.datetime.now():
+                end_time = dt.datetime.now()
+
             # make sure we are within 24 hours of start time
             end_time -= dt.timedelta(days=(end_time - start_time).days)
 
+            self.end_time.set_time(end_time)
+
         self.draw_preview(start_time, end_time)
 
         looks_good = activity_text is not None and start_time \
diff --git a/src/hamster/widgets/dayline.py b/src/hamster/widgets/dayline.py
index af58706..fe92dd9 100644
--- a/src/hamster/widgets/dayline.py
+++ b/src/hamster/widgets/dayline.py
@@ -146,8 +146,14 @@ class DayLine(graphics.Scene):
 
         self.view_time = dt.datetime.combine((select_start - dt.timedelta(hours=self.day_start.hour, minutes=self.day_start.minute)).date(), self.day_start)
 
+        if select_start and select_start > dt.datetime.now():
+            select_start = dt.datetime.now()
         self.chosen_selection.start_time = select_start
+
+        if select_end and select_end > dt.datetime.now():
+            select_end = dt.datetime.now()
         self.chosen_selection.end_time = select_end
+
         self.chosen_selection.width = None
         self.chosen_selection.fixed = True
         self.chosen_selection.visible = True
@@ -164,6 +170,9 @@ class DayLine(graphics.Scene):
             self.drag_start = None
 
             start_time = self.selection.start_time
+            if start_time > dt.datetime.now():
+                start_time = dt.datetime.now()
+
             end_time = self.selection.end_time
             self.new_selection()
             self.emit("on-time-chosen", start_time, end_time)
@@ -172,6 +181,10 @@ class DayLine(graphics.Scene):
         self.drag_start = None
 
         start_time = self.selection.start_time
+        if start_time > dt.datetime.now():
+            start_time = dt.datetime.now()
+
+
         end_time = None
         if self.fact_bars:
             times = [bar.fact['start_time'] for bar in self.fact_bars if bar.fact['start_time'] - start_time > dt.timedelta(minutes=5)]



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