X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fsnorenotificationbackend.cpp;h=6732c5493529bf36ca70f153497bc2dfe716f415;hb=ef13687df76b292f36f330bed44cf9f35ac53632;hp=af23dced3071c1e7ca30f10d863945f97c5e0b8e;hpb=a43f68a84621d11b61f0e712890a5feb76939553;p=quassel.git diff --git a/src/qtui/snorenotificationbackend.cpp b/src/qtui/snorenotificationbackend.cpp index af23dced..6732c549 100644 --- a/src/qtui/snorenotificationbackend.cpp +++ b/src/qtui/snorenotificationbackend.cpp @@ -22,10 +22,8 @@ #include #include -#include #include "client.h" -#include "iconloader.h" #include "networkmodel.h" #include "systraynotificationbackend.h" #include "qtui.h" @@ -38,132 +36,165 @@ SnoreNotificationBackend::SnoreNotificationBackend (QObject *parent) - :AbstractNotificationBackend(parent), + : AbstractNotificationBackend(parent), m_systrayBackend(NULL) { NotificationSettings notificationSettings; - QString backend = notificationSettings.value("Snore/Backend", "SystemTray").toString(); - m_timeout = notificationSettings.value("Snore/Timeout",10).toInt(); + QString backend = notificationSettings.value("Snore/Backend", "Default").toString(); + m_timeout = notificationSettings.value("Snore/Timeout", 10).toInt(); notificationSettings.notify("Snore/Backend", this, SLOT(backendChanged(const QVariant &))); - notificationSettings.notify("Snore/Backend", this, SLOT(timeoutChanged(const QVariant &))); + notificationSettings.notify("Snore/Timeout", this, SLOT(timeoutChanged(const QVariant &))); //TODO: try to get an instance of the tray icon to be able to show popups m_snore = new Snore::SnoreCore(); - m_snore->hints().setValue("WINDOWS_APP_ID","QuasselProject.QuasselIRC"); - m_snore->loadPlugins(Snore::PluginContainer::BACKEND); - Snore::Application *a = new Snore::Application("Quassel",Snore::Icon(DesktopIcon("quassel").toImage())); + m_snore->loadPlugins(Snore::SnorePlugin::BACKEND); + m_icon = Snore::Icon(QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png")).pixmap(48).toImage()); + m_application = Snore::Application("Quassel", m_icon); + m_application.hints().setValue("WINDOWS_APP_ID","QuasselProject.QuasselIRC"); - connect(m_snore,SIGNAL(actionInvoked(Snore::Notification)),this,SLOT(actionInvoked(Snore::Notification))); + connect(m_snore, SIGNAL(actionInvoked(Snore::Notification)), this, SLOT(actionInvoked(Snore::Notification))); - m_icon = Snore::Icon(DesktopIcon("dialog-information").toImage()); - a->addAlert(new Snore::Alert(tr("Private Message"),tr("Private Message"))); + m_alert = Snore::Alert(tr("Private Message"), m_icon); + m_application.addAlert(m_alert); + + m_snore->registerApplication(m_application); + + backendChanged(QVariant::fromValue(backend)); - m_snore->addApplication(a); - m_snore->applicationIsInitialized (a); - m_snore->setPrimaryNotificationBackend(backend); } -SnoreNotificationBackend::~SnoreNotificationBackend(){ - m_snore->removeApplication("Quassel"); +SnoreNotificationBackend::~SnoreNotificationBackend() +{ + m_snore->deregisterApplication(m_application); m_snore->deleteLater(); } -void SnoreNotificationBackend::backendChanged(const QVariant &v){ +void SnoreNotificationBackend::backendChanged(const QVariant &v) +{ QString backend = v.toString(); - if(backend == "SystemTray"){ - if(m_systrayBackend == NULL){ - m_systrayBackend = new SystrayNotificationBackend(this); - QtUi::registerNotificationBackend(m_systrayBackend); + if (backend != "Default") { + if (setSnoreBackend(backend)) { + return; } - }else{ - if(m_systrayBackend != NULL){ - QtUi::unregisterNotificationBackend(m_systrayBackend); - delete m_systrayBackend; - m_systrayBackend = NULL; - } - m_snore->setPrimaryNotificationBackend(backend); } + setTraybackend(); } -void SnoreNotificationBackend::timeoutChanged(const QVariant &v){ +void SnoreNotificationBackend::timeoutChanged(const QVariant &v) +{ m_timeout = v.toInt(); } -void SnoreNotificationBackend::notify(const Notification &n){ - if(m_systrayBackend != NULL) +void SnoreNotificationBackend::notify(const Notification &n) +{ + if (m_systrayBackend != NULL) { return; + } QString title = Client::networkModel()->networkName(n.bufferId) + " - " + Client::networkModel()->bufferName(n.bufferId); QString message = QString("<%1> %2").arg(n.sender, n.message); - Snore::Notification noti("Quassel",tr("Private Message"),title,message,m_icon,m_timeout); - noti.hints().setValue("QUASSEL_ID",n.notificationId); - m_notificationIds.insert(n.notificationId,noti.id()); + Snore::Notification noti(m_application, m_alert, title, message, m_icon, m_timeout); + noti.hints().setValue("QUASSEL_ID", n.notificationId); + m_notificationIds.insert(n.notificationId, noti.id()); m_snore->broadcastNotification(noti); } -void SnoreNotificationBackend::close(uint notificationId){ - if(m_systrayBackend != NULL) +void SnoreNotificationBackend::close(uint notificationId) +{ + if (m_systrayBackend != NULL) { return; + } Snore::Notification n = m_snore->getActiveNotificationByID(m_notificationIds.take(notificationId)); - m_snore->requestCloseNotification(n,Snore::NotificationEnums::CloseReasons::CLOSED); + m_snore->requestCloseNotification(n, Snore::Notification::CLOSED); } -void SnoreNotificationBackend::actionInvoked(Snore::Notification n){ +void SnoreNotificationBackend::actionInvoked(Snore::Notification n) +{ emit activated(n.hints().value("QUASSEL_ID").toUInt()); } -SettingsPage *SnoreNotificationBackend::createConfigWidget()const{ +SettingsPage *SnoreNotificationBackend::createConfigWidget()const +{ return new ConfigWidget(m_snore); } +void SnoreNotificationBackend::setTraybackend() +{ + if (m_systrayBackend == NULL) { + m_systrayBackend = new SystrayNotificationBackend(this); + QtUi::registerNotificationBackend(m_systrayBackend); + } +} + +bool SnoreNotificationBackend::setSnoreBackend(const QString &backend) +{ + if (m_systrayBackend != NULL) { + QtUi::unregisterNotificationBackend(m_systrayBackend); + delete m_systrayBackend; + m_systrayBackend = NULL; + } + return m_snore->setPrimaryNotificationBackend(backend); +} + + + /***************************************************************************/ -SnoreNotificationBackend::ConfigWidget::ConfigWidget(Snore::SnoreCore *snore,QWidget *parent) +SnoreNotificationBackend::ConfigWidget::ConfigWidget(Snore::SnoreCore *snore, QWidget *parent) :SettingsPage("Internal", "SnoreNotification", parent), m_snore(snore) { ui.setupUi(this); - ui.backends->insertItems(0,m_snore->notificationBackends()); + QStringList backends = m_snore->notificationBackends(); + backends.append("Default"); + qSort(backends); + ui.backends->insertItems(0, backends); connect(ui.backends, SIGNAL(currentIndexChanged(QString)), SLOT(backendChanged(QString))); - connect(ui.timeout,SIGNAL(valueChanged(int)),this,SLOT(timeoutChanged(int))); + connect(ui.timeout, SIGNAL(valueChanged(int)), this, SLOT(timeoutChanged(int))); } -void SnoreNotificationBackend::ConfigWidget::backendChanged(const QString &b){ - ui.backends->setCurrentIndex(ui.backends->findText(b)); - setChangedState(true); +void SnoreNotificationBackend::ConfigWidget::backendChanged(const QString &b) +{ + ui.backends->setCurrentIndex(ui.backends->findText(b)); + setChangedState(true); } -void SnoreNotificationBackend::ConfigWidget::timeoutChanged(int i){ +void SnoreNotificationBackend::ConfigWidget::timeoutChanged(int i) +{ ui.timeout->setValue(i); setChangedState(true); } -bool SnoreNotificationBackend::ConfigWidget::hasDefaults() const { +bool SnoreNotificationBackend::ConfigWidget::hasDefaults() const +{ return true; } -void SnoreNotificationBackend::ConfigWidget::defaults() { - backendChanged("SystemTray"); +void SnoreNotificationBackend::ConfigWidget::defaults() +{ + backendChanged("Default"); timeoutChanged(10); } -void SnoreNotificationBackend::ConfigWidget::load() { +void SnoreNotificationBackend::ConfigWidget::load() +{ NotificationSettings s; - QString backend = s.value("Snore/Backend", "SystemTray").toString(); - int timeout = s.value("Snore/Timeout",10).toInt(); + QString backend = s.value("Snore/Backend", "Default").toString(); + int timeout = s.value("Snore/Timeout", 10).toInt(); ui.backends->setCurrentIndex(ui.backends->findText(backend)); ui.timeout->setValue(timeout); setChangedState(false); } -void SnoreNotificationBackend::ConfigWidget::save() { +void SnoreNotificationBackend::ConfigWidget::save() +{ NotificationSettings s; s.setValue("Snore/Backend", ui.backends->currentText()); - s.setValue("Snore/Timeout",ui.timeout->value()); + s.setValue("Snore/Timeout", ui.timeout->value()); load(); }