1+ import { RepeatModeType , ShuffleModeType } from "@shared" ;
12import {
23 app ,
3- Tray ,
4+ BrowserWindow ,
45 Menu ,
56 MenuItemConstructorOptions ,
6- BrowserWindow ,
77 nativeImage ,
88 nativeTheme ,
9+ Tray ,
910} from "electron" ;
10- import { isWin , appName } from "../utils/config" ;
1111import { join } from "path" ;
1212import { trayLog } from "../logger" ;
1313import { useStore } from "../store" ;
14+ import { appName , isWin } from "../utils/config" ;
1415import lyricWindow from "../windows/lyric-window" ;
1516
1617// 播放模式
17- type PlayMode = "repeat" | "repeat-once" | "shuffle" ;
1818type PlayState = "play" | "pause" | "loading" ;
1919
20+ let repeatMode : RepeatModeType = "list" ;
21+ let shuffleMode : ShuffleModeType = "off" ;
22+
2023// 全局数据
21- let playMode : PlayMode = "repeat" ;
2224let playState : PlayState = "pause" ;
2325let playName : string = "未播放歌曲" ;
2426let likeSong : boolean = false ;
@@ -27,7 +29,7 @@ let desktopLyricLock: boolean = false;
2729
2830export interface MainTray {
2931 setTitle ( title : string ) : void ;
30- setPlayMode ( mode : PlayMode ) : void ;
32+ setPlayMode ( repeat : RepeatModeType , shuffle : ShuffleModeType ) : void ;
3133 setLikeState ( like : boolean ) : void ;
3234 setPlayState ( state : PlayState ) : void ;
3335 setPlayName ( name : string ) : void ;
@@ -58,6 +60,22 @@ const createTrayMenu = (win: BrowserWindow): MenuItemConstructorOptions[] => {
5860 height : 16 ,
5961 } ) ;
6062 } ;
63+ /**
64+ * 获取 {@linkcode RepeatModeType} 对应的显示字符串
65+ * @param mode 重复模式
66+ * @returns 对应的显示字符串
67+ */
68+ const getRepeatLabel = ( mode : RepeatModeType ) : string => {
69+ switch ( mode ) {
70+ case "one" :
71+ return "单曲循环" ;
72+ case "off" :
73+ return "不循环" ;
74+ case "list" :
75+ default :
76+ return "列表循环" ;
77+ }
78+ } ;
6179 // 菜单
6280 const menu : MenuItemConstructorOptions [ ] = [
6381 {
@@ -79,34 +97,38 @@ const createTrayMenu = (win: BrowserWindow): MenuItemConstructorOptions[] => {
7997 click : ( ) => win . webContents . send ( "toggle-like-song" ) ,
8098 } ,
8199 {
82- id : "changeMode" ,
83- label :
84- playMode === "repeat" ? "列表循环" : playMode === "repeat-once" ? "单曲循环" : "随机播放" ,
85- icon : showIcon ( playMode ) ,
100+ id : "shuffle" ,
101+ label : shuffleMode === "heartbeat" ? "心动模式" : "随机播放" ,
102+ icon : showIcon ( "shuffle" ) ,
103+ type : "checkbox" ,
104+ checked : shuffleMode !== "off" ,
105+ click : ( ) => win . webContents . send ( "toggleShuffle" ) ,
106+ } ,
107+ {
108+ id : "repeatMode" ,
109+ label : getRepeatLabel ( repeatMode ) ,
110+ icon : showIcon ( repeatMode === "one" ? "repeat-once" : "repeat" ) ,
86111 submenu : [
87112 {
88- id : "repeat" ,
89113 label : "列表循环" ,
90114 icon : showIcon ( "repeat" ) ,
91- checked : playMode === "repeat" ,
92115 type : "radio" ,
93- click : ( ) => win . webContents . send ( "changeMode" , "repeat" ) ,
116+ checked : repeatMode === "list" ,
117+ click : ( ) => win . webContents . send ( "changeRepeat" , "list" ) ,
94118 } ,
95119 {
96- id : "repeat-once" ,
97120 label : "单曲循环" ,
98121 icon : showIcon ( "repeat-once" ) ,
99- checked : playMode === "repeat-once" ,
100122 type : "radio" ,
101- click : ( ) => win . webContents . send ( "changeMode" , "repeat-once" ) ,
123+ checked : repeatMode === "one" ,
124+ click : ( ) => win . webContents . send ( "changeRepeat" , "one" ) ,
102125 } ,
103126 {
104- id : "shuffle" ,
105- label : "随机播放" ,
106- icon : showIcon ( "shuffle" ) ,
107- checked : playMode === "shuffle" ,
127+ label : "关闭循环" ,
128+ icon : showIcon ( "repeat" ) ,
108129 type : "radio" ,
109- click : ( ) => win . webContents . send ( "changeMode" , "shuffle" ) ,
130+ checked : repeatMode === "off" ,
131+ click : ( ) => win . webContents . send ( "changeRepeat" , "off" ) ,
110132 } ,
111133 ] ,
112134 } ,
@@ -259,10 +281,12 @@ class CreateTray implements MainTray {
259281 }
260282 /**
261283 * 设置播放模式
262- * @param mode 播放模式
284+ * @param repeat 当前的重复播放模式
285+ * @param shuffle 当前的随机播放模式
263286 */
264- setPlayMode ( mode : PlayMode ) {
265- playMode = mode ;
287+ setPlayMode ( repeat : RepeatModeType , shuffle : ShuffleModeType ) {
288+ repeatMode = repeat ;
289+ shuffleMode = shuffle ;
266290 // 更新菜单
267291 this . initTrayMenu ( ) ;
268292 }
0 commit comments