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); };