Changeset - c04ca9251707
[Not reviewed]
0 2 0
Jan Kaluza - 15 years ago 2011-04-11 14:31:20
hanzz.k@gmail.com
Factory::createBuddy
2 files changed with 29 insertions and 0 deletions:
0 comments (0 inline, 0 general)
include/transport/factory.h
Show inline comments
 
@@ -18,25 +18,31 @@
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 
 */
 

	
 
#pragma once
 

	
 
#include <string>
 
#include <algorithm>
 
#include "transport/transport.h"
 

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

	
 
}
spectrum/src/main.cpp
Show inline comments
 
@@ -451,24 +451,47 @@ static void handleUserDestroyed(User *user, UserManager *userManager, Config *co
 

	
 
		account->ui_data = NULL;
 
// 		Transport::instance()->collector()->collect(m_account);
 
	}
 
}
 

	
 
class SpectrumFactory : public Factory {
 
	public:
 
		Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) {
 
			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) {
 
	GError *error = NULL;
 
	GOptionContext *context;
 
	context = g_option_context_new("config_file_name or profile name");
 
	g_option_context_add_main_entries(context, options_entries, "");
 
	if (!g_option_context_parse (context, &argc, &argv, &error)) {
 
		std::cout << "option parsing failed: " << error->message << "\n";
 
		return -1;
 
	}
 

	
0 comments (0 inline, 0 general)