import os
import time
import datetime
+import ConfigParser
import dbus
import osso.alarmd as alarmd
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
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(
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