新增所选音频输出设备被移除时是否暂停播放

This commit is contained in:
lyswhut
2020-05-08 19:14:44 +08:00
parent ecf9dce758
commit 26bdf25423
12 changed files with 223 additions and 181 deletions
+2 -1
View File
@@ -184,7 +184,7 @@ export const objectDeepMerge = (target, source) => {
* @param {*} setting
*/
export const updateSetting = (setting, version) => {
const defaultVersion = '1.0.23'
const defaultVersion = '1.0.24'
if (!version) {
if (setting) {
version = setting.version
@@ -198,6 +198,7 @@ export const updateSetting = (setting, version) => {
isShowTaskProgess: true,
volume: 1,
mediaDeviceId: 'default',
isMediaDeviceRemovedStopPlay: false,
},
list: {
isShowAlbumName: true,
+1
View File
@@ -1,6 +1,7 @@
export const requestMsg = {
fail: '请求异常😮,可以多试几次,若还是不行就换一首吧。。。',
unachievable: '哦No😱...接口无法访问了!',
timeout: '请求超时',
// unachievable: '哦No😱...接口无法访问了!已帮你切换到临时接口,重试下看能不能播放吧~',
notConnectNetwork: '无法连接到服务器',
cancelRequest: '取消http请求',
+31 -37
View File
@@ -46,44 +46,34 @@ const defaultHeaders = {
* @param {*} options
*/
const buildHttpPromose = (url, options) => {
let requestObj
let cancelFn
let isCancelled = false
let p = new Promise((resolve, reject) => {
cancelFn = reject
let obj = {
isCancelled: false,
}
obj.promise = new Promise((resolve, reject) => {
obj.cancelFn = reject
debugRequest && console.log(`\n---send request------${url}------------`)
fetchData(url, options.method, options, (err, resp, body) => {
// options.isShowProgress && window.api.hideProgress()
debugRequest && console.log(`\n---response------${url}------------`)
debugRequest && console.log(body)
requestObj = null
cancelFn = null
if (err) {
// console.log('出错', err.code)
if (err.code === 'ETIMEDOUT' || err.code == 'ESOCKETTIMEDOUT') {
const { promise, cancelHttp } = httpFetch(url, options)
obj.cancelHttp = cancelHttp
promise.then(resp => resolve(resp)).catch(err => reject(err))
return
}
return reject(err)
}
obj.requestObj = null
obj.cancelFn = null
if (err) return reject(err)
resolve(resp)
}).then(ro => {
requestObj = ro
if (isCancelled) obj.cancelHttp()
obj.requestObj = ro
if (obj.isCancelled) obj.cancelHttp()
console.log(obj.requestObj, obj.isCancelled)
})
})
const obj = {
promise: p,
cancelHttp() {
if (!requestObj) return isCancelled = true
cancelFn(new Error(requestMsg.cancelRequest))
cancelHttp(requestObj)
requestObj = null
cancelFn = null
p = null
},
obj.cancelHttp = () => {
console.log('cancel: ', obj)
if (!obj.requestObj) return obj.isCancelled = true
obj.cancelFn(new Error(requestMsg.cancelRequest))
cancelHttp(obj.requestObj)
obj.requestObj = null
obj.cancelFn = null
obj.promise = obj.cancelHttp = null
}
return obj
}
@@ -96,19 +86,22 @@ const buildHttpPromose = (url, options) => {
export const httpFetch = (url, options = { method: 'get' }) => {
const requestObj = buildHttpPromose(url, options)
requestObj.promise = requestObj.promise.catch(err => {
if (err.code === 'ETIMEDOUT' || err.code == 'ESOCKETTIMEDOUT') {
const { promise, cancelHttp } = httpFetch(url, options)
requestObj.cancelHttp()
requestObj.cancelHttp = cancelHttp
return promise
}
console.log('出错', err)
if (err.message === 'socket hang up') {
// window.globalObj.apiSource = 'temp'
return Promise.reject(new Error(requestMsg.unachievable))
}
if (err.code === 'ENOTFOUND') return Promise.reject(new Error(requestMsg.notConnectNetwork))
return Promise.reject(err)
switch (err.code) {
case 'ETIMEDOUT':
case 'ESOCKETTIMEDOUT':
return Promise.reject(new Error(requestMsg.timeout))
case 'ENOTFOUND':
return Promise.reject(new Error(requestMsg.notConnectNetwork))
default:
return Promise.reject(err)
}
})
console.log(requestObj)
return requestObj
}
@@ -117,6 +110,7 @@ export const httpFetch = (url, options = { method: 'get' }) => {
* @param {*} index
*/
export const cancelHttp = requestObj => {
console.log(requestObj)
if (!requestObj) return
console.log('cancel:', requestObj.href)
requestObj.abort()