From 00829eae0461d411935a897dba4f90558cfd2918 Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Mon, 19 May 2025 23:44:55 -0600 Subject: [PATCH] Implement the listeners for user updates --- module/utils/databases/UserFlag.mjs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/module/utils/databases/UserFlag.mjs b/module/utils/databases/UserFlag.mjs index b5b9166..245a978 100644 --- a/module/utils/databases/UserFlag.mjs +++ b/module/utils/databases/UserFlag.mjs @@ -2,7 +2,7 @@ import { filterPrivateRows, PrivacyMode } from "../privacy.mjs"; import { Database } from "./Database.mjs"; import { Logger } from "../Logger.mjs"; -const { mergeObject, randomID } = foundry.utils; +const { hasProperty, mergeObject, randomID } = foundry.utils; const dataFlag = `rows`; @@ -116,4 +116,27 @@ export class UserFlagDatabase extends Database { this.render({ userUpdated: userID }); this.triggerListeners(); }; + + // MARK: Listeners + static #listener = null; + static async registerListeners() { + if (this.#listener !== null) { return }; + + this.#listener = Hooks.on(`updateUser`, (doc, diff, options, userID) => { + Logger.debug({ diff, userID, doc }); + // Shortcircuit when on the client that triggered the update + if (userID === game.user.id) { return }; + if (!hasProperty(diff, `flags.${__ID__}.${dataFlag}`)) { return }; + this.render({ userUpdated: doc.id }); + }); + }; + + static async triggerListeners() { + // No-op because the User document lifecycle takes care of it + }; + + static async unregisterListeners() { + Hooks.off(`updateUser`, this.#listener); + this.#listener = null; + }; };