mirror of
https://github.com/GiriNeko/YesPlayMusic.git
synced 2025-12-17 21:58:03 +00:00
feat: 实现托盘菜单 (#1538)
* 从 v1 添加托盘相关图标 * feat: ipcRenderer事件 * feat: 托盘菜单实现 * 修复合并后的错误 * fix: 托盘图标的like * 将 tray 相关的 ipc 放入ipcMain.ts * update * update * feat: 设置托盘Tooltip * fix * fix: tray play/pause fade * fix: 暂时将tray like与tooltip的设置移入Player组件中 useUserLikedTracksIDs 会在重新聚焦而不是切换track时触发,导致托盘无法实时更新数据 基于以上一点,在Player组件中有了一个用于设置tray数据的useEffect,故将tray tooltip的设置也放入其中,使tray的数据尽可能简单的和player数据保持一致 * 将部分ipcRenderer调用挪到单独的IpcRendererReact组件 * 移除SetTrayPlayState,复用已有channel * update
This commit is contained in:
parent
b1fd51233a
commit
ffdf66b57e
24 changed files with 392 additions and 19 deletions
|
|
@ -11,6 +11,8 @@ import axios from 'axios'
|
|||
import { resizeImage } from './common'
|
||||
import { fetchPlaylistWithReactQuery } from '@/renderer/hooks/usePlaylist'
|
||||
import { fetchAlbumWithReactQuery } from '@/renderer/hooks/useAlbum'
|
||||
import { IpcChannels } from '@/shared/IpcChannels'
|
||||
import { RepeatMode } from '@/shared/playerDataTypes'
|
||||
|
||||
type TrackID = number
|
||||
export enum TrackListSourceType {
|
||||
|
|
@ -32,11 +34,6 @@ export enum State {
|
|||
Paused = 'paused',
|
||||
Loading = 'loading',
|
||||
}
|
||||
export enum RepeatMode {
|
||||
Off = 'off',
|
||||
On = 'on',
|
||||
One = 'one',
|
||||
}
|
||||
|
||||
const PLAY_PAUSE_FADE_DURATION = 200
|
||||
|
||||
|
|
@ -47,6 +44,7 @@ export class Player {
|
|||
private _progress: number = 0
|
||||
private _progressInterval: ReturnType<typeof setInterval> | undefined
|
||||
private _volume: number = 1 // 0 to 1
|
||||
private _repeatMode: RepeatMode = RepeatMode.Off
|
||||
|
||||
state: State = State.Initializing
|
||||
mode: Mode = Mode.TrackList
|
||||
|
|
@ -54,25 +52,26 @@ export class Player {
|
|||
trackListSource: TrackListSource | null = null
|
||||
fmTrackList: TrackID[] = []
|
||||
shuffle: boolean = false
|
||||
repeatMode: RepeatMode = RepeatMode.Off
|
||||
fmTrack: Track | null = null
|
||||
|
||||
init(params: { [key: string]: any }) {
|
||||
if (params._track) this._track = params._track
|
||||
if (params._trackIndex) this._trackIndex = params._trackIndex
|
||||
if (params._volume) this._volume = params._volume
|
||||
if (params._repeatMode) this._repeatMode = params._repeatMode
|
||||
if (params.state) this.trackList = params.state
|
||||
if (params.mode) this.mode = params.mode
|
||||
if (params.trackList) this.trackList = params.trackList
|
||||
if (params.trackListSource) this.trackListSource = params.trackListSource
|
||||
if (params.fmTrackList) this.fmTrackList = params.fmTrackList
|
||||
if (params.shuffle) this.shuffle = params.shuffle
|
||||
if (params.repeatMode) this.repeatMode = params.repeatMode
|
||||
if (params.fmTrack) this.fmTrack = params.fmTrack
|
||||
|
||||
this.state = State.Ready
|
||||
this._playAudio(false) // just load the audio, not play
|
||||
this._initFM()
|
||||
|
||||
window.ipcRenderer?.send(IpcChannels.Repeat, { mode: this._repeatMode })
|
||||
}
|
||||
|
||||
get howler() {
|
||||
|
|
@ -151,6 +150,14 @@ export class Player {
|
|||
Howler.volume(this._volume)
|
||||
}
|
||||
|
||||
get repeatMode(): RepeatMode {
|
||||
return this._repeatMode
|
||||
}
|
||||
set repeatMode(value) {
|
||||
this._repeatMode = value
|
||||
window.ipcRenderer?.send(IpcChannels.Repeat, { mode: this._repeatMode })
|
||||
}
|
||||
|
||||
private async _initFM() {
|
||||
if (this.fmTrackList.length === 0) await this._loadMoreFMTracks()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue