修复kw部分歌单无法打开的问题
This commit is contained in:
@@ -1,11 +1,29 @@
|
||||
import { httpGet } from '../../request'
|
||||
import { httpGet, httpFetch } from '../../request'
|
||||
import { rendererInvoke, NAMES } from '../../../../common/ipc'
|
||||
|
||||
if (!window.kw_token) {
|
||||
window.kw_token = {
|
||||
token: null,
|
||||
isGetingToken: false,
|
||||
}
|
||||
const kw_token = {
|
||||
token: null,
|
||||
isGetingToken: false,
|
||||
}
|
||||
|
||||
const translationMap = {
|
||||
"{'": '{"',
|
||||
"'}\n": '"}',
|
||||
"'}": '"}',
|
||||
"':'": '":"',
|
||||
"','": '","',
|
||||
"':{'": '":{"',
|
||||
"':['": '":["',
|
||||
"'}],'": '"}],"',
|
||||
"':[{'": '":[{"',
|
||||
"'},'": '"},"',
|
||||
"'},{'": '"},{"',
|
||||
"':[],'": '":[],"',
|
||||
"':{},'": '":{},"',
|
||||
}
|
||||
|
||||
export const objStr2JSON = str => {
|
||||
return JSON.parse(str.replace(/(^{'|'}\n$|'}$|':'|','|':\[{'|'}\],'|':{'|'},'|'},{'|':\['|':\[\],'|':{},')/g, s => translationMap[s]))
|
||||
}
|
||||
|
||||
export const formatSinger = rawData => rawData.replace(/&/g, '、')
|
||||
@@ -21,17 +39,40 @@ export const matchToken = headers => {
|
||||
const wait = time => new Promise(resolve => setTimeout(() => resolve(), time))
|
||||
|
||||
|
||||
export const getToken = () => new Promise((resolve, reject) => {
|
||||
if (window.kw_token.isGetingToken) return wait(1000).then(() => getToken().then(token => resolve(token)))
|
||||
if (window.kw_token.token) return resolve(window.kw_token.token)
|
||||
window.kw_token.isGetingToken = true
|
||||
export const getToken = (retryNum = 0) => new Promise((resolve, reject) => {
|
||||
if (retryNum > 2) return Promise.reject(new Error('try max num'))
|
||||
|
||||
if (kw_token.isGetingToken) return wait(1000).then(() => getToken(retryNum).then(token => resolve(token)))
|
||||
if (kw_token.token) return resolve(kw_token.token)
|
||||
kw_token.isGetingToken = true
|
||||
httpGet('http://www.kuwo.cn/', (err, resp) => {
|
||||
window.kw_token.isGetingToken = false
|
||||
if (err) return reject(err)
|
||||
kw_token.isGetingToken = false
|
||||
if (err) return getToken(retryNum)
|
||||
if (resp.statusCode != 200) return reject(new Error('获取失败'))
|
||||
const token = window.kw_token.token = matchToken(resp.headers)
|
||||
const token = kw_token.token = matchToken(resp.headers)
|
||||
resolve(token)
|
||||
})
|
||||
})
|
||||
|
||||
export const decodeLyric = base64Data => rendererInvoke(NAMES.mainWindow.handle_kw_decode_lyric, base64Data)
|
||||
|
||||
export const tokenRequest = async(url, options = {}) => {
|
||||
let token = kw_token.token
|
||||
if (!token) token = await getToken()
|
||||
if (!options.headers) {
|
||||
options.headers = {
|
||||
Referer: 'http://www.kuwo.cn/',
|
||||
csrf: token,
|
||||
cookie: 'kw_token=' + token,
|
||||
}
|
||||
}
|
||||
const requestObj = httpFetch(url, options)
|
||||
requestObj.promise = requestObj.promise.then(resp => {
|
||||
console.log(resp)
|
||||
if (resp.statusCode == 200) {
|
||||
kw_token.token = matchToken(resp.headers)
|
||||
}
|
||||
return resp
|
||||
})
|
||||
return requestObj
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user