SignalProxy *p = signalProxy();
- p->attachSlot(SIGNAL(displayMsg(const Message &)), this, SLOT(recvMessage(const Message &)));
+ p->attachSlot(SIGNAL(displayMsg(Message &)), this, SLOT(recvMessage(Message &)));
p->attachSlot(SIGNAL(displayStatusMsg(QString, QString)), this, SLOT(recvStatusMsg(QString, QString)));
p->attachSlot(SIGNAL(backlogData(BufferInfo, const QVariantList &, bool)), this, SLOT(recvBacklogData(BufferInfo, const QVariantList &, bool)));
}
}
-void Client::recvMessage(const Message &msg) {
- Buffer *b = buffer(msg.bufferInfo());
+void Client::recvMessage(Message &msg) {
+ Buffer *b;
+
+ if(msg.type() == Message::Error) {
+ 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());
+ }
+ } else {
+ 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
Buffer *b = buffer(id);
foreach(QVariant v, msgs) {
Message msg = v.value<Message>();
+ checkForHighlight(msg);
b->prependMsg(msg);
- // networkModel()->updateBufferActivity(msg);
+ networkModel()->updateBufferActivity(msg);
if(!layoutQueue.contains(b)) layoutQueue.append(b);
}
if(layoutQueue.count() && !layoutTimer->isActive()) layoutTimer->start();
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);
+ }
+}