v2.0.0
This commit is contained in:
@@ -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) {
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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 })
|
||||
})
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user