aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-contactinfo-utils.c74
-rw-r--r--libempathy-gtk/empathy-contactinfo-utils.h4
-rw-r--r--libempathy-gtk/empathy-individual-widget.c9
3 files changed, 72 insertions, 15 deletions
diff --git a/libempathy-gtk/empathy-contactinfo-utils.c b/libempathy-gtk/empathy-contactinfo-utils.c
index c4bbeb1ab..e4e18f19d 100644
--- a/libempathy-gtk/empathy-contactinfo-utils.c
+++ b/libempathy-gtk/empathy-contactinfo-utils.c
@@ -23,27 +23,83 @@
#include <config.h>
#include <string.h>
+#include <stdlib.h>
#include <glib/gi18n-lib.h>
#include <telepathy-glib/util.h>
+#include <libempathy/empathy-time.h>
+
#include "empathy-contactinfo-utils.h"
+#include "empathy-string-parser.h"
+
+static gchar *
+linkify_first_value (GStrv values)
+{
+ return empathy_add_link_markup (values[0]);
+}
+
+static gchar *
+format_idle_time (GStrv values)
+{
+ const gchar *value = values[0];
+ int duration = strtol (value, NULL, 10);
+
+ if (duration <= 0)
+ return NULL;
+
+ return empathy_duration_to_string (duration);
+}
+
+static gchar *
+format_server (GStrv values)
+{
+ g_assert (values[0] != NULL);
+
+ if (values[1] == NULL)
+ return g_markup_escape_text (values[0], -1);
+ else
+ return g_markup_printf_escaped ("%s (%s)", values[0], values[1]);
+}
+
+static gchar *
+presence_hack (GStrv values)
+{
+ if (tp_str_empty (values[0]))
+ return NULL;
+
+ return g_markup_escape_text (values[0], -1);
+}
+
+typedef gchar * (* FieldFormatFunc) (GStrv);
typedef struct
{
const gchar *field_name;
const gchar *title;
- gboolean linkify;
+ FieldFormatFunc format;
} InfoFieldData;
static InfoFieldData info_field_data[] =
{
- { "fn", N_("Full name"), FALSE },
- { "tel", N_("Phone number"), FALSE },
- { "email", N_("E-mail address"), TRUE },
- { "url", N_("Website"), TRUE },
- { "bday", N_("Birthday"), FALSE },
+ { "fn", N_("Full name"), NULL },
+ { "tel", N_("Phone number"), NULL },
+ { "email", N_("E-mail address"), linkify_first_value },
+ { "url", N_("Website"), linkify_first_value },
+ { "bday", N_("Birthday"), NULL },
+
+ /* Note to translators: this is the caption for a string of the form "5
+ * minutes ago", and refers to the time since the contact last interacted
+ * with their IM client. */
+ { "x-idle-time", N_("Last seen:"), format_idle_time },
+ { "x-irc-server", N_("Server:"), format_server },
+ { "x-host", N_("Connected from:"), format_server },
+
+ /* FIXME: once Idle implements SimplePresence using this information, we can
+ * and should bin this. */
+ { "x-presence-status-message", N_("Away message:"), presence_hack },
+
{ NULL, NULL }
};
@@ -68,7 +124,7 @@ static InfoParameterData info_parameter_data[] =
gboolean
empathy_contact_info_lookup_field (const gchar *field_name,
const gchar **title,
- gboolean *linkify)
+ EmpathyContactInfoFormatFunc *format)
{
guint i;
@@ -79,8 +135,8 @@ empathy_contact_info_lookup_field (const gchar *field_name,
if (title != NULL)
*title = gettext (info_field_data[i].title);
- if (linkify != NULL)
- *linkify = info_field_data[i].linkify;
+ if (format != NULL)
+ *format = info_field_data[i].format;
return TRUE;
}
diff --git a/libempathy-gtk/empathy-contactinfo-utils.h b/libempathy-gtk/empathy-contactinfo-utils.h
index 059085c84..ac9528e5f 100644
--- a/libempathy-gtk/empathy-contactinfo-utils.h
+++ b/libempathy-gtk/empathy-contactinfo-utils.h
@@ -26,8 +26,10 @@
G_BEGIN_DECLS
+typedef gchar * (* EmpathyContactInfoFormatFunc) (GStrv);
+
gboolean empathy_contact_info_lookup_field (const gchar *field_name,
- const gchar **title, gboolean *linkify);
+ const gchar **title, EmpathyContactInfoFormatFunc *linkify);
char *empathy_contact_info_field_label (const char *field_name,
GStrv parameters);
diff --git a/libempathy-gtk/empathy-individual-widget.c b/libempathy-gtk/empathy-individual-widget.c
index 7354ee83e..bec9225e6 100644
--- a/libempathy-gtk/empathy-individual-widget.c
+++ b/libempathy-gtk/empathy-individual-widget.c
@@ -46,7 +46,6 @@
#include "empathy-groups-widget.h"
#include "empathy-gtk-enum-types.h"
#include "empathy-individual-widget.h"
-#include "empathy-string-parser.h"
#include "empathy-ui-utils.h"
#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
@@ -229,7 +228,7 @@ details_update_show (EmpathyIndividualWidget *self,
TpContactInfoField *field = l->data;
gchar *title;
const gchar *value;
- gboolean linkify;
+ EmpathyContactInfoFormatFunc format;
GtkWidget *w;
if (field->field_value == NULL || field->field_value[0] == NULL)
@@ -238,7 +237,7 @@ details_update_show (EmpathyIndividualWidget *self,
value = field->field_value[0];
if (!empathy_contact_info_lookup_field (field->field_name,
- NULL, &linkify))
+ NULL, &format))
{
DEBUG ("Unhandled ContactInfo field: %s", field->field_name);
continue;
@@ -257,11 +256,11 @@ details_update_show (EmpathyIndividualWidget *self,
/* Add Value */
w = gtk_label_new (value);
- if (linkify == TRUE)
+ if (format != NULL)
{
gchar *markup;
- markup = empathy_add_link_markup (value);
+ markup = format (field->field_value);
gtk_label_set_markup (GTK_LABEL (w), markup);
g_free (markup);
}