分离歌曲URL的缓存
parent
c6853b197c
commit
1c585dc479
|
@ -63,6 +63,9 @@ const names = {
|
||||||
get_lyric: 'get_lyric',
|
get_lyric: 'get_lyric',
|
||||||
save_lyric: 'save_lyric',
|
save_lyric: 'save_lyric',
|
||||||
clear_lyric: 'clear_lyric',
|
clear_lyric: 'clear_lyric',
|
||||||
|
get_music_url: 'get_music_url',
|
||||||
|
save_music_url: 'save_music_url',
|
||||||
|
clear_music_url: 'clear_music_url',
|
||||||
},
|
},
|
||||||
winLyric: {
|
winLyric: {
|
||||||
close: 'close',
|
close: 'close',
|
||||||
|
|
|
@ -18,6 +18,7 @@ require('./showDialog')
|
||||||
require('./playList')
|
require('./playList')
|
||||||
require('./data')
|
require('./data')
|
||||||
require('./lyric')
|
require('./lyric')
|
||||||
|
require('./musicUrl')
|
||||||
|
|
||||||
require('./kw_decodeLyric')
|
require('./kw_decodeLyric')
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@ const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = requir
|
||||||
const getStore = require('@common/store')
|
const getStore = require('@common/store')
|
||||||
|
|
||||||
|
|
||||||
mainHandle(ipcMainWindowNames.get_lyric, async(event, id) => getStore('lyrics').get(id) || {})
|
mainHandle(ipcMainWindowNames.get_lyric, async(event, id) => getStore('lyrics', true, false).get(id) || {})
|
||||||
|
|
||||||
|
|
||||||
mainOn(ipcMainWindowNames.save_lyric, (event, { id, lyrics }) => getStore('lyrics').set(id, lyrics))
|
mainOn(ipcMainWindowNames.save_lyric, (event, { id, lyrics }) => getStore('lyrics', true, false).set(id, lyrics))
|
||||||
|
|
||||||
mainOn(ipcMainWindowNames.clear_lyric, () => getStore('lyrics').clear())
|
mainOn(ipcMainWindowNames.clear_lyric, () => getStore('lyrics', true, false).clear())
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc')
|
||||||
|
const getStore = require('@common/store')
|
||||||
|
|
||||||
|
|
||||||
|
mainHandle(ipcMainWindowNames.get_music_url, async(event, id) => getStore('musicUrls', true, false).get(id) || '')
|
||||||
|
|
||||||
|
|
||||||
|
mainOn(ipcMainWindowNames.save_music_url, (event, { id, url }) => getStore('musicUrls', true, false).set(id, url))
|
||||||
|
|
||||||
|
mainOn(ipcMainWindowNames.clear_music_url, () => getStore('musicUrls', true, false).clear())
|
|
@ -607,7 +607,7 @@ export default {
|
||||||
if (!retryedSource.includes(targetSong.source)) retryedSource.push(targetSong.source)
|
if (!retryedSource.includes(targetSong.source)) retryedSource.push(targetSong.source)
|
||||||
|
|
||||||
let type = this.getPlayType(this.setting.player.highQuality, targetSong)
|
let type = this.getPlayType(this.setting.player.highQuality, targetSong)
|
||||||
this.musicInfo.url = targetSong.typeUrl[type]
|
// this.musicInfo.url = await getMusicUrl(targetSong, type)
|
||||||
this.status = this.statusText = this.$t('core.player.geting_url')
|
this.status = this.statusText = this.$t('core.player.geting_url')
|
||||||
|
|
||||||
return this.getUrl({ musicInfo: targetSong, originMusic, type, isRefresh }).then(url => {
|
return this.getUrl({ musicInfo: targetSong, originMusic, type, isRefresh }).then(url => {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import fs from 'fs'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import music from '../../utils/music'
|
import music from '../../utils/music'
|
||||||
import { getMusicType } from '../../utils/music/utils'
|
import { getMusicType } from '../../utils/music/utils'
|
||||||
import { setMeta, saveLrc, getLyric, setLyric } from '../../utils'
|
import { setMeta, saveLrc, getLyric, setLyric, getMusicUrl, setMusicUrl } from '../../utils'
|
||||||
|
|
||||||
// state
|
// state
|
||||||
const state = {
|
const state = {
|
||||||
|
@ -147,15 +147,20 @@ const pauseTasks = async(store, list, runs = []) => {
|
||||||
await pauseTasks(store, list, runs)
|
await pauseTasks(store, list, runs)
|
||||||
}
|
}
|
||||||
|
|
||||||
const getUrl = (downloadInfo, isRefresh) => {
|
const getUrl = async(downloadInfo, isRefresh) => {
|
||||||
const url = downloadInfo.musicInfo.typeUrl[downloadInfo.type]
|
const cachedUrl = await getMusicUrl(downloadInfo.musicInfo, downloadInfo.type)
|
||||||
if (!downloadInfo.musicInfo._types[downloadInfo.type]) {
|
if (!downloadInfo.musicInfo._types[downloadInfo.type]) {
|
||||||
// 兼容旧版酷我源搜索列表过滤128k音质的bug
|
// 兼容旧版酷我源搜索列表过滤128k音质的bug
|
||||||
if (!(downloadInfo.musicInfo.source == 'kw' && downloadInfo.type == '128k')) return Promise.reject(new Error('该歌曲没有可下载的音频'))
|
if (!(downloadInfo.musicInfo.source == 'kw' && downloadInfo.type == '128k')) throw new Error('该歌曲没有可下载的音频')
|
||||||
|
|
||||||
// return Promise.reject(new Error('该歌曲没有可下载的音频'))
|
// return Promise.reject(new Error('该歌曲没有可下载的音频'))
|
||||||
}
|
}
|
||||||
return url && !isRefresh ? Promise.resolve({ url }) : music[downloadInfo.musicInfo.source].getMusicUrl(downloadInfo.musicInfo, downloadInfo.type).promise
|
return cachedUrl && !isRefresh
|
||||||
|
? cachedUrl
|
||||||
|
: music[downloadInfo.musicInfo.source].getMusicUrl(downloadInfo.musicInfo, downloadInfo.type).promise.then(({ url }) => {
|
||||||
|
setMusicUrl(downloadInfo.musicInfo, downloadInfo.type, url)
|
||||||
|
return url
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修复 1.1.x版本 酷狗源歌词格式
|
// 修复 1.1.x版本 酷狗源歌词格式
|
||||||
|
@ -228,12 +233,12 @@ const downloadLyric = (downloadInfo, filePath) => {
|
||||||
|
|
||||||
const refreshUrl = function(commit, downloadInfo) {
|
const refreshUrl = function(commit, downloadInfo) {
|
||||||
commit('setStatusText', { downloadInfo, text: '链接失效,正在刷新链接' })
|
commit('setStatusText', { downloadInfo, text: '链接失效,正在刷新链接' })
|
||||||
getUrl(downloadInfo, true).then(result => {
|
getUrl(downloadInfo, true).then(url => {
|
||||||
commit('updateUrl', { downloadInfo, url: result.url })
|
commit('updateUrl', { downloadInfo, url })
|
||||||
commit('setStatusText', { downloadInfo, text: '链接刷新成功' })
|
commit('setStatusText', { downloadInfo, text: '链接刷新成功' })
|
||||||
const dl = dls[downloadInfo.key]
|
const dl = dls[downloadInfo.key]
|
||||||
if (!dl) return
|
if (!dl) return
|
||||||
dl.refreshUrl(result.url)
|
dl.refreshUrl(url)
|
||||||
dl.start().catch(err => {
|
dl.start().catch(err => {
|
||||||
commit('onError', { downloadInfo, errorMsg: err.message })
|
commit('onError', { downloadInfo, errorMsg: err.message })
|
||||||
commit('setStatusText', { downloadInfo, text: err.message })
|
commit('setStatusText', { downloadInfo, text: err.message })
|
||||||
|
@ -389,10 +394,10 @@ const actions = {
|
||||||
commit('setStatusText', { downloadInfo, text: '获取URL中...' })
|
commit('setStatusText', { downloadInfo, text: '获取URL中...' })
|
||||||
let p = options.url
|
let p = options.url
|
||||||
? Promise.resolve()
|
? Promise.resolve()
|
||||||
: getUrl(downloadInfo).then(result => {
|
: getUrl(downloadInfo).then(url => {
|
||||||
commit('updateUrl', { downloadInfo, url: result.url })
|
commit('updateUrl', { downloadInfo, url })
|
||||||
if (!result.url) return Promise.reject(new Error('获取URL失败'))
|
if (!url) return Promise.reject(new Error('获取URL失败'))
|
||||||
options.url = result.url
|
options.url = url
|
||||||
})
|
})
|
||||||
p.then(() => {
|
p.then(() => {
|
||||||
tryNum[downloadInfo.key] = 0
|
tryNum[downloadInfo.key] = 0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import musicSdk from '../../utils/music'
|
import musicSdk from '../../utils/music'
|
||||||
import { clearLyric } from '../../utils'
|
import { clearLyric, clearMusicUrl } from '../../utils'
|
||||||
|
|
||||||
let allList = {}
|
let allList = {}
|
||||||
window.allList = allList
|
window.allList = allList
|
||||||
|
@ -215,6 +215,7 @@ const mutations = {
|
||||||
if (item.tlrc) delete item.tlrc
|
if (item.tlrc) delete item.tlrc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clearMusicUrl()
|
||||||
clearLyric()
|
clearLyric()
|
||||||
},
|
},
|
||||||
setOtherSource(state, { musicInfo, otherSource }) {
|
setOtherSource(state, { musicInfo, otherSource }) {
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import music from '../../utils/music'
|
import music from '../../utils/music'
|
||||||
import { getRandom, checkPath, getLyric as getStoreLyric, setLyric } from '../../utils'
|
import {
|
||||||
|
getRandom,
|
||||||
|
checkPath,
|
||||||
|
getLyric as getStoreLyric,
|
||||||
|
setLyric,
|
||||||
|
setMusicUrl,
|
||||||
|
getMusicUrl,
|
||||||
|
} from '../../utils'
|
||||||
|
|
||||||
// state
|
// state
|
||||||
const state = {
|
const state = {
|
||||||
|
@ -147,20 +154,19 @@ const getters = {
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
const actions = {
|
const actions = {
|
||||||
getUrl({ commit, state }, { musicInfo, originMusic, type, isRefresh }) {
|
async getUrl({ commit, state }, { musicInfo, originMusic, type, isRefresh }) {
|
||||||
if (!musicInfo._types[type]) {
|
if (!musicInfo._types[type]) {
|
||||||
// 兼容旧版酷我源搜索列表过滤128k音质的bug
|
// 兼容旧版酷我源搜索列表过滤128k音质的bug
|
||||||
if (!(musicInfo.source == 'kw' && type == '128k')) return Promise.reject(new Error('该歌曲没有可播放的音频'))
|
if (!(musicInfo.source == 'kw' && type == '128k')) throw new Error('该歌曲没有可播放的音频')
|
||||||
|
|
||||||
// return Promise.reject(new Error('该歌曲没有可播放的音频'))
|
// return Promise.reject(new Error('该歌曲没有可播放的音频'))
|
||||||
}
|
}
|
||||||
if (urlRequest && urlRequest.cancelHttp) urlRequest.cancelHttp()
|
if (urlRequest && urlRequest.cancelHttp) urlRequest.cancelHttp()
|
||||||
if (musicInfo.typeUrl[type] && !isRefresh) return Promise.resolve(musicInfo.typeUrl[type])
|
const cachedUrl = await getMusicUrl(musicInfo, type)
|
||||||
try {
|
if (cachedUrl && !isRefresh) return cachedUrl
|
||||||
urlRequest = music[musicInfo.source].getMusicUrl(musicInfo, type)
|
|
||||||
} catch (err) {
|
urlRequest = music[musicInfo.source].getMusicUrl(musicInfo, type)
|
||||||
return Promise.reject(err)
|
|
||||||
}
|
|
||||||
return urlRequest.promise.then(({ url }) => {
|
return urlRequest.promise.then(({ url }) => {
|
||||||
if (originMusic) commit('setUrl', { musicInfo: originMusic, url, type })
|
if (originMusic) commit('setUrl', { musicInfo: originMusic, url, type })
|
||||||
commit('setUrl', { musicInfo, url, type })
|
commit('setUrl', { musicInfo, url, type })
|
||||||
|
@ -328,8 +334,8 @@ const actions = {
|
||||||
|
|
||||||
// mitations
|
// mitations
|
||||||
const mutations = {
|
const mutations = {
|
||||||
setUrl(state, datas) {
|
setUrl(state, { musicInfo, type, url }) {
|
||||||
datas.musicInfo.typeUrl = Object.assign({}, datas.musicInfo.typeUrl, { [datas.type]: datas.url })
|
setMusicUrl(musicInfo, type, url)
|
||||||
},
|
},
|
||||||
getPic(state, datas) {
|
getPic(state, datas) {
|
||||||
datas.musicInfo.img = datas.url
|
datas.musicInfo.img = datas.url
|
||||||
|
|
|
@ -414,3 +414,10 @@ export const setLyric = (musicInfo, { lyric, tlyric, lxlyric }) => rendererSend(
|
||||||
lyrics: { lyric, tlyric, lxlyric },
|
lyrics: { lyric, tlyric, lxlyric },
|
||||||
})
|
})
|
||||||
export const clearLyric = () => rendererSend(NAMES.mainWindow.clear_lyric)
|
export const clearLyric = () => rendererSend(NAMES.mainWindow.clear_lyric)
|
||||||
|
|
||||||
|
export const getMusicUrl = (musicInfo, type) => rendererInvoke(NAMES.mainWindow.get_music_url, `${musicInfo.source}_${musicInfo.songmid}_${type}`)
|
||||||
|
export const setMusicUrl = (musicInfo, type, url) => rendererSend(NAMES.mainWindow.save_music_url, {
|
||||||
|
id: `${musicInfo.source}_${musicInfo.songmid}_${type}`,
|
||||||
|
url,
|
||||||
|
})
|
||||||
|
export const clearMusicUrl = () => rendererSend(NAMES.mainWindow.clear_music_url)
|
||||||
|
|
Loading…
Reference in New Issue