-void Client::layoutMsg() {
- if(layoutQueue.count()) {
- Buffer *b = layoutQueue.takeFirst(); // TODO make this the current buffer
- if(b->layoutMsg())
- layoutQueue.append(b); // Buffer has more messages in its queue --> Round Robin
+// TODO optimize checkForHighlight
+void Client::checkForHighlight(Message &msg) {
+ if(!((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && !(msg.flags() & Message::Self)))
+ return;
+
+ NotificationSettings notificationSettings;
+ const Network *net = network(msg.bufferInfo().networkId());
+ if(net && !net->myNick().isEmpty()) {
+ QStringList nickList;
+ if(notificationSettings.highlightNick() == NotificationSettings::CurrentNick) {
+ nickList << net->myNick();
+ } else if(notificationSettings.highlightNick() == NotificationSettings::AllNicks) {
+ const Identity *myIdentity = identity(net->identity());
+ if(myIdentity)
+ nickList = myIdentity->nicks();
+ }
+ foreach(QString nickname, nickList) {
+ QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(nickname) + "(\\W.*)?$");
+ if(nickRegExp.exactMatch(msg.contents())) {
+ msg.setFlags(msg.flags() | Message::Highlight);
+ return;
+ }
+ }
+
+ foreach(QVariant highlight, notificationSettings.highlightList()) {
+ QVariantMap highlightRule = highlight.toMap();
+ if(!highlightRule["enable"].toBool())
+ continue;
+ Qt::CaseSensitivity caseSensitivity = highlightRule["cs"].toBool() ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ QString name = highlightRule["name"].toString();
+ QRegExp userRegExp;
+ if(highlightRule["regex"].toBool()) {
+ userRegExp = QRegExp(name, caseSensitivity);
+ } else {
+ userRegExp = QRegExp("^(.*\\W)?" + QRegExp::escape(name) + "(\\W.*)?$", caseSensitivity);
+ }
+ if(userRegExp.exactMatch(msg.contents())) {
+ msg.setFlags(msg.flags() | Message::Highlight);
+ return;
+ }
+ }