From a58344becf4d0bc0518262492c3b9a79020120c4 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Thu, 8 Aug 2013 21:34:07 +0300 Subject: [PATCH] ucs: always initialize on Lync 2013 We need UCS for buddy photos, so always initialize the module on Lync 2013, even if the contact list hasn't been migrated. --- ChangeLog | 1 + src/core/sipe-buddy.c | 33 +++++++++++++++++---------------- src/core/sipe-notify.c | 7 ++++--- src/core/sipe-ucs.c | 19 +++++++++++++------ src/core/sipe-ucs.h | 4 +++- 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 616d1947..4a2c510f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ version 1.17.0 "???" (2013-XX-XX) - Fixed #187: Duplicate messages in group chat (Stefan Becker) - fix EWS autodiscover for Office 365 (Stefan Becker) - add support for group chat history (Stefan Becker) + - add support for buddy photos on Lync 2013 (Stefan Becker) version 1.16.1 "Bug Fixes I" (2013-07-13) - Feature #66: Windows DLL version information (Stefan Becker) diff --git a/src/core/sipe-buddy.c b/src/core/sipe-buddy.c index 028f446b..a4045d29 100644 --- a/src/core/sipe-buddy.c +++ b/src/core/sipe-buddy.c @@ -1377,28 +1377,29 @@ static void get_photo_ab_entry_failed(SIPE_UNUSED_PARAMETER struct sipe_core_pri static void buddy_fetch_photo(struct sipe_core_private *sipe_private, const gchar *uri) { - /* On Lync2013+ [MS-DLX] no longer returns buddy photo information */ - if (SIPE_CORE_PRIVATE_FLAG_IS(LYNC2013)) { + if (sipe_backend_uses_photo()) { + + /* Lync 2013 or newer: use UCS */ + if (SIPE_CORE_PRIVATE_FLAG_IS(LYNC2013)) { - /* Use UCS instead, if available */ - if (sipe_private->ucs) sipe_ucs_get_photo(sipe_private, uri); - } else if (sipe_backend_uses_photo() && - sipe_private->dlx_uri && - sipe_private->addressbook_uri) { - struct ms_dlx_data *mdd = g_new0(struct ms_dlx_data, 1); + /* Lync 2010: use [MS-DLX] */ + } else if (sipe_private->dlx_uri && + sipe_private->addressbook_uri) { + struct ms_dlx_data *mdd = g_new0(struct ms_dlx_data, 1); - mdd->search_rows = g_slist_append(mdd->search_rows, g_strdup("msRTCSIP-PrimaryUserAddress")); - mdd->search_rows = g_slist_append(mdd->search_rows, g_strdup(uri)); + mdd->search_rows = g_slist_append(mdd->search_rows, g_strdup("msRTCSIP-PrimaryUserAddress")); + mdd->search_rows = g_slist_append(mdd->search_rows, g_strdup(uri)); - mdd->other = g_strdup(uri); - mdd->max_returns = 1; - mdd->callback = get_photo_ab_entry_response; - mdd->failed_callback = get_photo_ab_entry_failed; - mdd->session = sipe_svc_session_start(); + mdd->other = g_strdup(uri); + mdd->max_returns = 1; + mdd->callback = get_photo_ab_entry_response; + mdd->failed_callback = get_photo_ab_entry_failed; + mdd->session = sipe_svc_session_start(); - ms_dlx_webticket_request(sipe_private, mdd); + ms_dlx_webticket_request(sipe_private, mdd); + } } } diff --git a/src/core/sipe-notify.c b/src/core/sipe-notify.c index b7c1835a..9bd364ee 100644 --- a/src/core/sipe-notify.c +++ b/src/core/sipe-notify.c @@ -1295,13 +1295,14 @@ static gboolean sipe_process_roaming_contacts(struct sipe_core_private *sipe_pri SIPE_CORE_PRIVATE_FLAG_UNSET(LYNC2013); if (ucsmode) { + gboolean migrated = sipe_strcase_equal(ucsmode, + "migrated"); SIPE_CORE_PRIVATE_FLAG_SET(LYNC2013); SIPE_DEBUG_INFO_NOFORMAT("contact list contains 'ucsmode' attribute (indicates Lync 2013+)"); - if (sipe_strcase_equal(ucsmode, "migrated")) { + if (migrated) SIPE_DEBUG_INFO_NOFORMAT("contact list has been migrated to Unified Contact Store (UCS)"); - sipe_ucs_init(sipe_private); - } + sipe_ucs_init(sipe_private, migrated); } group_node = sipe_xml_child(isc, "group"); diff --git a/src/core/sipe-ucs.c b/src/core/sipe-ucs.c index b82c7b95..0757627d 100644 --- a/src/core/sipe-ucs.c +++ b/src/core/sipe-ucs.c @@ -60,6 +60,7 @@ struct sipe_ucs { gchar *ews_url; GSList *deferred_requests; GSList *pending_requests; + gboolean migrated; gboolean shutting_down; }; @@ -269,10 +270,12 @@ static void ucs_ews_autodiscover_cb(struct sipe_core_private *sipe_private, SIPE_DEBUG_INFO("ucs_ews_autodiscover_cb: EWS URL '%s'", ews_url); ucs->ews_url = g_strdup(ews_url); - sipe_ucs_http_request(sipe_private, - "", - sipe_ucs_get_im_item_list_response, - NULL); + /* Request migrated contact list */ + if (ucs->migrated) + sipe_ucs_http_request(sipe_private, + "", + sipe_ucs_get_im_item_list_response, + NULL); /* EWS URL is valid, send all deferred requests now */ if (ucs->deferred_requests) { @@ -296,12 +299,16 @@ static void ucs_ews_autodiscover_cb(struct sipe_core_private *sipe_private, } } -void sipe_ucs_init(struct sipe_core_private *sipe_private) +void sipe_ucs_init(struct sipe_core_private *sipe_private, + gboolean migrated) { + struct sipe_ucs *ucs; + if (sipe_private->ucs) return; - sipe_private->ucs = g_new0(struct sipe_ucs, 1); + sipe_private->ucs = ucs = g_new0(struct sipe_ucs, 1); + ucs->migrated = migrated; sipe_ews_autodiscover_start(sipe_private, ucs_ews_autodiscover_cb, diff --git a/src/core/sipe-ucs.h b/src/core/sipe-ucs.h index 57413c1c..cc48f959 100644 --- a/src/core/sipe-ucs.h +++ b/src/core/sipe-ucs.h @@ -36,8 +36,10 @@ void sipe_ucs_get_photo(struct sipe_core_private *sipe_private, * Initialize UCS * * @param sipe_private SIPE core private data + * @param migrated @c TRUE if contact list has been migrated */ -void sipe_ucs_init(struct sipe_core_private *sipe_private); +void sipe_ucs_init(struct sipe_core_private *sipe_private, + gboolean migrated); /** * Free UCS data -- 2.11.4.GIT