]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-time.c
Updated Basque language
[empathy.git] / libempathy / empathy-time.c
index 0851add49a09d8bbc04b7024c048508e3f4884e7..19397e7a9fc757180251dd1a5e6df935e444377c 100644 (file)
@@ -14,8 +14,8 @@
  *
  * You should have received a copy of the GNU General Public
  * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA  02110-1301  USA
  *
  * Authors: Richard Hult <richard@imendio.com>
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <glib/gi18n.h>
 
 #include "empathy-time.h"
 
 /* Note: EmpathyTime is always in UTC. */
 
-EmpathyTime
+time_t
 empathy_time_get_current (void)
 {
        return time (NULL);
@@ -41,7 +42,7 @@ empathy_time_get_local_time (struct tm *tm)
 {
        const gchar *timezone;
        time_t       t;
-       
+
        timezone = g_getenv ("TZ");
        g_setenv ("TZ", "", TRUE);
 
@@ -63,7 +64,7 @@ empathy_time_get_local_time (struct tm *tm)
 /* The format is: "20021209T23:51:30" and is in UTC. 0 is returned on
  * failure. The alternative format "20021209" is also accepted.
  */
-EmpathyTime
+time_t
 empathy_time_parse (const gchar *str)
 {
        struct tm tm;
@@ -88,8 +89,8 @@ empathy_time_parse (const gchar *str)
 
 /* Converts the UTC timestamp to a string, also in UTC. Returns NULL on failure. */
 gchar *
-empathy_time_to_string_utc (EmpathyTime   t,
-                          const gchar *format)
+empathy_time_to_string_utc (time_t       t,
+                           const gchar *format)
 {
        gchar      stamp[128];
        struct tm *tm;
@@ -106,8 +107,8 @@ empathy_time_to_string_utc (EmpathyTime   t,
 
 /* Converts the UTC timestamp to a string, in local time. Returns NULL on failure. */
 gchar *
-empathy_time_to_string_local (EmpathyTime   t,
-                            const gchar *format)
+empathy_time_to_string_local (time_t       t,
+                             const gchar *format)
 {
        gchar      stamp[128];
        struct tm *tm;
@@ -122,3 +123,47 @@ empathy_time_to_string_local (EmpathyTime   t,
        return g_strdup (stamp);
 }
 
+gchar  *
+empathy_time_to_string_relative (time_t then)
+{
+       time_t now;
+       gint   seconds;
+
+       now = time (NULL);
+       seconds = now - then;
+
+       if (seconds > 0) {
+               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);
+               }
+       }
+       else {
+               return g_strdup (_("in the future"));
+       }
+}