From 5c1c6bd474079c7abc6b5829a9c435b0c35ce145 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Fri, 18 Mar 2011 17:31:34 +0100 Subject: [PATCH] Add buddy, remove buddy --- spectrum/src/main.cpp | 32 ++++++++++++++++++++++++-------- spectrum/src/spectrumbuddy.h | 5 +++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/spectrum/src/main.cpp b/spectrum/src/main.cpp index 2b35d4f3..591df9bb 100644 --- a/spectrum/src/main.cpp +++ b/spectrum/src/main.cpp @@ -48,9 +48,25 @@ static void buddyListNewNode(PurpleBlistNode *node) { if (!user) return; - buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy); - SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data; - s_buddy->setFlags(SPECTRUM_BUDDY_JID_ESCAPING); + SpectrumBuddy *s_buddy = NULL; + GSList *list = purple_find_buddies(account, purple_buddy_get_name(buddy)); + while (list) { + PurpleBuddy *b = (PurpleBuddy *) list->data; + if (b->node.ui_data) + s_buddy = (SpectrumBuddy *) b->node.ui_data; + list = g_slist_delete_link(list, list); + } + + if (s_buddy) { + buddy->node.ui_data = s_buddy; + s_buddy->addBuddy(buddy); + } + else { + buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy); + SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data; + s_buddy->setFlags(SPECTRUM_BUDDY_JID_ESCAPING); + // TODO: add buddy to RosterManager + } } static void NodeRemoved(PurpleBlistNode *node, void *data) { @@ -60,14 +76,14 @@ static void NodeRemoved(PurpleBlistNode *node, void *data) { PurpleAccount *account = purple_buddy_get_account(buddy); User *user = (User *) account->ui_data; -// if (user != NULL) { -// user->handleBuddyRemoved(buddy); -// } if (buddy->node.ui_data) { SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data; - Log("PurpleBuddy", "Deleting data for " << s_buddy->getName()); - delete s_buddy; + s_buddy->removeBuddy(buddy); buddy->node.ui_data = NULL; + if (s_buddy->getBuddiesCount() == 0) { + // TODO: remove buddy from RosterManager + delete s_buddy; + } } } diff --git a/spectrum/src/spectrumbuddy.h b/spectrum/src/spectrumbuddy.h index 0725b9c6..0e8ad9e2 100644 --- a/spectrum/src/spectrumbuddy.h +++ b/spectrum/src/spectrumbuddy.h @@ -42,11 +42,16 @@ class SpectrumBuddy : public AbstractBuddy { std::string getIconHash(); std::vector getGroups(); std::string getSafeName(); + + void addBuddy(PurpleBuddy *buddy) { m_buddies.push_back(buddy); } + void removeBuddy(PurpleBuddy *buddy) { m_buddies.remove(buddy); } + int getBuddiesCount() { return m_buddies.size(); } PurpleBuddy *getBuddy() { return m_buddy; } private: PurpleBuddy *m_buddy; + std::list m_buddies; }; #endif