X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-platform.c;h=8a0f938ccb68290872575040d09ac10b60bac920;hp=b286c8fbac00b8aabf8dd58f857a1dd1a9a6d1d8;hb=7dcb08b5d1082fdb9a991b2e67ba9f7d14bd1272;hpb=ba2367f68072eaed88c44e2def818520dbc934e1 diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index b286c8f..8a0f938 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -38,13 +38,14 @@ #include #include +#include /* For alarm_event_add(), etc. */ #include #include #include #include #include #include - + gboolean modest_platform_init (void) { @@ -67,9 +68,6 @@ 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, @@ -81,6 +79,15 @@ modest_platform_init (void) } */ + /* 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; } @@ -630,3 +637,84 @@ modest_platform_run_sort_dialog (GtkWindow *parent_window, /* 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; +} +