X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=8d6068912e140401086a7e0a30e5e06aae9c01a5;hp=1f2a151767ad15fad6d0c5245880c4b86bc3d3b1;hb=cf7c5679c2475bb563cd64e15477c485d89368a3;hpb=4e0445e459c690cfa6013c5ad574e94f9214827b diff --git a/src/client/client.cpp b/src/client/client.cpp index 1f2a1517..8d606891 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -83,6 +83,7 @@ Client::~Client() { void Client::init() { _currentCoreAccount = 0; _networkModel = new NetworkModel(this); + connect(this, SIGNAL(bufferUpdated(BufferInfo)), _networkModel, SLOT(bufferUpdated(BufferInfo))); connect(this, SIGNAL(networkRemoved(NetworkId)), @@ -318,21 +319,26 @@ void Client::setSyncedToCore() { emit coreConnectionStateChanged(true); } +void Client::setSecuredConnection() { + emit securedConnection(); +} + void Client::disconnectFromCore() { if(!isConnected()) return; + _connectedToCore = false; if(socket) { socket->close(); socket->deleteLater(); } - _connectedToCore = false; _syncedToCore = false; - setCurrentCoreAccount(0); emit disconnected(); emit coreConnectionStateChanged(false); // Clear internal data. Hopefully nothing relies on it at this point. + setCurrentCoreAccount(0); + if(_bufferSyncer) { _bufferSyncer->deleteLater(); _bufferSyncer = 0; @@ -342,7 +348,7 @@ void Client::disconnectFromCore() { _bufferViewManager->deleteLater(); _bufferViewManager = 0; } - + _networkModel->clear(); QHash::iterator bufferIter = _buffers.begin(); @@ -429,6 +435,8 @@ void Client::recvMessage(const Message &message) { checkForHighlight(msg); + // FIXME clean up code! (dup) + if(msg.flags() & Message::Redirected) { BufferSettings bufferSettings; bool inStatus = bufferSettings.value("UserMessagesInStatusBuffer", QVariant(true)).toBool(); @@ -438,22 +446,21 @@ void Client::recvMessage(const Message &message) { if(inStatus) { b = statusBuffer(msg.bufferInfo().networkId()); if(b) { - b->appendMsg(msg); + b->appendMsg(msg); } else if(!inQuery && !inCurrent) { // make sure the message get's shown somewhere - b = buffer(msg.bufferInfo()); - b->appendMsg(msg); + b = buffer(msg.bufferInfo()); + b->appendMsg(msg); } } if(inQuery) { b = buffer(msg.bufferInfo().bufferId()); if(b) { - b->appendMsg(msg); - } else if(!inStatus && !inCurrent) { // make sure the message get's shown somewhere - b = statusBuffer(msg.bufferInfo().networkId()); - if(!b) - b = buffer(msg.bufferInfo()); // seems like we have to create the buffer anyways... - b->appendMsg(msg); + b->appendMsg(msg); + } else if(!inStatus && !inCurrent) { // make sure the message get's shown somewhere + b = statusBuffer(msg.bufferInfo().networkId()); + if(!b) b = buffer(msg.bufferInfo()); // seems like we have to create the buffer anyways... + b->appendMsg(msg); } } @@ -461,12 +468,11 @@ void Client::recvMessage(const Message &message) { BufferId currentId = bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value(); b = buffer(currentId); if(b && currentId != msg.bufferInfo().bufferId() && !inQuery) { - b->appendMsg(msg); + b->appendMsg(msg); } else if(!inStatus && !inQuery) { // make sure the message get's shown somewhere - b = statusBuffer(msg.bufferInfo().networkId()); - if(!b) - b = buffer(msg.bufferInfo()); // seems like we have to create the buffer anyways... - b->appendMsg(msg); + b = statusBuffer(msg.bufferInfo().networkId()); + if(!b) b = buffer(msg.bufferInfo()); // seems like we have to create the buffer anyways... + b->appendMsg(msg); } } } else { @@ -509,6 +515,7 @@ void Client::receiveBacklog(BufferId bufferId, const QVariantList &msgs) { Message msg; while(msgIter != msgIterEnd) { msg = (*msgIter).value(); + checkForHighlight(msg); buffer_->prependMsg(msg); msgIter++; } @@ -542,11 +549,44 @@ AbstractUiMsg *Client::layoutMsg(const Message &msg) { } void Client::checkForHighlight(Message &msg) { + NotificationSettings notificationSettings; const Network *net = network(msg.bufferInfo().networkId()); if(net && !net->myNick().isEmpty()) { - QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$"); - if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && !(msg.flags() & Message::Self) && nickRegExp.exactMatch(msg.text())) - msg.setFlags(msg.flags() | Message::Highlight); + QStringList nickList; + if(notificationSettings.highlightNick() == NotificationSettings::CurrentNick) { + nickList << net->myNick(); + } else if(notificationSettings.highlightNick() == NotificationSettings::AllNicks) { + nickList = identity(net->identity())->nicks(); + } + foreach(QString nickname, nickList) { + QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(nickname) + "(\\W.*)?$"); + if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) + && !(msg.flags() & Message::Self) + && nickRegExp.exactMatch(msg.text())) { + msg.setFlags(msg.flags() | Message::Highlight); + return; + } + } + + foreach(QVariant highlight, notificationSettings.highlightList()) { + QVariantMap highlightRule = highlight.toMap(); + if(!highlightRule["enable"].toBool()) + continue; + Qt::CaseSensitivity caseSensitivity = highlightRule["cs"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive; + QString name = highlightRule["name"].toString(); + QRegExp userRegExp; + if(highlightRule["regex"].toBool()) { + userRegExp = QRegExp(name, caseSensitivity); + } else { + userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(name) + "(\\W.*)?$", caseSensitivity); + } + if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) + && !(msg.flags() & Message::Self) + && userRegExp.exactMatch(msg.text())) { + msg.setFlags(msg.flags() | Message::Highlight); + return; + } + } } }