diff --git a/src/common/utils/lyric-font-player/line-player.js b/src/common/utils/lyric-font-player/line-player.js
index e7e7c202..dff64514 100644
--- a/src/common/utils/lyric-font-player/line-player.js
+++ b/src/common/utils/lyric-font-player/line-player.js
@@ -15,7 +15,7 @@ const timeoutTools = new TimeoutTools()
const t_rxp_1 = /^0+(\d+)/
const t_rxp_2 = /:0+(\d+)/g
const t_rxp_3 = /\.0+(\d+)/
-const formaterTimeLabel = (label) => {
+const formatTimeLabel = (label) => {
return label.replace(t_rxp_1, '$1')
.replace(t_rxp_2, ':$1')
.replace(t_rxp_3, '.$1')
@@ -33,7 +33,7 @@ const parseExtendedLyric = (lrcLinesMap, extendedLyric) => {
const times = timeField.match(timeExp)
if (times == null) continue
for (let time of times) {
- const timeStr = formaterTimeLabel(time)
+ const timeStr = formatTimeLabel(time)
const targetLine = lrcLinesMap[timeStr]
if (targetLine) targetLine.extendedLyrics.push(text)
}
@@ -93,7 +93,7 @@ module.exports = class LinePlayer {
const times = timeField.match(timeExp)
if (times == null) continue
for (let time of times) {
- const timeStr = formaterTimeLabel(time)
+ const timeStr = formatTimeLabel(time)
if (linesMap[timeStr]) {
linesMap[timeStr].extendedLyrics.push(text)
continue
diff --git a/src/renderer/utils/musicSdk/kg/songList.js b/src/renderer/utils/musicSdk/kg/songList.js
index 0dbc893f..836be49e 100644
--- a/src/renderer/utils/musicSdk/kg/songList.js
+++ b/src/renderer/utils/musicSdk/kg/songList.js
@@ -97,12 +97,53 @@ export default {
// return body.data.info
// })
// },
- async getListDetailBySpecialId(id) {
- const globalSpecialId = await this.getGlobalSpecialId(id)
+ parseHtmlDesc(html) {
+ const prefix = '
'
+ let index = html.indexOf(prefix)
+ if (index < 0) return null
+ const afterStr = html.substring(index + prefix.length)
+ index = afterStr.indexOf('
')
+ if (index < 0) return null
+ return decodeName(afterStr.substring(0, index))
+ },
+ async getListDetailBySpecialId(id, page, tryNum = 0) {
+ if (tryNum > 2) throw new Error('try max num')
+
+ const { body } = await httpFetch(this.getSongListDetailUrl(id)).promise
+ let listData = body.match(this.regExps.listData)
+ let listInfo = body.match(this.regExps.listInfo)
+ if (!listData) return this.getListDetailBySpecialId(id, page, ++tryNum)
+ let list = await this.getMusicInfos(JSON.parse(listData[1]))
+ // listData = this.filterData(JSON.parse(listData[1]))
+ let name
+ let pic
+ if (listInfo) {
+ name = listInfo[1]
+ pic = listInfo[2]
+ }
+ let desc = this.parseHtmlDesc(body)
+
+
+ return {
+ list,
+ page: 1,
+ limit: 10000,
+ total: list.length,
+ source: 'kg',
+ info: {
+ name,
+ img: pic,
+ desc,
+ // author: body.result.info.userinfo.username,
+ // play_count: this.formatPlayCount(body.result.listen_num),
+ },
+ }
+
+ // const globalSpecialId = await this.getGlobalSpecialId(id)
// const limit = 100
// const listData = await this.getSongListDetailByGlobalSpecialId(globalSpecialId, page, limit)
// if (!Array.isArray(listData))
- return this.getUserListDetail2(globalSpecialId)
+ // return this.getUserListDetail2(globalSpecialId)
// return {
// list: this.filterDatav9(listData),
// page,
@@ -127,9 +168,9 @@ export default {
if (tagId == null) tagId = ''
return `http://www2.kugou.kugou.com/yueku/v9/special/getSpecial?is_ajax=1&cdn=cdn&t=${sortId}&c=${tagId}&p=${page}`
},
- // getSongListDetailUrl(id) {
- // return `http://www2.kugou.kugou.com/yueku/v9/special/single/${id}-5-9999.html`
- // },
+ getSongListDetailUrl(id) {
+ return `http://www2.kugou.kugou.com/yueku/v9/special/single/${id}-5-9999.html`
+ },
/**
* 格式化播放数量
@@ -276,6 +317,15 @@ export default {
},
}).then(data => data.map(s => s[0])))
},
+ async getMusicInfos(list) {
+ return this.filterData2(
+ await Promise.all(
+ this.createTask(
+ this.deDuplication(list)
+ .map(item => ({ hash: item.hash })),
+ ))
+ .then(([...datas]) => datas.flat()))
+ },
async getUserListDetailByCode(id) {
const songInfo = await this.createHttp('http://t.kugou.com/command/', {
@@ -312,12 +362,12 @@ export default {
})
// console.log(songList)
}
- let result = await Promise.all(this.createTask((songList || songInfo.list).map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
+ let list = await this.getMusicInfos(songList || songInfo.list)
return {
- list: this.filterData2(result) || [],
+ list,
page: 1,
limit: info.count,
- total: info.count,
+ total: list.length,
source: 'kg',
info: {
name: info.name,
@@ -339,13 +389,13 @@ export default {
if (songInfo.global_collection_id) return this.getUserListDetail2(songInfo.global_collection_id)
else return this.getUserListDetail4(songInfo, chain, page).catch(() => this.getUserListDetail5(chain))
}
- let result = await Promise.all(this.createTask(songInfo.list.map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
+ let list = await this.getMusicInfos(songInfo.list)
// console.log(info, songInfo)
return {
- list: this.filterData2(result) || [],
+ list,
page: 1,
limit: this.listDetailLimit,
- total: songInfo.count,
+ total: list.length,
source: 'kg',
info: {
name: songInfo.info.name,
@@ -383,13 +433,13 @@ export default {
}).then(data => data.list.info))
}
let result = await Promise.all(tasks).then(([...datas]) => datas.flat())
- result = await Promise.all(this.createTask(this.deDuplication(result).map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
+ result = await this.getMusicInfos(result)
// console.log(result)
return {
- list: this.filterData2(result) || [],
+ list: result,
page,
limit: this.listDetailLimit,
- total: listInfo.count,
+ total: result.length,
source: 'kg',
info: {
name: listInfo.name,
@@ -434,13 +484,13 @@ export default {
},
})
const songInfo = await this.createGetListDetail2Task(id, info.songcount)
- let result = await Promise.all(this.createTask(this.deDuplication(songInfo).map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
- // console.log(info, songInfo, result)
+ let list = await this.getMusicInfos(songInfo)
+ // console.log(info, songInfo, list)
return {
- list: this.filterData2(result) || [],
+ list,
page: 1,
limit: this.listDetailLimit,
- total: info.songcount,
+ total: list.length,
source: 'kg',
info: {
name: info.specialname,
@@ -476,9 +526,9 @@ export default {
let result = body.match(/var\sdataFromSmarty\s=\s(\[.+?\])/)
if (result) result = JSON.parse(result[1])
this.cache.set(chain, result)
- result = await Promise.all(this.createTask(result.map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
+ result = await this.getMusicInfos(result)
// console.log(info, songInfo)
- return this.filterData2(result)
+ return result
},
async getUserListDetail4(songInfo, chain, page) {
@@ -491,7 +541,7 @@ export default {
list: list || [],
page,
limit,
- total: listInfo.songcount,
+ total: list.length ?? 0,
source: 'kg',
info: {
name: listInfo.specialname,
@@ -512,7 +562,7 @@ export default {
list: list || [],
page: 1,
limit: this.listDetailLimit,
- total: listInfo.songcount,
+ total: list.length ?? 0,
source: 'kg',
info: {
name: listInfo.specialname,
@@ -535,9 +585,9 @@ export default {
})
// console.log(info)
- let result = await Promise.all(this.createTask(info.info.map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat())
+ let result = await this.getMusicInfos(info.info)
// console.log(info, songInfo)
- return this.filterData2(result)
+ return result
},
async getUserListDetail(link, page, retryNum = 0) {