Example #1
0
void QuetzalChat::update(PurpleConvUpdateType type)
{
	PurpleConvChat *chat = PURPLE_CONV_CHAT(m_conv);
	if (type == PURPLE_CONV_UPDATE_CHATLEFT)
		setJoined(chat->left);
	else if (type == PURPLE_CONV_UPDATE_TOPIC) {
		QString oldTopic = m_topic;
		m_topic = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(m_conv));
		emit topicChanged(m_topic, oldTopic);
	} else if (type == PURPLE_CONV_UPDATE_TITLE) {
//		QString oldTitle = m_title;
//		m_title = purple_PURPLE_CONV_CHAT(m_conv));
//		emit topicChanged(m_topic, oldTopic);
	}
}
Example #2
0
QuetzalChat::QuetzalChat(PurpleConversation *conv) : 
		Conference(reinterpret_cast<Account *>(conv->account->ui_data))
{
	m_conv = conv;
	m_conv->ui_data = this;
	m_id = m_conv->name;
	m_title = m_conv->title;
	if (m_id.isEmpty()) {
		// Hack for msn-like protocols
		m_id = QLatin1String("QuetzalChat#")
			   + QString::number(quint64(qrand()) << 20 | quint64(qrand()), 16);
	}
	PurpleConvChat *chat = purple_conversation_get_chat_data(conv);
	if (!chat->left)
		setJoined(true);
//	if (account()->protocol()->id() == "msn")
//		m_id = "QuetzalChat#" + QString::number(chat->id);
}
Example #3
0
QString IrcLayer::ircUseUri(QString uri)
{
	QHash<QString, QString> uriData = chewIrcUri(uri);
	if(uriData.isEmpty()) return uri;
	m_target=uriData["target"];
	m_server=uriData["server"];
	m_port=uriData["port"];
	setJoined(0);
	chanPrefix->exactMatch(uriData["target"]) ? m_targetMode=ChannelMode : m_targetMode=PrivateMode;
	if((m_server!=uriData["server"])||(m_port!=uriData["port"])||(!m_ircServer))
	{
		// some real action!
		contactServer();
	}
	else
	{
		if (m_targetMode==ChannelMode)
		{
			//qDebug() << "Joining " << m_target << __LINE__;
			ircJoin(m_target);
		}
	}
	return composeIrcUri(uriData);
}
Example #4
0
void IrcLayer::checkKicked(QHash<QString, QString> data)
{
	if((!QString::compare(data["subject"],nick(),Qt::CaseInsensitive))&&(!QString::compare(data["target"],target(),Qt::CaseInsensitive)))
		setJoined(0); // Alas.
}
Example #5
0
void IrcLayer::parseCmd(QString cmd, QHash<QString, QString> data)
{
//	qDebug() << "Command=" << cmd << ", cmd=" << cmd;
	if(prRegexes["privmsg"].exactMatch(cmd))
	{
		bool isAction=false;
		data["target"]=prRegexes["privmsg"].cap(1); // target
		data["text"]=prRegexes["privmsg"].cap(2); // text
		if(prRegexes["action"].exactMatch(data["text"]))
		{
			data["text"]=prRegexes["action"].cap(1);
			isAction = true;
		}
		if((!QString::compare(data["target"], target(), Qt::CaseInsensitive) && targetMode()==ChannelMode) || (!QString::compare(data["target"], nick(), Qt::CaseInsensitive) && targetMode()==PrivateMode))
		{
			isAction ? emit gotAction(data) : emit gotChannelMsg(data);
		}
		else	emit gotPrivAction(data);
	} else
	if(prRegexes["notice"].exactMatch(cmd))
	{
		data["target"]=prRegexes["notice"].cap(1); // target
		data["text"]=prRegexes["notice"].cap(2); // text
		if((!QString::compare(data["target"], nick(), Qt::CaseInsensitive)) || (!QString::compare(data["target"], target(), Qt::CaseInsensitive)))
			emit gotNotice(data);
	} else
	if(prRegexes["part"].exactMatch(cmd))
	{
		data["target"]=prRegexes["part"].cap(1); // target
		data["text"]=prRegexes["part"].cap(2); // text
		if((!QString::compare(data["target"], target(), Qt::CaseInsensitive))&&(!QString::compare(data["nick"], nick(), Qt::CaseInsensitive)))
			setJoined(0);
		if(!QString::compare(data["target"], target(), Qt::CaseInsensitive))
		{
			if(int i=m_users.indexOf(data["nick"]) != -1) m_users.removeAt(i);
			emit gotPart(data);
		}
	} else
	if(prRegexes["topic"].exactMatch(cmd))
	{
		if(!QString::compare(prRegexes["topic"].cap(1), target(), Qt::CaseInsensitive))
		{
			data["target"]=prRegexes["topic"].cap(1);
			data["text"]=prRegexes["topic"].cap(2);
			m_topic=data["text"];
			emit gotTopic(data);
		}
	}
	else
	if(prRegexes["quit"].exactMatch(cmd))
	{
		data["text"]=prRegexes["quit"].cap(1); // text
		if (m_users.contains(data["nick"]) || !QString::compare(data["nick"], nick(), Qt::CaseInsensitive))
		{
			if(int i=m_users.indexOf(data["nick"]) != -1) m_users.removeAt(i);
			emit gotQuit(data);
		}
	} else
	if(prRegexes["join"].exactMatch(cmd))
	{
		data["target"]=prRegexes["join"].cap(1); // target
		// if it's about me
		if((!QString::compare(data["nick"], nick(), Qt::CaseInsensitive)) && (!QString::compare(data["target"],target(),Qt::CaseInsensitive)) && !joined())
		{
			setTarget(data["target"]);
			setJoined(1);
		}
		if(!QString::compare(data["target"], target(), Qt::CaseInsensitive))
		{
			m_users << data["nick"];
			emit gotJoin(data);
		}
	} else
	if(prRegexes["kick"].exactMatch(cmd))
	{
		data["target"]=prRegexes["kick"].cap(1); // target
		data["subject"]=prRegexes["kick"].cap(2); // whom
		data["text"]=prRegexes["kick"].cap(3); // reason
		if(!QString::compare(data["target"], target(), Qt::CaseInsensitive))
		{
			if(int i=m_users.indexOf(data["nick"]) != -1) m_users.removeAt(i);
			emit gotKick(data);
		}
	} else
	if(prRegexes["mode"].exactMatch(cmd))
	{
		data["target"]=prRegexes["mode"].cap(1); // target
		data["text"]=prRegexes["mode"].cap(2); // modecmd
		data["subject"]=prRegexes["mode"].cap(3); // subject
		if(!QString::compare(data["target"], target(), Qt::CaseInsensitive))
			emit gotMode(data);
	} else
	if(prRegexes["nick"].exactMatch(cmd))
	{
		data["target"]=prRegexes["nick"].cap(1); // target
		qDebug() << data;
		if(m_users.contains(data["nick"]) || !QString::compare(data["target"],nick(),Qt::CaseInsensitive))
		{
			if(int i=m_users.indexOf(data["nick"]) != -1) m_users.removeAt(i);
			m_users << data["target"];
			emit gotNick(data);
		}
	}
}