修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题

pull/1397/head
lyswhut 2023-05-18 15:22:45 +08:00
parent 0454d300ec
commit 8018d9b418
8 changed files with 31 additions and 9 deletions

View File

@ -5,6 +5,7 @@
### 修复 ### 修复
- 修复列表名翻译显示 - 修复列表名翻译显示
- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(要完全修复这个问题还需要同时将移动端、同步服务更新到最新版本)
### 其他 ### 其他

View File

@ -14,6 +14,18 @@ import { EventEmitter } from 'events'
// musicOverwrite, // musicOverwrite,
// } from '@main/workers/dbService/modules/list' // } from '@main/workers/dbService/modules/list'
// 兼容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 Event extends EventEmitter { export class Event extends EventEmitter {
list_changed() { list_changed() {
this.emit('list_changed') this.emit('list_changed')
@ -25,6 +37,7 @@ export class Event extends EventEmitter {
* @param isRemote * @param isRemote
*/ */
async list_data_overwrite(listData: MakeOptional<LX.List.ListDataFull, 'tempList'>, isRemote: boolean = false) { async list_data_overwrite(listData: MakeOptional<LX.List.ListDataFull, 'tempList'>, isRemote: boolean = false) {
fixListIdType(listData.userList)
await global.lx.worker.dbService.listDataOverwrite(listData) await global.lx.worker.dbService.listDataOverwrite(listData)
this.emit('list_data_overwrite', listData, isRemote) this.emit('list_data_overwrite', listData, isRemote)
this.list_changed() this.list_changed()
@ -37,6 +50,7 @@ export class Event extends EventEmitter {
* @param isRemote * @param isRemote
*/ */
async list_create(position: number, lists: LX.List.UserListInfo[], isRemote: boolean = false) { async list_create(position: number, lists: LX.List.UserListInfo[], isRemote: boolean = false) {
fixListIdType(lists)
await global.lx.worker.dbService.createUserLists(position, lists) await global.lx.worker.dbService.createUserLists(position, lists)
this.emit('list_create', position, lists, isRemote) this.emit('list_create', position, lists, isRemote)
this.list_changed() this.list_changed()

View File

@ -19,13 +19,20 @@ import {
createMusicInfoByMusicInfoIdQueryStatement, createMusicInfoByMusicInfoIdQueryStatement,
} from './statements' } from './statements'
const idFixRxp = /\.0$/
/** /**
* *
* @returns * @returns
*/ */
export const queryAllUserList = () => { export const queryAllUserList = () => {
return createListQueryStatement().all() as LX.DBService.UserListInfo[] const list = createListQueryStatement().all() as LX.DBService.UserListInfo[]
for (const info of list) {
// 兼容v2.3.0之前版本插入数字类型的ID导致其意外在末尾追加 .0 的问题
if (info.sourceListId?.endsWith('.0')) {
info.sourceListId = info.sourceListId.replace(idFixRxp, '')
}
}
return list
} }
/** /**

View File

@ -174,7 +174,7 @@ export default {
filterList(rawData) { filterList(rawData) {
return rawData.map(item => ({ return rawData.map(item => ({
play_count: this.formatPlayCount(item.listen_num), play_count: this.formatPlayCount(item.listen_num),
id: item.list_id, id: String(item.list_id),
author: item.username, author: item.username,
name: item.title, name: item.title,
// time: item.publish_time, // time: item.publish_time,

View File

@ -467,7 +467,7 @@ export default {
list: body.abslist.map(item => { list: body.abslist.map(item => {
return { return {
play_count: this.formatPlayCount(item.playcnt), play_count: this.formatPlayCount(item.playcnt),
id: item.playlistid, id: String(item.playlistid),
author: decodeName(item.nickname), author: decodeName(item.nickname),
name: decodeName(item.name), name: decodeName(item.name),
total: item.songnum, total: item.songnum,

View File

@ -210,7 +210,7 @@ export default {
// console.log(rawData) // console.log(rawData)
return rawData.map(item => ({ return rawData.map(item => ({
play_count: formatPlayCount(item.playCount), play_count: formatPlayCount(item.playCount),
id: item.playListId, id: String(item.playListId),
author: item.createName, author: item.createName,
name: item.playListName, name: item.playListName,
time: dateFormat(item.createTime, 'Y-M-D'), time: dateFormat(item.createTime, 'Y-M-D'),

View File

@ -130,7 +130,7 @@ export default {
return { return {
list: data.v_playlist.map(item => ({ list: data.v_playlist.map(item => ({
play_count: formatPlayCount(item.access_num), play_count: formatPlayCount(item.access_num),
id: item.tid, id: String(item.tid),
author: item.creator_info.nick, author: item.creator_info.nick,
name: item.title, name: item.title,
time: item.modify_time ? dateFormat(item.modify_time * 1000, 'Y-M-D') : '', time: item.modify_time ? dateFormat(item.modify_time * 1000, 'Y-M-D') : '',
@ -151,7 +151,7 @@ export default {
return { return {
list: content.v_item.map(({ basic }) => ({ list: content.v_item.map(({ basic }) => ({
play_count: formatPlayCount(basic.play_cnt), play_count: formatPlayCount(basic.play_cnt),
id: basic.tid, id: String(basic.tid),
author: basic.creator.nick, author: basic.creator.nick,
name: basic.title, name: basic.title,
// time: basic.publish_time, // time: basic.publish_time,
@ -304,7 +304,7 @@ export default {
list: body.data.list.map(item => { list: body.data.list.map(item => {
return { return {
play_count: formatPlayCount(item.listennum), play_count: formatPlayCount(item.listennum),
id: item.dissid, id: String(item.dissid),
author: item.creator.name, author: item.creator.name,
name: item.dissname, name: item.dissname,
time: dateFormat(item.createtime, 'Y-M-D'), time: dateFormat(item.createtime, 'Y-M-D'),

View File

@ -232,7 +232,7 @@ export default {
// console.log(rawData) // console.log(rawData)
return rawData.map(item => ({ return rawData.map(item => ({
play_count: formatPlayCount(item.playCount), play_count: formatPlayCount(item.playCount),
id: item.id, id: String(item.id),
author: item.creator.nickname, author: item.creator.nickname,
name: item.name, name: item.name,
time: item.createTime ? dateFormat(item.createTime, 'Y-M-D') : '', time: item.createTime ? dateFormat(item.createTime, 'Y-M-D') : '',