Implement the listeners for user updates

This commit is contained in:
Oliver-Akins 2025-05-19 23:44:55 -06:00
parent 240fb53b85
commit 00829eae04

View file

@ -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;
};
};