diff --git a/publish/changeLog.md b/publish/changeLog.md index aa10921..84903b4 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,4 @@ ### 修复 - 修复wy歌单分类切换无效的问题 +- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(此问题会影响PC端,要完全修复这个问题还需要同时将PC端、同步服务更新到最新版本) diff --git a/src/event/listEvent.ts b/src/event/listEvent.ts index b0e33ed..85bef3b 100644 --- a/src/event/listEvent.ts +++ b/src/event/listEvent.ts @@ -48,6 +48,19 @@ export const checkUpdateList = async(changedIds: string[]) => { // // }, // } +// 兼容v2.3.0之前版本插入数字类型的ID导致其意外在末尾追加 .0 的问题,确保所有ID都是字符串类型 +const fixListIdType = (lists: LX.List.UserListInfo[] | LX.List.UserListInfoFull[]) => { + for (const list of lists) { + if (typeof list.sourceListId == 'number') { + list.sourceListId = String(list.sourceListId) + if (typeof list.id == 'number') { + list.id = String(list.id) + } + } + } +} + + export class ListEvent extends Event { /** * 现有歌曲列表更改时触发的事件 @@ -63,6 +76,7 @@ export class ListEvent extends Event { * @param isRemote 是否属于远程操作 */ async list_data_overwrite(listData: MakeOptional, isRemote: boolean = false) { + fixListIdType(listData.userList) const oldIds = userLists.map(l => l.id) const changedIds = listDataOverwrite(listData) await updateUserList(userLists) @@ -86,6 +100,7 @@ export class ListEvent extends Event { */ async list_create(position: number, lists: LX.List.UserListInfo[], isRemote: boolean = false) { // const changedIds: string[] = [] + fixListIdType(lists) for (const list of lists) { userListCreate({ ...list, position }) // changedIds.push(list.id) diff --git a/src/utils/data.ts b/src/utils/data.ts index 843ff9c..d7055f7 100644 --- a/src/utils/data.ts +++ b/src/utils/data.ts @@ -227,12 +227,19 @@ export const saveViewPrevState = (state: { id: NAV_ID_Type }) => { } +const idFixRxp = /\.0$/ /** * 获取用户列表 */ export const getUserLists = async(): Promise => { - const list = await getData(userListKey) - return list ?? [] + const list = await getData(userListKey) ?? [] + for (const info of list) { + // 兼容v2.3.0之前版本PC端插入数字类型的ID导致其意外在末尾追加 .0 的问题 + if (info.sourceListId?.endsWith('.0')) { + info.sourceListId = info.sourceListId.replace(idFixRxp, '') + } + } + return list } /** diff --git a/src/utils/musicSdk/bd/songList.js b/src/utils/musicSdk/bd/songList.js index 5e2c9ad..0309f27 100644 --- a/src/utils/musicSdk/bd/songList.js +++ b/src/utils/musicSdk/bd/songList.js @@ -176,7 +176,7 @@ export default { filterList(rawData) { return rawData.map(item => ({ play_count: this.formatPlayCount(item.listen_num), - id: item.list_id, + id: String(item.list_id), author: item.username, name: item.title, // time: item.publish_time, diff --git a/src/utils/musicSdk/mg/songList.js b/src/utils/musicSdk/mg/songList.js index 02943af..f7c20c5 100644 --- a/src/utils/musicSdk/mg/songList.js +++ b/src/utils/musicSdk/mg/songList.js @@ -212,7 +212,7 @@ export default { // console.log(rawData) return rawData.map(item => ({ play_count: formatPlayCount(item.playCount), - id: item.playListId, + id: String(item.playListId), author: item.createName, name: item.playListName, time: dateFormat(item.createTime, 'Y-M-D'), diff --git a/src/utils/musicSdk/tx/songList.js b/src/utils/musicSdk/tx/songList.js index 6792cf2..98ad550 100644 --- a/src/utils/musicSdk/tx/songList.js +++ b/src/utils/musicSdk/tx/songList.js @@ -132,7 +132,7 @@ export default { return { list: data.v_playlist.map(item => ({ play_count: formatPlayCount(item.access_num), - id: item.tid, + id: String(item.tid), author: item.creator_info.nick, name: item.title, time: item.modify_time ? dateFormat(item.modify_time * 1000, 'Y-M-D') : '', @@ -153,7 +153,7 @@ export default { return { list: content.v_item.map(({ basic }) => ({ play_count: formatPlayCount(basic.play_cnt), - id: basic.tid, + id: String(basic.tid), author: basic.creator.nick, name: basic.title, // time: basic.publish_time, @@ -306,7 +306,7 @@ export default { list: body.data.list.map(item => { return { play_count: formatPlayCount(item.listennum), - id: item.dissid, + id: String(item.dissid), author: item.creator.name, name: item.dissname, time: dateFormat(item.createtime, 'Y-M-D'), diff --git a/src/utils/musicSdk/wy/songList.js b/src/utils/musicSdk/wy/songList.js index 5d13541..acc1cc2 100644 --- a/src/utils/musicSdk/wy/songList.js +++ b/src/utils/musicSdk/wy/songList.js @@ -235,7 +235,7 @@ export default { // console.log(rawData) return rawData.map(item => ({ play_count: formatPlayCount(item.playCount), - id: item.id, + id: String(item.id), author: item.creator.nickname, name: item.name, time: item.createTime ? dateFormat(item.createTime, 'Y-M-D') : '',