X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-datetime-formatter.c;h=db50dc1c280fbca8d6dbf7dcd8e8a93d2dcf9c55;hp=dd3ee9cabb1329a21656d0a609ed625e8fdf32a1;hb=4d39841513a3a7f7aa9d38ab97cb9fcc9171e80b;hpb=ce5a9ce7588e132c0c059344c7645994c536d091 diff --git a/src/modest-datetime-formatter.c b/src/modest-datetime-formatter.c index dd3ee9c..db50dc1 100644 --- a/src/modest-datetime-formatter.c +++ b/src/modest-datetime-formatter.c @@ -31,10 +31,15 @@ #include #ifdef MODEST_TOOLKIT_HILDON2 #include -#include -#include #include #endif +#include +#include "modest-text-utils.h" +#ifdef MODEST_USE_LIBTIME +#include +#include +#include +#endif typedef enum { DATETIME_FORMAT_12H, @@ -42,7 +47,8 @@ typedef enum { DATETIME_FORMAT_LOCALE, } DatetimeFormat; -#define HILDON2_GCONF_FORMAT_KEY "/apps/clock/time-format" +#define HILDON2_GCONF_FORMAT_DIR "/apps/clock" +#define HILDON2_GCONF_FORMAT_KEY HILDON2_GCONF_FORMAT_DIR "/time-format" /* 'private'/'protected' functions */ static void modest_datetime_formatter_class_init (ModestDatetimeFormatterClass *klass); @@ -115,7 +121,7 @@ modest_datetime_formatter_class_init (ModestDatetimeFormatterClass *klass) G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (ModestDatetimeFormatterClass, format_changed), NULL, NULL, - gtk_marshal_VOID__VOID, + g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } @@ -155,6 +161,15 @@ clock_format_changed (GConfClient *gconf, } #endif +#ifdef MODEST_USE_LIBTIME +static void +time_changed_cb (gpointer userdata) +{ + time_get_synced (); + g_signal_emit (G_OBJECT (userdata), signals[FORMAT_CHANGED_SIGNAL], 0); +} +#endif + static void init_format (ModestDatetimeFormatter *obj) { @@ -169,6 +184,9 @@ init_format (ModestDatetimeFormatter *obj) GError *err = NULL; gconf = gconf_client_get_default (); + gconf_client_add_dir (gconf, HILDON2_GCONF_FORMAT_DIR, + GCONF_CLIENT_PRELOAD_ONELEVEL, + &err); priv->gconf_handler = gconf_client_notify_add (gconf, HILDON2_GCONF_FORMAT_KEY, clock_format_changed, (gpointer) obj, NULL, &err); @@ -177,17 +195,22 @@ init_format (ModestDatetimeFormatter *obj) g_warning ("Error listening to time format in gconf %s", err->message); g_error_free (err); } + update_format (obj); #endif + +#ifdef MODEST_USE_LIBTIME + osso_time_set_notification_cb (modest_platform_get_osso_context (), + time_changed_cb, + obj); + time_get_synced (); +#endif + } static void modest_datetime_formatter_instance_init (ModestDatetimeFormatter *obj) { - ModestDatetimeFormatterPrivate *priv; - - priv = MODEST_DATETIME_FORMATTER_GET_PRIVATE (obj); - init_format (obj); } @@ -196,11 +219,20 @@ modest_datetime_formatter_finalize (GObject *obj) { #ifdef MODEST_TOOLKIT_HILDON2 ModestDatetimeFormatterPrivate *priv; + GConfClient *gconf; priv = MODEST_DATETIME_FORMATTER_GET_PRIVATE (obj); - gconf_client_notify_remove (gconf_client_get_default (), + gconf = gconf_client_get_default (); + gconf_client_notify_remove (gconf, priv->gconf_handler); priv->gconf_handler = 0; + gconf_client_remove_dir (gconf, HILDON2_GCONF_FORMAT_DIR, + NULL); + + /* Disconnect notification */ +#ifdef MODEST_USE_LIBTIME + osso_time_set_notification_cb (modest_platform_get_osso_context (), NULL, NULL); +#endif #endif G_OBJECT_CLASS (parent_class)->finalize (obj); } @@ -248,15 +280,22 @@ modest_datetime_formatter_format_time (ModestDatetimeFormatter *self, ModestDatetimeFormatterPrivate *priv; const gchar *format_string = NULL; gboolean is_pm; + struct tm localtime_tm = {0, }; g_return_val_if_fail (MODEST_IS_DATETIME_FORMATTER (self), NULL); priv = MODEST_DATETIME_FORMATTER_GET_PRIVATE (self); - - is_pm = (date / (60 * 60 * 12)) % 2; +#ifdef MODEST_USE_LIBTIME + time_get_local_ex (date, &localtime_tm); +#else + time_t date_copy; + date_copy = date; + localtime_r (&date_copy, &localtime_tm); +#endif + is_pm = (localtime_tm.tm_hour/12) % 2; switch (priv->current_format) { case DATETIME_FORMAT_12H: - format_string = is_pm?_HL("wdgt_12h_time_pm"):_HL("wdgt_12h_time_am"); + format_string = is_pm?_HL("wdgt_va_12h_time_pm"):_HL("wdgt_va_12h_time_am"); break; case DATETIME_FORMAT_24H: format_string = _HL("wdgt_va_24h_time"); @@ -271,14 +310,45 @@ modest_datetime_formatter_format_time (ModestDatetimeFormatter *self, } const gchar * +modest_datetime_formatter_display_long_datetime (ModestDatetimeFormatter *self, + time_t date) +{ + +#define DATE_BUF_DOUBLE_SIZE 128 + + static gchar date_buf[DATE_BUF_DOUBLE_SIZE]; + + snprintf (date_buf, DATE_BUF_DOUBLE_SIZE, + "%s %s", modest_datetime_formatter_format_date (self, date), + modest_datetime_formatter_format_time (self, date)); + + return date_buf; +} + +const gchar * modest_datetime_formatter_display_datetime (ModestDatetimeFormatter *self, time_t date) { - int day = time (NULL) / (24*60*60); - int date_day = date / (24*60*60); + struct tm today_localtime_tm = {0, }; + struct tm date_localtime_tm = {0, }; + time_t today; + + today = time (NULL); +#ifdef MODEST_USE_LIBTIME + time_get_local_ex (today, &today_localtime_tm); + time_get_local_ex (date, &date_localtime_tm); +#else + time_t date_copy; + date_copy = today; + localtime_r (&date_copy, &today_localtime_tm); + date_copy = date; + localtime_r (&date_copy, &date_localtime_tm); +#endif - if (day == date_day) + if (today_localtime_tm.tm_mday == date_localtime_tm.tm_mday && + today_localtime_tm.tm_mon == date_localtime_tm.tm_mon && + today_localtime_tm.tm_year == date_localtime_tm.tm_year) return modest_datetime_formatter_format_time (self, date); else return modest_datetime_formatter_format_date (self, date);