summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2009-09-01 14:31:31 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2009-09-01 14:58:05 +0100
commitc45eff5a75204e94677762de2299700ccbd4f053 (patch)
treef05426ff2fb60fa71eb841016e5c733b9c938b8c
parent600b698987d6762ba4e15d912e633eeaa8ab6585 (diff)
roster: add wocky_roster_contact_decline_async
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r--wocky/wocky-roster.c55
-rw-r--r--wocky/wocky-roster.h10
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);