Only play macOS notification sounds when pushrules dictate it

This commit is contained in:
Joseph Donofry 2022-11-15 19:04:38 -05:00
parent ed889c32fc
commit 802ba78fea
No known key found for this signature in database
GPG Key ID: E8A1D78EF044B0CB
3 changed files with 31 additions and 8 deletions

View File

@ -81,7 +81,8 @@ private:
const QString &bodyImagePath, const QString &bodyImagePath,
const QString &respondStr, const QString &respondStr,
const QString &sendStr, const QString &sendStr,
const QString &placeholder); const QString &placeholder,
const bool playSound);
public: public:
static void attachToMacNotifCenter(); static void attachToMacNotifCenter();

View File

@ -47,13 +47,29 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
const auto sendStr = QObject::tr("Send"); const auto sendStr = QObject::tr("Send");
const auto placeholder = QObject::tr("Write a message..."); const auto placeholder = QObject::tr("Write a message...");
auto playSound = false;
if (std::find(notification.actions.begin(),
notification.actions.end(),
mtx::pushrules::actions::Action{mtx::pushrules::actions::set_tweak_sound{
.value = "default"}}) != notification.actions.end()) {
playSound = true;
}
if (isEncrypted) { if (isEncrypted) {
// TODO: decrypt this message if the decryption setting is on in the UserSettings // TODO: decrypt this message if the decryption setting is on in the UserSettings
const QString messageInfo = (isReply ? tr("%1 replied with an encrypted message") const QString messageInfo = (isReply ? tr("%1 replied with an encrypted message")
: tr("%1 sent an encrypted message")) : tr("%1 sent an encrypted message"))
.arg(sender); .arg(sender);
objCxxPostNotification( objCxxPostNotification(room_name,
room_name, room_id, event_id, messageInfo, "", "", respondStr, sendStr, placeholder); room_id,
event_id,
messageInfo,
"",
"",
respondStr,
sendStr,
placeholder,
playSound);
} else { } else {
const QString messageInfo = const QString messageInfo =
(isReply ? tr("%1 replied to a message") : tr("%1 sent a message")).arg(sender); (isReply ? tr("%1 replied to a message") : tr("%1 sent a message")).arg(sender);
@ -69,7 +85,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
messageInfo, messageInfo,
respondStr, respondStr,
sendStr, sendStr,
placeholder](QString, QSize, QImage, QString imgPath) { placeholder,
playSound](QString, QSize, QImage, QString imgPath) {
objCxxPostNotification(room_name, objCxxPostNotification(room_name,
room_id, room_id,
event_id, event_id,
@ -78,7 +95,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
imgPath, imgPath,
respondStr, respondStr,
sendStr, sendStr,
placeholder); placeholder,
playSound);
}); });
else else
objCxxPostNotification(room_name, objCxxPostNotification(room_name,
@ -89,6 +107,7 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
"", "",
respondStr, respondStr,
sendStr, sendStr,
placeholder); placeholder,
playSound);
} }
} }

View File

@ -75,7 +75,8 @@ void NotificationsManager::objCxxPostNotification(
const QString& bodyImagePath, const QString& bodyImagePath,
const QString& respondStr, const QString& respondStr,
const QString& sendStr, const QString& sendStr,
const QString& placeholder) const QString& placeholder,
const bool enableSound)
{ {
// Request permissions for alerts (the generic type of notification), sound playback, // Request permissions for alerts (the generic type of notification), sound playback,
// and badges (which allows the Nheko app icon to show the little red bubble with unread count). // and badges (which allows the Nheko app icon to show the little red bubble with unread count).
@ -128,7 +129,9 @@ void NotificationsManager::objCxxPostNotification(
content.title = title; content.title = title;
content.subtitle = sub; content.subtitle = sub;
content.body = body; content.body = body;
content.sound = [UNNotificationSound defaultSound]; if (enableSound) {
content.sound = [UNNotificationSound defaultSound];
}
content.threadIdentifier = threadIdentifier; content.threadIdentifier = threadIdentifier;
content.categoryIdentifier = @"ReplyCategory"; content.categoryIdentifier = @"ReplyCategory";