From 18b6f73008e8b4f051e4553cee24f35c4d8d0767 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 30 Dec 2022 13:24:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=A4=87=E4=BB=BD=E6=97=B6?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=AD=8C=E6=9B=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/utils/migrate.ts | 20 +++++++++++++------ src/renderer/utils/index.ts | 8 ++++++++ src/renderer/views/List/MyList/useShare.ts | 4 ++-- .../Setting/components/SettingBackup.vue | 9 +++++---- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/utils/migrate.ts b/src/main/utils/migrate.ts index 56dd127f..f1cf9e18 100644 --- a/src/main/utils/migrate.ts +++ b/src/main/utils/migrate.ts @@ -28,6 +28,14 @@ interface OldUserListInfo { locationUpdateTime?: number list: any[] } +const filterMusicList = (list: T[]): T[] => { + const ids: Set = new Set() + return list.filter(s => { + if (!s.id || ids.has(s.id)) return false + ids.add(s.id) + return true + }) +} /** * 迁移 v2.0.0 之前的 list data * @returns @@ -42,15 +50,15 @@ export const migrateDBData = async() => { } let isRequiredSave = false if (playList) { - if (playList.defaultList) listDataAll.defaultList = playList.defaultList.list.map(m => toNewMusicInfo(m)) - if (playList.loveList) listDataAll.loveList = playList.loveList.list.map(m => toNewMusicInfo(m)) - if (playList.tempList) listDataAll.tempList = playList.tempList.list.map(m => toNewMusicInfo(m)) + if (playList.defaultList) listDataAll.defaultList = filterMusicList(playList.defaultList.list.map(m => toNewMusicInfo(m))) + if (playList.loveList) listDataAll.loveList = filterMusicList(playList.loveList.list.map(m => toNewMusicInfo(m))) + if (playList.tempList) listDataAll.tempList = filterMusicList(playList.tempList.list.map(m => toNewMusicInfo(m))) if (playList.userList) { listDataAll.userList = playList.userList.map(l => { return { ...l, locationUpdateTime: l.locationUpdateTime ?? null, - list: l.list.map(m => toNewMusicInfo(m)), + list: filterMusicList(l.list.map(m => toNewMusicInfo(m))), } }) } @@ -59,8 +67,8 @@ export const migrateDBData = async() => { const config = await parseDataFile<{ list?: { defaultList?: any[], loveList?: any[] } }>('config.json') if (config?.list) { const list = config.list - if (list.defaultList) listDataAll.defaultList = list.defaultList.map(m => toNewMusicInfo(m)) - if (list.loveList) listDataAll.loveList = list.loveList.map(m => toNewMusicInfo(m)) + if (list.defaultList) listDataAll.defaultList = filterMusicList(list.defaultList.map(m => toNewMusicInfo(m))) + if (list.loveList) listDataAll.loveList = filterMusicList(list.loveList.map(m => toNewMusicInfo(m))) isRequiredSave = true } } diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index 91bdb641..c25bb653 100644 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -60,6 +60,14 @@ export const deduplicationList = (list: T[]): T[] return true }) } +export const filterMusicList = (list: T[]): T[] => { + const ids: Set = new Set() + return list.filter(s => { + if (!s.id || ids.has(s.id)) return false + ids.add(s.id) + return true + }) +} export const langS2T = async(str: string) => { return await window.lx.worker.main.langS2t(Buffer.from(str).toString('base64')).then(b64 => Buffer.from(b64, 'base64').toString()) diff --git a/src/renderer/views/List/MyList/useShare.ts b/src/renderer/views/List/MyList/useShare.ts index d706d088..a0ecf0d0 100644 --- a/src/renderer/views/List/MyList/useShare.ts +++ b/src/renderer/views/List/MyList/useShare.ts @@ -1,7 +1,7 @@ import { toRaw } from '@common/utils/vueTools' import { openSaveDir, showSelectDialog } from '@renderer/utils/ipc' import { useI18n } from '@renderer/plugins/i18n' -import { filterFileName, toNewMusicInfo, fixNewMusicInfoQuality } from '@renderer/utils' +import { filterFileName, toNewMusicInfo, fixNewMusicInfoQuality, filterMusicList } from '@renderer/utils' import { getListMusics, updateUserList, addListMusics, overwriteListMusics, createUserList } from '@renderer/store/list/action' import { defaultList, loveList, userLists } from '@renderer/store/list/state' import useImportTip from '@renderer/utils/compositions/useImportTip' @@ -47,7 +47,7 @@ export default () => { switch (configData.type) { case 'playListPart': listData = configData.data - listData.list = listData.list.map(m => toNewMusicInfo(m)) + listData.list = filterMusicList(listData.list.map(m => toNewMusicInfo(m))) break case 'playListPart_v2': listData = configData.data diff --git a/src/renderer/views/Setting/components/SettingBackup.vue b/src/renderer/views/Setting/components/SettingBackup.vue index 99fba6ec..bec0e514 100644 --- a/src/renderer/views/Setting/components/SettingBackup.vue +++ b/src/renderer/views/Setting/components/SettingBackup.vue @@ -27,6 +27,7 @@ import { toRaw } from '@common/utils/vueTools' import { toNewMusicInfo, // toOldMusicInfo, + filterMusicList, fixNewMusicInfoQuality, } from '@renderer/utils' import { @@ -72,12 +73,12 @@ export default { try { const targetList = allLists.find(l => l.id == list.id) if (targetList) { - targetList.list = list.list.map(m => toNewMusicInfo(m)) + targetList.list = filterMusicList(list.list.map(m => toNewMusicInfo(m))) } else { allLists.push({ name: list.name, id: list.id, - list: list.list.map(m => toNewMusicInfo(m)), + list: filterMusicList(list.list.map(m => toNewMusicInfo(m))), position: list.position, source: list.source, sourceListId: list.sourceListId, @@ -139,7 +140,7 @@ export default { switch (allData.type) { case 'allData': // 兼容0.6.2及以前版本的列表数据 - if (allData.defaultList) await overwriteListMusics({ listId: LIST_IDS.DEFAULT, musicInfos: allData.defaultList.list.map(m => toNewMusicInfo(m)) }) + if (allData.defaultList) await overwriteListMusics({ listId: LIST_IDS.DEFAULT, musicInfos: filterMusicList(allData.defaultList.list.map(m => toNewMusicInfo(m))) }) else await importOldListData(allData.playList) importOldSettingData(allData.setting) break @@ -266,7 +267,7 @@ export default { switch (listData.type) { case 'defautlList': // 兼容0.6.2及以前版本的列表数据 - await overwriteListMusics({ listId: LIST_IDS.DEFAULT, musicInfos: listData.data.list.map(m => toNewMusicInfo(m)) }) + await overwriteListMusics({ listId: LIST_IDS.DEFAULT, musicInfos: filterMusicList(listData.data.list.map(m => toNewMusicInfo(m))) }) break case 'playList': await importOldListData(listData.data)