@@ -5,6 +5,9 @@ import { TauriAPI } from '../api/tauri'
55
66type ActionFn < T = any > = ( ) => Promise < T >
77
8+ const mediaQuery = window . matchMedia ( '(prefers-color-scheme: dark)' )
9+ let mediaQueryListener : ( ( e : MediaQueryListEvent ) => void ) | null = null
10+
811export const useAppStore = defineStore ( 'app' , ( ) => {
912 const settings = ref < MergedSettings > ( {
1013 openlist : { port : 5244 , data_dir : '' , auto_launch : false , ssl_enabled : false , binary_path : undefined } ,
@@ -97,7 +100,7 @@ export const useAppStore = defineStore('app', () => {
97100
98101 // Settings
99102 const loadSettings = ( ) => {
100- tryCatch ( async ( ) => {
103+ return tryCatch ( async ( ) => {
101104 const res = await TauriAPI . settings . load ( )
102105 if ( res ) settings . value = res
103106 applyTheme ( settings . value . app . theme || 'light' )
@@ -457,22 +460,25 @@ export const useAppStore = defineStore('app', () => {
457460
458461 function applyTheme ( theme : string ) {
459462 const root = document . documentElement
460- root . classList . remove ( 'light' , 'dark' , 'auto' )
461463
464+ root . classList . remove ( 'light' , 'dark' , 'auto' )
465+ if ( mediaQueryListener ) {
466+ mediaQuery . removeEventListener ( 'change' , mediaQueryListener )
467+ mediaQueryListener = null
468+ }
462469 if ( theme === 'auto' ) {
463470 root . classList . add ( 'auto' )
464471 const prefersDark = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches
465472 root . classList . add ( prefersDark ? 'dark' : 'light' )
466473 root . setAttribute ( 'data-theme' , prefersDark ? 'dark' : 'light' )
467-
468- const mediaQuery = window . matchMedia ( '(prefers-color-scheme: dark)' )
469- mediaQuery . addEventListener ( 'change' , e => {
474+ mediaQueryListener = ( e : MediaQueryListEvent ) => {
470475 if ( settings . value . app . theme === 'auto' ) {
471476 root . classList . remove ( 'light' , 'dark' )
472477 root . classList . add ( e . matches ? 'dark' : 'light' )
473478 root . setAttribute ( 'data-theme' , e . matches ? 'dark' : 'light' )
474479 }
475- } )
480+ }
481+ mediaQuery . addEventListener ( 'change' , mediaQueryListener )
476482 } else {
477483 root . classList . add ( theme )
478484 root . setAttribute ( 'data-theme' , theme )
0 commit comments