diff --git a/src/controllers/custom/configController.ts b/src/controllers/custom/configController.ts index d64a3e3b..5b318a47 100644 --- a/src/controllers/custom/configController.ts +++ b/src/controllers/custom/configController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { config } from "@/src/services/configService"; import { getAccountForRequest, isAdministrator } from "@/src/services/loginService"; -import { saveConfig } from "@/src/services/configWatcherService"; +import { saveConfig } from "@/src/services/configWriterService"; import { sendWsBroadcastExcept } from "@/src/services/wsService"; export const getConfigController: RequestHandler = async (req, res) => { diff --git a/src/controllers/custom/renameAccountController.ts b/src/controllers/custom/renameAccountController.ts index 5f950550..11c28a22 100644 --- a/src/controllers/custom/renameAccountController.ts +++ b/src/controllers/custom/renameAccountController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { getAccountForRequest, isAdministrator, isNameTaken } from "@/src/services/loginService"; import { config } from "@/src/services/configService"; -import { saveConfig } from "@/src/services/configWatcherService"; +import { saveConfig } from "@/src/services/configWriterService"; export const renameAccountController: RequestHandler = async (req, res) => { const account = await getAccountForRequest(req); diff --git a/src/services/configWatcherService.ts b/src/services/configWatcherService.ts index 99a0dd64..d2aec57a 100644 --- a/src/services/configWatcherService.ts +++ b/src/services/configWatcherService.ts @@ -1,17 +1,14 @@ import chokidar from "chokidar"; -import fsPromises from "fs/promises"; import { logger } from "@/src/utils/logger"; import { config, configPath, loadConfig } from "@/src/services/configService"; +import { saveConfig, shouldReloadConfig } from "@/src/services/configWriterService"; import { getWebPorts, startWebServer, stopWebServer } from "@/src/services/webService"; import { sendWsBroadcast } from "@/src/services/wsService"; import { Inbox } from "@/src/models/inboxModel"; import varzia from "@/static/fixed_responses/worldState/varzia.json"; -let amnesia = false; chokidar.watch(configPath).on("change", () => { - if (amnesia) { - amnesia = false; - } else { + if (shouldReloadConfig()) { logger.info("Detected a change to config file, reloading its contents."); try { loadConfig(); @@ -72,11 +69,6 @@ export const validateConfig = (): void => { } }; -export const saveConfig = async (): Promise => { - amnesia = true; - await fsPromises.writeFile(configPath, JSON.stringify(config, null, 2)); -}; - export const syncConfigWithDatabase = (): void => { // Event messages are deleted after endDate. Since we don't use beginDate/endDate and instead have config toggles, we need to delete the messages once those bools are false. if (!config.worldState?.galleonOfGhouls) { diff --git a/src/services/configWriterService.ts b/src/services/configWriterService.ts new file mode 100644 index 00000000..43b00187 --- /dev/null +++ b/src/services/configWriterService.ts @@ -0,0 +1,17 @@ +import fsPromises from "fs/promises"; +import { config, configPath } from "@/src/services/configService"; + +let amnesia = false; + +export const saveConfig = async (): Promise => { + amnesia = true; + await fsPromises.writeFile(configPath, JSON.stringify(config, null, 2)); +}; + +export const shouldReloadConfig = (): boolean => { + if (amnesia) { + amnesia = false; + return false; + } + return true; +};