/pidgin/main: 4318acee8ac6: Pulled PurpleContact out to it's own...
Gary Kramlich <[email protected]> Thu, 25 Aug 2016 23:54:12 -0400
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 4318acee8ac672ea95bc9bd7a2acbe207ee9da5d Author: Gary Kramlich <[email protected]> Date: 2016-08-12 17:08 -0500 Branch: default URL: https://hg.pidgin.im/pidgin/main/rev/4318acee8ac6 Description: Pulled PurpleContact out to it's own file diffstat: libpurple/Makefile.am | 2 + libpurple/blistnodetypes.c | 352 ---------------------------------------- libpurple/blistnodetypes.h | 130 +-------------- libpurple/contact.c | 388 +++++++++++++++++++++++++++++++++++++++++++++ libpurple/contact.h | 167 +++++++++++++++++++ 5 files changed, 559 insertions(+), 480 deletions(-) diffs (truncated from 1138 to 300 lines): diff --git a/libpurple/Makefile.am b/libpurple/Makefile.am --- a/libpurple/Makefile.am +++ b/libpurple/Makefile.am @@ -57,6 +57,7 @@ purple_coresources = \ circularbuffer.c \ cmds.c \ connection.c \ + contact.c \ conversation.c \ conversationtypes.c \ conversations.c \ @@ -143,6 +144,7 @@ purple_coreheaders = \ circularbuffer.h \ cmds.h \ connection.h \ + contact.h \ conversation.h \ conversationtypes.h \ conversations.h \ diff --git a/libpurple/blistnodetypes.c b/libpurple/blistnodetypes.c --- a/libpurple/blistnodetypes.c +++ b/libpurple/blistnodetypes.c @@ -30,11 +30,6 @@ typedef struct _PurpleBuddyPrivate PurpleBuddyPrivate; -#define PURPLE_CONTACT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CONTACT, PurpleContactPrivate)) - -typedef struct _PurpleContactPrivate PurpleContactPrivate; - #define PURPLE_CHAT_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CHAT, PurpleChatPrivate)) @@ -74,22 +69,6 @@ enum BUDDY_PROP_LAST }; -/* Private data for a contact */ -struct _PurpleContactPrivate { - char *alias; /* The user-set alias of the contact */ - PurpleBuddy *priority_buddy; /* The "top" buddy for this contact */ - gboolean priority_valid; /* Is priority valid? */ -}; - -/* Contact property enums */ -enum -{ - CONTACT_PROP_0, - CONTACT_PROP_ALIAS, - CONTACT_PROP_PRIORITY_BUDDY, - CONTACT_PROP_LAST -}; - /* Private data for a chat node */ struct _PurpleChatPrivate { char *alias; /* The display name of this chat. */ @@ -112,10 +91,8 @@ enum }; static PurpleBlistNode *blistnode_parent_class; -static PurpleCountingNode *counting_parent_class; static GParamSpec *bd_properties[BUDDY_PROP_LAST]; -static GParamSpec *co_properties[CONTACT_PROP_LAST]; static GParamSpec *ch_properties[CHAT_PROP_LAST]; static gboolean @@ -762,335 +739,6 @@ purple_buddy_new(PurpleAccount *account, } /**************************************************************************/ -/* Contact API */ -/**************************************************************************/ - -static void -purple_contact_compute_priority_buddy(PurpleContact *contact) -{ - PurpleBlistNode *bnode; - PurpleBuddy *new_priority = NULL; - PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact); - - g_return_if_fail(priv != NULL); - - priv->priority_buddy = NULL; - for (bnode = PURPLE_BLIST_NODE(contact)->child; - bnode != NULL; - bnode = bnode->next) - { - PurpleBuddy *buddy; - - if (!PURPLE_IS_BUDDY(bnode)) - continue; - - buddy = PURPLE_BUDDY(bnode); - if (new_priority == NULL) - { - new_priority = buddy; - continue; - } - - if (purple_account_is_connected(purple_buddy_get_account(buddy))) - { - int cmp = 1; - if (purple_account_is_connected(purple_buddy_get_account(new_priority))) - cmp = purple_buddy_presence_compare( - PURPLE_BUDDY_PRESENCE(purple_buddy_get_presence(new_priority)), - PURPLE_BUDDY_PRESENCE(purple_buddy_get_presence(buddy))); - - if (cmp > 0 || (cmp == 0 && - purple_prefs_get_bool("/purple/contact/last_match"))) - { - new_priority = buddy; - } - } - } - - priv->priority_buddy = new_priority; - priv->priority_valid = TRUE; - - g_object_notify_by_pspec(G_OBJECT(contact), - co_properties[CONTACT_PROP_PRIORITY_BUDDY]); -} - -PurpleGroup * -purple_contact_get_group(const PurpleContact *contact) -{ - g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL); - - return PURPLE_GROUP(PURPLE_BLIST_NODE(contact)->parent); -} - -void -purple_contact_set_alias(PurpleContact *contact, const char *alias) -{ - PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); - PurpleIMConversation *im; - PurpleBlistNode *bnode; - char *old_alias; - char *new_alias = NULL; - PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact); - - g_return_if_fail(priv != NULL); - - if ((alias != NULL) && (*alias != '\0')) - new_alias = purple_utf8_strip_unprintables(alias); - - if (!purple_strings_are_different(priv->alias, new_alias)) { - g_free(new_alias); - return; - } - - old_alias = priv->alias; - - if ((new_alias != NULL) && (*new_alias != '\0')) - priv->alias = new_alias; - else { - priv->alias = NULL; - g_free(new_alias); /* could be "\0" */ - } - - g_object_notify_by_pspec(G_OBJECT(contact), - co_properties[CONTACT_PROP_ALIAS]); - - if (ops) { - if (ops->save_node) - ops->save_node(PURPLE_BLIST_NODE(contact)); - if (ops->update) - ops->update(purple_blist_get_buddy_list(), PURPLE_BLIST_NODE(contact)); - } - - for(bnode = PURPLE_BLIST_NODE(contact)->child; bnode != NULL; bnode = bnode->next) - { - PurpleBuddy *buddy = PURPLE_BUDDY(bnode); - - im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy), - purple_buddy_get_account(buddy)); - if (im) - purple_conversation_autoset_title(PURPLE_CONVERSATION(im)); - } - - purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", - contact, old_alias); - g_free(old_alias); -} - -const char *purple_contact_get_alias(PurpleContact* contact) -{ - PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact); - - g_return_val_if_fail(priv != NULL, NULL); - - if (priv->alias) - return priv->alias; - - return purple_buddy_get_alias(purple_contact_get_priority_buddy(contact)); -} - -gboolean purple_contact_on_account(PurpleContact *c, PurpleAccount *account) -{ - PurpleBlistNode *bnode, *cnode = (PurpleBlistNode *) c; - - g_return_val_if_fail(PURPLE_IS_CONTACT(c), FALSE); - g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), FALSE); - - for (bnode = cnode->child; bnode; bnode = bnode->next) { - PurpleBuddy *buddy; - - if (! PURPLE_IS_BUDDY(bnode)) - continue; - - buddy = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(buddy) == account) - return TRUE; - } - return FALSE; -} - -void purple_contact_invalidate_priority_buddy(PurpleContact *contact) -{ - PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact); - - g_return_if_fail(priv != NULL); - - priv->priority_valid = FALSE; -} - -PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact) -{ - PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact); - - g_return_val_if_fail(priv != NULL, NULL); - - if (!priv->priority_valid) - purple_contact_compute_priority_buddy(contact); - - return priv->priority_buddy; -} - -void purple_contact_merge(PurpleContact *source, PurpleBlistNode *node) -{ - PurpleBlistNode *sourcenode = (PurpleBlistNode*)source; - PurpleBlistNode *prev, *cur, *next; - PurpleContact *target; - - g_return_if_fail(PURPLE_IS_CONTACT(source)); - g_return_if_fail(PURPLE_IS_BLIST_NODE(node)); - - if (PURPLE_IS_CONTACT(node)) { - target = (PurpleContact *)node; - prev = _purple_blist_get_last_child(node); - } else if (PURPLE_IS_BUDDY(node)) { - target = (PurpleContact *)node->parent; - prev = node; - } else { - return; - } - - if (source == target || !target) - return; - - next = sourcenode->child; - - while (next) { - cur = next; - next = cur->next; - if (PURPLE_IS_BUDDY(cur)) { - purple_blist_add_buddy((PurpleBuddy *)cur, target, NULL, prev); - prev = cur; - } - } -} - -/************************************************************************** - * GObject code for PurpleContact - **************************************************************************/ - -/* Set method for GObject properties */ -static void -purple_contact_set_property(GObject *obj, guint param_id, const GValue *value, - GParamSpec *pspec) -{ - PurpleContact *contact = PURPLE_CONTACT(obj); - - switch (param_id) { - case CONTACT_PROP_ALIAS: - purple_contact_set_alias(contact, g_value_get_string(value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); - break; - } -} - -/* Get method for GObject properties */ -static void -purple_contact_get_property(GObject *obj, guint param_id, GValue *value, - GParamSpec *pspec) -{ - PurpleContact *contact = PURPLE_CONTACT(obj); _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits