Make invitation notifications persistent
This commit is contained in:
@@ -41,6 +41,10 @@ Kirigami.ScrollablePage {
|
|||||||
if(pageStack.lastItem == page) {
|
if(pageStack.lastItem == page) {
|
||||||
pageStack.pop()
|
pageStack.pop()
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if(page.currentRoom.isInvite) {
|
||||||
|
page.currentRoom.clearInvitationNotification();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -806,3 +806,8 @@ QCoro::Task<void> NeoChatRoom::doDeleteMessagesByUser(const QString &user)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NeoChatRoom::clearInvitationNotification()
|
||||||
|
{
|
||||||
|
NotificationsManager::instance().clearInvitationNotification(id());
|
||||||
|
}
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE QString htmlSafeName() const;
|
Q_INVOKABLE QString htmlSafeName() const;
|
||||||
Q_INVOKABLE QString htmlSafeDisplayName() const;
|
Q_INVOKABLE QString htmlSafeDisplayName() const;
|
||||||
|
Q_INVOKABLE void clearInvitationNotification();
|
||||||
|
|
||||||
#ifndef QUOTIENT_07
|
#ifndef QUOTIENT_07
|
||||||
Q_INVOKABLE QString htmlSafeMemberName(const QString &userId) const
|
Q_INVOKABLE QString htmlSafeMemberName(const QString &userId) const
|
||||||
|
|||||||
@@ -89,24 +89,38 @@ void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QStri
|
|||||||
notification->setText(i18n("%1 invited you to a room", sender));
|
notification->setText(i18n("%1 invited you to a room", sender));
|
||||||
notification->setTitle(title);
|
notification->setTitle(title);
|
||||||
notification->setPixmap(img);
|
notification->setPixmap(img);
|
||||||
|
notification->setFlags(KNotification::Persistent);
|
||||||
notification->setDefaultAction(i18n("Open this invitation in NeoChat"));
|
notification->setDefaultAction(i18n("Open this invitation in NeoChat"));
|
||||||
connect(notification, &KNotification::defaultActivated, this, [=]() {
|
connect(notification, &KNotification::defaultActivated, this, [=]() {
|
||||||
#if defined(HAVE_WINDOWSYSTEM) && KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 90, 0)
|
#if defined(HAVE_WINDOWSYSTEM) && KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 90, 0)
|
||||||
KWindowSystem::setCurrentXdgActivationToken(notification->xdgActivationToken());
|
KWindowSystem::setCurrentXdgActivationToken(notification->xdgActivationToken());
|
||||||
#endif
|
#endif
|
||||||
|
notification->close();
|
||||||
RoomManager::instance().enterRoom(room);
|
RoomManager::instance().enterRoom(room);
|
||||||
Q_EMIT Controller::instance().showWindow();
|
Q_EMIT Controller::instance().showWindow();
|
||||||
});
|
});
|
||||||
notification->setActions({i18n("Accept Invitation"), i18n("Reject Invitation")});
|
notification->setActions({i18n("Accept Invitation"), i18n("Reject Invitation")});
|
||||||
connect(notification, &KNotification::action1Activated, this, [room]() {
|
connect(notification, &KNotification::action1Activated, this, [this, room, notification]() {
|
||||||
room->acceptInvitation();
|
room->acceptInvitation();
|
||||||
|
notification->close();
|
||||||
});
|
});
|
||||||
connect(notification, &KNotification::action2Activated, this, [room]() {
|
connect(notification, &KNotification::action2Activated, this, [this, room, notification]() {
|
||||||
RoomManager::instance().leaveRoom(room);
|
RoomManager::instance().leaveRoom(room);
|
||||||
|
notification->close();
|
||||||
|
});
|
||||||
|
connect(notification, &KNotification::closed, this, [this, room]() {
|
||||||
|
m_invitations.remove(room->id());
|
||||||
});
|
});
|
||||||
|
|
||||||
notification->setHint(QStringLiteral("x-kde-origin-name"), room->localUser()->id());
|
notification->setHint(QStringLiteral("x-kde-origin-name"), room->localUser()->id());
|
||||||
|
|
||||||
notification->sendEvent();
|
notification->sendEvent();
|
||||||
m_notifications.insert(room->id(), notification);
|
m_invitations.insert(room->id(), notification);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotificationsManager::clearInvitationNotification(const QString &roomId)
|
||||||
|
{
|
||||||
|
if (m_invitations.contains(roomId)) {
|
||||||
|
m_invitations[roomId]->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,11 @@ public:
|
|||||||
postNotification(NeoChatRoom *room, const QString &sender, const QString &text, const QImage &icon, const QString &replyEventId, bool canReply);
|
postNotification(NeoChatRoom *room, const QString &sender, const QString &text, const QImage &icon, const QString &replyEventId, bool canReply);
|
||||||
void postInviteNotification(NeoChatRoom *room, const QString &title, const QString &sender, const QImage &icon);
|
void postInviteNotification(NeoChatRoom *room, const QString &title, const QString &sender, const QImage &icon);
|
||||||
|
|
||||||
|
void clearInvitationNotification(const QString &roomId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NotificationsManager(QObject *parent = nullptr);
|
NotificationsManager(QObject *parent = nullptr);
|
||||||
|
|
||||||
QMultiMap<QString, KNotification *> m_notifications;
|
QMultiMap<QString, KNotification *> m_notifications;
|
||||||
|
QHash<QString, QPointer<KNotification>> m_invitations;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user