lx-music-desktop/src/renderer/utils/ipc.ts

828 lines
28 KiB
TypeScript

import { rendererSend, rendererInvoke, rendererOn, rendererOff } from '@common/rendererIpc'
import { HOTKEY_RENDERER_EVENT_NAME, WIN_MAIN_RENDERER_EVENT_NAME, CMMON_EVENT_NAME } from '@common/ipcNames'
import { type ProgressInfo, type UpdateDownloadedEvent, type UpdateInfo } from 'electron-updater'
import { markRaw } from '@common/utils/vueTools'
import * as hotKeys from '@common/hotKey'
import { APP_EVENT_NAMES, DATA_KEYS, DEFAULT_SETTING } from '@common/constants'
type RemoveListener = () => void
export const getSetting = async() => {
return rendererInvoke<LX.AppSetting>(CMMON_EVENT_NAME.get_app_setting)
}
export const updateSetting = async(setting: Partial<LX.AppSetting>) => {
await rendererInvoke(CMMON_EVENT_NAME.set_app_setting, setting)
}
export const onSettingChanged = (listener: LX.IpcRendererEventListenerParams<Partial<LX.AppSetting>>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.on_config_change, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.on_config_change, listener)
}
}
export const sendInited = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.inited)
}
export const getOtherSource = async(id: string): Promise<LX.Music.MusicInfoOnline[]> => {
return rendererInvoke<string, LX.Music.MusicInfoOnline[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_other_source, id)
}
export const saveOtherSource = async(id: string, sourceInfo: LX.Music.MusicInfoOnline[]) => {
await rendererInvoke<LX.Music.MusicInfoOtherSourceSave>(WIN_MAIN_RENDERER_EVENT_NAME.save_other_source, {
id,
list: sourceInfo,
})
}
export const clearOtherSource = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_other_source)
}
export const getOtherSourceCount = async() => {
return rendererInvoke<number>(WIN_MAIN_RENDERER_EVENT_NAME.get_other_source_count)
}
export const getDislikeListInfo = async(): Promise<LX.Dislike.DislikeInfo> => {
return rendererInvoke<LX.Dislike.DislikeInfo>(WIN_MAIN_RENDERER_EVENT_NAME.get_dislike_music_infos)
}
export const addDislikeInfo = async(dislikeInfo: LX.Dislike.DislikeMusicInfo[]) => {
return rendererInvoke<LX.Dislike.DislikeMusicInfo[]>(WIN_MAIN_RENDERER_EVENT_NAME.add_dislike_music_infos, dislikeInfo)
}
export const overwirteDislikeInfo = async(dislikeInfo: string) => {
return rendererInvoke<string>(WIN_MAIN_RENDERER_EVENT_NAME.overwrite_dislike_music_infos, dislikeInfo)
}
// export const updateDislikeInfo = async(dislikeInfo: LX.Dislike.ListItem[]) => {
// await rendererInvoke<LX.Dislike.ListItem[]>(WIN_MAIN_RENDERER_EVENT_NAME.update_dislike_music_infos, dislikeInfo)
// }
// export const removeDislikeInfo = async(ids: string[]) => {
// await rendererInvoke<string[]>(WIN_MAIN_RENDERER_EVENT_NAME.remove_dislike_music_infos, ids)
// }
// export const clearDislikeInfo = async() => {
// await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_dislike_music_infos)
// }
export const getHotKeyConfig = async() => {
return rendererInvoke<LX.HotKeyConfigAll>(WIN_MAIN_RENDERER_EVENT_NAME.get_hot_key)
}
export const setIgnoreMouseEvents = (ignore: boolean) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.set_ignore_mouse_events, ignore)
}
export const getEnvParams = async() => {
return rendererInvoke<LX.EnvParams>(CMMON_EVENT_NAME.get_env_params)
}
export const clearEnvParamsDeeplink = () => {
rendererSend(CMMON_EVENT_NAME.clear_env_params_deeplink)
}
export const onDeeplink = (listener: LX.IpcRendererEventListenerParams<string>): RemoveListener => {
rendererOn(CMMON_EVENT_NAME.deeplink, listener)
return () => {
rendererOff(CMMON_EVENT_NAME.deeplink, listener)
}
}
export const checkUpdate = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.update_check)
}
export const downloadUpdate = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.update_download_update)
}
export const quitUpdate = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.quit_update)
}
export const onUpdateAvailable = (listener: LX.IpcRendererEventListenerParams<UpdateInfo>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.update_available, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.update_available, listener)
}
}
export const onUpdateError = (listener: LX.IpcRendererEventListenerParams<string>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.update_error, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.update_error, listener)
}
}
export const onUpdateProgress = (listener: LX.IpcRendererEventListenerParams<ProgressInfo>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.update_progress, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.update_progress, listener)
}
}
export const onUpdateDownloaded = (listener: LX.IpcRendererEventListenerParams<UpdateDownloadedEvent>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.update_downloaded, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.update_downloaded, listener)
}
}
export const onUpdateNotAvailable = (listener: LX.IpcRendererEventListenerParams<UpdateInfo>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.update_not_available, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.update_not_available, listener)
}
}
export const importUserApi = async(fileText: string) => {
return rendererInvoke<string, LX.UserApi.ImportUserApi>(WIN_MAIN_RENDERER_EVENT_NAME.import_user_api, fileText)
}
export const setUserApi = async(source: LX.UserApi.UserApiSetApiParams): Promise<void> => {
return rendererInvoke<LX.UserApi.UserApiSetApiParams>(WIN_MAIN_RENDERER_EVENT_NAME.set_user_api, source)
}
export const removeUserApi = async(ids: string[]) => {
return rendererInvoke<string[], LX.UserApi.UserApiInfo[]>(WIN_MAIN_RENDERER_EVENT_NAME.remove_user_api, ids)
}
export const onShowUserApiUpdateAlert = (listener: LX.IpcRendererEventListenerParams<LX.UserApi.UserApiUpdateInfo>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.user_api_show_update_alert, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.user_api_show_update_alert, listener)
}
}
export const setAllowShowUserApiUpdateAlert = async(id: string, enable: boolean): Promise<void> => {
return rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.user_api_set_allow_update_alert, { id, enable })
}
export const onUserApiStatus = (listener: LX.IpcRendererEventListenerParams<LX.UserApi.UserApiStatus>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.user_api_status, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.user_api_status, listener)
}
}
export const getUserApiList = async() => {
return rendererInvoke<LX.UserApi.UserApiInfo[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_user_api_list)
}
export const sendUserApiRequest = async({ requestKey, data }: LX.UserApi.UserApiRequestParams): Promise<any> => {
return rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.request_user_api, {
requestKey,
data,
})
}
export const userApiRequestCancel = (requestKey: LX.UserApi.UserApiRequestCancelParams) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.request_user_api_cancel, requestKey)
}
// export const setDesktopLyricInfo = (type, data, info) => {
// rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.set_lyric_info, {
// type,
// data,
// info,
// })
// }
// export const onGetDesktopLyricInfo = callback => {
// rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.get_lyric_info, callback)
// return () => {
// rendererOff(callback)
// }
// }
export const setTaskBarProgress = (progress: number, mode?: Electron.ProgressBarOptions['mode']) => {
rendererSend<LX.Player.ProgressBarOptions>(WIN_MAIN_RENDERER_EVENT_NAME.progress, {
progress: progress < 0 ? progress : Math.max(0.01, progress),
mode: mode ?? 'normal',
})
}
export const saveLastStartInfo = (version: string) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.lastStartInfo,
data: version,
})
}
// 获取最后一次启动时的版本号
export const getLastStartInfo = async() => {
return rendererInvoke<string, string | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.lastStartInfo)
}
export const savePlayInfo = (playInfo: LX.Player.SavedPlayInfo) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.playInfo,
data: playInfo,
})
}
// 获取上次关闭时的当前歌曲播放信息
export const getPlayInfo = async() => {
return rendererInvoke<string, LX.Player.SavedPlayInfo | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.playInfo)
}
export const saveSearchHistoryList = (list: LX.List.SearchHistoryList) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.searchHistoryList,
data: list,
})
}
// 获取搜索历史列表
export const getSearchHistoryList = async() => {
return rendererInvoke<string, string[] | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.searchHistoryList)
}
export const saveListPositionInfo = (listPosition: LX.List.ListPositionInfo) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.listScrollPosition,
data: listPosition,
})
}
// 获取搜索历史列表
export const getListPositionInfo = async() => {
return rendererInvoke<string, LX.List.ListPositionInfo | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.listScrollPosition)
}
export const saveListPrevSelectId = (listPosition: string | null) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.listPrevSelectId,
data: listPosition,
})
}
// 获取上一次选中的列表id
export const getListPrevSelectId = async() => {
return rendererInvoke<string, string | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.listPrevSelectId)
}
export const saveListUpdateInfo = (listPosition: LX.List.ListUpdateInfo) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.listUpdateInfo,
data: listPosition,
})
}
// 获取列表更新记录
export const getListUpdateInfo = async() => {
return rendererInvoke<string, LX.List.ListUpdateInfo | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.listUpdateInfo)
}
export const saveIgnoreVersion = (version: string) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.ignoreVersion,
data: version,
})
}
// 获取忽略更新的版本号
export const getIgnoreVersion = async() => {
return rendererInvoke<string, string | null>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.ignoreVersion)
}
export const saveLeaderboardSetting = (source: typeof DEFAULT_SETTING['leaderboard']) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.leaderboardSetting,
data: source,
})
}
export const getLeaderboardSetting = async() => {
return (await rendererInvoke<string, typeof DEFAULT_SETTING['leaderboard']>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.leaderboardSetting)) ?? { ...DEFAULT_SETTING.leaderboard }
}
export const saveSongListSetting = (setting: typeof DEFAULT_SETTING['songList']) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.songListSetting,
data: setting,
})
}
export const getSongListSetting = async() => {
return (await rendererInvoke<string, typeof DEFAULT_SETTING['songList']>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.songListSetting)) ?? { ...DEFAULT_SETTING.songList }
}
export const saveSearchSetting = (setting: typeof DEFAULT_SETTING['search']) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.searchSetting,
data: setting,
})
}
export const getSearchSetting = async() => {
return (await rendererInvoke<string, typeof DEFAULT_SETTING['search']>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.searchSetting)) ?? { ...DEFAULT_SETTING.search }
}
export const saveViewPrevState = (state: typeof DEFAULT_SETTING['viewPrevState']) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_data, {
path: DATA_KEYS.viewPrevState,
data: state,
})
}
export const getViewPrevState = async() => {
return (await rendererInvoke<string, typeof DEFAULT_SETTING['viewPrevState']>(WIN_MAIN_RENDERER_EVENT_NAME.get_data, DATA_KEYS.viewPrevState)) ?? { ...DEFAULT_SETTING.viewPrevState }
}
export const getSystemFonts = async() => {
return rendererInvoke<string[]>(CMMON_EVENT_NAME.get_system_fonts).catch(() => {
return []
})
}
export const getUserSoundEffectEQPresetList = async() => {
return rendererInvoke<LX.SoundEffect.EQPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_eq_preset)
}
export const saveUserSoundEffectEQPresetList = (list: LX.SoundEffect.EQPreset[]) => {
rendererSend<LX.SoundEffect.EQPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_eq_preset, list)
}
export const getUserSoundEffectConvolutionPresetList = async() => {
return rendererInvoke<LX.SoundEffect.ConvolutionPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_convolution_preset)
}
export const saveUserSoundEffectConvolutionPresetList = (list: LX.SoundEffect.ConvolutionPreset[]) => {
rendererSend<LX.SoundEffect.ConvolutionPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_convolution_preset, list)
}
// export const getUserSoundEffectPitchShifterPresetList = async() => {
// return rendererInvoke<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_pitch_shifter_preset)
// }
// export const saveUserSoundEffectPitchShifterPresetList = (list: LX.SoundEffect.PitchShifterPreset[]) => {
// rendererSend<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_pitch_shifter_preset, list)
// }
export const allHotKeys = markRaw({
local: [
{
name: hotKeys.HOTKEY_PLAYER.toggle_play.name,
action: hotKeys.HOTKEY_PLAYER.toggle_play.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.prev.name,
action: hotKeys.HOTKEY_PLAYER.prev.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.next.name,
action: hotKeys.HOTKEY_PLAYER.next.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.music_dislike.name,
action: hotKeys.HOTKEY_PLAYER.music_dislike.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_COMMON.focusSearchInput.name,
action: hotKeys.HOTKEY_COMMON.focusSearchInput.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_COMMON.min.name,
action: hotKeys.HOTKEY_COMMON.min.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_COMMON.close.name,
action: hotKeys.HOTKEY_COMMON.close.action,
type: APP_EVENT_NAMES.winMainName,
},
],
global: [
{
name: hotKeys.HOTKEY_COMMON.min_toggle.name,
action: hotKeys.HOTKEY_COMMON.min_toggle.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_COMMON.hide_toggle.name,
action: hotKeys.HOTKEY_COMMON.hide_toggle.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_COMMON.close.name,
action: hotKeys.HOTKEY_COMMON.close.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.toggle_play.name,
action: hotKeys.HOTKEY_PLAYER.toggle_play.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.prev.name,
action: hotKeys.HOTKEY_PLAYER.prev.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.next.name,
action: hotKeys.HOTKEY_PLAYER.next.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.volume_up.name,
action: hotKeys.HOTKEY_PLAYER.volume_up.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.volume_down.name,
action: hotKeys.HOTKEY_PLAYER.volume_down.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.volume_mute.name,
action: hotKeys.HOTKEY_PLAYER.volume_mute.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.music_love.name,
action: hotKeys.HOTKEY_PLAYER.music_love.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.music_unlove.name,
action: hotKeys.HOTKEY_PLAYER.music_unlove.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_PLAYER.music_dislike.name,
action: hotKeys.HOTKEY_PLAYER.music_dislike.action,
type: APP_EVENT_NAMES.winMainName,
},
{
name: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_visible.name,
action: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_visible.action,
type: APP_EVENT_NAMES.winLyricName,
},
{
name: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_lock.name,
action: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_lock.action,
type: APP_EVENT_NAMES.winLyricName,
},
{
name: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_always_top.name,
action: hotKeys.HOTKEY_DESKTOP_LYRIC.toggle_always_top.action,
type: APP_EVENT_NAMES.winLyricName,
},
],
})
export const hotKeySetEnable = async(enable: boolean) => {
return rendererInvoke(HOTKEY_RENDERER_EVENT_NAME.enable, enable)
}
export const hotKeySetConfig = async(config: LX.HotKeyActions) => {
return rendererInvoke(HOTKEY_RENDERER_EVENT_NAME.set_config, config)
}
export const hotKeyGetStatus = async() => {
return rendererInvoke<LX.HotKeyState>(HOTKEY_RENDERER_EVENT_NAME.status)
}
// 主进程操作播放器状态
export const onPlayerAction = (listener: LX.IpcRendererEventListenerParams<LX.Player.StatusButtonActions>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, listener)
}
}
// export const setTaskbarThumbnailClip = async(clip: Electron.Rectangle) => {
// await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.taskbar_set_thumbnail_clip, clip)
// }
// 播放器状态更新 通知主进程
export const setPlayerAction = (buttons: LX.TaskBarButtonFlags) => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.player_action_set_buttons, buttons)
}
/**
* On Theme Change
* @param listener LX.IpcRendererEventListenerParams<shouldUseDarkColors: boolean>
* @returns RemoveListener Fn
*/
export const onThemeChange = (listener: LX.IpcRendererEventListenerParams<LX.ThemeSetting>): RemoveListener => {
rendererOn(CMMON_EVENT_NAME.theme_change, listener)
return () => {
rendererOff(CMMON_EVENT_NAME.theme_change, listener)
}
}
/**
* 选择路径
*/
export const showSelectDialog = async(options: Electron.OpenDialogOptions) => {
return rendererInvoke<Electron.OpenDialogOptions, Electron.OpenDialogReturnValue>(WIN_MAIN_RENDERER_EVENT_NAME.show_select_dialog, options)
}
/**
* 打开保存对话框
*/
export const openSaveDir = async(options: Electron.SaveDialogOptions) => {
return rendererInvoke<Electron.SaveDialogOptions, Electron.SaveDialogReturnValue>(WIN_MAIN_RENDERER_EVENT_NAME.show_save_dialog, options)
}
/**
* 获取缓存大小
*/
export const getCacheSize = async() => {
return rendererInvoke<number>(WIN_MAIN_RENDERER_EVENT_NAME.get_cache_size)
}
/**
* 清除缓存
*/
export const clearCache = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_cache)
}
/**
* 设置窗口大小
* @param {*} width
* @param {*} height
*/
export const setWindowSize = (width: number, height: number) => {
const params: Partial<Electron.Rectangle> = {
width,
height,
}
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.set_window_size, params)
}
export const getPlayerLyric = async(musicInfo: LX.Music.MusicInfo) => {
return rendererInvoke<string, LX.Player.LyricInfo>(WIN_MAIN_RENDERER_EVENT_NAME.get_palyer_lyric, musicInfo.id)
}
export const getLyricRaw = async(musicInfo: LX.Music.MusicInfo): Promise<LX.Music.LyricInfo> => {
return rendererInvoke<string, LX.Music.LyricInfo>(WIN_MAIN_RENDERER_EVENT_NAME.get_lyric_raw, musicInfo.id)
}
export const clearLyricRaw = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_lyric_raw)
}
export const getLyricRawCount = async() => {
return rendererInvoke<number>(WIN_MAIN_RENDERER_EVENT_NAME.get_lyric_raw_count)
}
export const getLyricEdited = async(musicInfo: LX.Music.MusicInfo): Promise<LX.Music.LyricInfo> => {
return rendererInvoke<string, LX.Music.LyricInfo>(WIN_MAIN_RENDERER_EVENT_NAME.get_lyric_edited, musicInfo.id)
}
export const saveLyric = async(musicInfo: LX.Music.MusicInfo, lyricInfo: LX.Music.LyricInfo | LX.Player.LyricInfo) => {
// console.log(musicInfo)
if ('rawlrcInfo' in lyricInfo) {
const { rawlrcInfo, ...info } = lyricInfo
const tasks = [
rendererInvoke<LX.Music.LyricInfoSave>(WIN_MAIN_RENDERER_EVENT_NAME.save_lyric_raw, {
id: musicInfo.id,
lyrics: rawlrcInfo,
}),
]
if (info.lyric != rawlrcInfo.lyric) {
tasks.push(rendererInvoke<LX.Music.LyricInfoSave>(WIN_MAIN_RENDERER_EVENT_NAME.save_lyric_edited, {
id: musicInfo.id,
lyrics: info,
}))
}
console.log(tasks)
await Promise.all(tasks)
} else {
await rendererInvoke<LX.Music.LyricInfoSave>(WIN_MAIN_RENDERER_EVENT_NAME.save_lyric_raw, {
id: musicInfo.id,
lyrics: lyricInfo,
})
}
}
export const saveLyricEdited = async(musicInfo: LX.Music.MusicInfo, lyricInfo: LX.Music.LyricInfo) => {
await rendererInvoke<LX.Music.LyricInfoSave>(WIN_MAIN_RENDERER_EVENT_NAME.save_lyric_edited, {
id: musicInfo.id,
lyrics: lyricInfo,
})
}
export const removeLyricEdited = async(musicInfo: LX.Music.MusicInfo) => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.remove_lyric_edited, musicInfo.id)
}
export const clearLyric = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_lyric_raw)
}
export const clearLyricEdited = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_lyric_edited)
}
export const getLyricEditedCount = async() => {
return rendererInvoke<number>(WIN_MAIN_RENDERER_EVENT_NAME.get_lyric_edited_count)
}
export const saveTheme = async(theme: LX.Theme) => {
return rendererInvoke<LX.Theme>(WIN_MAIN_RENDERER_EVENT_NAME.save_theme, theme)
}
export const removeTheme = async(id: string) => {
return rendererInvoke<string>(WIN_MAIN_RENDERER_EVENT_NAME.remove_theme, id)
}
export const getThemes = async() => {
return rendererInvoke<{ themes: LX.Theme[], userThemes: LX.Theme[], dataPath: string }>(WIN_MAIN_RENDERER_EVENT_NAME.get_themes)
}
/**
* 从缓存获取歌曲URL
* @param musicInfo 歌曲信息
* @param type URL音质
* @returns
*/
export const getMusicUrl = async(musicInfo: LX.Music.MusicInfo, type: LX.Quality): Promise<string> => {
return rendererInvoke<string, string>(WIN_MAIN_RENDERER_EVENT_NAME.get_music_url, `${musicInfo.id}_${type}`)
}
/**
* 缓存歌曲URL
* @param musicInfo 歌曲信息
* @param type URL音质
* @param url 歌曲URL
*/
export const saveMusicUrl = async(musicInfo: LX.Music.MusicInfo, type: LX.Quality, url: string) => {
await rendererInvoke<LX.Music.MusicUrlInfo>(WIN_MAIN_RENDERER_EVENT_NAME.save_music_url, {
id: `${musicInfo.id}_${type}`,
url,
})
}
/**
* 清理所有缓存的歌曲URL
*/
export const clearMusicUrl = async() => {
await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.clear_music_url)
}
export const getMusicUrlCount = async() => {
return rendererInvoke<number>(WIN_MAIN_RENDERER_EVENT_NAME.get_music_url_count)
}
/**
* 退出应用
*/
export const quitApp = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.quit)
}
/**
* 关闭窗口
*/
export const closeWindow = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.close)
}
/**
* 最小化窗口
*/
export const minWindow = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.min)
}
/**
* 最大化窗口
*/
export const maxWindow = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.max)
}
/**
* 最小化、最大化窗口切换
*/
export const minMaxWindowToggle = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.min_toggle)
}
/**
* 显示、隐藏窗口切换
*/
export const showHideWindowToggle = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.hide_toggle)
}
/**
* 聚焦窗口
*/
export const focusWindow = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.focus)
}
/**
* 窗口获取焦点事件
* @param listener
* @returns
*/
export const onFocus = (listener: LX.IpcRendererEventListener): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.focus, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.focus, listener)
}
}
/**
* 快捷键触发事件
* @param listener
* @returns
*/
export const onKeyDown = (listener: LX.IpcRendererEventListenerParams<LX.HotKeyEvent>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.key_down, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.key_down, listener)
}
}
/**
* 快捷键设置更新事件
* @param listener
* @returns
*/
export const onUpdateHotkey = (listener: LX.IpcRendererEventListenerParams<LX.HotKeyConfigAll>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.set_hot_key_config, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.set_hot_key_config, listener)
}
}
/**
* 设置全屏
* @param isFullscreen 是否全屏
* @returns
*/
export const setFullScreen = async(isFullscreen: boolean): Promise<boolean> => {
return rendererInvoke<boolean, boolean>(WIN_MAIN_RENDERER_EVENT_NAME.fullscreen, isFullscreen)
}
/**
* 打开开发者工具
* @returns
*/
export const openDevTools = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.open_dev_tools)
}
/**
* 接收同步事件
* @param listener
* @returns
*/
export const onSyncAction = (listener: LX.IpcRendererEventListenerParams<LX.Sync.SyncMainWindowActions>): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.sync_action, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.sync_action, listener)
}
}
/**
* 发送同步事件
* @param action
* @returns
*/
export const sendSyncAction = async(action: LX.Sync.SyncServiceActions) => {
return rendererInvoke<LX.Sync.SyncServiceActions>(WIN_MAIN_RENDERER_EVENT_NAME.sync_action, action)
}
/**
* 获取同步服务端连接设备历史列表
* @returns
*/
export const getSyncServerDevices = () => {
return rendererInvoke<LX.Sync.ServerDevices>(WIN_MAIN_RENDERER_EVENT_NAME.sync_get_server_devices)
}
/**
* 移除同步服务端连接设备
* @returns
*/
export const removeSyncServerDevice = (clientId: string) => {
return rendererInvoke<string>(WIN_MAIN_RENDERER_EVENT_NAME.sync_remove_server_device, clientId)
}
// export const refreshSyncCode = async(): Promise<string> => {
// return rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.sync_generate_code)
// }
// export const onSyncStatus = (listener: LX.IpcRendererEventListenerParams<LX.Sync.Status>): RemoveListener => {
// rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.sync_status, listener)
// return () => {
// rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.sync_status, listener)
// }
// }
/**
* 桌面歌词进程创建事件
* @param listener
* @returns
*/
export const onNewDesktopLyricProcess = (listener: LX.IpcRendererEventListener): RemoveListener => {
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.process_new_desktop_lyric_client, listener)
return () => {
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.process_new_desktop_lyric_client, listener)
}
}
export const downloadTasksGet = async() => {
return rendererInvoke<LX.Download.ListItem[]>(WIN_MAIN_RENDERER_EVENT_NAME.download_list_get)
}
export const downloadTasksCreate = async(list: LX.Download.ListItem[], addMusicLocationType: LX.AddMusicLocationType) => {
return rendererInvoke<LX.Download.saveDownloadMusicInfo>(WIN_MAIN_RENDERER_EVENT_NAME.download_list_add, {
list,
addMusicLocationType,
})
}
export const downloadTasksUpdate = async(list: LX.Download.ListItem[]) => {
return rendererInvoke<LX.Download.ListItem[]>(WIN_MAIN_RENDERER_EVENT_NAME.download_list_update, list)
}
export const downloadTasksRemove = async(ids: string[]) => {
return rendererInvoke<string[]>(WIN_MAIN_RENDERER_EVENT_NAME.download_list_remove, ids)
}
export const downloadListClear = async() => {
return rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.download_list_clear)
}