mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 22:36:24 +00:00
fix(@desktop/chat): push notification is duplicated when mentioning
This bug is happening if you have more than one private chat in the contacts column. How many chats you have that many same notifications you will get. That's happening cause connection is made between chatsModel.messageView and ChatsMessages component for each private chat, and for each of them ChatsMessages component is maintained in StackLayout component what means all of them are exist but only selected instance is visible. When new messageNotificationPushed signal is emitted each qml component triggers its slot (regardless component is not currently visible it exists in the background, it's not deleted) and that's why we see more than one OS' notification bubble for the same notification. That is fixed moving slot from ChatMessage component to ChatColumn component. Fixes: #2551
This commit is contained in:
parent
cd423336e1
commit
e832666123
@ -2,6 +2,7 @@ import QtQuick 2.13
|
||||
import QtQuick.Controls 2.13
|
||||
import QtQuick.Layouts 1.13
|
||||
import QtGraphicalEffects 1.0
|
||||
import Qt.labs.platform 1.1
|
||||
|
||||
import StatusQ.Core.Theme 0.1
|
||||
import StatusQ.Components 0.1
|
||||
@ -602,6 +603,59 @@ StackLayout {
|
||||
height: chatColumnLayout.height - (topBar.height * 2) // TODO get screen size
|
||||
y: topBar.height
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: chatsModel.messageView
|
||||
|
||||
onMessageNotificationPushed: function(chatId, msg, contentType, chatType, timestamp, identicon, username, hasMention, isAddedContact, channelName) {
|
||||
if (contentType == Constants.editType)
|
||||
return;
|
||||
|
||||
if (appSettings.notificationSetting == Constants.notifyAllMessages ||
|
||||
(appSettings.notificationSetting == Constants.notifyJustMentions && hasMention)) {
|
||||
if (chatId === chatsModel.channelView.activeChannel.id && applicationWindow.active === true) {
|
||||
// Do not show the notif if we are in the channel already and the window is active and focused
|
||||
return
|
||||
}
|
||||
|
||||
chatColumnLayout.currentNotificationChatId = chatId
|
||||
chatColumnLayout.currentNotificationCommunityId = null
|
||||
|
||||
let name;
|
||||
if (appSettings.notificationMessagePreviewSetting === Constants.notificationPreviewAnonymous) {
|
||||
name = "Status"
|
||||
} else if (chatType === Constants.chatTypePublic) {
|
||||
name = chatId
|
||||
} else {
|
||||
name = chatType === Constants.chatTypePrivateGroupChat ? Utils.filterXSS(channelName) : Utils.removeStatusEns(username)
|
||||
}
|
||||
|
||||
let message;
|
||||
if (appSettings.notificationMessagePreviewSetting > Constants.notificationPreviewNameOnly) {
|
||||
switch(contentType){
|
||||
//% "Image"
|
||||
case Constants.imageType: message = qsTrId("image"); break
|
||||
//% "Sticker"
|
||||
case Constants.stickerType: message = qsTrId("sticker"); break
|
||||
default: message = msg // don't parse emojis here as it emits HTML
|
||||
}
|
||||
} else {
|
||||
//% "You have a new message"
|
||||
message = qsTrId("you-have-a-new-message")
|
||||
}
|
||||
|
||||
currentlyHasANotification = true
|
||||
if (appSettings.useOSNotifications && systemTray.supportsMessages) {
|
||||
systemTray.showMessage(name,
|
||||
message,
|
||||
SystemTrayIcon.NoIcon,
|
||||
Constants.notificationPopupTTL)
|
||||
} else {
|
||||
notificationWindow.notifyUser(chatId, name, message, chatType, identicon, chatColumnLayout.clickOnNotification)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*##^##
|
||||
|
@ -1,5 +1,4 @@
|
||||
import QtQuick 2.13
|
||||
import Qt.labs.platform 1.1
|
||||
import QtQuick.Controls 2.13
|
||||
import QtQuick.Window 2.13
|
||||
import QtQuick.Layouts 1.13
|
||||
@ -205,54 +204,6 @@ SplitView {
|
||||
newMessages++
|
||||
}
|
||||
}
|
||||
|
||||
onMessageNotificationPushed: function(chatId, msg, contentType, chatType, timestamp, identicon, username, hasMention, isAddedContact, channelName) {
|
||||
if (contentType == Constants.editType) return;
|
||||
|
||||
if (appSettings.notificationSetting == Constants.notifyAllMessages ||
|
||||
(appSettings.notificationSetting == Constants.notifyJustMentions && hasMention)) {
|
||||
if (chatId === chatsModel.channelView.activeChannel.id && applicationWindow.active === true) {
|
||||
// Do not show the notif if we are in the channel already and the window is active and focused
|
||||
return
|
||||
}
|
||||
|
||||
chatColumnLayout.currentNotificationChatId = chatId
|
||||
chatColumnLayout.currentNotificationCommunityId = null
|
||||
|
||||
let name;
|
||||
if (appSettings.notificationMessagePreviewSetting === Constants.notificationPreviewAnonymous) {
|
||||
name = "Status"
|
||||
} else if (chatType === Constants.chatTypePublic) {
|
||||
name = chatId
|
||||
} else {
|
||||
name = chatType === Constants.chatTypePrivateGroupChat ? Utils.filterXSS(channelName) : Utils.removeStatusEns(username)
|
||||
}
|
||||
|
||||
let message;
|
||||
if (appSettings.notificationMessagePreviewSetting > Constants.notificationPreviewNameOnly) {
|
||||
switch(contentType){
|
||||
//% "Image"
|
||||
case Constants.imageType: message = qsTrId("image"); break
|
||||
//% "Sticker"
|
||||
case Constants.stickerType: message = qsTrId("sticker"); break
|
||||
default: message = msg // don't parse emojis here as it emits HTML
|
||||
}
|
||||
} else {
|
||||
//% "You have a new message"
|
||||
message = qsTrId("you-have-a-new-message")
|
||||
}
|
||||
|
||||
currentlyHasANotification = true
|
||||
if (appSettings.useOSNotifications && systemTray.supportsMessages) {
|
||||
systemTray.showMessage(name,
|
||||
message,
|
||||
SystemTrayIcon.NoIcon,
|
||||
Constants.notificationPopupTTL)
|
||||
} else {
|
||||
notificationWindow.notifyUser(chatId, name, message, chatType, identicon, chatColumnLayout.clickOnNotification)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
Loading…
x
Reference in New Issue
Block a user