X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=865855ec6dc738f17cfc3931528ceb5cec2e4978;hp=1c4b446e48e4032c4f2d44b6d648174b09a8310a;hb=7a814314a9bb879f3af6148ce74f31d6427650db;hpb=76a276c472cb99032e2407d8e4bc2f2d693e8e67 diff --git a/src/client/client.cpp b/src/client/client.cpp index 1c4b446e..865855ec 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -23,6 +23,7 @@ #include "bufferinfo.h" #include "buffersyncer.h" #include "clientbacklogmanager.h" +#include "bufferviewmanager.h" #include "global.h" #include "identity.h" #include "ircchannel.h" @@ -66,6 +67,7 @@ Client::Client(QObject *parent) _bufferModel(0), _bufferSyncer(0), _backlogManager(new ClientBacklogManager(this)), + _bufferViewManager(0), _connectedToCore(false), _syncedToCore(false) { @@ -307,6 +309,9 @@ void Client::setSyncedToCore() { // attach backlog manager signalProxy()->synchronize(backlogManager()); + + // create a new BufferViewManager + _bufferViewManager = new BufferViewManager(signalProxy(), this); _syncedToCore = true; emit connected(); @@ -332,6 +337,12 @@ void Client::disconnectFromCore() { _bufferSyncer->deleteLater(); _bufferSyncer = 0; } + + if(_bufferViewManager) { + _bufferViewManager->deleteLater(); + _bufferViewManager = 0; + } + _networkModel->clear(); QHash::iterator bufferIter = _buffers.begin(); @@ -498,6 +509,7 @@ void Client::receiveBacklog(BufferId bufferId, const QVariantList &msgs) { Message msg; while(msgIter != msgIterEnd) { msg = (*msgIter).value(); + checkForHighlight(msg); buffer_->prependMsg(msg); msgIter++; } @@ -531,11 +543,36 @@ 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); + if(notificationSettings.highlightCurrentNick()) { + 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); + return; + } + } + foreach(QVariant highlight, notificationSettings.highlightList()) { + QVariantMap highlightRule = highlight.toMap(); + if(!highlightRule["enable"].toBool()) + continue; + QString name = highlightRule["name"].toString(); + QRegExp userRegExp; + if(highlightRule["regex"].toBool()) { + userRegExp = QRegExp(name); + } else { + userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(name) + "(\\W.*)?$"); + } + if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) + && !(msg.flags() & Message::Self) + && userRegExp.exactMatch(msg.text())) { + msg.setFlags(msg.flags() | Message::Highlight); + return; + } + } } }