163 lines
5.0 KiB
JavaScript
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)) // 初始化搜索历史记录
|
|
}
|
|
}
|