Factory::createBuddy

This commit is contained in:
Jan Kaluza 2011-04-11 14:31:20 +02:00
parent 35e56d515d
commit c04ca92517
2 changed files with 29 additions and 0 deletions

View file

@ -27,16 +27,22 @@
#include "Swiften/Swiften.h"
#include "Swiften/Elements/Message.h"
#include "transport/conversation.h"
#include "transport/buddy.h"
#include "transport/storagebackend.h"
namespace Transport {
class Conversation;
class Buddy;
class ConversationManager;
class RosterManager;
class Factory {
public:
virtual Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) = 0;
virtual Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) = 0;
};
}

View file

@ -460,6 +460,29 @@ class SpectrumFactory : public Factory {
PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, (PurpleAccount *) conversationManager->getUser()->getData() , legacyName.c_str());
return (Conversation *) conv->ui_data;
}
Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) {
PurpleAccount *account = (PurpleAccount *) rosterManager->getUser()->getData();
std::string group = buddyInfo.groups[0];
PurpleGroup *g = purple_find_group(group.c_str());
if (!g) {
g = purple_group_new(group.c_str());
purple_blist_add_group(g, NULL);
}
PurpleBuddy *buddy = purple_find_buddy_in_group(account, buddyInfo.legacyName.c_str(), g);
if (!buddy) {
// create contact
PurpleContact *contact = purple_contact_new();
purple_blist_add_contact(contact, g, NULL);
// create buddy
buddy = purple_buddy_new(account, buddyInfo.legacyName.c_str(), buddyInfo.alias.c_str());
purple_blist_add_buddy(buddy, contact, g, NULL);
purple_blist_server_alias_buddy(buddy, buddyInfo.alias.c_str());
}
return (Buddy *) buddy->node.ui_data;
}
};
int main(int argc, char **argv) {