summaryrefslogtreecommitdiff
path: root/tp-account-widgets
diff options
context:
space:
mode:
authorMarco Barisione <marco.barisione@collabora.co.uk>2013-07-29 09:32:09 +0100
committerMarco Barisione <marco.barisione@collabora.co.uk>2013-08-20 11:03:05 +0100
commit59d0c113fdf2e565f512c98334a1808cfd216fa9 (patch)
tree6298463ab4aa96a3ad12448387e4e0edc97089df /tp-account-widgets
parent1f633bf20747995395b1dcc7001e0c9502104eda (diff)
downloadtelepathy-account-widgets-59d0c113fdf2e565f512c98334a1808cfd216fa9.tar.gz
time: move from Empathy to tp-account-widgets
https://bugzilla.gnome.org/show_bug.cgi?id=699492
Diffstat (limited to 'tp-account-widgets')
-rw-r--r--tp-account-widgets/Makefile.am2
-rw-r--r--tp-account-widgets/tpaw-time.c144
-rw-r--r--tp-account-widgets/tpaw-time.h48
3 files changed, 194 insertions, 0 deletions
diff --git a/tp-account-widgets/Makefile.am b/tp-account-widgets/Makefile.am
index 5f2f0d30..6887ab2c 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 00000000..d169fcb1
--- /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 00000000..2277483b
--- /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__ */
+