fix(activity_center): Remove notifications from activity center

Fixes: #9751
This commit is contained in:
Boris Melnik 2023-03-13 21:36:06 +03:00
parent ee56e79090
commit 0b6ff5ae2f
7 changed files with 36 additions and 2 deletions

View File

@ -76,6 +76,11 @@ proc init*(self: Controller) =
self.delegate.hasUnseenActivityCenterNotificationsChanged() self.delegate.hasUnseenActivityCenterNotificationsChanged()
self.updateActivityGroupCounters() self.updateActivityGroupCounters()
self.events.on(activity_center_service.SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_REMOVED) do(e: Args):
var evArgs = RemoveActivityCenterNotificationsArgs(e)
if (evArgs.notificationIds.len > 0):
self.delegate.removeActivityCenterNotifications(evArgs.notificationIds)
proc hasMoreToShow*(self: Controller): bool = proc hasMoreToShow*(self: Controller): bool =
return self.activityCenterService.hasMoreToShow() return self.activityCenterService.hasMoreToShow()

View File

@ -54,6 +54,9 @@ method markActivityCenterNotificationReadDone*(self: AccessInterface, notificati
method markActivityCenterNotificationUnreadDone*(self: AccessInterface, notificationIds: seq[string]) {.base.} = method markActivityCenterNotificationUnreadDone*(self: AccessInterface, notificationIds: seq[string]) {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")
method removeActivityCenterNotifications*(self: AccessInterface, notificationIds: seq[string]) {.base.} =
raise newException(ValueError, "No implementation available")
method acceptActivityCenterNotificationsDone*(self: AccessInterface, notificationIds: seq[string]) {.base.} = method acceptActivityCenterNotificationsDone*(self: AccessInterface, notificationIds: seq[string]) {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")

View File

@ -239,6 +239,9 @@ method markActivityCenterNotificationUnreadDone*(self: Module, notificationIds:
for notificationId in notificationIds: for notificationId in notificationIds:
self.view.markActivityCenterNotificationUnreadDone(notificationId) self.view.markActivityCenterNotificationUnreadDone(notificationId)
method removeActivityCenterNotifications*(self: Module, notificationIds: seq[string]) =
self.view.removeActivityCenterNotifications(notificationIds)
method acceptActivityCenterNotificationsDone*(self: Module, notificationIds: seq[string]) = method acceptActivityCenterNotificationsDone*(self: Module, notificationIds: seq[string]) =
self.view.acceptActivityCenterNotificationsDone(notificationIds) self.view.acceptActivityCenterNotificationsDone(notificationIds)

View File

@ -86,6 +86,9 @@ QtObject:
proc markActivityCenterNotificationUnreadDone*(self: View, notificationId: string) = proc markActivityCenterNotificationUnreadDone*(self: View, notificationId: string) =
self.model.markActivityCenterNotificationUnread(notificationId) self.model.markActivityCenterNotificationUnread(notificationId)
proc removeActivityCenterNotifications*(self: View, notificationIds: seq[string]) =
self.model.removeNotifications(notificationIds)
proc markAllChatMentionsAsRead*(self: View, communityId: string, chatId: string) = proc markAllChatMentionsAsRead*(self: View, communityId: string, chatId: string) =
let notifsIds = self.model.getUnreadNotificationsForChat(chatId) let notifsIds = self.model.getUnreadNotificationsForChat(chatId)
for notifId in notifsIds: for notifId in notifsIds:

View File

@ -56,6 +56,7 @@ type ActivityCenterNotificationDto* = ref object of RootObj
timestamp*: int64 timestamp*: int64
read*: bool read*: bool
dismissed*: bool dismissed*: bool
deleted*: bool
accepted*: bool accepted*: bool
proc `$`*(self: ActivityCenterNotificationDto): string = proc `$`*(self: ActivityCenterNotificationDto): string =
@ -70,6 +71,7 @@ proc `$`*(self: ActivityCenterNotificationDto): string =
timestamp: {self.timestamp}, timestamp: {self.timestamp},
read: {$self.read}, read: {$self.read},
dismissed: {$self.dismissed}, dismissed: {$self.dismissed},
deleted: {$self.deleted},
accepted: {$self.accepted}, accepted: {$self.accepted},
message: {self.message} message: {self.message}
replyMessage: {self.replyMessage} replyMessage: {self.replyMessage}
@ -107,6 +109,7 @@ proc toActivityCenterNotificationDto*(jsonObj: JsonNode): ActivityCenterNotifica
discard jsonObj.getProp("timestamp", result.timestamp) discard jsonObj.getProp("timestamp", result.timestamp)
discard jsonObj.getProp("read", result.read) discard jsonObj.getProp("read", result.read)
discard jsonObj.getProp("dismissed", result.dismissed) discard jsonObj.getProp("dismissed", result.dismissed)
discard jsonObj.getProp("deleted", result.deleted)
discard jsonObj.getProp("accepted", result.accepted) discard jsonObj.getProp("accepted", result.accepted)
if jsonObj.contains("message") and jsonObj{"message"}.kind != JNull: if jsonObj.contains("message") and jsonObj{"message"}.kind != JNull:

View File

@ -25,6 +25,9 @@ type
MarkAsAcceptedNotificationProperties* = ref object of Args MarkAsAcceptedNotificationProperties* = ref object of Args
notificationIds*: seq[string] notificationIds*: seq[string]
RemoveActivityCenterNotificationsArgs* = ref object of Args
notificationIds*: seq[string]
MarkAsDismissedNotificationProperties* = ref object of Args MarkAsDismissedNotificationProperties* = ref object of Args
notificationIds*: seq[string] notificationIds*: seq[string]
@ -48,6 +51,7 @@ const SIGNAL_MARK_NOTIFICATIONS_AS_READ* = "markNotificationsAsRead"
const SIGNAL_MARK_NOTIFICATIONS_AS_UNREAD* = "markNotificationsAsUnread" const SIGNAL_MARK_NOTIFICATIONS_AS_UNREAD* = "markNotificationsAsUnread"
const SIGNAL_MARK_NOTIFICATIONS_AS_ACCEPTED* = "markNotificationsAsAccepted" const SIGNAL_MARK_NOTIFICATIONS_AS_ACCEPTED* = "markNotificationsAsAccepted"
const SIGNAL_MARK_NOTIFICATIONS_AS_DISMISSED* = "markNotificationsAsDismissed" const SIGNAL_MARK_NOTIFICATIONS_AS_DISMISSED* = "markNotificationsAsDismissed"
const SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_REMOVED* = "activityCenterNotificationsRemoved"
const DEFAULT_LIMIT = 20 const DEFAULT_LIMIT = 20
@ -93,12 +97,24 @@ QtObject:
let filteredNotifications = filter(activityCenterNotifications, proc(notification: ActivityCenterNotificationDto): bool = let filteredNotifications = filter(activityCenterNotifications, proc(notification: ActivityCenterNotificationDto): bool =
return (self.readType == ActivityCenterReadType.All or not notification.read) and groupTypes.contains(notification.notificationType.int) return (self.readType == ActivityCenterReadType.All or not notification.read) and groupTypes.contains(notification.notificationType.int)
) )
let removedNotifications = filter(activityCenterNotifications, proc(notification: ActivityCenterNotificationDto): bool =
return notification.deleted
)
if (filteredNotifications.len > 0): if (filteredNotifications.len > 0):
self.events.emit( self.events.emit(
SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_LOADED, SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_LOADED,
ActivityCenterNotificationsArgs(activityCenterNotifications: filteredNotifications) ActivityCenterNotificationsArgs(activityCenterNotifications: filteredNotifications)
) )
if (removedNotifications.len > 0):
var notificationIds: seq[string]
for notification in removedNotifications:
notificationIds.add(notification.id)
self.events.emit(SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_REMOVED, RemoveActivityCenterNotificationsArgs(
notificationIds: notificationIds
))
# NOTE: this signal must fire even we have no new notifications to show # NOTE: this signal must fire even we have no new notifications to show
self.events.emit(SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_COUNT_MAY_HAVE_CHANGED, Args()) self.events.emit(SIGNAL_ACTIVITY_CENTER_NOTIFICATIONS_COUNT_MAY_HAVE_CHANGED, Args())
@ -106,7 +122,8 @@ QtObject:
self.asyncActivityNotificationLoad() self.asyncActivityNotificationLoad()
self.events.on(SignalType.Message.event) do(e: Args): self.events.on(SignalType.Message.event) do(e: Args):
let receivedData = MessageSignal(e) let receivedData = MessageSignal(e)
self.handleNewNotificationsLoaded(receivedData.activityCenterNotifications) if (receivedData.activityCenterNotifications.len > 0):
self.handleNewNotificationsLoaded(receivedData.activityCenterNotifications)
proc parseActivityCenterResponse*(self: Service, response: RpcResponse[JsonNode]) = proc parseActivityCenterResponse*(self: Service, response: RpcResponse[JsonNode]) =
var activityCenterNotifications: seq[ActivityCenterNotificationDto] = @[] var activityCenterNotifications: seq[ActivityCenterNotificationDto] = @[]

2
vendor/status-go vendored

@ -1 +1 @@
Subproject commit 0eef19f80e1980f737894b7e258e2853c023a35a Subproject commit 106e3e3b137783f9af60e28efc1e4fafec363f61