fix: some fixes of multiple notification read (#8819)
* fix: limit multiple notification read * fix * fix
This commit is contained in:
		@@ -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),
 | 
			
		||||
 
 | 
			
		||||
@@ -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'],
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user