diff options
Diffstat (limited to 'tp-account-widgets')
-rw-r--r-- | tp-account-widgets/Makefile.am | 2 | ||||
-rw-r--r-- | tp-account-widgets/tpaw-time.c | 144 | ||||
-rw-r--r-- | tp-account-widgets/tpaw-time.h | 48 |
3 files changed, 194 insertions, 0 deletions
diff --git a/tp-account-widgets/Makefile.am b/tp-account-widgets/Makefile.am index 5f2f0d30f..6887ab2ca 100644 --- a/tp-account-widgets/Makefile.am +++ b/tp-account-widgets/Makefile.am @@ -31,6 +31,7 @@ libtp_account_widgets_sources = \ tpaw-irc-network.c \ tpaw-irc-server.c \ tpaw-live-search.c \ + tpaw-time.c \ tpaw-utils.c \ totem-subtitle-encoding.c \ $(NULL) @@ -50,6 +51,7 @@ libtp_account_widgets_headers = \ tpaw-irc-network.h \ tpaw-irc-server.h \ tpaw-live-search.h \ + tpaw-time.h \ tpaw-utils.h \ totem-subtitle-encoding.h \ $(NULL) diff --git a/tp-account-widgets/tpaw-time.c b/tp-account-widgets/tpaw-time.c new file mode 100644 index 000000000..d169fcb12 --- /dev/null +++ b/tp-account-widgets/tpaw-time.c @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2003-2007 Imendio AB + * Copyright (C) 2007-2012 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Richard Hult <richard@imendio.com> + */ + +#include "config.h" +#include "tpaw-time.h" + +#include <glib/gi18n-lib.h> + +/* Note: TpawTime is always in UTC. */ + +gint64 +tpaw_time_get_current (void) +{ + GDateTime *now; + gint64 result; + + now = g_date_time_new_now_utc (); + result = g_date_time_to_unix (now); + g_date_time_unref (now); + + return result; +} + +/* Converts the UTC timestamp to a string, also in UTC. + * Returns NULL on failure. */ +gchar * +tpaw_time_to_string_utc (gint64 t, + const gchar *format) +{ + GDateTime *d; + char *result; + + g_return_val_if_fail (format != NULL, NULL); + + d = g_date_time_new_from_unix_utc (t); + result = g_date_time_format (d, format); + g_date_time_unref (d); + + return result; +} + +/* Converts the UTC timestamp to a string, in local time. + * Returns NULL on failure. */ +gchar * +tpaw_time_to_string_local (gint64 t, + const gchar *format) +{ + GDateTime *d, *local; + gchar *result; + + g_return_val_if_fail (format != NULL, NULL); + + d = g_date_time_new_from_unix_utc (t); + local = g_date_time_to_local (d); + g_date_time_unref (d); + + result = g_date_time_format (local, format); + g_date_time_unref (local); + + return result; +} + +gchar * +tpaw_duration_to_string (guint seconds) +{ + if (seconds < 60) + { + return g_strdup_printf (ngettext ("%d second ago", + "%d seconds ago", seconds), seconds); + } + else if (seconds < (60 * 60)) + { + seconds /= 60; + return g_strdup_printf (ngettext ("%d minute ago", + "%d minutes ago", seconds), seconds); + } + else if (seconds < (60 * 60 * 24)) + { + seconds /= 60 * 60; + return g_strdup_printf (ngettext ("%d hour ago", + "%d hours ago", seconds), seconds); + } + else if (seconds < (60 * 60 * 24 * 7)) + { + seconds /= 60 * 60 * 24; + return g_strdup_printf (ngettext ("%d day ago", + "%d days ago", seconds), seconds); + } + else if (seconds < (60 * 60 * 24 * 30)) + { + seconds /= 60 * 60 * 24 * 7; + return g_strdup_printf (ngettext ("%d week ago", + "%d weeks ago", seconds), seconds); + } + else + { + seconds /= 60 * 60 * 24 * 30; + return g_strdup_printf (ngettext ("%d month ago", + "%d months ago", seconds), seconds); + } +} + +gchar * +tpaw_time_to_string_relative (gint64 t) +{ + GDateTime *now, *then; + gint seconds; + GTimeSpan delta; + gchar *result; + + now = g_date_time_new_now_utc (); + then = g_date_time_new_from_unix_utc (t); + + delta = g_date_time_difference (now, then); + seconds = delta / G_TIME_SPAN_SECOND; + + if (seconds > 0) + result = tpaw_duration_to_string (seconds); + else + result = g_strdup (_("in the future")); + + g_date_time_unref (now); + g_date_time_unref (then); + + return result; +} diff --git a/tp-account-widgets/tpaw-time.h b/tp-account-widgets/tpaw-time.h new file mode 100644 index 000000000..2277483be --- /dev/null +++ b/tp-account-widgets/tpaw-time.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2004 Imendio AB + * Copyright (C) 2007-2012 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __TPAW_TIME_H__ +#define __TPAW_TIME_H__ + +#ifndef __USE_XOPEN +#define __USE_XOPEN +#endif +#include <time.h> +#include <glib.h> + +G_BEGIN_DECLS + +/* FIXME: ideally we should only display the hour and minutes but + * there is no localized format for that (bgo #668323) */ +#define TPAW_TIME_FORMAT_DISPLAY_SHORT "%X" +#define TPAW_DATE_FORMAT_DISPLAY_SHORT "%a %d %b %Y" +#define TPAW_TIME_DATE_FORMAT_DISPLAY_SHORT "%a %d %b %Y, %X" + +gint64 tpaw_time_get_current (void); +gchar *tpaw_time_to_string_utc (gint64 t, + const gchar *format); +gchar *tpaw_time_to_string_local (gint64 t, + const gchar *format); +gchar *tpaw_time_to_string_relative (gint64 t); +gchar *tpaw_duration_to_string (guint seconds); + +G_END_DECLS + +#endif /* __TPAW_TIME_H__ */ + |