X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=69ffbfc787396f59d9267e27ae7fd97123e16d09;hp=1c4b446e48e4032c4f2d44b6d648174b09a8310a;hb=278aef059d7652b2a4e1359d72bb4028524246d4;hpb=76a276c472cb99032e2407d8e4bc2f2d693e8e67 diff --git a/src/client/client.cpp b/src/client/client.cpp index 1c4b446e..69ffbfc7 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(); @@ -418,6 +429,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(); @@ -427,22 +440,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); } } @@ -450,12 +462,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 { @@ -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; + } + } } }