summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2022-06-12 19:28:13 +0900
committerGitHub <noreply@github.com>2022-06-12 19:28:13 +0900
commit11a6bd890cc752ee7abd2890773054743433eae1 (patch)
tree06caab47ade7484de8fd933f61aa316946e6252a
parent12.111.0 (diff)
downloadmisskey-11a6bd890cc752ee7abd2890773054743433eae1.tar.gz
misskey-11a6bd890cc752ee7abd2890773054743433eae1.tar.bz2
misskey-11a6bd890cc752ee7abd2890773054743433eae1.zip
fix: some fixes of multiple notification read (#8819)
* fix: limit multiple notification read * fix * fix
-rw-r--r--packages/backend/src/server/api/common/read-notification.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/notifications/read.ts6
-rw-r--r--packages/sw/src/scripts/notification-read.ts12
3 files changed, 18 insertions, 2 deletions
diff --git a/packages/backend/src/server/api/common/read-notification.ts b/packages/backend/src/server/api/common/read-notification.ts
index 0dad35bcc2..8c4ba41a36 100644
--- a/packages/backend/src/server/api/common/read-notification.ts
+++ b/packages/backend/src/server/api/common/read-notification.ts
@@ -9,6 +9,8 @@ export async function readNotification(
userId: User['id'],
notificationIds: Notification['id'][]
) {
+ if (notificationIds.length === 0) return;
+
// Update documents
await Notifications.update({
id: In(notificationIds),
diff --git a/packages/backend/src/server/api/endpoints/notifications/read.ts b/packages/backend/src/server/api/endpoints/notifications/read.ts
index 65e96d4862..e7839b2460 100644
--- a/packages/backend/src/server/api/endpoints/notifications/read.ts
+++ b/packages/backend/src/server/api/endpoints/notifications/read.ts
@@ -34,7 +34,11 @@ export const paramDef = {
{
type: 'object',
properties: {
- notificationIds: { type: 'array', items: { type: 'string', format: 'misskey:id' } },
+ notificationIds: {
+ type: 'array',
+ items: { type: 'string', format: 'misskey:id' },
+ maxItems: 100,
+ },
},
required: ['notificationIds'],
},
diff --git a/packages/sw/src/scripts/notification-read.ts b/packages/sw/src/scripts/notification-read.ts
index 8433f902b4..5c1de89088 100644
--- a/packages/sw/src/scripts/notification-read.ts
+++ b/packages/sw/src/scripts/notification-read.ts
@@ -37,12 +37,22 @@ class SwNotificationReadManager {
account.queue.push(data.body.id as string);
+ if (account.queue.length >= 20) {
+ if (account.timeout) clearTimeout(account.timeout);
+ const notificationIds = account.queue;
+ account.queue = [];
+ await api('notifications/read', data.userId, { notificationIds });
+ return;
+ }
+
// 最後の呼び出しから200ms待ってまとめて処理する
if (account.timeout) clearTimeout(account.timeout);
account.timeout = setTimeout(() => {
account.timeout = null;
- api('notifications/read', data.userId, { notificationIds: account.queue });
+ const notificationIds = account.queue;
+ account.queue = [];
+ api('notifications/read', data.userId, { notificationIds });
}, 200);
}
}