From 5955c8e7dc5e1d14d34139bf51ffd039d7abe5cb Mon Sep 17 00:00:00 2001 From: James Graham Date: Sat, 14 Jan 2023 12:29:08 +0000 Subject: [PATCH] Improve global notification settings Separate the setting for globally setting push rules on/off from the configuration to decide whether desktop popup notifications are sent. The current master setting is pulling double duty and should probably be separate as some people may want to see notification counts in Neochat but don't want to see popup notifications on their desktop. --- src/neochatconfig.kcfg | 4 ---- src/notificationsmanager.cpp | 11 +++-------- src/notificationsmanager.h | 5 ++++- src/qml/Settings/GlobalNotificationsPage.qml | 8 +++----- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/neochatconfig.kcfg b/src/neochatconfig.kcfg index 87b5a29b7..09efb4049 100644 --- a/src/neochatconfig.kcfg +++ b/src/neochatconfig.kcfg @@ -25,10 +25,6 @@ 0.3 - - - true - false diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index 8ed08486c..f2b0f03eb 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -55,10 +55,6 @@ void NotificationsManager::postNotification(NeoChatRoom *room, const QString &replyEventId, bool canReply) { - if (!NeoChatConfig::self()->showNotifications()) { - return; - } - QPixmap img; img.convertFromImage(icon); KNotification *notification = new KNotification("message"); @@ -103,9 +99,6 @@ void NotificationsManager::postNotification(NeoChatRoom *room, void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QString &title, const QString &sender, const QImage &icon) { - if (!NeoChatConfig::self()->showNotifications()) { - return; - } QPixmap img; img.convertFromImage(icon); KNotification *notification = new KNotification("invite"); @@ -284,7 +277,9 @@ void NotificationsManager::updateNotificationRules(const QString &type) if (overrideRule["rule_id"] == ".m.rule.master") { bool ruleEnabled = overrideRule["enabled"].toBool(); m_globalNotificationsEnabled = !ruleEnabled; - NeoChatConfig::self()->setShowNotifications(m_globalNotificationsEnabled); + if (!m_globalNotificationsSet) { + m_globalNotificationsSet = true; + } Q_EMIT globalNotificationsEnabledChanged(m_globalNotificationsEnabled); } diff --git a/src/notificationsmanager.h b/src/notificationsmanager.h index d80b43112..0be9acb3b 100644 --- a/src/notificationsmanager.h +++ b/src/notificationsmanager.h @@ -33,6 +33,7 @@ class NotificationsManager : public QObject { Q_OBJECT Q_PROPERTY(bool globalNotificationsEnabled MEMBER m_globalNotificationsEnabled WRITE setGlobalNotificationsEnabled NOTIFY globalNotificationsEnabledChanged) + Q_PROPERTY(bool globalNotificationsSet MEMBER m_globalNotificationsSet NOTIFY globalNotificationsSetChanged) Q_PROPERTY(PushNotificationAction::Action oneToOneNotificationAction MEMBER m_oneToOneNotificationAction WRITE setOneToOneNotificationAction NOTIFY oneToOneNotificationActionChanged) Q_PROPERTY(PushNotificationAction::Action encryptedOneToOneNotificationAction MEMBER m_encryptedOneToOneNotificationAction WRITE @@ -73,7 +74,8 @@ private: QMultiMap m_notifications; QHash> m_invitations; - bool m_globalNotificationsEnabled; + bool m_globalNotificationsEnabled = false; + bool m_globalNotificationsSet = false; PushNotificationAction::Action m_oneToOneNotificationAction = PushNotificationAction::Unknown; PushNotificationAction::Action m_encryptedOneToOneNotificationAction = PushNotificationAction::Unknown; PushNotificationAction::Action m_groupChatNotificationAction = PushNotificationAction::Unknown; @@ -107,6 +109,7 @@ private Q_SLOTS: Q_SIGNALS: void globalNotificationsEnabledChanged(bool newState); + void globalNotificationsSetChanged(bool newState); void oneToOneNotificationActionChanged(PushNotificationAction::Action action); void encryptedOneToOneNotificationActionChanged(PushNotificationAction::Action action); void groupChatNotificationActionChanged(PushNotificationAction::Action action); diff --git a/src/qml/Settings/GlobalNotificationsPage.qml b/src/qml/Settings/GlobalNotificationsPage.qml index ab6bdc3fe..0cb040840 100644 --- a/src/qml/Settings/GlobalNotificationsPage.qml +++ b/src/qml/Settings/GlobalNotificationsPage.qml @@ -19,14 +19,12 @@ Kirigami.ScrollablePage { MobileForm.FormCard { Layout.fillWidth: true - contentItem: MobileForm.FormCheckDelegate { text: i18n("Enable notifications for this account") - checked: Config.showNotifications - enabled: !Config.isShowNotificationsImmutable && Controller.activeConnection + description: i18n("Whether push notifications are generated by your Matrix server") + checked: NotificationsManager.globalNotificationsEnabled + enabled: NotificationsManager.globalNotificationsSet onToggled: { - Config.showNotifications = checked - Config.save() NotificationsManager.globalNotificationsEnabled = checked } }