X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsnorenotificationbackend.cpp;h=bdabcf13e3cc0b2a8fafe2abf17a81a09bef9670;hp=8a33dc6d56dc84d483daeeac7ad2b3485b81ccbd;hb=900cce213a6ed000b7131a05a0dec7d04b35b023;hpb=041cba001b691df0d67aaec5fbf220f5503cdaa3 diff --git a/src/qtui/snorenotificationbackend.cpp b/src/qtui/snorenotificationbackend.cpp index 8a33dc6d..bdabcf13 100644 --- a/src/qtui/snorenotificationbackend.cpp +++ b/src/qtui/snorenotificationbackend.cpp @@ -1,122 +1,99 @@ /*************************************************************************** -* Copyright (C) 2011-2013 by Patrick von Reth * -* vonreth@kde.org * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) version 3. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ + * Copyright (C) 2011-2018 by Hannah von Reth * + * vonreth@kde.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ #include "snorenotificationbackend.h" +#include + #include #include -#include +#include + +#include +#include #include "client.h" -#include "iconloader.h" +#include "icon.h" #include "networkmodel.h" #include "systraynotificationbackend.h" #include "qtui.h" -#include - - -#include -#include - SnoreNotificationBackend::SnoreNotificationBackend (QObject *parent) - :AbstractNotificationBackend(parent), - m_systrayBackend(NULL) + : AbstractNotificationBackend(parent) + , m_icon(icon::get("quassel")) { - NotificationSettings notificationSettings; - 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 &))); - - //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())); - - connect(m_snore,SIGNAL(actionInvoked(Snore::Notification)),this,SLOT(actionInvoked(Snore::Notification))); - m_icon = Snore::Icon(DesktopIcon("dialog-information").toImage()); + Snore::SnoreCore::instance().loadPlugins( +#ifndef HAVE_KDE + Snore::SnorePlugin::Backend | +#endif + Snore::SnorePlugin::SecondaryBackend | Snore::SnorePlugin::Settings); + m_application = Snore::Application("Quassel", m_icon); + m_application.hints().setValue("windows-app-id","QuasselProject.QuasselIRC"); + m_application.hints().setValue("pushover-token", "arNtsi983QSZUqU3KAZrFLKHGFPkdL"); - a->addAlert(new Snore::Alert(tr("Private Message"),tr("Private Message"))); + connect(&Snore::SnoreCore::instance(), &Snore::SnoreCore::actionInvoked, this, &SnoreNotificationBackend::actionInvoked); - m_snore->addApplication(a); - m_snore->applicationIsInitialized (a); - - backendChanged(QVariant::fromValue(backend)); + m_alert = Snore::Alert(tr("Private Message"), m_icon); + m_application.addAlert(m_alert); + Snore::SnoreCore::instance().setDefaultApplication(m_application); + NotificationSettings notificationSettings; + bool enabled = notificationSettings.value("Snore/Enabled", false).toBool(); + setTraybackend(enabled); + notificationSettings.notify("Snore/Enabled", this, SLOT(setTraybackend(const QVariant &))); } SnoreNotificationBackend::~SnoreNotificationBackend() { - m_snore->removeApplication("Quassel"); - m_snore->deleteLater(); -} - -void SnoreNotificationBackend::backendChanged(const QVariant &v) -{ - QString backend = v.toString(); - if(backend == "Default") - { - if(m_snore->setPrimaryNotificationBackend())//try to find the default backend for the platform - { - return; - } - } - else if(backend != "SystemTray") - { - if(setSnoreBackend(backend)) - { - return; - } - } - setTraybackend(); -} - -void SnoreNotificationBackend::timeoutChanged(const QVariant &v) -{ - m_timeout = v.toInt(); + Snore::SnoreCore::instance().deregisterApplication(m_application); } void SnoreNotificationBackend::notify(const Notification &n) { - if(m_systrayBackend != NULL) +#ifndef HAVE_KDE + if (m_systrayBackend != nullptr) { return; - QString title = Client::networkModel()->networkName(n.bufferId) + " - " + Client::networkModel()->bufferName(n.bufferId); + } +#endif + QString title = QString("%1 - %2").arg(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()); - m_snore->broadcastNotification(noti); + Snore::Notification noti(m_application, m_alert, title, message, m_icon); + noti.hints().setValue("QUASSEL_ID", n.notificationId); + m_notificationIds.insert(n.notificationId, noti.id()); + Snore::SnoreCore::instance().broadcastNotification(noti); } void SnoreNotificationBackend::close(uint notificationId) { - if(m_systrayBackend != NULL) +#ifndef HAVE_KDE + if (m_systrayBackend != nullptr) { return; - Snore::Notification n = m_snore->getActiveNotificationByID(m_notificationIds.take(notificationId)); - m_snore->requestCloseNotification(n,Snore::NotificationEnums::CloseReasons::CLOSED); + } +#endif + Snore::Notification n = Snore::SnoreCore::instance().getActiveNotificationByID(m_notificationIds.take(notificationId)); + if (n.isValid()) { // Don't close the notification if it no longer exists. + Snore::SnoreCore::instance().requestCloseNotification(n, Snore::Notification::Closed); + } } void SnoreNotificationBackend::actionInvoked(Snore::Notification n) @@ -126,55 +103,44 @@ void SnoreNotificationBackend::actionInvoked(Snore::Notification n) SettingsPage *SnoreNotificationBackend::createConfigWidget()const { - return new ConfigWidget(m_snore); + return new ConfigWidget(); } -void SnoreNotificationBackend::setTraybackend() -{ - if(m_systrayBackend == NULL){ - m_systrayBackend = new SystrayNotificationBackend(this); - QtUi::registerNotificationBackend(m_systrayBackend); - } -} -bool SnoreNotificationBackend::setSnoreBackend(const QString &backend) +void SnoreNotificationBackend::setTraybackend(const QVariant &b) { - if(m_systrayBackend != NULL){ - QtUi::unregisterNotificationBackend(m_systrayBackend); - delete m_systrayBackend; - m_systrayBackend = NULL; +#ifndef HAVE_KDE + if (!b.toBool()) { + if (m_systrayBackend == nullptr) { + m_systrayBackend = new SystrayNotificationBackend(this); + QtUi::registerNotificationBackend(m_systrayBackend); + } + } else { + if (m_systrayBackend != nullptr) { + QtUi::unregisterNotificationBackend(m_systrayBackend); + m_systrayBackend->deleteLater(); + m_systrayBackend = nullptr; + } + } +#endif + if (b.toBool()) { + if (!Snore::SnoreCore::instance().aplications().contains(m_application.name())) { + Snore::SnoreCore::instance().registerApplication(m_application); + } + } else { + if (Snore::SnoreCore::instance().aplications().contains(m_application.name())) { + Snore::SnoreCore::instance().deregisterApplication(m_application); + } } - return m_snore->setPrimaryNotificationBackend(backend); } - - - /***************************************************************************/ -SnoreNotificationBackend::ConfigWidget::ConfigWidget(Snore::SnoreCore *snore,QWidget *parent) - :SettingsPage("Internal", "SnoreNotification", parent), - m_snore(snore) +SnoreNotificationBackend::ConfigWidget::ConfigWidget(QWidget *parent) + :SettingsPage("Internal", "SnoreNotification", parent) { ui.setupUi(this); - ui.backends->insertItem(0,"Default"); - ui.backends->insertItems(1,m_snore->notificationBackends()); - - connect(ui.backends, SIGNAL(currentIndexChanged(QString)), SLOT(backendChanged(QString))); - 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::timeoutChanged(int i) -{ - ui.timeout->setValue(i); - setChangedState(true); - + connect(ui.useSnoreCheckBox, &QCheckBox::toggled, this, &ConfigWidget::useSnoreChanged); } bool SnoreNotificationBackend::ConfigWidget::hasDefaults() const @@ -184,28 +150,33 @@ bool SnoreNotificationBackend::ConfigWidget::hasDefaults() const void SnoreNotificationBackend::ConfigWidget::defaults() { - backendChanged("Default"); - timeoutChanged(10); + useSnoreChanged(false); + ui.widget->reset(); } void SnoreNotificationBackend::ConfigWidget::load() { NotificationSettings s; - QString backend = m_snore->primaryNotificationBackend(); - if(backend.isEmpty()){ - backend = "SystemTray"; - } - qDebug() << s.value("Snore/Timeout",10); - int timeout = s.value("Snore/Timeout",10).toInt(); - ui.backends->setCurrentIndex(ui.backends->findText(backend)); - ui.timeout->setValue(timeout); + bool enabled = s.value("Snore/Enabled", false).toBool(); + ui.useSnoreCheckBox->setChecked(enabled); + ui.widget->setEnabled(enabled); setChangedState(false); + QMetaObject::invokeMethod(this, "changed", Qt::QueuedConnection);//hack to make apply and accept button work for snore settings widget } void SnoreNotificationBackend::ConfigWidget::save() { NotificationSettings s; - s.setValue("Snore/Backend", ui.backends->currentText()); - s.setValue("Snore/Timeout",ui.timeout->value()); + s.setValue("Snore/Enabled", ui.useSnoreCheckBox->isChecked()); + ui.widget->accept(); load(); } + +void SnoreNotificationBackend::ConfigWidget::useSnoreChanged(bool b) +{ + ui.useSnoreCheckBox->setChecked(b); + ui.widget->setEnabled(b); + setChangedState(true); +} + +