From 005b7a760c45e920cefeb5a70979c718dbcf6500 Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 11 Oct 2024 16:28:59 +0000 Subject: [PATCH] Request Notification Permission If notification permission has not been granted and permission has not previously been asked for request notification permission. --- src/notificationsmanager.cpp | 17 ++++++++++++++++- src/notificationsmanager.h | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index ed30807ec..f2f9931b6 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -40,7 +40,22 @@ NotificationsManager::NotificationsManager(QObject *parent) void NotificationsManager::handleNotifications(QPointer connection) { - if (KNotificationPermission::checkPermission() != Qt::PermissionStatus::Granted) { + if (KNotificationPermission::checkPermission() == Qt::PermissionStatus::Granted) { + startNotificationJob(connection); + } else if (!permissionAsked) { + KNotificationPermission::requestPermission(this, [this, connection](Qt::PermissionStatus result) { + if (result == Qt::PermissionStatus::Granted) { + startNotificationJob(connection); + } else { + permissionAsked = true; + } + }); + } +} + +void NotificationsManager::startNotificationJob(QPointer connection) +{ + if (connection == nullptr) { return; } diff --git a/src/notificationsmanager.h b/src/notificationsmanager.h index e49fe6b72..57e3f1fed 100644 --- a/src/notificationsmanager.h +++ b/src/notificationsmanager.h @@ -65,6 +65,7 @@ private: QHash m_oldNotifications; QStringList m_connActiveJob; + void startNotificationJob(QPointer connection); QPixmap createNotificationImage(const QImage &icon, NeoChatRoom *room); bool shouldPostNotification(QPointer connection, const QJsonValue ¬ification); @@ -81,6 +82,8 @@ private: QHash> m_notifications; QHash> m_invitations; + bool permissionAsked = false; + private Q_SLOTS: void processNotificationJob(QPointer connection, Quotient::GetNotificationsJob *job, bool initialization); };