From 13e3c088a32a3584eaef9d135cfc172014db8881 Mon Sep 17 00:00:00 2001 From: double beep <38133098+double-beep@users.noreply.github.com> Date: Wed, 21 Aug 2024 07:57:06 +0000 Subject: [PATCH] fix: watch for flags once per post --- src/AdvancedFlagging.ts | 2 +- src/UserscriptTools/Post.ts | 6 +++--- src/shared.ts | 10 +++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/AdvancedFlagging.ts b/src/AdvancedFlagging.ts index e79adbe..f84250b 100644 --- a/src/AdvancedFlagging.ts +++ b/src/AdvancedFlagging.ts @@ -232,7 +232,7 @@ function Setup(): void { setupConfiguration(); // TODO make more specific & remove jQuery - // appends advanced flagging link to new/edited posts + // appends Advanced Flagging link to new/edited posts $(document).ajaxComplete(() => setupPostPage()); isDone = true; diff --git a/src/UserscriptTools/Post.ts b/src/UserscriptTools/Post.ts index c359abb..f888237 100644 --- a/src/UserscriptTools/Post.ts +++ b/src/UserscriptTools/Post.ts @@ -291,8 +291,8 @@ export default class Post { // Watch for manual flags if the user has chosen to do so const watchFlags = Store.config[Cached.Configuration.watchFlags]; - // don't watch for flags if the user doesn't want to - // exclude listener from running in deleted posts + // Don't watch for flags if the user doesn't want to. + // Exclude listener from running in deleted posts. if (!watchFlags || this.deleted) return; addXHRListener(xhr => { @@ -338,7 +338,7 @@ export default class Post { await addProgress(event, flagType, this); $(this.flagged).fadeIn(); }, { once: true }); - }); + }, this.id); } public filterReporters(feedbacks: FlagTypeFeedbacks): Reporter[] { diff --git a/src/shared.ts b/src/shared.ts index 1fb09de..6f09b7b 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -113,8 +113,16 @@ export async function delay(milliseconds: number): Promise { // Credits: https://github.com/SOBotics/Userscripts/blob/master/Natty/NattyReporter.user.js#L101 const callbacks: ((request: XMLHttpRequest) => void)[] = []; +const postIds: number[] = []; + +export function addXHRListener( + callback: (request: XMLHttpRequest) => void, + postId?: number +): void { + // used so that the script watches for flags once per post + if (postId && postIds.includes(postId)) return; + else if (postId) postIds.push(postId); -export function addXHRListener(callback: (request: XMLHttpRequest) => void): void { callbacks.push(callback); }