From: Marcus Eggenberger Date: Sun, 10 Feb 2008 16:35:46 +0000 (+0000) Subject: - Highlights are now determined in Client::checkForHighlight(Message &). X-Git-Tag: 0.2.0-alpha1~82 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=521a9e7155173db954ea5f32c93dd6933cd7aeda - Highlights are now determined in Client::checkForHighlight(Message &). - Fixed a bug where all messages where marked as highlighted, when not connected to the according network. --- diff --git a/src/client/client.cpp b/src/client/client.cpp index e09684b6..b80942a2 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -379,24 +379,23 @@ void Client::networkDestroyed() { } } -void Client::recvMessage(const Message &msg) { +void Client::recvMessage(Message &msg) { + Buffer *b; + if(msg.type() == Message::Error) { - Buffer *b = buffer(msg.bufferInfo().bufferId()); - if(b) { - b->appendMsg(msg); - networkModel()->updateBufferActivity(msg); - } else { - //TODO: display message in the status buffer + b = buffer(msg.bufferInfo().bufferId()); + if(!b) { + // FIXME: if buffer doesn't exist, forward the message to the status or current buffer b = buffer(msg.bufferInfo()); - b->appendMsg(msg); - networkModel()->updateBufferActivity(msg); } } else { - Buffer *b = buffer(msg.bufferInfo()); - b->appendMsg(msg); - networkModel()->updateBufferActivity(msg); + b = buffer(msg.bufferInfo()); } - + + checkForHighlight(msg); + b->appendMsg(msg); + networkModel()->updateBufferActivity(msg); + if(msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) { const Network *net = network(msg.bufferInfo().networkId()); QString networkName = net != 0 @@ -417,6 +416,7 @@ void Client::recvBacklogData(BufferInfo id, QVariantList msgs, bool /*done*/) { Buffer *b = buffer(id); foreach(QVariant v, msgs) { Message msg = v.value(); + checkForHighlight(msg); b->prependMsg(msg); networkModel()->updateBufferActivity(msg); if(!layoutQueue.contains(b)) layoutQueue.append(b); @@ -439,3 +439,11 @@ AbstractUiMsg *Client::layoutMsg(const Message &msg) { return instance()->mainUi->layoutMsg(msg); } +void Client::checkForHighlight(Message &msg) const { + 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 || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text())) + msg.setFlags(msg.flags() | Message::Highlight); + } +} diff --git a/src/client/client.h b/src/client/client.h index 40bf332d..27224a3a 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -103,6 +103,8 @@ public: enum ClientMode { LocalCore, RemoteCore }; + void checkForHighlight(Message &msg) const; + signals: void sendInput(BufferInfo, QString message); void showBuffer(Buffer *); @@ -157,7 +159,7 @@ private slots: //void networkConnected(NetworkId); //void networkDisconnected(NetworkId); - void recvMessage(const Message &message); + void recvMessage(Message &message); void recvStatusMsg(QString network, QString message); void recvBacklogData(BufferInfo, QVariantList, bool); void updateBufferInfo(BufferInfo); diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 8cf95bb6..52e57407 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -758,13 +758,8 @@ void NetworkModel::updateBufferActivity(const Message &msg) { if(msg.type() == Message::Plain || msg.type() == Message::Notice) level |= BufferItem::NewMessage; - - const Network *net = Client::network(msg.bufferInfo().networkId()); - if(net) { - QRegExp nickRegExp("^(.*\\W)?"+net->myNick()+"(\\W.*)?$"); - if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text())) + if(msg.flags() & Message::Highlight) level |= BufferItem::Highlight; - } bufferItem(msg.bufferInfo())->updateActivity(level); } diff --git a/src/common/message.cpp b/src/common/message.cpp index e09457ad..97cee42d 100644 --- a/src/common/message.cpp +++ b/src/common/message.cpp @@ -44,6 +44,10 @@ Message::Message(QDateTime ts,BufferInfo bufferInfo, Type type, QString text, QS { } +void Message::setFlags(quint8 flags) { + _flags = flags; +} + QString Message::mircToInternal(QString mirc) { mirc.replace('%', "%%"); // escape % just to be sure mirc.replace('\x02', "%B"); diff --git a/src/common/message.h b/src/common/message.h index 77fde33f..17f5493a 100644 --- a/src/common/message.h +++ b/src/common/message.h @@ -70,6 +70,8 @@ public: inline quint8 flags() const { return _flags; } inline QDateTime timestamp() const { return _timestamp; } + void setFlags(quint8 flags); + QString formattedTimestamp(); QString formattedSender(); QString formattedText(); diff --git a/src/qtui/chatline-old.cpp b/src/qtui/chatline-old.cpp index c26da15a..b3b16832 100644 --- a/src/qtui/chatline-old.cpp +++ b/src/qtui/chatline-old.cpp @@ -42,12 +42,7 @@ ChatLine::~ChatLine() { } void ChatLine::formatMsg(Message msg) { - const Network *net = Client::network(msg.bufferInfo().networkId()); - if(net) { - QRegExp nickRegExp("^(.*\\W)?"+net->myNick()+"(\\W.*)?$"); - if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text())) - isHighlight = true; - } + isHighlight = msg.flags() & Message::Highlight; QTextOption tsOption, senderOption, textOption; styledTimeStamp = QtUi::style()->styleString(msg.formattedTimestamp()); styledSender = QtUi::style()->styleString(msg.formattedSender()); diff --git a/version.inc b/version.inc index c3368e58..5b490628 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-10"; - quasselBuild = 497; + quasselBuild = 498; //! Minimum client build number the core needs clientBuildNeeded = 480;