This commit is contained in:
lyswhut
2022-10-29 11:36:35 +08:00
parent 66b965d9f7
commit e45cee6596
715 changed files with 57096 additions and 31771 deletions
+55
View File
@@ -0,0 +1,55 @@
// import mitt from 'mitt'
// import type { Emitter } from 'mitt'
export default class Event {
listeners: Map<string, Array<(...args: any[]) => any>>
constructor() {
this.listeners = new Map()
}
on(eventName: string, listener: (...args: any[]) => any) {
let targetListeners = this.listeners.get(eventName)
if (!targetListeners) this.listeners.set(eventName, targetListeners = [])
targetListeners.push(listener)
}
off(eventName: string, listener: (...args: any[]) => any) {
let targetListeners = this.listeners.get(eventName)
if (!targetListeners) return
const index = targetListeners.indexOf(listener)
if (index < 0) return
targetListeners.splice(index, 1)
}
emit(eventName: string, ...args: any[]) {
let targetListeners = this.listeners.get(eventName)
if (!targetListeners) return
for (const listener of targetListeners) {
listener(...args)
}
}
offAll(eventName: string) {
let targetListeners = this.listeners.get(eventName)
if (!targetListeners) return
this.listeners.delete(eventName)
}
}
// export class App_EVENT {
// listeners: Map<string, Array<() => void>>
// constructor() {
// this.listeners = new Map()
// }
// on(eventName: string, listener: () => void) {
// let targetListeners = this.listeners.get(eventName)
// if (targetListeners) this.listeners.set(eventName, targetListeners = [])
// targetListeners!.push(listener)
// }
// off(eventName: string, listener: () => void) {
// }
// }
+171
View File
@@ -0,0 +1,171 @@
import Event from './Event'
// {
// // sync: {
// // send_action_list: 'send_action_list',
// // handle_action_list: 'handle_action_list',
// // send_sync_list: 'send_sync_list',
// // handle_sync_list: 'handle_sync_list',
// // },
// }
export class AppEvent extends Event {
configUpdate() {
this.emit('configUpdate')
}
focus() {
this.emit('focus')
}
dragStart() {
this.emit('dragStart')
}
dragEnd() {
this.emit('dragEnd')
}
/**
* 音乐信息切换
*/
musicToggled() {
this.emit('musicToggled')
}
/**
* 手动改变进度
* @param progress 进度
*/
setProgress(progress: number, maxPlayTime?: number) {
this.emit('setProgress', progress, maxPlayTime)
}
/**
* 设置音量大小
* @param volume 音量大小
*/
setVolume(volume: number) {
this.emit('setVolume', volume)
}
/**
* 设置是否静音
* @param isMute 是否静音
*/
setVolumeIsMute(isMute: boolean) {
this.emit('setVolumeIsMute', isMute)
}
// 播放器事件
play() {
this.emit('play')
}
pause() {
this.emit('pause')
}
stop() {
this.emit('stop')
}
error(code?: number) {
this.emit('error', code)
}
// 播放器原始事件
playerPlaying() {
this.emit('playerPlaying')
}
playerPause() {
this.emit('playerPause')
}
playerStop() {
this.emit('playerStop')
}
playerEnded() {
this.emit('playerEnded')
}
playerError(code?: number) {
this.emit('playerError', code)
}
playerLoadeddata() {
this.emit('playerLoadeddata')
}
playerLoadstart() {
this.emit('playerLoadstart')
}
playerCanplay() {
this.emit('playerCanplay')
}
playerEmptied() {
this.emit('playerEmptied')
}
playerWaiting() {
this.emit('playerWaiting')
}
// 激活进度条动画事件
activePlayProgressTransition() {
this.emit('activePlayProgressTransition')
}
// 更新图片事件
picUpdated() {
this.emit('picUpdated')
}
// 更新歌词事件
lyricUpdated() {
this.emit('lyricUpdated')
}
// 更新歌词偏移
lyricOffsetUpdate() {
this.emit('lyricOffsetUpdate')
}
// 我的列表改变事件
myListUpdate(ids: string[]) {
this.emit('myListUpdate', ids)
}
// 下载列表改变事件
downloadListUpdate() {
this.emit('downloadListUpdate')
}
// 列表里的音乐信息改变事件
// musicInfoUpdate(musicInfo: LX.Music.MusicInfo) {
// this.emit('musicInfoUpdate', musicInfo)
// }
keyDown(event: LX.KeyDownEevent) {
this.emit('keyDown', event)
}
}
type EventMethods = Omit<EventType, keyof Event>
declare class EventType extends AppEvent {
on<K extends keyof EventMethods>(event: K, listener: EventMethods[K]): any
off<K extends keyof EventMethods>(event: K, listener: EventMethods[K]): any
}
export type AppEventTypes = Omit<EventType, keyof Omit<Event, 'on' | 'off'>>
export const createAppEventHub = (): AppEventTypes => {
return new AppEvent()
}
-113
View File
@@ -1,113 +0,0 @@
import mitt from 'mitt'
import keyBind from '../utils/keyBind'
import { rendererOn, rendererSend, NAMES, rendererInvoke } from '../../common/ipc'
import { base as baseName, sync as syncName } from './names'
import { common as hotKeyNamesCommon } from '../../common/hotKey'
import { sync } from '@renderer/core/share'
const eventHub = window.eventHub = mitt()
window.isEditingHotKey = false
let appHotKeyConfig = {
local: {},
global: {},
}
rendererInvoke(NAMES.mainWindow.get_hot_key).then(({ local, global }) => {
appHotKeyConfig = window.appHotKeyConfig = {
local,
global,
}
})
eventHub.on(baseName.bindKey, () => {
keyBind.bindKey((key, eventKey, type, event, keys, isEditing) => {
// console.log(`key_${key}_${type}`)
eventHub.emit(baseName.key_down, { event, keys, key, type })
// console.log(event, key)
// console.log(key, eventKey, type, event, keys)
if (window.isEditingHotKey || (isEditing && type == 'down') || event?.lx_handled) return
if (event && appHotKeyConfig.local.enable && appHotKeyConfig.local.keys[key] && (key != 'escape' || !event.target.classList.contains('ignore-esc'))) {
// console.log(key, eventKey, type, keys, isEditing)
event.preventDefault()
if (type == 'up') return
// 软件内快捷键的最小化触发时
// 如果已启用托盘,则隐藏程序,否则最小化程序 https://github.com/lyswhut/lx-music-desktop/issues/603
if (appHotKeyConfig.local.keys[key].action == hotKeyNamesCommon.min.action && global.appSetting.tray.isShow) {
eventHub.emit(hotKeyNamesCommon.hide_toggle.action)
return
}
eventHub.emit(appHotKeyConfig.local.keys[key].action)
return
}
// console.log(`key_${key}_${type}`)
eventHub.emit(`key_${key}_${type}`, { event, keys, key, eventKey, type })
if (key != eventKey) eventHub.emit(`key_${eventKey}_${type}`, { event, keys, key, eventKey, type })
})
registerCommonEvents()
})
eventHub.on(baseName.unbindKey, () => {
keyBind.unbindKey()
unregisterCommonEvents()
})
const registerQuit = () => rendererSend(NAMES.mainWindow.quit)
const registerMin = () => rendererSend(NAMES.mainWindow.min)
const registerMinToggle = () => rendererSend(NAMES.mainWindow.min_toggle)
const registerHideToggle = () => rendererSend(NAMES.mainWindow.hide_toggle)
const setClearDownKeys = () => keyBind.clearDownKeys()
eventHub.on(baseName.min, registerMin)
eventHub.on(baseName.max, () => rendererSend(NAMES.mainWindow.max))
eventHub.on(baseName.close, () => rendererSend(NAMES.mainWindow.close))
eventHub.on(baseName.setClearDownKeys, setClearDownKeys)
const registerCommonEvents = () => {
eventHub.on(hotKeyNamesCommon.close.action, registerQuit)
eventHub.on(hotKeyNamesCommon.min.action, registerMin)
eventHub.on(hotKeyNamesCommon.min_toggle.action, registerMinToggle)
eventHub.on(hotKeyNamesCommon.hide_toggle.action, registerHideToggle)
}
const unregisterCommonEvents = () => {
eventHub.off(hotKeyNamesCommon.close.action, registerQuit)
eventHub.off(hotKeyNamesCommon.min.action, registerMin)
eventHub.off(hotKeyNamesCommon.min_toggle.action, registerMinToggle)
eventHub.off(hotKeyNamesCommon.hide_toggle.action, registerHideToggle)
}
rendererOn(NAMES.mainWindow.focus, () => {
keyBind.clearDownKeys()
eventHub.emit(baseName.focus)
})
rendererOn(NAMES.mainWindow.key_down, (event, { type, key }) => {
// console.log(appHotKeyConfig.global.keys[key])
if (appHotKeyConfig.global.keys[key]) {
window.eventHub.emit(appHotKeyConfig.global.keys[key].action)
}
})
rendererOn(NAMES.mainWindow.set_hot_key_config, (event, config) => {
// console.log(config)
// this.setDesktopLyricConfig(config)
// console.log('set_config', JSON.stringify(this.setting) === JSON.stringify(config))
for (const type of Object.keys(config)) {
window.appHotKeyConfig[type] = config[type]
}
window.eventHub.emit(baseName.set_hot_key_config, config)
})
rendererOn(NAMES.mainWindow.sync_action_list, (event, { action, data }) => {
window.eventHub.emit(syncName.handle_action_list, { action, data })
})
eventHub.on(syncName.send_action_list, ({ action, data }) => {
if (!sync.enable) return
rendererSend(NAMES.mainWindow.sync_action_list, { action, data })
})
rendererOn(NAMES.mainWindow.sync_list, (event, { action, data }) => {
window.eventHub.emit(syncName.handle_sync_list, { action, data })
})
eventHub.on(syncName.send_sync_list, ({ action, data }) => {
if (!sync.enable) return
rendererSend(NAMES.mainWindow.sync_list, { action, data })
})
+45
View File
@@ -0,0 +1,45 @@
import { getHotKeyConfig, onFocus, onKeyDown, onUpdateHotkey } from '@renderer/utils/ipc'
import { registerKeyEvent, createKeyEventHub } from './keyEvent'
// import { registerRendererEvents, unregisterRendererEvents } from './rendererEvent'
import { createAppEventHub } from './appEvent'
export const registerEvents = () => {
window.lx.isEditingHotKey = false
window.app_event = createAppEventHub()
window.key_event = createKeyEventHub()
const setHotkeyConfig = ({ local, global }: LX.HotKeyConfigAll) => {
window.lx.appHotKeyConfig = {
local,
global,
}
}
void getHotKeyConfig().then(setHotkeyConfig)
onUpdateHotkey(({ params }) => {
setHotkeyConfig(params)
})
onKeyDown(({ params: { key } }) => {
const keyInfo = window.lx.appHotKeyConfig.global.keys[key]
if (keyInfo) window.key_event.emit(keyInfo.action)
})
onFocus(() => {
window.app_event.focus()
})
registerKeyEvent()
// registerRendererEvents()
}
// export const unregisterEvents = () => {
// unregisterKeyEvent()
// // unregisterRendererEvents()
// }
export { AppEventTypes } from './appEvent'
export { KeyEventTypes, clearDownKeys } from './keyEvent'
registerEvents()
+52
View File
@@ -0,0 +1,52 @@
import keyBind from '../utils/keyBind'
import { HOTKEY_COMMON } from '@common/hotKey'
import Event from './Event'
import { appSetting } from '@renderer/store/setting'
declare class keyEventTypes extends Event {
on(event: string, listener: (event: LX.KeyDownEevent) => any): void
off(event: string, listener: (event: LX.KeyDownEevent) => any): void
}
export type KeyEventTypes = keyEventTypes
export const createKeyEventHub = (): keyEventTypes => {
return new Event()
}
window.lx.isEditingHotKey = false
// let appHotKeyConfig: LX.HotKeyConfigAll = window.lx.appHotKeyConfig
export const registerKeyEvent = () => {
keyBind.bindKey((key, eventKey, type, event, keys, isEditing) => {
// console.log(`key_${key}_${type}`)
window.app_event.keyDown({ event, keys, key, eventKey, type })
// console.log(event, key)
// console.log(key, eventKey, type, event, keys)
if (window.lx.isEditingHotKey || (isEditing && type == 'down') || event?.lx_handled) return
if (event && window.lx.appHotKeyConfig.local.enable && window.lx.appHotKeyConfig.local.keys[key] && (key != 'escape' || !((event.target as HTMLElement).classList.contains('ignore-esc')))) {
// console.log(key, eventKey, type, keys, isEditing)
event.preventDefault()
if (type == 'up') return
// 软件内快捷键的最小化触发时
// 如果已启用托盘,则隐藏程序,否则最小化程序 https://github.com/lyswhut/lx-music-desktop/issues/603
if (window.lx.appHotKeyConfig.local.keys[key].action == HOTKEY_COMMON.min.action && appSetting['tray.enable']) {
window.key_event.emit(HOTKEY_COMMON.hide_toggle.action)
return
}
window.key_event.emit(window.lx.appHotKeyConfig.local.keys[key].action)
return
}
// console.log(`key_${key}_${type}`)
window.key_event.emit(`key_${key}_${type}`, { event, keys, key, eventKey, type })
if (key != eventKey) window.key_event.emit(`key_${eventKey}_${type}`, { event, keys, key, eventKey, type })
})
}
export const unregisterKeyEvent = () => {
keyBind.unbindKey()
}
export const clearDownKeys = () => keyBind.clearDownKeys()
-88
View File
@@ -1,88 +0,0 @@
const names = {
base: {
key_down: 'key_down',
bindKey: 'bindKey',
unbindKey: 'unbindKey',
dragStart: 'dragStart',
dragEnd: 'dragEnd',
setClearDownKeys: 'setClearDownKeys',
focus: 'focus',
min: 'min',
max: 'max',
close: 'close',
fullscreenToggle: 'fullscreenToggle',
set_config: 'set_config',
set_hot_key_config: 'set_hot_key_config',
},
player: {
setTogglePlay: 'setTogglePlay', // 播放/暂停切换
setPlay: 'setPlay', // 播放
setPause: 'setPause', // 暂停
setStop: 'setStop', // 停止
setPlayPrev: 'setPlayPrev', // 上一曲
setPlayNext: 'setPlayNext', // 下一曲
setProgress: 'setProgress', // 设置播放进度
setVolume: 'setVolume', // 设置音量
toggleMute: 'toggleMute', // 静音切换
playMusic: 'playMusic',
setPlayInfo: 'setPlayInfo', // 设置播放信息
updatePic: 'updatePic', // 更新图片事件
updateLyric: 'updateLyric', // 更新歌词事件
updateLyricOffset: 'updateLyricOffset', // 更新歌词偏移
activeTransition: 'activeTransition', // 激活进度条动画事件
playedStop: 'playedStop', // 定时停止事件
// 播放器事件
play: 'play',
pause: 'pause',
stop: 'stop',
error: 'error',
// 播放器原始事件
player_playing: 'player_playing',
player_pause: 'player_pause',
player_stop: 'player_stop',
player_ended: 'player_ended',
player_error: 'player_error',
player_loadeddata: 'player_loadeddata',
player_loadstart: 'player_loadstart',
player_canplay: 'player_canplay',
player_emptied: 'player_emptied',
player_waiting: 'player_waiting',
},
list: {
saveMyList: 'saveMyList', // 列表保存事件
listChange: 'listChange', // 列表改变事件
musicInfoChange: 'musicInfoChange', // 列表里的音乐信息改变事件
},
download: {
listChange: 'listChange', // 列表改变事件
},
sync: {
send_action_list: 'send_action_list',
handle_action_list: 'handle_action_list',
send_sync_list: 'send_sync_list',
handle_sync_list: 'handle_sync_list',
},
taskbar: {
setTaskbarThumbnailClip: 'setTaskbarThumbnailClip',
},
}
for (const item of Object.keys(names)) {
let name = names[item]
for (const key of Object.keys(name)) {
name[key] = `${item}_${name[key]}`
}
}
export const base = names.base
export const player = names.player
export const list = names.list
export const download = names.download
export const sync = names.sync
export const taskbar = names.taskbar