From 9caf8f742af939e35051ee56921165ef24cc3466 Mon Sep 17 00:00:00 2001 From: Felicio Mununga Date: Tue, 23 Aug 2022 20:39:34 +0200 Subject: [PATCH] add `isMention` and `isReply` --- .../status-js/src/client/activityCenter.ts | 37 +++++++++++++++---- packages/status-js/src/client/chat.ts | 5 ++- packages/status-js/src/client/client.ts | 2 +- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/packages/status-js/src/client/activityCenter.ts b/packages/status-js/src/client/activityCenter.ts index 36eb8b36..21722761 100644 --- a/packages/status-js/src/client/activityCenter.ts +++ b/packages/status-js/src/client/activityCenter.ts @@ -1,6 +1,6 @@ // todo: rename to notifications (center?), inbox, or keep same as other platforms import type { ChatMessage } from './chat' -// import type { Client } from './client' +import type { Client } from './client' // todo?: union // todo?: rename to Activity @@ -8,6 +8,8 @@ type Notification = { // fixme?: specify message type (message_reply) type: 'message' value: ChatMessage + isMention?: boolean + isReply?: boolean } type ActivityCenterLatest = { @@ -19,13 +21,13 @@ type ActivityCenterLatest = { // todo?: rename to NotificationCenter export class ActivityCenter { // todo?: use client.account for mentions and replies, or in chat.ts - // #client: Client + #client: Client #notifications: Set #callbacks: Set<(latest: ActivityCenterLatest) => void> - constructor(/* client: Client */) { - // this.#client = client + constructor(client: Client) { + this.#client = client this.#notifications = new Set() this.#callbacks = new Set() @@ -43,8 +45,7 @@ export class ActivityCenter { const chat = unreadChats.get(chatUuid) if (chat) { - // fixme!: isReply || isMention - const shouldIncrement = false + const shouldIncrement = notification.isMention || notification.isReply if (shouldIncrement) { chat.count++ } @@ -74,8 +75,28 @@ export class ActivityCenter { return { notifications, unreadChats } } - public addMessageNotification = (value: ChatMessage) => { - this.#notifications.add({ type: 'message', value }) + // todo: pass ids instead of values and resolve within + public addMessageNotification = ( + newMessage: ChatMessage, + referencedMessage?: ChatMessage + ) => { + let isMention: boolean | undefined + let isReply: boolean | undefined + + if (this.#client.account) { + const publicKey = `0x${this.#client.account.publicKey}` + + isMention = newMessage.text.includes(publicKey) + isReply = referencedMessage?.signer === publicKey + } + + // todo?: getLatest on login + this.#notifications.add({ + type: 'message', + value: newMessage, + isMention, + isReply, + }) this.emitLatest() } diff --git a/packages/status-js/src/client/chat.ts b/packages/status-js/src/client/chat.ts index 67b2613b..c9dd57d9 100644 --- a/packages/status-js/src/client/chat.ts +++ b/packages/status-js/src/client/chat.ts @@ -320,7 +320,10 @@ export class Chat { // todo?: if not muted if (!this.#isActive) { - this.client.activityCenter.addMessageNotifications(newMessage) + this.client.activityCenter.addMessageNotification( + newMessage, + this.#messages.get(newMessage.responseTo) + ) } } diff --git a/packages/status-js/src/client/client.ts b/packages/status-js/src/client/client.ts index 45e6a3c8..30a3d830 100644 --- a/packages/status-js/src/client/client.ts +++ b/packages/status-js/src/client/client.ts @@ -53,7 +53,7 @@ class Client { this.#wakuDisconnectionTimer = wakuDisconnectionTimer // Activity Center - this.activityCenter = new ActivityCenter(/* this */) + this.activityCenter = new ActivityCenter(this) // Community this.community = new Community(this, options.publicKey)