diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-09-08 11:11:22 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-10-21 06:42:21 +0800 |
commit | cf23dd409cc36a8f692bf0db4f28e505da8633f8 (patch) | |
tree | 5d29fe7b658fe3c39a76a76056c4432303d6bf13 /libempathy-gtk | |
parent | 06e665213df9b95a74f317da82a8f9537e2e3c87 (diff) | |
download | gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar.gz gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar.bz2 gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar.lz gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar.xz gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.tar.zst gsoc2013-empathy-cf23dd409cc36a8f692bf0db4f28e505da8633f8.zip |
Move empathy-contactinfo-utils to libempathy-gtk
Why do we still have this annoying split?
Rebasing this work will pull in a dependency on empathy-string-parser, which is
part of libempathy-gtk. Hence the move.
Diffstat (limited to 'libempathy-gtk')
-rw-r--r-- | libempathy-gtk/Makefile.am | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-contactinfo-utils.c | 185 | ||||
-rw-r--r-- | libempathy-gtk/empathy-contactinfo-utils.h | 41 | ||||
-rw-r--r-- | libempathy-gtk/empathy-individual-widget.c | 2 |
4 files changed, 229 insertions, 1 deletions
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index ccf87f2f0..96ef811b4 100644 --- a/libempathy-gtk/Makefile.am +++ b/libempathy-gtk/Makefile.am @@ -46,6 +46,7 @@ libempathy_gtk_handwritten_source = \ empathy-contact-list-store.c \ empathy-contact-list-view.c \ empathy-contact-menu.c \ + empathy-contactinfo-utils.c \ empathy-linking-dialog.c \ empathy-live-search.c \ empathy-contact-search-dialog.c \ @@ -116,6 +117,7 @@ libempathy_gtk_headers = \ empathy-live-search.h \ empathy-contact-search-dialog.h \ empathy-contact-widget.h \ + empathy-contactinfo-utils.h \ empathy-dialpad-widget.h \ empathy-geometry.h \ empathy-groups-widget.h \ diff --git a/libempathy-gtk/empathy-contactinfo-utils.c b/libempathy-gtk/empathy-contactinfo-utils.c new file mode 100644 index 000000000..c4bbeb1ab --- /dev/null +++ b/libempathy-gtk/empathy-contactinfo-utils.c @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2007-2011 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: Xavier Claessens <xclaesse@gmail.com> + * Philip Withnall <philip.withnall@collabora.co.uk> + * Danielle Madeley <danielle.madeley@collabora.co.uk> + */ + +#include <config.h> + +#include <string.h> + +#include <glib/gi18n-lib.h> + +#include <telepathy-glib/util.h> + +#include "empathy-contactinfo-utils.h" + +typedef struct +{ + const gchar *field_name; + const gchar *title; + gboolean linkify; +} 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 }, + { NULL, NULL } +}; + +typedef struct +{ + const gchar *type; + const gchar *title; +} InfoParameterData; + +static InfoParameterData info_parameter_data[] = +{ + { "work", N_("work") }, + { "home", N_("home") }, + { "cell", N_("mobile") }, + { "voice", N_("voice") }, + { "pref", N_("preferred") }, + { "postal", N_("postal") }, + { "parcel", N_("parcel") }, + { NULL, NULL } +}; + +gboolean +empathy_contact_info_lookup_field (const gchar *field_name, + const gchar **title, + gboolean *linkify) +{ + guint i; + + for (i = 0; info_field_data[i].field_name != NULL; i++) + { + if (tp_strdiff (info_field_data[i].field_name, field_name) == FALSE) + { + if (title != NULL) + *title = gettext (info_field_data[i].title); + + if (linkify != NULL) + *linkify = info_field_data[i].linkify; + + return TRUE; + } + } + + return FALSE; +} + +static char * +build_parameters_string (GStrv parameters) +{ + GPtrArray *output = g_ptr_array_new (); + char *join; + GStrv iter; + + for (iter = parameters; iter != NULL && *iter != NULL; iter++) + { + static const char *prefix = "type="; + const char *param = *iter; + InfoParameterData *iter2; + + if (!g_str_has_prefix (param, prefix)) + continue; + + param += strlen (prefix); + + for (iter2 = info_parameter_data; iter2->type != NULL; iter2++) + { + if (!tp_strdiff (iter2->type, param)) + { + g_ptr_array_add (output, gettext (iter2->title)); + break; + } + } + } + + if (output->len == 0) + return NULL; + + g_ptr_array_add (output, NULL); /* NULL-terminate */ + + join = g_strjoinv (", ", (char **) output->pdata); + g_ptr_array_free (output, TRUE); + + return join; +} + +char * +empathy_contact_info_field_label (const char *field_name, + GStrv parameters) +{ + char *ret; + const char *title; + char *join = build_parameters_string (parameters); + + if (!empathy_contact_info_lookup_field (field_name, &title, NULL)) + return NULL; + + if (join != NULL) + ret = g_strdup_printf ("%s (%s):", title, join); + else + ret = g_strdup_printf ("%s:", title); + + g_free (join); + + return ret; +} + +static gint +contact_info_field_name_cmp (const gchar *name1, + const gchar *name2) +{ + guint i; + + if (tp_strdiff (name1, name2) == FALSE) + return 0; + + /* We use the order of info_field_data */ + for (i = 0; info_field_data[i].field_name != NULL; i++) + { + if (tp_strdiff (info_field_data[i].field_name, name1) == FALSE) + return -1; + if (tp_strdiff (info_field_data[i].field_name, name2) == FALSE) + return +1; + } + + return g_strcmp0 (name1, name2); +} + +gint +empathy_contact_info_field_cmp (TpContactInfoField *field1, + TpContactInfoField *field2) +{ + return contact_info_field_name_cmp (field1->field_name, field2->field_name); +} + +gint +empathy_contact_info_field_spec_cmp (TpContactInfoFieldSpec *spec1, + TpContactInfoFieldSpec *spec2) +{ + return contact_info_field_name_cmp (spec1->name, spec2->name); +} diff --git a/libempathy-gtk/empathy-contactinfo-utils.h b/libempathy-gtk/empathy-contactinfo-utils.h new file mode 100644 index 000000000..059085c84 --- /dev/null +++ b/libempathy-gtk/empathy-contactinfo-utils.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2011 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: Danielle Madeley <danielle.madeley@collabora.co.uk> + */ + +#ifndef __EMPATHY_CONTACTINFO_UTILS_H__ +#define __EMPATHY_CONTACTINFO_UTILS_H__ + +#include <glib.h> +#include <telepathy-glib/connection.h> + +G_BEGIN_DECLS + +gboolean empathy_contact_info_lookup_field (const gchar *field_name, + const gchar **title, gboolean *linkify); +char *empathy_contact_info_field_label (const char *field_name, + GStrv parameters); + +gint empathy_contact_info_field_cmp (TpContactInfoField *field1, + TpContactInfoField *field2); +gint empathy_contact_info_field_spec_cmp (TpContactInfoFieldSpec *spec1, + TpContactInfoFieldSpec *spec2); + +G_END_DECLS + +#endif /* __EMPATHY_UTILS_H__ */ diff --git a/libempathy-gtk/empathy-individual-widget.c b/libempathy-gtk/empathy-individual-widget.c index 697eb257f..7354ee83e 100644 --- a/libempathy-gtk/empathy-individual-widget.c +++ b/libempathy-gtk/empathy-individual-widget.c @@ -37,12 +37,12 @@ #include <champlain-gtk/champlain-gtk.h> #endif -#include <libempathy/empathy-contactinfo-utils.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-location.h> #include <libempathy/empathy-time.h> #include "empathy-avatar-image.h" +#include "empathy-contactinfo-utils.h" #include "empathy-groups-widget.h" #include "empathy-gtk-enum-types.h" #include "empathy-individual-widget.h" |