#include <dbus_api/modest-dbus-callbacks.h>
#include <libosso.h>
+#include <alarmd/alarm_event.h> /* For alarm_event_add(), etc. */
#include <tny-maemo-conic-device.h>
#include <tny-folder.h>
#include <gtk/gtkicontheme.h>
#include <gtk/gtkmenuitem.h>
#include <gtk/gtkmain.h>
#include <string.h>
-
+
gboolean
modest_platform_init (void)
{
return OSSO_ERROR;
}
- /* Register hardware event dbus callback: */
- osso_hw_set_event_cb(osso_context, NULL, modest_osso_cb_hw_state_handler, NULL);
-
/* Add handler for Exit D-BUS messages.
* Not used because osso_application_set_exit_cb() is deprecated and obsolete:
result = osso_application_set_exit_cb(osso_context,
}
*/
+ /* Register hardware event dbus callback: */
+ osso_hw_set_event_cb(osso_context, NULL, modest_osso_cb_hw_state_handler, NULL);
+
+ /* TODO: Get the actual update interval from gconf,
+ * when that preferences dialog has been implemented.
+ * And make sure that this is called again whenever that is changed. */
+ const guint update_interval_minutes = 15;
+ modest_platform_set_update_interval (update_interval_minutes);
+
return TRUE;
}
/* Free */
gtk_widget_destroy (GTK_WIDGET (dialog));
}
+
+
+gboolean modest_platform_set_update_interval (guint minutes)
+{
+ ModestConf *conf = modest_runtime_get_conf ();
+ if (!conf)
+ return FALSE;
+
+ cookie_t alarm_cookie = modest_conf_get_int (conf, MODEST_CONF_ALARM_ID, NULL);
+
+ /* Delete any existing alarm,
+ * because we will replace it: */
+ if (alarm_cookie) {
+ /* TODO: What does the alarm_event_del() return value mean? */
+ alarm_event_del(alarm_cookie);
+ alarm_cookie = 0;
+ modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, 0, NULL);
+ }
+
+ /* 0 means no updates: */
+ if (minutes == 0)
+ return TRUE;
+
+
+ /* Register alarm: */
+
+ /* Get current time: */
+ time_t time_now;
+ time (&time_now);
+ struct tm *st_time = localtime (&time_now);
+
+ /* Add minutes to tm_min field: */
+ st_time->tm_min += minutes;
+
+ /* Set the time in alarm_event_t structure: */
+ alarm_event_t event;
+ memset (&event, 0, sizeof (alarm_event_t));
+ event.alarm_time = mktime (st_time);
+
+ /* Specify what should happen when the alarm happens:
+ * It should call this D-Bus method: */
+
+ /* Note: I am surpised that alarmd can't just use the modest.service file
+ * for this. murrayc. */
+ event.dbus_path = g_strdup(PREFIX "/bin/modest");
+
+ event.dbus_interface = g_strdup (MODEST_DBUS_IFACE);
+ event.dbus_service = g_strdup (MODEST_DBUS_SERVICE);
+ event.dbus_name = g_strdup (MODEST_DBUS_METHOD_SEND_RECEIVE);
+
+ alarm_cookie = alarm_event_add (&event);
+
+ /* Store the alarm ID in GConf, so we can remove it later:
+ * This is apparently valid between application instances. */
+ modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, alarm_cookie, NULL);
+
+ if (!alarm_cookie) {
+ /* Error */
+ const alarm_error_t alarm_error = alarmd_get_error ();
+ printf ("Error setting alarm event. Error code: '%d'\n", alarm_error);
+
+ /* Give people some clue: */
+ /* The alarm API should have a function for this: */
+ if (alarm_error == ALARMD_ERROR_DBUS) {
+ printf (" ALARMD_ERROR_DBUS: An error with D-Bus occurred, probably coudn't get a D-Bus connection.\n");
+ } else if (alarm_error == ALARMD_ERROR_CONNECTION) {
+ printf (" ALARMD_ERROR_CONNECTION: Could not contact alarmd via D-Bus.\n");
+ } else if (alarm_error == ALARMD_ERROR_INTERNAL) {
+ printf (" ALARMD_ERROR_INTERNAL: Some alarmd or libalarm internal error, possibly a version mismatch.\n");
+ } else if (alarm_error == ALARMD_ERROR_MEMORY) {
+ printf (" ALARMD_ERROR_MEMORY: A memory allocation failed.\n");
+ } else if (alarm_error == ALARMD_ERROR_ARGUMENT) {
+ printf (" ALARMD_ERROR_ARGUMENT: An argument given by caller was invalid.\n");
+ }
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+