@@ -8,46 +8,12 @@ import taskbarLyricManager from "../utils/taskbar-lyric-manager";
88
99let cachedIsPlaying = false ;
1010
11+ /** 读取完整任务栏配置 */
1112const getTaskbarConfig = ( ) : TaskbarConfig => {
12- const store = useStore ( ) ;
13- const legacyLineHeight = store . get ( "taskbar.lineHeight" , 1.1 ) ;
14- const legacyFontSize = store . get ( "taskbar.fontSize" , 14 ) ;
15- const legacyMainScale = store . get ( "taskbar.mainScale" , 1.0 ) ;
16- const legacySubScale = store . get ( "taskbar.subScale" , 0.8 ) ;
17- return {
18- mode : store . get ( "taskbar.mode" , "taskbar" ) ,
19- maxWidth : store . get ( "taskbar.maxWidth" , 300 ) ,
20- position : store . get ( "taskbar.position" , "automatic" ) ,
21- autoShrink : store . get ( "taskbar.autoShrink" , false ) ,
22- margin : store . get ( "taskbar.margin" , 10 ) ,
23- minWidth : store . get ( "taskbar.minWidth" , 10 ) ,
24- enabled : store . get ( "taskbar.enabled" , false ) ,
25- floatingAlign : store . get ( "taskbar.floatingAlign" , "right" ) ,
26- floatingAutoWidth : store . get ( "taskbar.floatingAutoWidth" , true ) ,
27- floatingWidth : store . get ( "taskbar.floatingWidth" , 300 ) ,
28- floatingHeight : store . get ( "taskbar.floatingHeight" , 48 ) ,
29- floatingAlwaysOnTop : store . get ( "taskbar.floatingAlwaysOnTop" , false ) ,
30-
31- showWhenPaused : store . get ( "taskbar.showWhenPaused" , true ) ,
32- showCover : store . get ( "taskbar.showCover" , true ) ,
33- themeMode : store . get ( "taskbar.themeMode" , "auto" ) ,
34- fontFamily : store . get ( "taskbar.fontFamily" , "system-ui" ) ,
35- fontWeight : store . get ( "taskbar.fontWeight" , 0 ) ,
36- animationMode : store . get ( "taskbar.animationMode" , "slide-blur" ) ,
37- singleLineMode : store . get ( "taskbar.singleLineMode" , false ) ,
38- showWordLyrics : store . get ( "taskbar.showWordLyrics" , true ) ,
39- showTranslation : store . get ( "taskbar.showTranslation" , true ) ,
40- taskbarLineHeight : store . get ( "taskbar.taskbarLineHeight" , legacyLineHeight ) ,
41- floatingLineHeight : store . get ( "taskbar.floatingLineHeight" , legacyLineHeight ) ,
42- taskbarFontSize : store . get ( "taskbar.taskbarFontSize" , legacyFontSize ) ,
43- floatingFontSize : store . get ( "taskbar.floatingFontSize" , legacyFontSize ) ,
44- taskbarMainScale : store . get ( "taskbar.taskbarMainScale" , legacyMainScale ) ,
45- floatingMainScale : store . get ( "taskbar.floatingMainScale" , legacyMainScale ) ,
46- taskbarSubScale : store . get ( "taskbar.taskbarSubScale" , legacySubScale ) ,
47- floatingSubScale : store . get ( "taskbar.floatingSubScale" , legacySubScale ) ,
48- } ;
13+ return useStore ( ) . get ( "taskbar" ) ;
4914} ;
5015
16+ /** 根据配置更新窗口可见性 */
5117const updateWindowVisibility = ( config : TaskbarConfig ) => {
5218 const tray = getMainTray ( ) ;
5319 if ( tray ) tray . setTaskbarLyricShow ( config . enabled ) ;
@@ -60,29 +26,6 @@ const updateWindowVisibility = (config: TaskbarConfig) => {
6026 taskbarLyricManager . setVisibility ( shouldBeVisible ) ;
6127} ;
6228
63- const updateWindowLayout = ( animate : boolean = true ) => {
64- taskbarLyricManager . updateLayout ( animate ) ;
65- } ;
66-
67- const applyTaskbarOption = ( option : Partial < TaskbarConfig > , pushToWindow : boolean ) => {
68- const store = useStore ( ) ;
69- const prev = getTaskbarConfig ( ) ;
70- const next = { ...prev , ...option } ;
71- Object . entries ( next ) . forEach ( ( [ key , value ] ) => {
72- store . set ( `taskbar.${ key } ` , value ) ;
73- } ) ;
74- if ( pushToWindow ) {
75- taskbarLyricManager . send ( TASKBAR_IPC_CHANNELS . SYNC_STATE , {
76- type : "config-update" ,
77- data : option ,
78- } as SyncStatePayload ) ;
79- }
80- updateWindowVisibility ( next ) ;
81- if ( next . enabled ) {
82- updateWindowLayout ( false ) ;
83- }
84- } ;
85-
8629const initTaskbarIpc = ( ) => {
8730 const store = useStore ( ) ;
8831 const initialConfig = getTaskbarConfig ( ) ;
@@ -97,10 +40,30 @@ const initTaskbarIpc = () => {
9740
9841 ipcMain . handle ( TASKBAR_IPC_CHANNELS . GET_OPTION , ( ) => getTaskbarConfig ( ) ) ;
9942
100- ipcMain . on ( TASKBAR_IPC_CHANNELS . SET_OPTION , ( _event , option : Partial < TaskbarConfig > , pushToWindow = true ) => {
101- if ( ! option ) return ;
102- applyTaskbarOption ( option , pushToWindow ) ;
103- } ) ;
43+ // 设置配置(增量合并)
44+ ipcMain . on (
45+ TASKBAR_IPC_CHANNELS . SET_OPTION ,
46+ ( _event , option : Partial < TaskbarConfig > , pushToWindow = true ) => {
47+ if ( ! option ) return ;
48+ // 增量更新
49+ const prev = getTaskbarConfig ( ) ;
50+ const next = { ...prev , ...option } ;
51+ Object . entries ( option ) . forEach ( ( [ key , value ] ) => {
52+ store . set ( `taskbar.${ key } ` , value ) ;
53+ } ) ;
54+ // 推送到歌词窗口
55+ if ( pushToWindow ) {
56+ taskbarLyricManager . send ( TASKBAR_IPC_CHANNELS . SYNC_STATE , {
57+ type : "config-update" ,
58+ data : option ,
59+ } as SyncStatePayload ) ;
60+ }
61+ updateWindowVisibility ( next ) ;
62+ if ( next . enabled ) {
63+ taskbarLyricManager . updateLayout ( false ) ;
64+ }
65+ } ,
66+ ) ;
10467
10568 ipcMain . on ( TASKBAR_IPC_CHANNELS . SYNC_STATE , ( _event , payload : SyncStatePayload ) => {
10669 if ( payload . type === "playback-state" ) {
@@ -144,9 +107,8 @@ const initTaskbarIpc = () => {
144107 // 把事件发射到 app 里不太好,但是我觉得也没有必要为了这一个事件创建一个事件总线
145108 // TODO: 如果有了事件总线,通过那个事件总线发射这个事件
146109 ( app as EventEmitter ) . on ( "explorer-restarted" , ( ) => {
147- const currentEnabled = store . get ( "taskbar.enabled" ) ;
148- const currentMode = store . get ( "taskbar.mode" , "taskbar" ) ;
149- if ( currentEnabled && currentMode === "taskbar" ) {
110+ const currentConfig = getTaskbarConfig ( ) ;
111+ if ( currentConfig . enabled && currentConfig . mode === "taskbar" ) {
150112 taskbarLyricManager . close ( false ) ;
151113 setTimeout ( ( ) => {
152114 taskbarLyricManager . create ( "taskbar" ) ;
0 commit comments