Add buddy, remove buddy

This commit is contained in:
HanzZ 2011-03-18 17:31:34 +01:00
parent d2eb63d9e8
commit 5c1c6bd474
2 changed files with 29 additions and 8 deletions

View file

@ -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;
}
}
}

View file

@ -42,11 +42,16 @@ class SpectrumBuddy : public AbstractBuddy {
std::string getIconHash();
std::vector<std::string> 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<PurpleBuddy *> m_buddies;
};
#endif