From d6c43986fd665b60a8a83d41ef907dab22e990e7 Mon Sep 17 00:00:00 2001 From: megumin Date: Fri, 4 Aug 2023 18:52:20 +0100 Subject: Add proper user-friendly theme manager (#635) Co-authored-by: Justice Almanzar Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Co-authored-by: V --- src/utils/IpcEvents.ts | 6 ++++++ src/utils/quickCss.ts | 24 +++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) (limited to 'src/utils') diff --git a/src/utils/IpcEvents.ts b/src/utils/IpcEvents.ts index 6994c91..cb51f81 100644 --- a/src/utils/IpcEvents.ts +++ b/src/utils/IpcEvents.ts @@ -18,8 +18,14 @@ export const enum IpcEvents { QUICK_CSS_UPDATE = "VencordQuickCssUpdate", + THEME_UPDATE = "VencordThemeUpdate", GET_QUICK_CSS = "VencordGetQuickCss", SET_QUICK_CSS = "VencordSetQuickCss", + UPLOAD_THEME = "VencordUploadTheme", + DELETE_THEME = "VencordDeleteTheme", + GET_THEMES_DIR = "VencordGetThemesDir", + GET_THEMES_LIST = "VencordGetThemesList", + GET_THEME_DATA = "VencordGetThemeData", GET_SETTINGS_DIR = "VencordGetSettingsDir", GET_SETTINGS = "VencordGetSettings", SET_SETTINGS = "VencordSetSettings", diff --git a/src/utils/quickCss.ts b/src/utils/quickCss.ts index 0ce50e5..488dcfb 100644 --- a/src/utils/quickCss.ts +++ b/src/utils/quickCss.ts @@ -46,9 +46,23 @@ async function initThemes() { document.documentElement.appendChild(themesStyle); } - const { themeLinks } = Settings; - const links = themeLinks.map(link => `@import url("${link.trim()}");`).join("\n"); - themesStyle.textContent = links; + const { themeLinks, enabledThemes } = Settings; + + const links: string[] = [...themeLinks]; + + if (IS_WEB) { + for (const theme of enabledThemes) { + const themeData = await VencordNative.themes.getThemeData(theme); + if (!themeData) continue; + const blob = new Blob([themeData], { type: "text/css" }); + links.push(URL.createObjectURL(blob)); + } + } else { + const localThemes = enabledThemes.map(theme => `vencord:///themes/${theme}?v=${Date.now()}`); + links.push(...localThemes); + } + + themesStyle.textContent = links.map(link => `@import url("${link.trim()}");`).join("\n"); } document.addEventListener("DOMContentLoaded", () => { @@ -57,4 +71,8 @@ document.addEventListener("DOMContentLoaded", () => { initThemes(); addSettingsListener("themeLinks", initThemes); + addSettingsListener("enabledThemes", initThemes); + + if (!IS_WEB) + VencordNative.quickCss.addThemeChangeListener(initThemes); }); -- cgit