mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Merge branch 'dont-send-notifications-on-first-sync' of github.com:LcsTen/nheko into notif-test
This commit is contained in:
commit
3f4d384220
3 changed files with 60 additions and 27 deletions
|
@ -215,6 +215,12 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
|
|||
if (pushrules) {
|
||||
const auto local_user = utils::localUser().toStdString();
|
||||
|
||||
// Desktop notifications to be sent
|
||||
std::vector<std::tuple<QSharedPointer<TimelineModel>,
|
||||
mtx::events::collections::TimelineEvents,
|
||||
std::string,
|
||||
std::vector<mtx::pushrules::actions::Action>>>
|
||||
notifications;
|
||||
for (const auto &[room_id, room] : sync.rooms.join) {
|
||||
// clear old notifications
|
||||
for (const auto &e : room.ephemeral.events) {
|
||||
|
@ -334,13 +340,20 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
|
|||
continue;
|
||||
|
||||
if (userSettings_->hasDesktopNotifications()) {
|
||||
auto info = cache::singleRoomInfo(room_id);
|
||||
|
||||
notifications.emplace_back(roomModel, te, room_id, actions);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (notifications.size() <= 5) {
|
||||
for (const auto &[roomModel, te, room_id, actions] : notifications) {
|
||||
AvatarProvider::resolve(
|
||||
roomModel->roomAvatarUrl(),
|
||||
96,
|
||||
this,
|
||||
[this, te, room_id = room_id, actions](QPixmap image) {
|
||||
[this, te = te, room_id = room_id, actions = actions](QPixmap image) {
|
||||
notificationsManager->postNotification(
|
||||
mtx::responses::Notification{
|
||||
.actions = actions,
|
||||
|
@ -353,10 +366,19 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
|
|||
image.toImage());
|
||||
});
|
||||
}
|
||||
} else if (!notifications.empty()) {
|
||||
std::map<QSharedPointer<TimelineModel>, std::size_t> missedEvents;
|
||||
for (const auto &[roomModel, te, room_id, actions] : notifications) {
|
||||
missedEvents[roomModel]++;
|
||||
}
|
||||
QString body;
|
||||
for (const auto &[roomModel, nbNotifs] : missedEvents) {
|
||||
body += tr("%1 unread messages in room %2\n")
|
||||
.arg(nbNotifs)
|
||||
.arg(roomModel->roomName());
|
||||
}
|
||||
}
|
||||
}
|
||||
emit notificationsManager->systemPostNotificationCb(
|
||||
"", "", "New messages while away", body, QImage());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -187,9 +187,12 @@ NotificationsManager::systemPostNotification(const QString &room_id,
|
|||
// The list of actions has always the action name and then a localized version of that
|
||||
// action. Currently we just use an empty string for that.
|
||||
// TODO(Nico): Look into what to actually put there.
|
||||
argumentList << (QStringList(QStringLiteral("default"))
|
||||
<< QLatin1String("") << QStringLiteral("inline-reply")
|
||||
<< QLatin1String("")); // actions
|
||||
QStringList actions;
|
||||
actions << QStringList(QStringLiteral("default")) << QLatin1String("");
|
||||
if (!room_id.isEmpty()) {
|
||||
actions << QStringLiteral("inline-reply") << QLatin1String("");
|
||||
}
|
||||
argumentList << actions; // actions
|
||||
argumentList << hints; // hints
|
||||
argumentList << (int)-1; // timeout in ms
|
||||
|
||||
|
|
|
@ -106,10 +106,18 @@ void NotificationsManager::objCxxPostNotification(
|
|||
textInputButtonTitle:sendStr.toNSString()
|
||||
textInputPlaceholder:placeholder.toNSString()];
|
||||
|
||||
UNNotificationCategory* category = [UNNotificationCategory categoryWithIdentifier:@"ReplyCategory"
|
||||
UNNotificationCategory* category;
|
||||
if(!room_id.isEmpty()){
|
||||
category = [UNNotificationCategory categoryWithIdentifier:@"ReplyCategory"
|
||||
actions:@[ replyAction ]
|
||||
intentIdentifiers:@[]
|
||||
options:UNNotificationCategoryOptionNone];
|
||||
}else{
|
||||
category = [UNNotificationCategory categoryWithIdentifier:@"ReplyCategory"
|
||||
actions:@[]
|
||||
intentIdentifiers:@[]
|
||||
options:UNNotificationCategoryOptionNone];
|
||||
}
|
||||
|
||||
NSString* title = room_name.toNSString();
|
||||
NSString* sub = subtitle.toNSString();
|
||||
|
|
Loading…
Reference in a new issue