lx-music-desktop/src/renderer/core/useApp/useDataInit.js

163 lines
5.0 KiB
JavaScript

import { useCommit, useRefGetter } from '@renderer/utils/vueTools'
import { getPlayList } from '@renderer/utils'
import { getPlayInfo, getSearchHistoryList } from '@renderer/utils/tools'
import { initListPosition, initListPrevSelectId } from '@renderer/utils/data'
import music from '@renderer/utils/music'
import { log } from '@common/utils'
import {
defaultList as stateDefaultList,
loveList as stateloveList,
userLists as stateUserLists,
tempList as stateTempList,
} from '@renderer/core/share/list'
import { getList } from '@renderer/core/share/utils'
import { downloadStatus, downloadList } from '@renderer/core/share/download'
import useSaveData from './useSaveData'
import useInitUserApi from './useInitUserApi'
const useListInit = ({
saveMyListThrottle,
}) => {
const initList = useCommit('list', 'initList')
const updateDownloadList = useCommit('download', 'initDownloadList')
const initMyList = ({ defaultList, loveList, userList, tempList }) => {
if (!defaultList) defaultList = { ...stateDefaultList }
if (!loveList) loveList = { ...stateloveList }
if (!tempList) tempList = { ...stateTempList }
if (userList) {
let needSave = false
const getListId = id => id.includes('.') ? getListId(id.substring(0, id.lastIndexOf('_'))) : id
userList.forEach(l => {
if (!l.id.includes('__') || l.source) return
let [source, id] = l.id.split('__')
id = getListId(id)
l.source = source
l.sourceListId = id
if (!needSave) needSave = true
})
if (needSave) saveMyListThrottle({ userList })
} else {
userList = [...stateUserLists]
}
if (!defaultList.list) defaultList.list = []
if (!loveList.list) loveList.list = []
if (!tempList.list) tempList.list = []
initList({ defaultList, loveList, userList, tempList })
}
const initDownloadList = list => {
if (list) {
list = list.filter(item => item?.key)
for (const item of list) {
if (item.status == downloadStatus.RUN || item.status == downloadStatus.WAITING) {
item.status = downloadStatus.PAUSE
item.statusText = '暂停下载'
}
if (!item.metadata) { // 转换v1.15.3及以前的任务信息
if (item.name == null) {
item.name = `${item.musicInfo.name} - ${item.musicInfo.singer}`
item.songmid = item.musicInfo.songmid
}
item.metadata = {
musicInfo: item.musicInfo,
url: item.url,
type: item.type,
ext: item.ext,
fileName: item.fileName,
filePath: item.filePath,
}
delete item.musicInfo
delete item.url
delete item.type
delete item.ext
delete item.fileName
delete item.filePath
}
}
updateDownloadList(list)
}
}
return () => {
return getPlayList().then(({ defaultList, loveList, userList, tempList, downloadList }) => {
initMyList({ defaultList, loveList, userList, tempList })
initDownloadList(downloadList) // 初始化下载列表
})
}
}
const usePlayInfoInit = () => {
const setPlayList = useCommit('player', 'setList')
return downloadList => {
return getPlayInfo().then(info => {
window.restorePlayInfo = null
if (!info?.listId || info.index < 0) return
const list = getList(info.listId)
if (!list || !list[info.index]) return
window.restorePlayInfo = info
setPlayList({
listId: info.listId,
index: info.index,
})
})
}
}
const useSearchHistoryInit = () => {
const setSearchHistoryList = useCommit('search', 'setHistory')
return saveSearchHistoryListThrottle => {
return getSearchHistoryList().then(historyList => {
if (historyList == null) {
historyList = []
saveSearchHistoryListThrottle(historyList)
} else {
setSearchHistoryList(historyList)
}
})
}
}
export default ({
setting,
}) => {
const searchHistoryList = useRefGetter('search', 'historyList')
// 数据保存初始化
const { saveMyListThrottle, saveSearchHistoryListThrottle } = useSaveData({
setting,
searchHistoryList,
})
const initUserApi = useInitUserApi({ setting })
// 列表初始化
const initList = useListInit({
saveMyListThrottle,
})
// 播放信息初始化
const initPlayInfo = usePlayInfoInit()
// 搜索历史初始化
const initSearchHistory = useSearchHistoryInit()
return async() => {
await Promise.all([
initListPosition(), // 列表位置记录
initListPrevSelectId(), // 上次选中的列表记录
initUserApi(), // 自定义API
]).catch(err => log.error(err))
music.init() // 初始化音乐sdk
await initList().catch(err => log.error(err)) // 初始化列表
await initPlayInfo(downloadList.value).catch(err => log.error(err)) // 初始化上次的歌曲播放信息
await initSearchHistory(saveSearchHistoryListThrottle).catch(err => log.error(err)) // 初始化搜索历史记录
}
}