From 2fce78540e20c4653f401456f3a9540c5e0aa287 Mon Sep 17 00:00:00 2001 From: stonedDiscord Date: Sun, 17 May 2026 14:51:58 +0200 Subject: disable markdown if it fails getting chat_config --- webAO/viewport/utils/handleICSpeaking.ts | 54 +++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 12 deletions(-) (limited to 'webAO/viewport/utils') diff --git a/webAO/viewport/utils/handleICSpeaking.ts b/webAO/viewport/utils/handleICSpeaking.ts index a612e77..f9b9973 100644 --- a/webAO/viewport/utils/handleICSpeaking.ts +++ b/webAO/viewport/utils/handleICSpeaking.ts @@ -14,13 +14,31 @@ import request from "../../services/request"; import preloadMessageAssets from "./preloadMessageAssets"; let attorneyMarkdown: ReturnType | null = null; +export let markdownDisabled = false; +let markdownInitPromise: Promise | null> | null = null; const initAttorneyMarkdown = async () => { - if (!attorneyMarkdown) { - const iniContent = await request(`${AO_HOST}themes/default/chat_config.ini`); - attorneyMarkdown = mlConfig(iniContent); + if (markdownDisabled) { + return null; } - return attorneyMarkdown; + if (attorneyMarkdown !== null) { + return attorneyMarkdown; + } + if (markdownInitPromise) { + return markdownInitPromise; + } + markdownInitPromise = (async () => { + try { + const iniContent = await request(`${AO_HOST}themes/default/chat_config.ini`); + attorneyMarkdown = mlConfig(iniContent); + return attorneyMarkdown; + } catch (error) { + console.warn("Failed to load chat_config.ini, disabling markdown system:", error); + markdownDisabled = true; + return null; + } + })(); + return markdownInitPromise; }; export let startFirstTickCheck: boolean; @@ -331,14 +349,7 @@ export const handle_ic_speaking = async (playerChatMsg: ChatMsg) => { client.viewport.getChatmsg().effects[2]; } - try { - const markdown = await initAttorneyMarkdown(); - client.viewport.getChatmsg().parsed = markdown.applyMarkdown( - client.viewport.getChatmsg().content, - COLORS[client.viewport.getChatmsg().color], - ); - } catch (error) { - console.warn("markdown failed"); + const processTextOnly = () => { const output: HTMLSpanElement[] = []; for (const letter of client.viewport.getChatmsg().content) { const currentSelector = document.createElement("span"); @@ -347,6 +358,25 @@ export const handle_ic_speaking = async (playerChatMsg: ChatMsg) => { output.push(currentSelector); } client.viewport.getChatmsg().parsed = output; + }; + + if (!markdownDisabled) { + try { + const markdown = await initAttorneyMarkdown(); + if (markdown) { + client.viewport.getChatmsg().parsed = markdown.applyMarkdown( + client.viewport.getChatmsg().content, + COLORS[client.viewport.getChatmsg().color], + ); + } else { + processTextOnly(); + } + } catch (error) { + console.warn("markdown failed"); + processTextOnly(); + } + } else { + processTextOnly(); } client.viewport.chat_tick(); -- cgit