From 6452aaca16196578b3abfda3269718f87c565196 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Thu, 15 Dec 2011 16:10:22 +0200 Subject: [PATCH] buddy: replace description with sipe_buddy_info_fields Miranda backend requires own mapping for sipe_backend_buddy_info_add(). Replace string parameter description with sipe_buddy_info_fields to make this possible. Move the string translations from sipe-buddy.c to purple-buddy.c. Also replaced hash table info_to_property_table with array buddy_info_map, which makes more sense for numeric indices starting from 0. --- src/api/sipe-backend.h | 12 +++-- src/core/sipe-buddy.c | 57 +++++++++++------------- src/purple/purple-buddy.c | 109 +++++++++++++++++----------------------------- 3 files changed, 73 insertions(+), 105 deletions(-) diff --git a/src/api/sipe-backend.h b/src/api/sipe-backend.h index 016bb99d..1b7eda0f 100644 --- a/src/api/sipe-backend.h +++ b/src/api/sipe-backend.h @@ -624,10 +624,13 @@ void sipe_backend_user_close_ask(gpointer key); /** BUDDIES ******************************************************************/ -/* The list of properties a buddy can have */ +/* + * sipe_backend_buddy_get/set_string(): properties a buddy can have + * sipe_backend_buddy_info_add(): mapped, e.g. to a string label + */ typedef enum { - SIPE_BUDDY_INFO_DISPLAY_NAME, + SIPE_BUDDY_INFO_DISPLAY_NAME = 0, SIPE_BUDDY_INFO_JOB_TITLE, SIPE_BUDDY_INFO_CITY, SIPE_BUDDY_INFO_STATE, @@ -638,7 +641,6 @@ typedef enum SIPE_BUDDY_INFO_WORK_PHONE_DISPLAY, SIPE_BUDDY_INFO_COMPANY, SIPE_BUDDY_INFO_EMAIL, - SIPE_BUDDY_INFO_DEVICE, SIPE_BUDDY_INFO_SITE, SIPE_BUDDY_INFO_ZIPCODE, SIPE_BUDDY_INFO_STREET, @@ -650,6 +652,8 @@ typedef enum SIPE_BUDDY_INFO_OTHER_PHONE_DISPLAY, SIPE_BUDDY_INFO_CUSTOM1_PHONE, SIPE_BUDDY_INFO_CUSTOM1_PHONE_DISPLAY, + SIPE_BUDDY_INFO_ALIAS, /* only for sipe_backend_buddy_info_add() */ + SIPE_BUDDY_INFO_DEVICE, /* only for sipe_backend_buddy_info_add() */ } sipe_buddy_info_fields; /* Opaque token */ @@ -869,7 +873,7 @@ struct sipe_backend_buddy_info; struct sipe_backend_buddy_info *sipe_backend_buddy_info_start(struct sipe_core_public *sipe_public); void sipe_backend_buddy_info_add(struct sipe_core_public *sipe_public, struct sipe_backend_buddy_info *info, - const gchar *description, + sipe_buddy_info_fields key, const gchar *value); void sipe_backend_buddy_info_break(struct sipe_core_public *sipe_public, struct sipe_backend_buddy_info *info); diff --git a/src/core/sipe-buddy.c b/src/core/sipe-buddy.c index cbe99a65..9e65969b 100644 --- a/src/core/sipe-buddy.c +++ b/src/core/sipe-buddy.c @@ -602,7 +602,7 @@ static void get_info_finalize(struct sipe_core_private *sipe_private, if (value) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Display name"), + SIPE_BUDDY_INFO_DISPLAY_NAME, value); } } else { @@ -615,7 +615,7 @@ static void get_info_finalize(struct sipe_core_private *sipe_private, { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Alias"), + SIPE_BUDDY_INFO_ALIAS, alias); } g_free(alias); @@ -627,9 +627,9 @@ static void get_info_finalize(struct sipe_core_private *sipe_private, SIPE_BUDDY_INFO_EMAIL); if (value) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, - info, - _("Email address"), - value); + info, + SIPE_BUDDY_INFO_EMAIL, + value); g_free(value); } } @@ -639,18 +639,18 @@ static void get_info_finalize(struct sipe_core_private *sipe_private, SIPE_BUDDY_INFO_SITE); if (value) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, - info, - _("Site"), - value); + info, + SIPE_BUDDY_INFO_SITE, + value); g_free(value); } sbuddy = g_hash_table_lookup(sipe_private->buddies, uri); if (sbuddy && sbuddy->device_name) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, - info, - _("Device"), - sbuddy->device_name); + info, + SIPE_BUDDY_INFO_DEVICE, + sbuddy->device_name); } sipe_backend_buddy_info_finalize(SIPE_CORE_PUBLIC, info, uri); @@ -694,7 +694,7 @@ static void ab_entry_response(struct sipe_core_private *sipe_private, value = NULL; sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Display name"), + SIPE_BUDDY_INFO_DISPLAY_NAME, server_alias); } else if (sipe_strcase_equal(name, "mail")) { g_free(email); @@ -702,27 +702,22 @@ static void ab_entry_response(struct sipe_core_private *sipe_private, value = NULL; sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Email address"), + SIPE_BUDDY_INFO_EMAIL, email); } else if (sipe_strcase_equal(name, "title")) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Job title"), - value); - } else if (sipe_strcase_equal(name, "title")) { - sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, - info, - _("Job title"), + SIPE_BUDDY_INFO_JOB_TITLE, value); } else if (sipe_strcase_equal(name, "company")) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Company"), + SIPE_BUDDY_INFO_COMPANY, value); } else if (sipe_strcase_equal(name, "country")) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Country"), + SIPE_BUDDY_INFO_COUNTRY, value); } @@ -733,7 +728,7 @@ static void ab_entry_response(struct sipe_core_private *sipe_private, if (sipe_strcase_equal(name, "telephonenumber")) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Business phone"), + SIPE_BUDDY_INFO_WORK_PHONE, first); } @@ -858,56 +853,56 @@ static gboolean process_get_info_response(struct sipe_core_private *sipe_private if (!is_empty(server_alias)) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Display name"), + SIPE_BUDDY_INFO_DISPLAY_NAME, server_alias); } if ((value = sipe_xml_attribute(mrow, "title")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Job title"), + SIPE_BUDDY_INFO_JOB_TITLE, value); } if ((value = sipe_xml_attribute(mrow, "office")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Office"), + SIPE_BUDDY_INFO_OFFICE, value); } if (!is_empty(phone_number)) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Business phone"), + SIPE_BUDDY_INFO_WORK_PHONE, phone_number); } g_free(phone_number); if ((value = sipe_xml_attribute(mrow, "company")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Company"), + SIPE_BUDDY_INFO_COMPANY, value); } if ((value = sipe_xml_attribute(mrow, "city")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("City"), + SIPE_BUDDY_INFO_CITY, value); } if ((value = sipe_xml_attribute(mrow, "state")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("State"), + SIPE_BUDDY_INFO_STATE, value); } if ((value = sipe_xml_attribute(mrow, "country")) && strlen(value) > 0) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Country"), + SIPE_BUDDY_INFO_COUNTRY, value); } if (!is_empty(email)) { sipe_backend_buddy_info_add(SIPE_CORE_PUBLIC, info, - _("Email address"), + SIPE_BUDDY_INFO_EMAIL, email); } } diff --git a/src/purple/purple-buddy.c b/src/purple/purple-buddy.c index 54a9bd4b..7e448e78 100644 --- a/src/purple/purple-buddy.c +++ b/src/purple/purple-buddy.c @@ -39,71 +39,38 @@ #include "sipe-core.h" #include "sipe-nls.h" -static GHashTable *info_to_property_table = NULL; - -/** Property names to store in blist.xml */ -#define ALIAS_PROP "alias" -#define EMAIL_PROP "email" -#define PHONE_PROP "phone" -#define PHONE_DISPLAY_PROP "phone-display" -#define PHONE_MOBILE_PROP "phone-mobile" -#define PHONE_MOBILE_DISPLAY_PROP "phone-mobile-display" -#define PHONE_HOME_PROP "phone-home" -#define PHONE_HOME_DISPLAY_PROP "phone-home-display" -#define PHONE_OTHER_PROP "phone-other" -#define PHONE_OTHER_DISPLAY_PROP "phone-other-display" -#define PHONE_CUSTOM1_PROP "phone-custom1" -#define PHONE_CUSTOM1_DISPLAY_PROP "phone-custom1-display" -#define SITE_PROP "site" -#define COMPANY_PROP "company" -#define DEPARTMENT_PROP "department" -#define TITLE_PROP "title" -#define OFFICE_PROP "office" -/** implies work address */ -#define ADDRESS_STREET_PROP "address-street" -#define ADDRESS_CITY_PROP "address-city" -#define ADDRESS_STATE_PROP "address-state" -#define ADDRESS_ZIPCODE_PROP "address-zipcode" -#define ADDRESS_COUNTRYCODE_PROP "address-country-code" - -#define ADD_PROP(key,value) g_hash_table_insert(info_to_property_table, (gpointer)key, value) - -static void -init_property_hash(void) -{ - info_to_property_table = g_hash_table_new(NULL, NULL); - - ADD_PROP(SIPE_BUDDY_INFO_DISPLAY_NAME , ALIAS_PROP); - ADD_PROP(SIPE_BUDDY_INFO_EMAIL , EMAIL_PROP); - ADD_PROP(SIPE_BUDDY_INFO_WORK_PHONE , PHONE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_WORK_PHONE_DISPLAY , PHONE_DISPLAY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_SITE , SITE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_COMPANY , COMPANY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_DEPARTMENT , DEPARTMENT_PROP); - ADD_PROP(SIPE_BUDDY_INFO_JOB_TITLE , TITLE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_OFFICE , OFFICE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_STREET , ADDRESS_STREET_PROP); - ADD_PROP(SIPE_BUDDY_INFO_CITY , ADDRESS_CITY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_STATE , ADDRESS_STATE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_ZIPCODE , ADDRESS_ZIPCODE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_COUNTRY , ADDRESS_COUNTRYCODE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_MOBILE_PHONE , PHONE_MOBILE_PROP); - ADD_PROP(SIPE_BUDDY_INFO_MOBILE_PHONE_DISPLAY , PHONE_MOBILE_DISPLAY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_HOME_PHONE , PHONE_HOME_PROP); - ADD_PROP(SIPE_BUDDY_INFO_HOME_PHONE_DISPLAY , PHONE_HOME_DISPLAY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_OTHER_PHONE , PHONE_OTHER_PROP); - ADD_PROP(SIPE_BUDDY_INFO_OTHER_PHONE_DISPLAY , PHONE_OTHER_DISPLAY_PROP); - ADD_PROP(SIPE_BUDDY_INFO_CUSTOM1_PHONE , PHONE_CUSTOM1_PROP); - ADD_PROP(SIPE_BUDDY_INFO_CUSTOM1_PHONE_DISPLAY, PHONE_CUSTOM1_DISPLAY_PROP); -} - -static gchar * -sipe_buddy_info_to_purple_property(sipe_buddy_info_fields info) -{ - if (!info_to_property_table) - init_property_hash(); - return g_hash_table_lookup(info_to_property_table, (gpointer)info); -} +static const struct { + const gchar *property; /* property name to store in blist.xml */ + const gchar *description; /* label for "Get Info" dialog */ +} buddy_info_map[] = { +/* SIPE_BUDDY_INFO_DISPLAY_NAME */ { "alias", N_("Display name") }, +/* SIPE_BUDDY_INFO_JOB_TITLE */ { "title", N_("Job title") }, +/* SIPE_BUDDY_INFO_CITY */ { "address-city", N_("City") }, +/* SIPE_BUDDY_INFO_STATE */ { "address-state", N_("State") }, +/* SIPE_BUDDY_INFO_OFFICE */ { "office", N_("Office") }, +/* SIPE_BUDDY_INFO_DEPARTMENT */ { "department", NULL }, +/* SIPE_BUDDY_INFO_COUNTRY */ { "address-country-code", N_("Country") }, +/* SIPE_BUDDY_INFO_WORK_PHONE */ { "phone", N_("Business phone") }, +/* SIPE_BUDDY_INFO_WORK_PHONE_DISPLAY */ { "phone-display", NULL }, +/* SIPE_BUDDY_INFO_COMPANY */ { "company", N_("Company") }, +/* SIPE_BUDDY_INFO_EMAIL */ { "email", N_("Email address") }, +/* SIPE_BUDDY_INFO_SITE */ { "site", N_("Site") }, +/* SIPE_BUDDY_INFO_ZIPCODE */ { "address-zipcode", NULL }, +/* SIPE_BUDDY_INFO_STREET */ { "address-street", NULL }, +/* SIPE_BUDDY_INFO_MOBILE_PHONE */ { "phone-mobile", NULL }, +/* SIPE_BUDDY_INFO_MOBILE_PHONE_DISPLAY */ { "phone-mobile-display", NULL }, +/* SIPE_BUDDY_INFO_HOME_PHONE */ { "phone-home", NULL }, +/* SIPE_BUDDY_INFO_HOME_PHONE_DISPLAY */ { "phone-home-display", NULL }, +/* SIPE_BUDDY_INFO_OTHER_PHONE */ { "phone-other", NULL }, +/* SIPE_BUDDY_INFO_OTHER_PHONE_DISPLAY */ { "phone-other-display", NULL }, +/* SIPE_BUDDY_INFO_CUSTOM1_PHONE */ { "phone-custom1", NULL }, +/* SIPE_BUDDY_INFO_CUSTOM1_PHONE_DISPLAY */ { "phone-custom1-display", NULL }, +/* SIPE_BUDDY_INFO_ALIAS */ { NULL, N_("Alias") }, +/* SIPE_BUDDY_INFO_DEVICE */ { NULL, N_("Device") }, +}; + +#define buddy_info_property(i) buddy_info_map[i].property +#define buddy_info_description(i) gettext(buddy_info_map[i].description) sipe_backend_buddy sipe_backend_buddy_find(struct sipe_core_public *sipe_public, const gchar *buddy_name, @@ -201,7 +168,7 @@ gchar* sipe_backend_buddy_get_string(SIPE_UNUSED_PARAMETER struct sipe_core_publ const sipe_buddy_info_fields key) { PurpleBuddy *b = (PurpleBuddy*) buddy; - return g_strdup(purple_blist_node_get_string(&b->node, sipe_buddy_info_to_purple_property(key))); + return g_strdup(purple_blist_node_get_string(&b->node, buddy_info_property(key))); } void sipe_backend_buddy_set_string(SIPE_UNUSED_PARAMETER struct sipe_core_public *sipe_public, @@ -210,7 +177,7 @@ void sipe_backend_buddy_set_string(SIPE_UNUSED_PARAMETER struct sipe_core_public const gchar *val) { PurpleBuddy *b = (PurpleBuddy*) buddy; - purple_blist_node_set_string(&b->node, sipe_buddy_info_to_purple_property(key), val); + purple_blist_node_set_string(&b->node, buddy_info_property(key), val); } sipe_backend_buddy sipe_backend_buddy_add(struct sipe_core_public *sipe_public, @@ -329,7 +296,7 @@ struct sipe_backend_buddy_info *sipe_backend_buddy_info_start(SIPE_UNUSED_PARAME void sipe_backend_buddy_info_add(SIPE_UNUSED_PARAMETER struct sipe_core_public *sipe_public, struct sipe_backend_buddy_info *info, - const gchar *description, + sipe_buddy_info_fields key, const gchar *value) { if (info) { @@ -338,7 +305,9 @@ void sipe_backend_buddy_info_add(SIPE_UNUSED_PARAMETER struct sipe_core_public * #else purple_notify_user_info_add_pair #endif - ((PurpleNotifyUserInfo *) info, description, value); + ((PurpleNotifyUserInfo *) info, + buddy_info_description(key), + value); } } @@ -630,7 +599,7 @@ static void sipe_purple_buddy_copy_to_cb(PurpleBlistNode *node, tmp = purple_buddy_get_server_alias(buddy); if (tmp) purple_blist_server_alias_buddy(clone, tmp); - key = sipe_buddy_info_to_purple_property(SIPE_BUDDY_INFO_EMAIL); + key = buddy_info_property(SIPE_BUDDY_INFO_EMAIL); tmp = purple_blist_node_get_string(&buddy->node, key); if (tmp) purple_blist_node_set_string(&clone->node, key, -- 2.11.4.GIT