diff --git a/src/components/NavMenu.vue b/src/components/NavMenu.vue index 7f715bf1..d1070b4c 100644 --- a/src/components/NavMenu.vue +++ b/src/components/NavMenu.vue @@ -516,7 +516,7 @@ const handleThemeSelect = (theme) => { themeMenuVisible.value = false; settingsMenuVisible.value = false; - appearanceSettingsStore.saveThemeMode(theme); + appearanceSettingsStore.setThemeMode(theme); }; const handleThemeColorSelect = async (colorFamily) => { diff --git a/src/plugin/ui.js b/src/plugin/ui.js index dc705947..802fe832 100644 --- a/src/plugin/ui.js +++ b/src/plugin/ui.js @@ -23,9 +23,7 @@ export async function initUi() { const { initThemeMode, isDarkMode } = await getThemeMode(configRepository); - setLoginContainerStyle(isDarkMode); - changeAppDarkStyle(isDarkMode); changeAppThemeStyle(initThemeMode); } catch (error) { console.error('Error initializing locale and theme:', error); diff --git a/src/shared/utils/base/ui.js b/src/shared/utils/base/ui.js index cd1cb97e..e93f16bc 100644 --- a/src/shared/utils/base/ui.js +++ b/src/shared/utils/base/ui.js @@ -6,6 +6,8 @@ import { i18n } from '../../../plugin/i18n'; import { router } from '../../../plugin/router'; import { useAppearanceSettingsStore } from '../../../stores'; +import configRepository from '../../../service/config.js'; + /** * * @returns {boolean} @@ -74,11 +76,11 @@ function changeAppThemeStyle(themeMode) { let themeConfig = THEME_CONFIG[themeMode]; if (!themeConfig) { + // fallback to system console.error('Invalid theme mode:', themeMode); - themeMode = 'dark'; + configRepository.setString('VRCX_ThemeMode', 'system'); + themeMode = systemIsDarkMode() ? 'dark' : 'light'; themeConfig = THEME_CONFIG[themeMode]; - const appSettingsStore = useAppearanceSettingsStore(); - appSettingsStore.setThemeMode(themeMode); } const cssFiles = Array.isArray(themeConfig.cssFiles) @@ -116,6 +118,8 @@ function changeAppThemeStyle(themeMode) { } changeAppDarkStyle(themeConfig.isDark); + return { isDark: themeConfig.isDark }; + // let $appThemeDarkStyle = document.getElementById('app-theme-dark-style'); // const darkThemeCssPath = `${filePathPrefix}theme.dark.css`; // const shouldApplyDarkBase = themeConfig.isDark; @@ -313,7 +317,6 @@ async function getThemeMode(configRepository) { ); let isDarkMode; - if (initThemeMode === 'light') { isDarkMode = false; } else if (initThemeMode === 'system') { diff --git a/src/stores/settings/appearance.js b/src/stores/settings/appearance.js index af31bbe7..79834ebd 100644 --- a/src/stores/settings/appearance.js +++ b/src/stores/settings/appearance.js @@ -6,13 +6,10 @@ import { useRouter } from 'vue-router'; import { HueToHex, - changeAppDarkStyle, changeAppThemeStyle, changeHtmlLangAttribute, - systemIsDarkMode, updateTrustColorClasses } from '../../shared/utils/base/ui'; -import { THEME_CONFIG } from '../../shared/constants'; import { database } from '../../service/database'; import { getNameColour } from '../../shared/utils'; import { languageCodes } from '../../localization'; @@ -204,16 +201,8 @@ export const useAppearanceSettingsStore = defineStore( await changeAppLanguage(appLanguageConfig); } - const normalizedThemeMode = normalizeThemeMode(themeModeConfig); - if (normalizedThemeMode !== themeModeConfig) { - configRepository.setString( - 'VRCX_ThemeMode', - normalizedThemeMode - ); - } - - themeMode.value = normalizedThemeMode; - applyThemeMode(); + themeMode.value = themeModeConfig; + setThemeMode(themeModeConfig); await initPrimaryColor(); displayVRCPlusIconsAsAvatar.value = @@ -289,14 +278,6 @@ export const useAppearanceSettingsStore = defineStore( { flush: 'sync' } ); - function normalizeThemeMode(mode) { - if (Object.prototype.hasOwnProperty.call(THEME_CONFIG, mode)) { - return mode; - } else { - return 'dark'; - } - } - /** * * @param {string} language @@ -321,21 +302,6 @@ export const useAppearanceSettingsStore = defineStore( changeHtmlLangAttribute(language); } - /** - * @param {string} newThemeMode - * @returns {Promise} - */ - async function saveThemeMode(newThemeMode) { - setThemeMode(newThemeMode); - await changeThemeMode(); - } - - async function changeThemeMode() { - await changeAppThemeStyle(themeMode.value); - vrStore.updateVRConfigVars(); - await updateTrustColor(undefined, undefined); - } - /** * * @param {string} field @@ -463,7 +429,7 @@ export const useAppearanceSettingsStore = defineStore( .matchMedia('(prefers-color-scheme: dark)') .addEventListener('change', async () => { if (themeMode.value === 'system') { - await changeThemeMode(); + setThemeMode(themeMode.value); } }); @@ -471,29 +437,14 @@ export const useAppearanceSettingsStore = defineStore( * @param {string} mode */ function setThemeMode(mode) { - const normalizedThemeMode = normalizeThemeMode(mode); - themeMode.value = normalizedThemeMode; - configRepository.setString('VRCX_ThemeMode', normalizedThemeMode); - applyThemeMode(); - } - - function applyThemeMode() { - if (themeMode.value === 'light') { - setIsDarkMode(false); - } else if (themeMode.value === 'system') { - setIsDarkMode(systemIsDarkMode()); - } else { - setIsDarkMode(true); - } - } - - /** - * @param {boolean} isDark - */ - function setIsDarkMode(isDark) { + themeMode.value = mode; + configRepository.setString('VRCX_ThemeMode', mode); + const { isDark } = changeAppThemeStyle(mode); isDarkMode.value = isDark; - changeAppDarkStyle(isDark); + vrStore.updateVRConfigVars(); + updateTrustColor(undefined, undefined); } + function setDisplayVRCPlusIconsAsAvatar() { displayVRCPlusIconsAsAvatar.value = !displayVRCPlusIconsAsAvatar.value; @@ -904,10 +855,8 @@ export const useAppearanceSettingsStore = defineStore( setRandomUserColours, setCompactTableMode, setTrustColor, - saveThemeMode, tryInitUserColours, updateTrustColor, - changeThemeMode, userColourInit, applyUserTrustLevel, changeAppLanguage, diff --git a/src/views/Settings/components/Tabs/AppearanceTab.vue b/src/views/Settings/components/Tabs/AppearanceTab.vue index 16103cbc..1eec94e2 100644 --- a/src/views/Settings/components/Tabs/AppearanceTab.vue +++ b/src/views/Settings/components/Tabs/AppearanceTab.vue @@ -19,7 +19,7 @@
{{ t('view.settings.appearance.appearance.theme_mode') }} - @@ -437,7 +437,7 @@ setHideUserMemos, setHideUnfriends, updateTrustColor, - saveThemeMode, + setThemeMode, changeAppLanguage, promptMaxTableSizeDialog, setNotificationIconDot,