X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-datetime-formatter.c;h=b04ec34010b8b1dbfc1c16df12fcb4cdda76e82e;hp=9678420d40ec2decec69ec293915ebb5d425670a;hb=HEAD;hpb=54b2b4b64a81caaf214c47da59057b54bf7b067c diff --git a/src/modest-datetime-formatter.c b/src/modest-datetime-formatter.c index 9678420..b04ec34 100644 --- a/src/modest-datetime-formatter.c +++ b/src/modest-datetime-formatter.c @@ -35,6 +35,11 @@ #endif #include #include "modest-text-utils.h" +#ifdef MODEST_USE_LIBTIME +#include +#include +#include +#endif typedef enum { DATETIME_FORMAT_12H, @@ -58,6 +63,14 @@ struct _ModestDatetimeFormatterPrivate { #endif }; +/* We need this very nasty stuff because the call to + osso_time_set_notification_cb cannot be reverted and thus the + handler will be called always even though we try to set another + one */ +#ifdef MODEST_USE_LIBTIME +static ModestDatetimeFormatter *global_self = NULL; +#endif + #define MODEST_DATETIME_FORMATTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ MODEST_TYPE_DATETIME_FORMATTER, \ ModestDatetimeFormatterPrivate)) @@ -156,6 +169,17 @@ clock_format_changed (GConfClient *gconf, } #endif +#ifdef MODEST_USE_LIBTIME +static void +time_changed_cb (gpointer userdata) +{ + if (global_self) { + time_get_synced (); + g_signal_emit (global_self, signals[FORMAT_CHANGED_SIGNAL], 0); + } +} +#endif + static void init_format (ModestDatetimeFormatter *obj) { @@ -181,8 +205,18 @@ 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 + if (OSSO_OK == osso_time_set_notification_cb (modest_platform_get_osso_context (), + time_changed_cb, + NULL)) + global_self = obj; + time_get_synced (); +#endif + } static void @@ -205,6 +239,13 @@ modest_datetime_formatter_finalize (GObject *obj) priv->gconf_handler = 0; gconf_client_remove_dir (gconf, HILDON2_GCONF_FORMAT_DIR, NULL); + + /* Disconnect notification */ +#ifdef MODEST_USE_LIBTIME + if (OSSO_OK != osso_time_set_notification_cb (modest_platform_get_osso_context (), + NULL, NULL)) + global_self = NULL; +#endif #endif G_OBJECT_CLASS (parent_class)->finalize (obj); } @@ -231,7 +272,7 @@ modest_datetime_formatter_format_date (ModestDatetimeFormatter *self, switch (priv->current_format) { case DATETIME_FORMAT_12H: case DATETIME_FORMAT_24H: - format_string = _HL("wdgt_va_date"); + format_string = _HL_DATE; break; case DATETIME_FORMAT_LOCALE: format_string = "%x"; @@ -253,20 +294,24 @@ modest_datetime_formatter_format_time (ModestDatetimeFormatter *self, const gchar *format_string = NULL; gboolean is_pm; struct tm localtime_tm = {0, }; - time_t date_copy; g_return_val_if_fail (MODEST_IS_DATETIME_FORMATTER (self), NULL); priv = MODEST_DATETIME_FORMATTER_GET_PRIVATE (self); +#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_va_12h_time_pm"):_HL("wdgt_va_12h_time_am"); + format_string = is_pm?_HL_12H_TIME_PM:_HL_12H_TIME_AM; break; case DATETIME_FORMAT_24H: - format_string = _HL("wdgt_va_24h_time"); + format_string = _HL_24H_TIME; break; case DATETIME_FORMAT_LOCALE: format_string = "%X"; @@ -298,10 +343,25 @@ 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);