<!-- ##### SECTION Title ##### -->
base-contact-list

<!-- ##### SECTION Short_Description ##### -->


<!-- ##### SECTION Long_Description ##### -->
<para>

</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### SECTION Image ##### -->


<!-- ##### STRUCT TpBaseContactList ##### -->
<para>

</para>


<!-- ##### ARG TpBaseContactList:connection ##### -->
<para>

</para>

<!-- ##### STRUCT TpBaseContactListClass ##### -->
<para>

</para>

@parent_class: 
@get_contacts: 
@get_states: 
@get_subscriptions_persist: 

<!-- ##### FUNCTION tp_base_contact_list_mixin_class_init ##### -->
<para>

</para>

@cls: 


<!-- ##### FUNCTION tp_base_contact_list_mixin_register_with_contacts_mixin ##### -->
<para>

</para>

@conn: 


<!-- ##### FUNCTION tp_base_contact_list_mixin_list_iface_init ##### -->
<para>

</para>

@klass: 


<!-- ##### FUNCTION tp_base_contact_list_mixin_groups_iface_init ##### -->
<para>

</para>

@klass: 


<!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
<para>

</para>

@self: 


<!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
<para>

</para>

@self: 
@changed: 
@removed: 


<!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_subscriptions_persist ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_contacts ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListGetStatesFunc ##### -->
<para>

</para>

@self: 
@contact: 
@subscribe: 
@publish: 
@publish_request: 


<!-- ##### FUNCTION tp_base_contact_list_get_states ##### -->
<para>

</para>

@self: 
@contact: 
@subscribe: 
@publish: 
@publish_request: 


<!-- ##### USER_FUNCTION TpBaseContactListUIntFunc ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListAsyncFinishFunc ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_LIST ##### -->
<para>

</para>



<!-- ##### STRUCT TpMutableContactListInterface ##### -->
<para>

</para>

@parent: 
@request_subscription_async: 
@request_subscription_finish: 
@authorize_publication_async: 
@authorize_publication_finish: 
@remove_contacts_async: 
@remove_contacts_finish: 
@unsubscribe_async: 
@unsubscribe_finish: 
@unpublish_async: 
@unpublish_finish: 
@store_contacts_async: 
@store_contacts_finish: 
@can_change_subscriptions: 
@get_request_uses_message: 

<!-- ##### FUNCTION tp_base_contact_list_can_change_subscriptions ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_request_uses_message ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
<para>

</para>

@self: 
@contacts: 
@message: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_request_subscription_async ##### -->
<para>

</para>

@self: 
@contacts: 
@message: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_request_subscription_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_authorize_publication_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_authorize_publication_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_store_contacts_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_store_contacts_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_remove_contacts_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_remove_contacts_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_unsubscribe_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_unsubscribe_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_unpublish_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_unpublish_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### MACRO TP_TYPE_CONTACT_GROUP_LIST ##### -->
<para>

</para>



<!-- ##### STRUCT TpContactGroupListInterface ##### -->
<para>

</para>

@parent: 
@get_groups: 
@get_contact_groups: 
@has_disjoint_groups: 
@normalize_group: 

<!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
<para>

</para>

@self: 
@s: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_normalize_group ##### -->
<para>

</para>

@self: 
@s: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
<para>

</para>

@self: 
@contact: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_contact_groups ##### -->
<para>

</para>

@self: 
@contact: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_groups ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
<para>

</para>

@self: 
@old_name: 
@new_name: 


<!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
<para>

</para>

@self: 
@contacts: 
@added: 
@n_added: 
@removed: 
@n_removed: 


<!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
<para>

</para>

@self: 
@created: 
@n_created: 


<!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
<para>

</para>

@self: 
@removed: 
@n_removed: 


<!-- ##### FUNCTION tp_base_contact_list_has_disjoint_groups ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_GROUP_LIST ##### -->
<para>

</para>



<!-- ##### STRUCT TpMutableContactGroupListInterface ##### -->
<para>

</para>

@parent: 
@set_contact_groups_async: 
@set_contact_groups_finish: 
@create_groups: 
@add_to_group: 
@remove_from_group: 
@remove_group: 
@rename_group: 
@get_group_storage: 

<!-- ##### USER_FUNCTION TpBaseContactListSetContactGroupsFunc ##### -->
<para>

</para>

@self: 
@contact: 
@normalized_names: 
@n_names: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_async ##### -->
<para>

</para>

@self: 
@contact: 
@normalized_names: 
@n_names: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### USER_FUNCTION TpBaseContactListCreateGroupsFunc ##### -->
<para>

</para>

@self: 
@normalized_names: 
@n_names: 


<!-- ##### FUNCTION tp_base_contact_list_create_groups ##### -->
<para>

</para>

@self: 
@normalized_names: 
@n_names: 


<!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
<para>

</para>

@self: 
@group: 
@contacts: 


<!-- ##### FUNCTION tp_base_contact_list_add_to_group ##### -->
<para>

</para>

@self: 
@group: 
@contacts: 


<!-- ##### FUNCTION tp_base_contact_list_remove_from_group ##### -->
<para>

</para>

@self: 
@group: 
@contacts: 


<!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
<para>

</para>

@self: 
@group: 


<!-- ##### FUNCTION tp_base_contact_list_remove_group ##### -->
<para>

</para>

@self: 
@group: 


<!-- ##### USER_FUNCTION TpBaseContactListRenameGroupFunc ##### -->
<para>

</para>

@self: 
@old_name: 
@new_name: 


<!-- ##### FUNCTION tp_base_contact_list_rename_group ##### -->
<para>

</para>

@self: 
@old_name: 
@new_name: 


<!-- ##### FUNCTION tp_base_contact_list_get_group_storage ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### MACRO TP_TYPE_BLOCKABLE_CONTACT_LIST ##### -->
<para>

</para>



<!-- ##### STRUCT TpBlockableContactListInterface ##### -->
<para>

</para>

@parent: 
@get_blocked_contacts: 
@block_contacts_async: 
@block_contacts_finish: 
@unblock_contacts_async: 
@unblock_contacts_finish: 
@can_block: 

<!-- ##### FUNCTION tp_base_contact_list_can_block ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_get_blocked_contacts ##### -->
<para>

</para>

@self: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_block_contacts_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_block_contacts_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_async ##### -->
<para>

</para>

@self: 
@contacts: 
@callback: 
@user_data: 


<!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_finish ##### -->
<para>

</para>

@self: 
@result: 
@error: 
@Returns: 


<!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
<para>

</para>

@self: 
@changed: 


