新增自定义列表
This commit is contained in:
@@ -1,23 +1,43 @@
|
||||
let allList = {}
|
||||
window.allList = allList
|
||||
|
||||
const allListInit = (defaultList, loveList, userList) => {
|
||||
allList[defaultList.id] = defaultList
|
||||
allList[loveList.id] = loveList
|
||||
for (const list of userList) allList[list.id] = list
|
||||
}
|
||||
const allListUpdate = list => {
|
||||
allList[list.id] = list
|
||||
}
|
||||
const allListRemove = list => {
|
||||
delete allList[list.id]
|
||||
}
|
||||
|
||||
// state
|
||||
const state = {
|
||||
isInitedList: false,
|
||||
defaultList: {
|
||||
id: 'default',
|
||||
name: '试听列表',
|
||||
list: [],
|
||||
location: 0,
|
||||
},
|
||||
loveList: {
|
||||
id: 'love',
|
||||
name: '我的收藏',
|
||||
list: [],
|
||||
location: 0,
|
||||
},
|
||||
userList: [],
|
||||
}
|
||||
|
||||
// getters
|
||||
const getters = {
|
||||
isInitedList: state => state.isInitedList,
|
||||
defaultList: state => state.defaultList || {},
|
||||
loveList: state => state.loveList || {},
|
||||
userList: state => state.userList,
|
||||
allList: () => allList,
|
||||
}
|
||||
|
||||
// actions
|
||||
@@ -25,73 +45,118 @@ const actions = {
|
||||
|
||||
}
|
||||
|
||||
const getList = (state, id) => {
|
||||
let targetList
|
||||
switch (id) {
|
||||
case 'default':
|
||||
targetList = state.defaultList
|
||||
break
|
||||
case 'love':
|
||||
targetList = state.loveList
|
||||
break
|
||||
default:
|
||||
targetList = state.userList.find(l => l.id === id)
|
||||
break
|
||||
}
|
||||
return targetList
|
||||
}
|
||||
|
||||
// mitations
|
||||
const mutations = {
|
||||
initList(state, { defaultList, loveList }) {
|
||||
if (defaultList !== undefined) state.defaultList.list = defaultList.list
|
||||
if (loveList !== undefined) state.loveList.list = loveList.list
|
||||
initList(state, { defaultList, loveList, userList }) {
|
||||
if (defaultList != null) state.defaultList.list = defaultList.list
|
||||
if (loveList != null) state.loveList.list = loveList.list
|
||||
if (userList != null) state.userList = userList
|
||||
allListInit(state.defaultList, state.loveList, state.userList)
|
||||
state.isInitedList = true
|
||||
},
|
||||
setList(state, { id, list }) {
|
||||
const targetList = getList(state, id)
|
||||
if (!targetList) return
|
||||
targetList.list = list
|
||||
setList(state, { id, list, name, location }) {
|
||||
const targetList = allList[id]
|
||||
if (targetList) {
|
||||
if (name && targetList.name === name) {
|
||||
targetList.list.splice(0, targetList.list.length, ...list)
|
||||
targetList.location = location
|
||||
return
|
||||
}
|
||||
|
||||
id += '_' + Math.random()
|
||||
}
|
||||
let newList = {
|
||||
name,
|
||||
id,
|
||||
list,
|
||||
location,
|
||||
}
|
||||
state.userList.push(newList)
|
||||
allListUpdate(newList)
|
||||
},
|
||||
listAdd(state, { id, musicInfo }) {
|
||||
const targetList = getList(state, id)
|
||||
const targetList = allList[id]
|
||||
if (!targetList) return
|
||||
if (targetList.list.some(s => s.songmid === musicInfo.songmid)) return
|
||||
targetList.list.push(musicInfo)
|
||||
},
|
||||
listAddMultiple(state, { id, list }) {
|
||||
let targetList = getList(state, id)
|
||||
let targetList = allList[id]
|
||||
if (!targetList) return
|
||||
targetList = targetList.list
|
||||
list.forEach(musicInfo => {
|
||||
if (targetList.some(s => s.songmid === musicInfo.songmid)) return
|
||||
targetList.push(musicInfo)
|
||||
})
|
||||
let newList = [...targetList.list, ...list]
|
||||
let map = {}
|
||||
let ids = []
|
||||
for (const item of newList) {
|
||||
if (map[item.songmid]) continue
|
||||
ids.push(item.songmid)
|
||||
map[item.songmid] = item
|
||||
}
|
||||
targetList.list.splice(0, targetList.list.length, ...ids.map(id => map[id]))
|
||||
},
|
||||
listRemove(state, { id, index }) {
|
||||
let targetList = getList(state, id)
|
||||
let targetList = allList[id]
|
||||
if (!targetList) return
|
||||
targetList.list.splice(index, 1)
|
||||
},
|
||||
listRemoveMultiple(state, { id, list }) {
|
||||
let targetList = getList(state, id)
|
||||
let targetList = allList[id]
|
||||
if (!targetList) return
|
||||
targetList = targetList.list
|
||||
list.forEach(musicInfo => {
|
||||
let index = targetList.indexOf(musicInfo)
|
||||
if (index < 0) return
|
||||
targetList.splice(index, 1)
|
||||
})
|
||||
let map = {}
|
||||
let ids = []
|
||||
for (const item of targetList.list) {
|
||||
ids.push(item.songmid)
|
||||
map[item.songmid] = item
|
||||
}
|
||||
for (const item of list) {
|
||||
if (map[item.songmid]) delete map[item.songmid]
|
||||
}
|
||||
let newList = []
|
||||
for (const id of ids) if (map[id]) newList.push(map[id])
|
||||
|
||||
targetList.list.splice(0, targetList.list.length, ...newList)
|
||||
},
|
||||
listClear(state, id) {
|
||||
let targetList = getList(state, id)
|
||||
let targetList = allList[id]
|
||||
if (!targetList) return
|
||||
targetList.list.length = []
|
||||
targetList.list.splice(0, targetList.list.length)
|
||||
},
|
||||
updateMusicInfo(state, { id, index, data }) {
|
||||
let targetList = getList(state, id)
|
||||
let targetList = allList[id]
|
||||
if (!targetList) return
|
||||
Object.assign(targetList.list[index], data)
|
||||
},
|
||||
createUserList(state, name) {
|
||||
let newList = {
|
||||
name,
|
||||
id: `userlist_${Date.now()}`,
|
||||
list: [],
|
||||
location: 0,
|
||||
}
|
||||
state.userList.push(newList)
|
||||
allListUpdate(newList)
|
||||
},
|
||||
removeUserList(state, index) {
|
||||
let list = state.userList.splice(index, 1)[0]
|
||||
allListRemove(list)
|
||||
},
|
||||
setUserListName(state, { index, name }) {
|
||||
let list = state.userList[index]
|
||||
if (!list) return
|
||||
list.name = name
|
||||
},
|
||||
moveupUserList(state, index) {
|
||||
let targetList = state.userList[index]
|
||||
state.userList.splice(index, 1)
|
||||
state.userList.splice(index - 1, 0, targetList)
|
||||
},
|
||||
movedownUserList(state, index) {
|
||||
let targetList = state.userList[index]
|
||||
state.userList.splice(index, 1)
|
||||
state.userList.splice(index + 1, 0, targetList)
|
||||
},
|
||||
setListScroll(state, { id, location }) {
|
||||
if (allList[id]) allList[id].location = location
|
||||
},
|
||||
}
|
||||
|
||||
export default {
|
||||
|
||||
@@ -2,8 +2,10 @@ import music from '../../utils/music'
|
||||
|
||||
// state
|
||||
const state = {
|
||||
list: [],
|
||||
listId: null,
|
||||
listInfo: {
|
||||
list: [],
|
||||
id: null,
|
||||
},
|
||||
playIndex: -1,
|
||||
changePlay: false,
|
||||
isShowPlayerDetail: false,
|
||||
@@ -15,8 +17,8 @@ let lrcRequest
|
||||
|
||||
// getters
|
||||
const getters = {
|
||||
list: state => state.list || [],
|
||||
listId: state => state.listId,
|
||||
list: state => state.listInfo.list,
|
||||
listId: state => state.listInfo.id,
|
||||
changePlay: satte => satte.changePlay,
|
||||
playIndex: state => state.playIndex,
|
||||
isShowPlayerDetail: state => state.isShowPlayerDetail,
|
||||
@@ -78,9 +80,8 @@ const mutations = {
|
||||
setLrc(state, datas) {
|
||||
datas.musicInfo.lrc = datas.lrc
|
||||
},
|
||||
setList(state, { list, listId, index }) {
|
||||
state.list = list
|
||||
state.listId = listId
|
||||
setList(state, { list, index }) {
|
||||
state.listInfo = list
|
||||
state.playIndex = index
|
||||
state.changePlay = true
|
||||
},
|
||||
|
||||
@@ -24,9 +24,6 @@ export default {
|
||||
if (sortId != null) state.setting.songList.sortId = sortId
|
||||
if (source != null) state.setting.songList.source = source
|
||||
},
|
||||
setListScroll(state, { id, location }) {
|
||||
state.setting.list.scroll.locations[id] = location
|
||||
},
|
||||
setNewVersion(state, val) {
|
||||
state.version.newVersion = val
|
||||
},
|
||||
@@ -51,4 +48,7 @@ export default {
|
||||
setMediaDeviceId(state, val) {
|
||||
state.setting.player.mediaDeviceId = val
|
||||
},
|
||||
setPrevSelectListId(state, val) {
|
||||
state.setting.list.prevSelectListId = val
|
||||
},
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ const electronStore_list = window.electronStore_list = new Store({
|
||||
const electronStore_config = window.electronStore_config = new Store({
|
||||
name: 'config',
|
||||
})
|
||||
if (!electronStore_config.get('version') && electronStore_config.get('setting')) { // 迁移配置
|
||||
let setting = electronStore_config.get('setting')
|
||||
if (!electronStore_config.get('version') && setting) { // 迁移配置
|
||||
electronStore_config.set('version', electronStore_config.get('setting.version'))
|
||||
electronStore_config.delete('setting.version')
|
||||
const list = electronStore_config.get('list')
|
||||
@@ -25,7 +26,20 @@ if (!electronStore_config.get('version') && electronStore_config.get('setting'))
|
||||
electronStore_config.delete('download')
|
||||
}
|
||||
}
|
||||
const { version: settingVersion, setting } = updateSetting(electronStore_config.get('setting'), electronStore_config.get('version'))
|
||||
|
||||
// 迁移列表滚动位置设置 ^0.18.3
|
||||
if (setting && setting.list.scroll) {
|
||||
let scroll = setting.list.scroll
|
||||
const electronStore_list = window.electronStore_list = new Store({
|
||||
name: 'playList',
|
||||
})
|
||||
electronStore_list.set('defaultList.location', scroll.locations.defaultList || 0)
|
||||
electronStore_list.set('loveList.location', scroll.locations.loveList || 0)
|
||||
electronStore_config.delete('setting.list.scroll')
|
||||
electronStore_config.set('setting.list.isSaveScrollLocation', scroll.enable)
|
||||
}
|
||||
|
||||
const { version: settingVersion, setting: newSetting } = updateSetting(setting, electronStore_config.get('version'))
|
||||
electronStore_config.set('version', settingVersion)
|
||||
electronStore_config.set('setting', setting)
|
||||
process.versions.app = version
|
||||
@@ -108,7 +122,7 @@ export default {
|
||||
downloadProgress: null,
|
||||
},
|
||||
userInfo: null,
|
||||
setting,
|
||||
setting: newSetting,
|
||||
settingVersion,
|
||||
|
||||
windowSizeList,
|
||||
|
||||
Reference in New Issue
Block a user