Exemplo n.º 1
0
mConvInfo_t *PurpleIMChat::CreateChatSession(bool userCreated, PurpleIMChat & imChat)
{
	mConvInfo_t	  *mConv	   = new mConvInfo_t();
	IMChatSession *chatSession = new IMChatSession(imChat, userCreated);

	mConv->conv_session    = chatSession;
	mConv->conv_id		   = chatSession->getId();
	mConv->pending_invites = NULL;

	imChat.getGroupChatInfo().setId( chatSession->getId() );	//VOXOX - JRT - 2009.06.19 - so we can find it later.

	AddChatSessionInList(mConv);

	return mConv;
}
Exemplo n.º 2
0
bool PurpleIMChat::addContactCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMChat::_mutex);

	PurpleIMChatCallbackData* cbData = (PurpleIMChatCallbackData*) dataIn;

	PurpleIMChat*	imChat		= cbData->getPurpleIMChat();
	IMChatSession*	chatSession = cbData->getIMChatSession();
	PurpleAccount*	gAccount	= getPurpleAccount( imChat->getIMAccount() );

//	const char * contactId = (const char *)((misc_t *)data)->data_ptr2;
	mConvInfo_t *mConv = FindChatStructById(chatSession->getId());
	int BuddyNbr = chatSession->getIMContactSet().size();
	PurpleConversation *gConv = NULL;

	if (mConv)
		gConv = mConv->purple_conv_session;		//VOXOX - JRT - 2009.07.09 
	else
		LOG_FATAL("ConvInfo not created !!!");

	if (purple_conversation_get_type(gConv) == PURPLE_CONV_TYPE_IM)
	{
		GList *mlist = NULL;
		IMContactSet& chatContact = const_cast<IMContactSet&>(chatSession->getIMContactSet());
		IMContactSet::const_iterator it = chatContact.begin();
		const std::string & firstContactId = it->getContactId();
		PurpleConnection *gGC;

		gConv = mConv->purple_conv_session;	//VOXOX - JRT - 2009.07.09 
		gGC = purple_conversation_get_gc(gConv);
		mlist = g_list_append(mlist, const_cast<char*>(cbData->getContactId().c_str()) );
		mlist = g_list_append(mlist, (char *) firstContactId.c_str());

		createPurpleChat(gGC, chatSession->getId(), mlist, *imChat, gAccount);	//VOXOX - JRT - 2009.07.10 
	}
	else if (purple_conversation_get_type(gConv) == PURPLE_CONV_TYPE_CHAT)
	{
		serv_chat_invite(purple_conversation_get_gc(gConv), purple_conv_chat_get_id(PURPLE_CONV_CHAT(gConv)), NULL, cbData->getContactId().c_str() );
	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Exemplo n.º 3
0
bool PurpleIMChat::sendMessageCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMChat::_mutex);

	PurpleIMChatCallbackData* cbData = (PurpleIMChatCallbackData*) dataIn;

	IMChatSession* chatSession = cbData->getIMChatSession();
//	const char * message = (const char *)((misc_t *)data)->data_ptr2;
//	char *cleanMess = (char *) message;
//	bool cleaned = false;
	std::string cleanMsg = cbData->getMessage();

	mConvInfo_t *mConv = FindChatStructById(chatSession->getId());
	PurpleConversation *gConv = mConv->purple_conv_session;		//VOXOX - JRT - 2009.07.09 

	// special case for ICQ
	PurpleAccount *gAccount = purple_conversation_get_account(gConv);
	PurplePlugin *prpl = purple_find_prpl(purple_account_get_protocol_id(gAccount));
	if (prpl)
	{
		PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
		if (prpl_info->list_icon != NULL)
		{
			if (!strcmp("icq", prpl_info->list_icon(gAccount, NULL))) 
			{
//				cleanMess = (char *) purple_markup_strip_html(message);
				cleanMsg= purple_markup_strip_html( cbData->getMessage().c_str() );
//				cleaned   = true;
			}
		}
	}

	if (purple_conversation_get_type(gConv) == PURPLE_CONV_TYPE_IM)
	{
		purple_conv_im_send_with_flags(PURPLE_CONV_IM(gConv), cleanMsg.c_str(), PURPLE_MESSAGE_SEND);
	}
	else if (purple_conversation_get_type(gConv) == PURPLE_CONV_TYPE_CHAT)
	{
		purple_conv_chat_send_with_flags(PURPLE_CONV_CHAT(gConv), cleanMsg.c_str(), PURPLE_MESSAGE_SEND);
	}
	
//	if (cleaned) 
//	{
//		g_free(cleanMess);
//	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Exemplo n.º 4
0
bool PurpleIMChat::closeSessionCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMChat::_mutex);

	PurpleIMChatCallbackData* cbData = (PurpleIMChatCallbackData*) dataIn;

	IMChatSession* chatSession = cbData->getIMChatSession();
	mConvInfo_t *mConv = FindChatStructById(chatSession->getId());
	PurpleConversation *gConv = mConv->purple_conv_session;		//VOXOX - JRT - 2009.07.09 

	if (mConv != NULL)
	{
		purple_conversation_destroy(gConv);
		RemoveChatSessionFromList(chatSession->getId());
	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Exemplo n.º 5
0
bool PurpleIMChat::changeTypingStateCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMChat::_mutex);

	PurpleIMChatCallbackData* cbData = (PurpleIMChatCallbackData*) dataIn;

	IMChatSession*		chatSession = cbData->getIMChatSession();
	IMChat::TypingState state		= cbData->getTypingState();
	PurpleTypingState	gState		 = PURPLE_NOT_TYPING;
	mConvInfo_t			*mConv		 = FindChatStructById(chatSession->getId());
	PurpleConversation	*gConv		 = NULL;

	if (mConv) 
	{
//		if ((gConv = (PurpleConversation *)mConv->purple_conv_session))		//VOXOX - JRT - 2009.07.09 This is poor coding technique!
		gConv = mConv->purple_conv_session;

		if ( gConv ) 
		{
			switch (state)
			{
			case IMChat::TypingStateTyping:
				gState = PURPLE_TYPING;
				break;

			case IMChat::TypingStateStopTyping:
			//gState = PURPLE_TYPED;
				gState = PURPLE_NOT_TYPING;
				break;

			default:
				gState = PURPLE_NOT_TYPING;
				break;
			}

			serv_send_typing(purple_conversation_get_gc(gConv), purple_conversation_get_name(gConv), gState);
		}
	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Exemplo n.º 6
0
bool PurpleIMChat::removeContactCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMChat::_mutex);

	PurpleIMChatCallbackData* cbData = (PurpleIMChatCallbackData*) dataIn;

	IMChatSession* chatSession = cbData->getIMChatSession();
//	const char * contactId = (const char *)((misc_t *)data)->data_ptr2;
	mConvInfo_t *mConv = FindChatStructById(chatSession->getId());
	PurpleConvChat *conv = PURPLE_CONV_CHAT( mConv->purple_conv_session );	//VOXOX - JRT - 2009.07.09 

	purple_conv_chat_remove_user(conv, cbData->getContactId().c_str(), NULL);

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}