diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-05-26 15:57:48 +0200 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-05-27 14:40:37 +0200 |
commit | 25ebee46749ec01231ae6417ce6d76eb9726b9ee (patch) | |
tree | 0f823568b1043cc8dc34bb6e5648b06fdf1aece3 | |
parent | db6d23db0fda5fe91f30e1bb99b6120b423a98a3 (diff) | |
download | telepathy-glib-25ebee46749ec01231ae6417ce6d76eb9726b9ee.tar.gz |
pass a TpMutableContactList to vfunc functions
https://bugs.freedesktop.org/show_bug.cgi?id=77772
-rw-r--r-- | docs/reference/telepathy-glib/telepathy-glib-sections.txt | 10 | ||||
-rw-r--r-- | examples/cm/contactlist/contact-list.c | 34 | ||||
-rw-r--r-- | telepathy-glib/base-contact-list.c | 139 | ||||
-rw-r--r-- | telepathy-glib/base-contact-list.h | 47 | ||||
-rw-r--r-- | tests/lib/contact-list-manager.c | 10 |
5 files changed, 173 insertions, 67 deletions
diff --git a/docs/reference/telepathy-glib/telepathy-glib-sections.txt b/docs/reference/telepathy-glib/telepathy-glib-sections.txt index ea4c0c500..bcf85d126 100644 --- a/docs/reference/telepathy-glib/telepathy-glib-sections.txt +++ b/docs/reference/telepathy-glib/telepathy-glib-sections.txt @@ -4913,12 +4913,17 @@ tp_base_contact_list_fill_contact_attributes TP_TYPE_MUTABLE_CONTACT_LIST TpMutableContactListInterface TpMutableContactList +TpMutableContactGroupListAsyncFinishFunc +TpMutableContactListAsyncFinishFunc +TpMutableContactListBooleanFunc +tp_mutable_contact_list_true_func +tp_mutable_contact_list_false_func tp_base_contact_list_can_change_contact_list tp_base_contact_list_get_request_uses_message -TpBaseContactListRequestSubscriptionFunc +TpMutableContactListRequestSubscriptionFunc tp_base_contact_list_request_subscription_async tp_base_contact_list_request_subscription_finish -TpBaseContactListActOnContactsFunc +TpMutableContactListActOnContactsFunc tp_base_contact_list_authorize_publication_async tp_base_contact_list_authorize_publication_finish tp_base_contact_list_store_contacts_async @@ -4934,7 +4939,6 @@ TP_TYPE_CONTACT_GROUP_LIST TpContactGroupList TpContactGroupListInterface TpContactGroupListBooleanFunc -TpMutableContactGroupListAsyncFinishFunc tp_contact_group_list_false_func TpContactGroupListNormalizeFunc tp_contact_group_list_normalize_group diff --git a/examples/cm/contactlist/contact-list.c b/examples/cm/contactlist/contact-list.c index c59d7233f..877174dbe 100644 --- a/examples/cm/contactlist/contact-list.c +++ b/examples/cm/contactlist/contact-list.c @@ -1116,7 +1116,7 @@ example_contact_list_dup_states (TpBaseContactList *contact_list, static void example_contact_list_request_subscription_async ( - TpBaseContactList *contact_list, + TpMutableContactList *contact_list, TpHandleSet *contacts, const gchar *message, GAsyncReadyCallback callback, @@ -1174,7 +1174,8 @@ example_contact_list_request_subscription_async ( g_free (message_lc); } - tp_base_contact_list_contacts_changed (contact_list, changed, NULL); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_request_subscription_async); @@ -1182,7 +1183,7 @@ example_contact_list_request_subscription_async ( static void example_contact_list_authorize_publication_async ( - TpBaseContactList *contact_list, + TpMutableContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -1221,7 +1222,8 @@ example_contact_list_authorize_publication_async ( } } - tp_base_contact_list_contacts_changed (contact_list, changed, NULL); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_authorize_publication_async); @@ -1229,7 +1231,7 @@ example_contact_list_authorize_publication_async ( static void example_contact_list_store_contacts_async ( - TpBaseContactList *contact_list, + TpMutableContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -1260,14 +1262,15 @@ example_contact_list_store_contacts_async ( } } - tp_base_contact_list_contacts_changed (contact_list, changed, NULL); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_store_contacts_async); } static void -example_contact_list_remove_contacts_async (TpBaseContactList *contact_list, +example_contact_list_remove_contacts_async (TpMutableContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -1307,14 +1310,15 @@ example_contact_list_remove_contacts_async (TpBaseContactList *contact_list, } } - tp_base_contact_list_contacts_changed (contact_list, NULL, removed); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + NULL, removed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_remove_contacts_async); } static void -example_contact_list_unsubscribe_async (TpBaseContactList *contact_list, +example_contact_list_unsubscribe_async (TpMutableContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -1371,14 +1375,15 @@ example_contact_list_unsubscribe_async (TpBaseContactList *contact_list, } } - tp_base_contact_list_contacts_changed (contact_list, changed, NULL); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_unsubscribe_async); } static void -example_contact_list_unpublish_async (TpBaseContactList *contact_list, +example_contact_list_unpublish_async (TpMutableContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -1449,7 +1454,8 @@ example_contact_list_unpublish_async (TpBaseContactList *contact_list, } } - tp_base_contact_list_contacts_changed (contact_list, changed, removed); + tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (contact_list), + changed, removed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_unpublish_async); @@ -1706,8 +1712,8 @@ example_contact_list_class_init (ExampleContactListClass *klass) static void mutable_contact_list_iface_init (TpMutableContactListInterface *iface) { - iface->can_change_contact_list = tp_base_contact_list_true_func; - iface->get_request_uses_message = tp_base_contact_list_true_func; + iface->can_change_contact_list = tp_mutable_contact_list_true_func; + iface->get_request_uses_message = tp_mutable_contact_list_true_func; iface->request_subscription_async = example_contact_list_request_subscription_async; iface->authorize_publication_async = diff --git a/telepathy-glib/base-contact-list.c b/telepathy-glib/base-contact-list.c index 75fc9320a..f710e8c4c 100644 --- a/telepathy-glib/base-contact-list.c +++ b/telepathy-glib/base-contact-list.c @@ -195,7 +195,7 @@ */ /** - * TpBaseContactListActOnContactsFunc: + * TpMutableContactListActOnContactsFunc: * @self: the contact list manager implementing * #TP_TYPE_BLOCKABLE_CONTACT_LIST * @contacts: the contacts on which to act @@ -229,7 +229,7 @@ */ /** - * TpBaseContactListRequestSubscriptionFunc: + * TpMutableContactListRequestSubscriptionFunc: * @self: the contact list manager * @contacts: the contacts whose subscription is to be requested * @message: an optional human-readable message from the user @@ -259,6 +259,20 @@ */ /** + * TpMutableContactListAsyncFinishFunc: + * @self: the contact list manager implementing + * #TP_TYPE_MUTABLE_CONTACT_LIST + * @result: the result of the asynchronous operation + * @error: used to raise an error if %FALSE is returned + * + * Signature of a virtual method to finish an async operation. + * + * Returns: %TRUE on success, or %FALSE if @error is set + * + * Since: UNRELEASED + */ + +/** * TpBlockableContactListAsyncFinishFunc: * @self: the contact list manager implementing * #TP_TYPE_BLOCKABLE_CONTACT_LIST @@ -888,18 +902,31 @@ tp_base_contact_list_download_async_default (TpBaseContactList *self, "This CM does not implement Download"); } +static gboolean +tp_mutable_contact_list_simple_finish (TpMutableContactList *self, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple = (GSimpleAsyncResult *) result; + + g_return_val_if_fail (g_simple_async_result_is_valid ( + result, G_OBJECT (self), NULL), FALSE); + + return !g_simple_async_result_propagate_error (simple, error); +} + static void tp_mutable_contact_list_default_init (TpMutableContactListInterface *iface) { - iface->request_subscription_finish = tp_base_contact_list_simple_finish; - iface->authorize_publication_finish = tp_base_contact_list_simple_finish; - iface->unsubscribe_finish = tp_base_contact_list_simple_finish; - iface->unpublish_finish = tp_base_contact_list_simple_finish; - iface->store_contacts_finish = tp_base_contact_list_simple_finish; - iface->remove_contacts_finish = tp_base_contact_list_simple_finish; + iface->request_subscription_finish = tp_mutable_contact_list_simple_finish; + iface->authorize_publication_finish = tp_mutable_contact_list_simple_finish; + iface->unsubscribe_finish = tp_mutable_contact_list_simple_finish; + iface->unpublish_finish = tp_mutable_contact_list_simple_finish; + iface->store_contacts_finish = tp_mutable_contact_list_simple_finish; + iface->remove_contacts_finish = tp_mutable_contact_list_simple_finish; - iface->can_change_contact_list = tp_base_contact_list_true_func; - iface->get_request_uses_message = tp_base_contact_list_true_func; + iface->can_change_contact_list = tp_mutable_contact_list_true_func; + iface->get_request_uses_message = tp_mutable_contact_list_true_func; /* there's no default for the other virtual methods */ } @@ -1538,8 +1565,8 @@ tp_base_contact_list_request_subscription_async (TpBaseContactList *self, g_return_if_fail (mutable_iface != NULL); g_return_if_fail (mutable_iface->request_subscription_async != NULL); - mutable_iface->request_subscription_async (self, contacts, message, callback, - user_data); + mutable_iface->request_subscription_async (TP_MUTABLE_CONTACT_LIST (self), + contacts, message, callback, user_data); } /** @@ -1576,7 +1603,8 @@ tp_base_contact_list_request_subscription_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface->request_subscription_finish != NULL, FALSE); - return mutable_iface->request_subscription_finish (self, result, error); + return mutable_iface->request_subscription_finish ( + TP_MUTABLE_CONTACT_LIST (self), result, error); } /** @@ -1654,8 +1682,8 @@ tp_base_contact_list_authorize_publication_async (TpBaseContactList *self, g_return_if_fail (mutable_iface != NULL); g_return_if_fail (mutable_iface->authorize_publication_async != NULL); - mutable_iface->authorize_publication_async (self, contacts, callback, - user_data); + mutable_iface->authorize_publication_async ( + TP_MUTABLE_CONTACT_LIST (self), contacts, callback, user_data); } /** @@ -1692,7 +1720,8 @@ tp_base_contact_list_authorize_publication_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface->authorize_publication_finish != NULL, FALSE); - return mutable_iface->authorize_publication_finish (self, result, error); + return mutable_iface->authorize_publication_finish ( + TP_MUTABLE_CONTACT_LIST (self), result, error); } /** @@ -1736,8 +1765,8 @@ tp_base_contact_list_store_contacts_async (TpBaseContactList *self, tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, NULL); else - mutable_iface->store_contacts_async (self, contacts, callback, - user_data); + mutable_iface->store_contacts_async ( + TP_MUTABLE_CONTACT_LIST (self), contacts, callback, user_data); } /** @@ -1773,7 +1802,8 @@ tp_base_contact_list_store_contacts_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface != NULL, FALSE); g_return_val_if_fail (mutable_iface->store_contacts_finish != NULL, FALSE); - return mutable_iface->store_contacts_finish (self, result, error); + return mutable_iface->store_contacts_finish (TP_MUTABLE_CONTACT_LIST (self), + result, error); } /** @@ -1811,7 +1841,8 @@ tp_base_contact_list_remove_contacts_async (TpBaseContactList *self, g_return_if_fail (mutable_iface != NULL); g_return_if_fail (mutable_iface->remove_contacts_async != NULL); - mutable_iface->remove_contacts_async (self, contacts, callback, user_data); + mutable_iface->remove_contacts_async (TP_MUTABLE_CONTACT_LIST (self), + contacts, callback, user_data); } /** @@ -1847,7 +1878,8 @@ tp_base_contact_list_remove_contacts_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface != NULL, FALSE); g_return_val_if_fail (mutable_iface->remove_contacts_finish != NULL, FALSE); - return mutable_iface->remove_contacts_finish (self, result, error); + return mutable_iface->remove_contacts_finish (TP_MUTABLE_CONTACT_LIST (self), + result, error); } /** @@ -1883,7 +1915,8 @@ tp_base_contact_list_unsubscribe_async (TpBaseContactList *self, g_return_if_fail (mutable_iface != NULL); g_return_if_fail (mutable_iface->unsubscribe_async != NULL); - mutable_iface->unsubscribe_async (self, contacts, callback, user_data); + mutable_iface->unsubscribe_async (TP_MUTABLE_CONTACT_LIST (self), + contacts, callback, user_data); } /** @@ -1919,7 +1952,8 @@ tp_base_contact_list_unsubscribe_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface != NULL, FALSE); g_return_val_if_fail (mutable_iface->unsubscribe_finish != NULL, FALSE); - return mutable_iface->unsubscribe_finish (self, result, error); + return mutable_iface->unsubscribe_finish (TP_MUTABLE_CONTACT_LIST (self), + result, error); } /** @@ -1955,7 +1989,8 @@ tp_base_contact_list_unpublish_async (TpBaseContactList *self, g_return_if_fail (mutable_iface != NULL); g_return_if_fail (mutable_iface->unpublish_async != NULL); - mutable_iface->unpublish_async (self, contacts, callback, user_data); + mutable_iface->unpublish_async ( + TP_MUTABLE_CONTACT_LIST (self), contacts, callback, user_data); } /** @@ -1991,7 +2026,8 @@ tp_base_contact_list_unpublish_finish (TpBaseContactList *self, g_return_val_if_fail (mutable_iface != NULL, FALSE); g_return_val_if_fail (mutable_iface->unpublish_finish != NULL, FALSE); - return mutable_iface->unpublish_finish (self, result, error); + return mutable_iface->unpublish_finish (TP_MUTABLE_CONTACT_LIST (self), + result, error); } /** @@ -2026,6 +2062,22 @@ tp_base_contact_list_unpublish_finish (TpBaseContactList *self, * Since: UNRELEASED */ +/** + * TpMutableContactListBooleanFunc: + * @self: a contact list manager implementing + * #TP_TYPE_MUTABLE_CONTACT_LIST + * + * Signature of a virtual method that returns a boolean result. These are used + * for feature-discovery. + * + * For the simple cases of a constant result, use + * tp_mutable_contact_list_true_func() or + * tp_mutable_contact_list_false_func(). + * + * Returns: a boolean result + * + * Since: UNRELEASED + */ /** * tp_base_contact_list_true_func: @@ -2096,6 +2148,39 @@ tp_blockable_contact_list_false_func ( return FALSE; } +/** + * tp_mutable_contact_list_true_func: + * @self: ignored + * + * An implementation of #TpMutableContactListBooleanFunc that returns %TRUE, + * for use in simple cases. + * + * Returns: %TRUE + * + * Since: UNRELEASED + */ +gboolean +tp_mutable_contact_list_true_func (TpMutableContactList *self G_GNUC_UNUSED) +{ + return TRUE; +} + +/** + * tp_mutable_contact_list_false_func: + * @self: ignored + * + * An implementation of #TpMutableContactListBooleanFunc that returns %FALSE, + * for use in simple cases. + * + * Returns: %TRUE + * + * Since: UNRELEASED + */ +gboolean +tp_mutable_contact_list_false_func (TpMutableContactList *self G_GNUC_UNUSED) +{ + return TRUE; +} /** * tp_base_contact_list_can_change_contact_list: @@ -2140,7 +2225,7 @@ tp_base_contact_list_can_change_contact_list (TpBaseContactList *self) g_return_val_if_fail (iface != NULL, FALSE); g_return_val_if_fail (iface->can_change_contact_list != NULL, FALSE); - return iface->can_change_contact_list (self); + return iface->can_change_contact_list (TP_MUTABLE_CONTACT_LIST (self)); } /** @@ -2291,7 +2376,7 @@ tp_base_contact_list_get_request_uses_message (TpBaseContactList *self) g_return_val_if_fail (iface != NULL, FALSE); g_return_val_if_fail (iface->get_request_uses_message != NULL, FALSE); - return iface->get_request_uses_message (self); + return iface->get_request_uses_message (TP_MUTABLE_CONTACT_LIST (self)); } /** diff --git a/telepathy-glib/base-contact-list.h b/telepathy-glib/base-contact-list.h index 8818f0fc1..8981975fc 100644 --- a/telepathy-glib/base-contact-list.h +++ b/telepathy-glib/base-contact-list.h @@ -173,47 +173,58 @@ struct _TpBaseContactListClass { typedef struct _TpMutableContactListInterface TpMutableContactListInterface; typedef struct _TpMutableContactList TpMutableContactList; -typedef void (*TpBaseContactListRequestSubscriptionFunc) ( - TpBaseContactList *self, +typedef void (*TpMutableContactListRequestSubscriptionFunc) ( + TpMutableContactList *self, TpHandleSet *contacts, const gchar *message, GAsyncReadyCallback callback, gpointer user_data); -typedef void (*TpBaseContactListActOnContactsFunc) ( - TpBaseContactList *self, +typedef void (*TpMutableContactListActOnContactsFunc) ( + TpMutableContactList *self, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data); +typedef gboolean (*TpMutableContactListAsyncFinishFunc) ( + TpMutableContactList *self, + GAsyncResult *result, + GError **error); + +typedef gboolean (*TpMutableContactListBooleanFunc) ( + TpMutableContactList *self); + +gboolean tp_mutable_contact_list_true_func (TpMutableContactList *self); +gboolean tp_mutable_contact_list_false_func (TpMutableContactList *self); + struct _TpMutableContactListInterface { GTypeInterface parent; /* _async mandatory-to-implement, _finish has a default implementation * suitable for a GSimpleAsyncResult */ - TpBaseContactListRequestSubscriptionFunc request_subscription_async; - TpBaseContactListAsyncFinishFunc request_subscription_finish; + TpMutableContactListRequestSubscriptionFunc request_subscription_async; + TpMutableContactListAsyncFinishFunc request_subscription_finish; - TpBaseContactListActOnContactsFunc authorize_publication_async; - TpBaseContactListAsyncFinishFunc authorize_publication_finish; + TpMutableContactListActOnContactsFunc authorize_publication_async; + TpMutableContactListAsyncFinishFunc authorize_publication_finish; - TpBaseContactListActOnContactsFunc remove_contacts_async; - TpBaseContactListAsyncFinishFunc remove_contacts_finish; + TpMutableContactListActOnContactsFunc remove_contacts_async; + TpMutableContactListAsyncFinishFunc remove_contacts_finish; - TpBaseContactListActOnContactsFunc unsubscribe_async; - TpBaseContactListAsyncFinishFunc unsubscribe_finish; + TpMutableContactListActOnContactsFunc unsubscribe_async; + TpMutableContactListAsyncFinishFunc unsubscribe_finish; - TpBaseContactListActOnContactsFunc unpublish_async; - TpBaseContactListAsyncFinishFunc unpublish_finish; + TpMutableContactListActOnContactsFunc unpublish_async; + TpMutableContactListAsyncFinishFunc unpublish_finish; /* optional-to-implement */ - TpBaseContactListActOnContactsFunc store_contacts_async; - TpBaseContactListAsyncFinishFunc store_contacts_finish; + TpMutableContactListActOnContactsFunc store_contacts_async; + TpMutableContactListAsyncFinishFunc store_contacts_finish; - TpBaseContactListBooleanFunc can_change_contact_list; - TpBaseContactListBooleanFunc get_request_uses_message; + TpMutableContactListBooleanFunc can_change_contact_list; + TpMutableContactListBooleanFunc get_request_uses_message; }; GType tp_mutable_contact_list_get_type (void) G_GNUC_CONST; diff --git a/tests/lib/contact-list-manager.c b/tests/lib/contact-list-manager.c index 88f1709bd..941221364 100644 --- a/tests/lib/contact-list-manager.c +++ b/tests/lib/contact-list-manager.c @@ -422,7 +422,7 @@ contact_list_remove_group_async (TpMutableContactGroupList *base, } static void -contact_list_request_subscription_async (TpBaseContactList *self, +contact_list_request_subscription_async (TpMutableContactList *self, TpHandleSet *contacts, const gchar *message, GAsyncReadyCallback callback, @@ -446,7 +446,7 @@ contact_list_request_subscription_async (TpBaseContactList *self, } static void -contact_list_authorize_publication_async (TpBaseContactList *self, +contact_list_authorize_publication_async (TpMutableContactList *self, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -467,7 +467,7 @@ contact_list_authorize_publication_async (TpBaseContactList *self, } static void -contact_list_remove_contacts_async (TpBaseContactList *self, +contact_list_remove_contacts_async (TpMutableContactList *self, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -488,7 +488,7 @@ contact_list_remove_contacts_async (TpBaseContactList *self, } static void -contact_list_unsubscribe_async (TpBaseContactList *self, +contact_list_unsubscribe_async (TpMutableContactList *self, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) @@ -508,7 +508,7 @@ contact_list_unsubscribe_async (TpBaseContactList *self, } static void -contact_list_unpublish_async (TpBaseContactList *self, +contact_list_unpublish_async (TpMutableContactList *self, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) |