diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2009-09-01 14:31:31 +0100 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2009-09-01 14:58:05 +0100 |
commit | c45eff5a75204e94677762de2299700ccbd4f053 (patch) | |
tree | f05426ff2fb60fa71eb841016e5c733b9c938b8c | |
parent | 600b698987d6762ba4e15d912e633eeaa8ab6585 (diff) |
roster: add wocky_roster_contact_decline_async
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r-- | wocky/wocky-roster.c | 55 | ||||
-rw-r--r-- | wocky/wocky-roster.h | 10 |
2 files changed, 65 insertions, 0 deletions
diff --git a/wocky/wocky-roster.c b/wocky/wocky-roster.c index 8477ec9..fbc3954 100644 --- a/wocky/wocky-roster.c +++ b/wocky/wocky-roster.c @@ -1718,3 +1718,58 @@ wocky_roster_contact_approve_finish (WockyRoster *self, return TRUE; } + +void +wocky_roster_contact_decline_async (WockyRoster *self, + WockyBareContact *contact, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + WockyRosterPrivate *priv = WOCKY_ROSTER_GET_PRIVATE (self); + WockyXmppStanza *stanza; + ApproveDeclineData *data; + + if (g_slist_index (priv->pending_subscriptions, contact) < 0) + { + g_simple_async_report_error_in_idle (G_OBJECT (self), callback, + user_data, WOCKY_ROSTER_ERROR, + WOCKY_ROSTER_ERROR_NO_SUBSCRIPTION_REQUEST, + "No subscription request from contact %s", + wocky_bare_contact_get_jid (contact)); + return; + } + + data = g_slice_new0 (ApproveDeclineData); + data->roster = self; + data->contact = g_object_ref (contact); + + data->result = g_simple_async_result_new (G_OBJECT (self), + callback, user_data, wocky_roster_contact_decline_finish); + + stanza = wocky_xmpp_stanza_build (WOCKY_STANZA_TYPE_PRESENCE, + WOCKY_STANZA_SUB_TYPE_UNSUBSCRIBED, NULL, + wocky_bare_contact_get_jid (contact), + WOCKY_STANZA_END); + + wocky_porter_send_async (priv->porter, stanza, cancellable, + approve_decline_cb, data); + + g_object_unref (stanza); +} + +gboolean +wocky_roster_contact_decline_finish (WockyRoster *self, + GAsyncResult *result, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return FALSE; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (self), wocky_roster_contact_decline_finish), + FALSE); + + return TRUE; +} diff --git a/wocky/wocky-roster.h b/wocky/wocky-roster.h index 53040cf..7c089c8 100644 --- a/wocky/wocky-roster.h +++ b/wocky/wocky-roster.h @@ -184,6 +184,16 @@ gboolean wocky_roster_contact_approve_finish (WockyRoster *self, GAsyncResult *result, GError **error); +void wocky_roster_contact_decline_async (WockyRoster *self, + WockyBareContact *contact, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean wocky_roster_contact_decline_finish (WockyRoster *self, + GAsyncResult *result, + GError **error); + /* For debugging only */ const gchar * wocky_roster_subscription_to_string ( WockyRosterSubscriptionFlags subscription); |