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); } }
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); }
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); }
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. }
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); } } }