Version bump
[gc-dialer] / src / alarm_handler.py
index 6de0aec..d3a9bb9 100644 (file)
@@ -3,6 +3,7 @@
 import os
 import time
 import datetime
+import ConfigParser
 
 import dbus
 import osso.alarmd as alarmd
@@ -26,30 +27,32 @@ class AlarmHandler(object):
                bus = dbus.SystemBus()
                self._alarmdDBus = bus.get_object("com.nokia.alarmd", "/com/nokia/alarmd");
                self._alarmCookie = self._INVALID_COOKIE
+               self._launcher = self._LAUNCHER
 
        def load_settings(self, config, sectionName):
-               self._recurrence = config.getint(sectionName, "recurrence")
-               self._alarmCookie = config.getint(sectionName, "alarmCookie")
+               try:
+                       self._recurrence = config.getint(sectionName, "recurrence")
+                       self._alarmCookie = config.getint(sectionName, "alarmCookie")
+                       launcher = config.get(sectionName, "notifier")
+                       if launcher:
+                               self._launcher = launcher
+               except ConfigParser.NoOptionError:
+                       pass
 
        def save_settings(self, config, sectionName):
                config.set(sectionName, "recurrence", str(self._recurrence))
                config.set(sectionName, "alarmCookie", str(self._alarmCookie))
+               launcher = self._launcher if self._launcher != self._LAUNCHER else ""
+               config.set(sectionName, "notifier", launcher)
 
        def apply_settings(self, enabled, recurrence):
                if recurrence != self._recurrence or enabled != self.isEnabled:
                        if self.isEnabled:
-                               self.delete_alarm()
+                               self._clear_alarm()
                        if enabled:
                                self._set_alarm(recurrence)
                self._recurrence = int(recurrence)
 
-       def delete_alarm(self):
-               if self._alarmCookie == self._INVALID_COOKIE:
-                       return
-               deleteResult = self._alarmdDBus.del_event(dbus.Int32(self._alarmCookie))
-               self._alarmCookie = self._INVALID_COOKIE
-               assert deleteResult != -1, "Deleting of alarm event failed"
-
        @property
        def recurrence(self):
                return self._recurrence
@@ -60,19 +63,22 @@ class AlarmHandler(object):
 
        def _get_start_time(self, recurrence):
                now = datetime.datetime.now()
-               startTimeMinute = now.minute + recurrence
+               startTimeMinute = now.minute + max(recurrence, 5) # being safe
+               startTimeHour = now.hour + int(startTimeMinute / 60)
+               startTimeMinute = startTimeMinute % 59
                now.replace(minute=startTimeMinute)
                timestamp = int(time.mktime(now.timetuple()))
                return timestamp
 
        def _set_alarm(self, recurrence):
+               assert 1 <= recurrence, "Notifications set to occur too frequently: %d" % recurrence
                alarmTime = self._get_start_time(recurrence)
 
                #Setup the alarm arguments so that they can be passed to the D-Bus add_event method
                action = []
                action.extend(['flags', self._DEFAULT_FLAGS])
                action.extend(['title', self._TITLE])
-               action.extend(['path', self._LAUNCHER])
+               action.extend(['path', self._launcher])
                action.extend([
                        'arguments',
                        dbus.Array(
@@ -92,6 +98,13 @@ class AlarmHandler(object):
 
                self._alarmCookie = self._alarmdDBus.add_event(*event);
 
+       def _clear_alarm(self):
+               if self._alarmCookie == self._INVALID_COOKIE:
+                       return
+               deleteResult = self._alarmdDBus.del_event(dbus.Int32(self._alarmCookie))
+               self._alarmCookie = self._INVALID_COOKIE
+               assert deleteResult != -1, "Deleting of alarm event failed"
+
 
 def main():
        import ConfigParser