diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-02-05 15:12:50 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-02-05 15:17:29 +0100 |
commit | d626874d7b4f86e8fd4cd59bcafca141796243b8 (patch) | |
tree | 82aa1cfdc56ab0952fcfb72ea01060081a41aa93 | |
parent | 174d1e4e057a3c0e712e61a0c354e04709954cee (diff) |
logger: prepare GROUP if needed
GROUP is no longer a part of CORE so we have to prepare it manually.
I did a similar change in Empathy see
https://git.gnome.org/browse/empathy/commit/?id=84e5c73bbf88e85387f4ab8dbcad569b3f571a91
-rw-r--r-- | telepathy-logger/text-channel.c | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/telepathy-logger/text-channel.c b/telepathy-logger/text-channel.c index 1444df93b..d78e09dc1 100644 --- a/telepathy-logger/text-channel.c +++ b/telepathy-logger/text-channel.c @@ -556,6 +556,34 @@ connect_message_signals (TplTextChannel *self) G_CALLBACK (on_pending_message_removed_cb), self, 0); } +static void +continue_preparing (TplTextChannel *self, + GSimpleAsyncResult *result, + gboolean in_idle) +{ + get_my_contact (self); + get_remote_contact (self); + store_pending_messages (self); + connect_message_signals (self); + + if (in_idle) + g_simple_async_result_complete_in_idle (result); + else + g_simple_async_result_complete (result); + + g_object_unref (result); +} + +static void +channel_group_prepared_cb (GObject *source, + GAsyncResult *res, + gpointer user_data) +{ + TplTextChannel *self = (TplTextChannel *) source; + GSimpleAsyncResult *result = user_data; + + continue_preparing (self, result, FALSE); +} static void _tpl_text_channel_prepare_core_async (TpProxy *proxy, @@ -564,14 +592,26 @@ _tpl_text_channel_prepare_core_async (TpProxy *proxy, gpointer user_data) { TplTextChannel *self = (TplTextChannel *) proxy; + GSimpleAsyncResult *result; - get_my_contact (self); - get_remote_contact (self); - store_pending_messages (self); - connect_message_signals (self); - - tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, + result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, _tpl_text_channel_prepare_core_async); + + if (tp_proxy_has_interface_by_id (self, + TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP1)) + { + /* If the channel is implementing Group, we need its feature prepared. + * We can't list it as a dependency on TPL_TEXT_CHANNEL_FEATURE_CORE as + * we still want to prepare the feature on channel not + * implementing GROUP. */ + GQuark features[] = { TP_CHANNEL_FEATURE_GROUP, 0 }; + + tp_proxy_prepare_async (self, features, channel_group_prepared_cb, self); + } + else + { + continue_preparing (self, result, TRUE); + } } @@ -590,7 +630,7 @@ static const TpProxyFeature * tpl_text_channel_list_features (TpProxyClass *cls G_GNUC_UNUSED) { static TpProxyFeature features[N_FEAT + 1] = { { 0 } }; - static GQuark depends_on[3] = { 0, 0, 0 }; + static GQuark depends_on[] = { 0, 0 }; if (G_LIKELY (features[0].name != 0)) return features; @@ -598,7 +638,6 @@ tpl_text_channel_list_features (TpProxyClass *cls G_GNUC_UNUSED) features[FEAT_CORE].name = TPL_TEXT_CHANNEL_FEATURE_CORE; features[FEAT_CORE].prepare_async = _tpl_text_channel_prepare_core_async; depends_on[0] = TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES; - depends_on[1] = TP_CHANNEL_FEATURE_GROUP; features[FEAT_CORE].depends_on = depends_on; /* assert that the terminator at the end is there */ |