X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=865855ec6dc738f17cfc3931528ceb5cec2e4978;hp=e276cd8032f5706eb3597420bcaeeae8bac61e17;hb=7a814314a9bb879f3af6148ce74f31d6427650db;hpb=8ec76e512d20ce5d1dc76de556bb98a06b75d695 diff --git a/src/client/client.cpp b/src/client/client.cpp index e276cd80..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(); @@ -475,6 +486,8 @@ void Client::recvMessage(const Message &message) { Message mmsg = Message(msg.timestamp(), msg.bufferInfo(), msg.type(), msg.text(), sender, msg.flags()); monitorBuffer()->appendMsg(mmsg); } + + emit messageReceived(msg); } void Client::recvStatusMsg(QString /*net*/, QString /*msg*/) { @@ -496,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++; } @@ -529,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; + } + } } }