X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=b2a8b470d25b21fabf330d6f7a2125de49279126;hb=9950dd55446bedbccba1e7a27c4d042fb896d3c6;hp=027f7de0b931eb6f7531ff5cc6ce1cd6ca33ba11;hpb=6bf23e48f2591fc189fdefbf31f5a224169e61f4;p=quassel.git diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 027f7de0..b2a8b470 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -25,6 +25,7 @@ #include "bufferviewfilter.h" #include "bufferviewmanager.h" #include "channellistdlg.h" +#include "chatlinemodel.h" #include "chatmonitorfilter.h" #include "chatview.h" #include "client.h" @@ -365,7 +366,8 @@ void MainWin::saveStatusBarStatus(bool enabled) { void MainWin::setupSystray() { connect(timer, SIGNAL(timeout()), this, SLOT(makeTrayIconBlink())); - connect(Client::instance(), SIGNAL(messageReceived(const Message &)), this, SLOT(receiveMessage(const Message &))); + connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SLOT(messagesInserted(const QModelIndex &, int, int))); systrayMenu = new QMenu(this); systrayMenu->addAction(ui.actionAboutQuassel); @@ -449,7 +451,7 @@ void MainWin::saveLayout() { } void MainWin::updateLagIndicator(int lag) { - coreLagLabel->setText(QString("Core Lag: %1 msec").arg(lag)); + coreLagLabel->setText(QString(tr("Core Lag: %1 msec")).arg(lag)); } @@ -576,36 +578,44 @@ void MainWin::toggleVisibility() { } } -void MainWin::receiveMessage(const Message &msg) { +void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { + Q_UNUSED(parent); if(QApplication::activeWindow() != 0) return; - if(msg.flags() & Message::Highlight || msg.bufferInfo().type() == BufferInfo::QueryBuffer) { - QString title = msg.bufferInfo().bufferName();; - if(msg.bufferInfo().type() != BufferInfo::QueryBuffer) { - QString sender = msg.sender(); - int i = sender.indexOf("!"); - if(i != -1) - sender = sender.left(i); - title += QString(" - %1").arg(sender); - } + // FIXME + return; - UiSettings uiSettings; - - bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool(); - bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool(); - if(displayBubble || displayDesktop) { - if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) { - // FIXME don't invoke style engine for this! - QString text = QtUi::style()->styleString(msg.contents()).plainText; - if(displayBubble) displayTrayIconMessage(title, text); -# ifdef HAVE_DBUS - if(displayDesktop) sendDesktopNotification(title, text); -# endif - } - if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) { - QApplication::alert(this); - setTrayIconActivity(true); + for(int i = start; i <= end; i++) { + QModelIndex idx = Client::messageModel()->index(i, ChatLineModel::ContentsColumn); + if(!idx.isValid()) { + qDebug() << "MainWin::messagesInserted(): Invalid model index!"; + continue; + } + Message::Flags flags = (Message::Flags)idx.data(ChatLineModel::FlagsRole).toInt(); + BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value(); + BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId); + + if(flags & Message::Highlight || bufType == BufferInfo::QueryBuffer) { + QString title = Client::networkModel()->networkName(bufId) + " - " + Client::networkModel()->bufferName(bufId); + + // FIXME Don't instantiate this for every highlight... + UiSettings uiSettings; + + bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool(); + bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool(); + if(displayBubble || displayDesktop) { + if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) { + QString text = idx.data(ChatLineModel::DisplayRole).toString(); + if(displayBubble) displayTrayIconMessage(title, text); +# ifdef HAVE_DBUS + if(displayDesktop) sendDesktopNotification(title, text); +# endif + } + if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) { + QApplication::alert(this); + setTrayIconActivity(true); + } } } }