Merge pull request #3798 from Seaward233/preview-features

新增下载视频时选择是否使用备用下载地址的功能
This commit is contained in:
Grant Howard 2022-11-11 08:42:10 +08:00 committed by GitHub
commit df8899123a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,6 +45,10 @@
正在计算大小 正在计算大小
</div> </div>
</template> </template>
<div class="download-video-config-item">
<div class="download-video-config-title">使用备用下载地址:</div>
<SwitchBox v-model="useBackupUrls" />
</div>
<component <component
:is="a.component" :is="a.component"
v-for="a of assetsWithOptions" v-for="a of assetsWithOptions"
@ -86,7 +90,7 @@ import { getComponentSettings } from '@/core/settings'
import { matchUrlPattern } from '@/core/utils' import { matchUrlPattern } from '@/core/utils'
import { logError } from '@/core/utils/log' import { logError } from '@/core/utils/log'
import { formatFileSize } from '@/core/utils/formatters' import { formatFileSize } from '@/core/utils/formatters'
import { VPopup, VButton, VDropdown, VIcon } from '@/ui' import { VPopup, VButton, VDropdown, VIcon, SwitchBox } from '@/ui'
import { registerAndGetData } from '@/plugins/data' import { registerAndGetData } from '@/plugins/data'
import { allQualities, VideoQuality } from '@/components/video/video-quality' import { allQualities, VideoQuality } from '@/components/video/video-quality'
import { Toast } from '@/core/toast' import { Toast } from '@/core/toast'
@ -127,6 +131,7 @@ const { basicConfig } = getComponentSettings('downloadVideo').options as {
api: string api: string
quality: number quality: number
output: string output: string
useBackupUrls: boolean
} }
} }
const filterData = <T extends { match?: TestPattern }>(items: T[]) => { const filterData = <T extends { match?: TestPattern }>(items: T[]) => {
@ -146,6 +151,7 @@ export default Vue.extend({
VButton, VButton,
VDropdown, VDropdown,
VIcon, VIcon,
SwitchBox,
}, },
props: { props: {
triggerElement: { triggerElement: {
@ -154,6 +160,7 @@ export default Vue.extend({
}, },
data() { data() {
const lastOutput = basicConfig.output const lastOutput = basicConfig.output
const lastUseBackupUrls = basicConfig.useBackupUrls
return { return {
open: false, open: false,
busy: false, busy: false,
@ -173,6 +180,7 @@ export default Vue.extend({
selectedApi: undefined, selectedApi: undefined,
outputs, outputs,
selectedOutput: outputs.find(it => it.name === lastOutput) || outputs[0], selectedOutput: outputs.find(it => it.name === lastOutput) || outputs[0],
useBackupUrls: lastUseBackupUrls || false,
} }
}, },
computed: { computed: {
@ -218,6 +226,12 @@ export default Vue.extend({
} }
basicConfig.output = output.name basicConfig.output = output.name
}, },
useBackupUrls(useBackupUrls: boolean) {
if (useBackupUrls === undefined) {
return
}
basicConfig.useBackupUrls = useBackupUrls
},
}, },
mounted() { mounted() {
coreApis.observer.videoChange(() => { coreApis.observer.videoChange(() => {
@ -304,6 +318,16 @@ export default Vue.extend({
Toast.info('未接收到可下载数据, 请检查输入源和格式是否适用于当前视频.', '下载视频', 3000) Toast.info('未接收到可下载数据, 请检查输入源和格式是否适用于当前视频.', '下载视频', 3000)
return return
} }
if (this.useBackupUrls) {
videoInfos.forEach(videoInfo => {
videoInfo.fragments.forEach(fragment => {
fragment.url =
fragment.backupUrls && fragment.backupUrls.length !== 0
? fragment.backupUrls.at(0)
: fragment.url
})
})
}
const action = new DownloadVideoAction(videoInfos) const action = new DownloadVideoAction(videoInfos)
const extraAssets = ( const extraAssets = (
await Promise.all( await Promise.all(