新增播放错误时自动切换歌曲设置
parent
1f97af6ff1
commit
9fd9449eca
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
- 新增播放详情页歌词右键菜单,原来设置-播放详情页设置的字体重置已迁移到此菜单内
|
- 新增播放详情页歌词右键菜单,原来设置-播放详情页设置的字体重置已迁移到此菜单内
|
||||||
- 新增歌词偏移设置,可以在播放详情页歌词右键菜单中使用
|
- 新增歌词偏移设置,可以在播放详情页歌词右键菜单中使用
|
||||||
|
- 新增设置-播放设置-播放错误时自动切换歌曲设置,默认开启(原来的行为),若你不想在遇到音频加载失败、url获取失败等错误时自动切歌可以关闭此设置
|
||||||
|
|
||||||
### 修复
|
### 修复
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ const path = require('path')
|
||||||
const os = require('os')
|
const os = require('os')
|
||||||
|
|
||||||
const defaultSetting = {
|
const defaultSetting = {
|
||||||
version: '1.0.54',
|
version: '1.0.55',
|
||||||
player: {
|
player: {
|
||||||
togglePlayMethod: 'listLoop',
|
togglePlayMethod: 'listLoop',
|
||||||
highQuality: false,
|
highQuality: false,
|
||||||
|
@ -18,6 +18,7 @@ const defaultSetting = {
|
||||||
audioVisualization: false,
|
audioVisualization: false,
|
||||||
waitPlayEndStop: true,
|
waitPlayEndStop: true,
|
||||||
waitPlayEndStopTime: '',
|
waitPlayEndStopTime: '',
|
||||||
|
autoSkipOnError: true,
|
||||||
},
|
},
|
||||||
playDetail: {
|
playDetail: {
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
|
|
@ -338,6 +338,7 @@
|
||||||
"setting__other_tray_theme_native": "White",
|
"setting__other_tray_theme_native": "White",
|
||||||
"setting__other_tray_theme_origin": "Primary Color",
|
"setting__other_tray_theme_origin": "Primary Color",
|
||||||
"setting__play": "Play",
|
"setting__play": "Play",
|
||||||
|
"setting__play_auto_skip_on_error": "Automatically switch songs on playback error",
|
||||||
"setting__play_detail": "Play details page settings",
|
"setting__play_detail": "Play details page settings",
|
||||||
"setting__play_detail_align": "Lyric Alignment",
|
"setting__play_detail_align": "Lyric Alignment",
|
||||||
"setting__play_detail_align_center": "Centered",
|
"setting__play_detail_align_center": "Centered",
|
||||||
|
|
|
@ -338,16 +338,17 @@
|
||||||
"setting__other_tray_theme_native": "白色",
|
"setting__other_tray_theme_native": "白色",
|
||||||
"setting__other_tray_theme_origin": "原色",
|
"setting__other_tray_theme_origin": "原色",
|
||||||
"setting__play": "播放设置",
|
"setting__play": "播放设置",
|
||||||
|
"setting__play_auto_skip_on_error": "播放错误时自动切换歌曲",
|
||||||
"setting__play_detail": "播放详情页设置",
|
"setting__play_detail": "播放详情页设置",
|
||||||
"setting__play_detail_align": "歌词对齐方式",
|
"setting__play_detail_align": "歌词对齐方式",
|
||||||
"setting__play_detail_align_center": "居中",
|
"setting__play_detail_align_center": "居中",
|
||||||
"setting__play_detail_align_left": "居左",
|
"setting__play_detail_align_left": "居左",
|
||||||
"setting__play_detail_align_right": "居右",
|
"setting__play_detail_align_right": "居右",
|
||||||
"setting__play_detail_lyric_progress": "允许通过歌词调整播放进度",
|
|
||||||
"setting__play_detail_font_size": "歌词字体大小(可以在播放详情页使用键盘的 + - 调整字体大小)",
|
"setting__play_detail_font_size": "歌词字体大小(可以在播放详情页使用键盘的 + - 调整字体大小)",
|
||||||
"setting__play_detail_font_size_current": "当前字体大小:{size}",
|
"setting__play_detail_font_size_current": "当前字体大小:{size}",
|
||||||
"setting__play_detail_font_size_reset": "重置",
|
"setting__play_detail_font_size_reset": "重置",
|
||||||
"setting__play_detail_font_zoom": "缩放当前正在播放的歌词",
|
"setting__play_detail_font_zoom": "缩放当前正在播放的歌词",
|
||||||
|
"setting__play_detail_lyric_progress": "允许通过歌词调整播放进度",
|
||||||
"setting__play_lyric_lxlrc": "使用卡拉OK式歌词播放(如果支持)",
|
"setting__play_lyric_lxlrc": "使用卡拉OK式歌词播放(如果支持)",
|
||||||
"setting__play_lyric_s2t": "将播放与下载的歌词转换为繁体中文",
|
"setting__play_lyric_s2t": "将播放与下载的歌词转换为繁体中文",
|
||||||
"setting__play_lyric_transition": "显示歌词翻译",
|
"setting__play_lyric_transition": "显示歌词翻译",
|
||||||
|
|
|
@ -338,16 +338,17 @@
|
||||||
"setting__other_tray_theme_native": "白色",
|
"setting__other_tray_theme_native": "白色",
|
||||||
"setting__other_tray_theme_origin": "原色",
|
"setting__other_tray_theme_origin": "原色",
|
||||||
"setting__play": "播放設置",
|
"setting__play": "播放設置",
|
||||||
|
"setting__play_auto_skip_on_error": "播放錯誤時自動切換歌曲",
|
||||||
"setting__play_detail": "播放詳情頁設置",
|
"setting__play_detail": "播放詳情頁設置",
|
||||||
"setting__play_detail_align": "歌詞對齊方式",
|
"setting__play_detail_align": "歌詞對齊方式",
|
||||||
"setting__play_detail_align_center": "居中",
|
"setting__play_detail_align_center": "居中",
|
||||||
"setting__play_detail_align_left": "居左",
|
"setting__play_detail_align_left": "居左",
|
||||||
"setting__play_detail_align_right": "居右",
|
"setting__play_detail_align_right": "居右",
|
||||||
"setting__play_detail_lyric_progress": "允許通過歌詞調整播放進度",
|
|
||||||
"setting__play_detail_font_size": "歌詞字體大小(可以在播放詳情頁使用鍵盤的 + - 調整字體大小)",
|
"setting__play_detail_font_size": "歌詞字體大小(可以在播放詳情頁使用鍵盤的 + - 調整字體大小)",
|
||||||
"setting__play_detail_font_size_current": "當前字體大小:{size}",
|
"setting__play_detail_font_size_current": "當前字體大小:{size}",
|
||||||
"setting__play_detail_font_size_reset": "重置",
|
"setting__play_detail_font_size_reset": "重置",
|
||||||
"setting__play_detail_font_zoom": "縮放當前正在播放的歌詞",
|
"setting__play_detail_font_zoom": "縮放當前正在播放的歌詞",
|
||||||
|
"setting__play_detail_lyric_progress": "允許通過歌詞調整播放進度",
|
||||||
"setting__play_lyric_lxlrc": "使用卡拉OK式歌詞播放(如果支持)",
|
"setting__play_lyric_lxlrc": "使用卡拉OK式歌詞播放(如果支持)",
|
||||||
"setting__play_lyric_s2t": "將播放與下載的歌詞轉換為繁體中文",
|
"setting__play_lyric_s2t": "將播放與下載的歌詞轉換為繁體中文",
|
||||||
"setting__play_lyric_transition": "顯示歌詞翻譯",
|
"setting__play_lyric_transition": "顯示歌詞翻譯",
|
||||||
|
|
|
@ -2,8 +2,10 @@ import { onBeforeUnmount, useI18n } from '@renderer/utils/vueTools'
|
||||||
import { player as eventPlayerNames } from '@renderer/event/names'
|
import { player as eventPlayerNames } from '@renderer/event/names'
|
||||||
import { wait, waitCancel } from '@renderer/utils/tools'
|
import { wait, waitCancel } from '@renderer/utils/tools'
|
||||||
import { musicInfo, musicInfoItem, playMusicInfo } from '@renderer/core/share/player'
|
import { musicInfo, musicInfoItem, playMusicInfo } from '@renderer/core/share/player'
|
||||||
|
import { setStop, isEmpty } from '@renderer/plugins/player'
|
||||||
|
|
||||||
export default ({
|
export default ({
|
||||||
|
setting,
|
||||||
playNext,
|
playNext,
|
||||||
setAllStatus,
|
setAllStatus,
|
||||||
setUrl,
|
setUrl,
|
||||||
|
@ -50,7 +52,7 @@ export default ({
|
||||||
|
|
||||||
const handleLoadstart = () => {
|
const handleLoadstart = () => {
|
||||||
if (global.isPlayedStop) return
|
if (global.isPlayedStop) return
|
||||||
startLoadingTimeout()
|
if (setting.value.player.autoSkipOnError) startLoadingTimeout()
|
||||||
setAllStatus(t('player__loading'))
|
setAllStatus(t('player__loading'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +81,7 @@ export default ({
|
||||||
if (!musicInfo.songmid) return
|
if (!musicInfo.songmid) return
|
||||||
clearLoadingTimeout()
|
clearLoadingTimeout()
|
||||||
if (global.isPlayedStop) return
|
if (global.isPlayedStop) return
|
||||||
|
if (!isEmpty()) setStop()
|
||||||
if (playMusicInfo.listId != 'download' && errCode !== 1 && retryNum < 2) { // 若音频URL无效则尝试刷新2次URL
|
if (playMusicInfo.listId != 'download' && errCode !== 1 && retryNum < 2) { // 若音频URL无效则尝试刷新2次URL
|
||||||
// console.log(this.retryNum)
|
// console.log(this.retryNum)
|
||||||
retryNum++
|
retryNum++
|
||||||
|
@ -87,9 +90,11 @@ export default ({
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setting.value.player.autoSkipOnError) {
|
||||||
setAllStatus(t('player__error'))
|
setAllStatus(t('player__error'))
|
||||||
addDelayNextTimeout()
|
addDelayNextTimeout()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handleSetPlayInfo = () => {
|
const handleSetPlayInfo = () => {
|
||||||
retryNum = 0
|
retryNum = 0
|
||||||
|
|
|
@ -31,7 +31,7 @@ export default ({ setting, playNext }) => {
|
||||||
if (skipTime > playProgress.maxPlayTime) skipTime = (playProgress.maxPlayTime - currentTime) / 2
|
if (skipTime > playProgress.maxPlayTime) skipTime = (playProgress.maxPlayTime - currentTime) / 2
|
||||||
if (skipTime - mediaBuffer.playTime < 1 || playProgress.maxPlayTime - skipTime < 1) {
|
if (skipTime - mediaBuffer.playTime < 1 || playProgress.maxPlayTime - skipTime < 1) {
|
||||||
mediaBuffer.playTime = 0
|
mediaBuffer.playTime = 0
|
||||||
playNext()
|
if (setting.value.player.autoSkipOnError) playNext()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
startBuffering()
|
startBuffering()
|
||||||
|
|
|
@ -87,12 +87,14 @@ export default ({ setting }) => {
|
||||||
const { addDelayNextTimeout, clearDelayNextTimeout } = useDelayNextTimeout({ playNext, timeout: 5000 })
|
const { addDelayNextTimeout, clearDelayNextTimeout } = useDelayNextTimeout({ playNext, timeout: 5000 })
|
||||||
const { addDelayNextTimeout: addLoadTimeout, clearDelayNextTimeout: clearLoadTimeout } = useDelayNextTimeout({ playNext, timeout: 123000 })
|
const { addDelayNextTimeout: addLoadTimeout, clearDelayNextTimeout: clearLoadTimeout } = useDelayNextTimeout({ playNext, timeout: 123000 })
|
||||||
|
|
||||||
|
let isGettingUrl = false
|
||||||
const setUrl = (targetSong, isRefresh, isRetryed = false) => {
|
const setUrl = (targetSong, isRefresh, isRetryed = false) => {
|
||||||
let type = getPlayType(setting.value.player.highQuality, targetSong)
|
let type = getPlayType(setting.value.player.highQuality, targetSong)
|
||||||
// this.musicInfo.url = await getMusicUrl(targetSong, type)
|
// this.musicInfo.url = await getMusicUrl(targetSong, type)
|
||||||
setAllStatus(t('player__geting_url'))
|
setAllStatus(t('player__geting_url'))
|
||||||
addLoadTimeout()
|
if (setting.value.player.autoSkipOnError) addLoadTimeout()
|
||||||
|
|
||||||
|
isGettingUrl = true
|
||||||
return getUrl({
|
return getUrl({
|
||||||
musicInfo: targetSong,
|
musicInfo: targetSong,
|
||||||
type,
|
type,
|
||||||
|
@ -113,10 +115,11 @@ export default ({ setting }) => {
|
||||||
if (err.message == requestMsg.cancelRequest) return
|
if (err.message == requestMsg.cancelRequest) return
|
||||||
if (!isRetryed) return setUrl(targetSong, isRefresh, true)
|
if (!isRetryed) return setUrl(targetSong, isRefresh, true)
|
||||||
setAllStatus(err.message)
|
setAllStatus(err.message)
|
||||||
addDelayNextTimeout()
|
if (setting.value.player.autoSkipOnError) addDelayNextTimeout()
|
||||||
return Promise.reject(err)
|
return Promise.reject(err)
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
clearLoadTimeout()
|
clearLoadTimeout()
|
||||||
|
if (targetSong === musicInfoItem.value) isGettingUrl = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const setImg = ({ listId, musicInfo: targetSong }) => {
|
const setImg = ({ listId, musicInfo: targetSong }) => {
|
||||||
|
@ -162,6 +165,7 @@ export default ({ setting }) => {
|
||||||
usePlayProgress({ setting, playNext })
|
usePlayProgress({ setting, playNext })
|
||||||
useMediaSessionInfo({ playPrev, playNext })
|
useMediaSessionInfo({ playPrev, playNext })
|
||||||
usePlayEvent({
|
usePlayEvent({
|
||||||
|
setting,
|
||||||
playNext,
|
playNext,
|
||||||
setAllStatus,
|
setAllStatus,
|
||||||
setUrl,
|
setUrl,
|
||||||
|
@ -313,10 +317,10 @@ export default ({ setting }) => {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
setResource(filePath)
|
if (!isGettingUrl) setResource(filePath)
|
||||||
} else {
|
} else {
|
||||||
// if (!this.assertApiSupport(this.targetSong.source)) return this.playNext()
|
// if (!this.assertApiSupport(this.targetSong.source)) return this.playNext()
|
||||||
setUrl(musicInfoItem.value)
|
if (!isGettingUrl) setUrl(musicInfoItem.value)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ dd
|
||||||
base-checkbox(id="setting_player_save_play_time" v-model="currentStting.player.isSavePlayTime" :label="$t('setting__play_save_play_time')")
|
base-checkbox(id="setting_player_save_play_time" v-model="currentStting.player.isSavePlayTime" :label="$t('setting__play_save_play_time')")
|
||||||
.gap-top
|
.gap-top
|
||||||
base-checkbox(id="setting_player_lyric_transition" v-model="currentStting.player.isShowLyricTranslation" :label="$t('setting__play_lyric_transition')")
|
base-checkbox(id="setting_player_lyric_transition" v-model="currentStting.player.isShowLyricTranslation" :label="$t('setting__play_lyric_transition')")
|
||||||
|
.gap-top
|
||||||
|
base-checkbox(id="setting_player_auto_skip_on_error" v-model="currentStting.player.autoSkipOnError" :label="$t('setting__play_auto_skip_on_error')")
|
||||||
.gap-top
|
.gap-top
|
||||||
base-checkbox(id="setting_player_lyric_s2t" v-model="currentStting.player.isS2t" :label="$t('setting__play_lyric_s2t')")
|
base-checkbox(id="setting_player_lyric_s2t" v-model="currentStting.player.isS2t" :label="$t('setting__play_lyric_s2t')")
|
||||||
.gap-top
|
.gap-top
|
||||||
|
|
|
@ -16,6 +16,7 @@ export const currentStting = ref({
|
||||||
audioVisualization: false,
|
audioVisualization: false,
|
||||||
waitPlayEndStop: true,
|
waitPlayEndStop: true,
|
||||||
waitPlayEndStopTime: '',
|
waitPlayEndStopTime: '',
|
||||||
|
autoSkipOnError: true,
|
||||||
},
|
},
|
||||||
playDetail: {
|
playDetail: {
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
|
Loading…
Reference in New Issue