mirror of
https://github.com/lanyeeee/bilibili-video-downloader.git
synced 2026-09-08 17:16:52 +08:00
feat: 支持修改下载内容
This commit is contained in:
@@ -11,8 +11,9 @@ import {
|
|||||||
PhFolderOpen,
|
PhFolderOpen,
|
||||||
PhFileVideo,
|
PhFileVideo,
|
||||||
PhMagnifyingGlass,
|
PhMagnifyingGlass,
|
||||||
|
PhWrench,
|
||||||
} from '@phosphor-icons/vue'
|
} from '@phosphor-icons/vue'
|
||||||
import { ProgressProps } from 'naive-ui'
|
import { ProgressProps, useDialog } from 'naive-ui'
|
||||||
import UpInfoBadge from '../../../components/UpInfoBadge.vue'
|
import UpInfoBadge from '../../../components/UpInfoBadge.vue'
|
||||||
import { computed, DeepReadonly, inject } from 'vue'
|
import { computed, DeepReadonly, inject } from 'vue'
|
||||||
import ColorfulTag from '../../../components/ColorfulTag.vue'
|
import ColorfulTag from '../../../components/ColorfulTag.vue'
|
||||||
@@ -20,6 +21,9 @@ import { searchPaneRefKey } from '../../../injection_keys.ts'
|
|||||||
import { ProgressData } from '../DownloadPane.vue'
|
import { ProgressData } from '../DownloadPane.vue'
|
||||||
import { ensureHttps } from '../../../utils.tsx'
|
import { ensureHttps } from '../../../utils.tsx'
|
||||||
import IconButton from '../../../components/IconButton.vue'
|
import IconButton from '../../../components/IconButton.vue'
|
||||||
|
import ModifyProgressDialogContent from './ModifyProgressDialogContent.vue'
|
||||||
|
|
||||||
|
const dialog = useDialog()
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
|
|
||||||
@@ -128,6 +132,15 @@ function handleSearchClick() {
|
|||||||
searchPaneRef?.value?.search(`ep${props.p.ep_id}`, 'Cheese')
|
searchPaneRef?.value?.search(`ep${props.p.ep_id}`, 'Cheese')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleModifyClick() {
|
||||||
|
const dialogReactive = dialog.create({
|
||||||
|
title: '修改下载内容',
|
||||||
|
showIcon: false,
|
||||||
|
draggable: true,
|
||||||
|
content: () => <ModifyProgressDialogContent p={props.p} destroyDialog={() => dialogReactive.destroy()} />,
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -252,6 +265,9 @@ function handleSearchClick() {
|
|||||||
<IconButton title="在浏览器中打开" :href="href">
|
<IconButton title="在浏览器中打开" :href="href">
|
||||||
<PhGoogleChromeLogo :size="24" />
|
<PhGoogleChromeLogo :size="24" />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
<IconButton title="修改下载内容" @click="handleModifyClick">
|
||||||
|
<PhWrench :size="24" />
|
||||||
|
</IconButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { DeepReadonly, ref } from 'vue'
|
||||||
|
import { commands } from '../../../bindings'
|
||||||
|
import { ProgressData } from '../DownloadPane.vue'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
p: DeepReadonly<ProgressData>
|
||||||
|
destroyDialog: () => void
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const progressData = ref<ProgressData>(JSON.parse(JSON.stringify(props.p)))
|
||||||
|
|
||||||
|
async function restartDownloadTask() {
|
||||||
|
await commands.restartDownloadTask({
|
||||||
|
task_id: progressData.value.task_id,
|
||||||
|
|
||||||
|
video_task_selected: progressData.value.video_task.selected,
|
||||||
|
audio_task_selected: progressData.value.audio_task.selected,
|
||||||
|
merge_selected: progressData.value.video_process_task.merge_selected,
|
||||||
|
embed_chapter_selected: progressData.value.video_process_task.embed_chapter_selected,
|
||||||
|
embed_skip_selected: progressData.value.video_process_task.embed_skip_selected,
|
||||||
|
subtitle_task_selected: progressData.value.subtitle_task.selected,
|
||||||
|
xml_danmaku_selected: progressData.value.danmaku_task.xml_selected,
|
||||||
|
ass_danmaku_selected: progressData.value.danmaku_task.ass_selected,
|
||||||
|
json_danmaku_selected: progressData.value.danmaku_task.json_selected,
|
||||||
|
cover_task_selected: progressData.value.cover_task.selected,
|
||||||
|
nfo_task_selected: progressData.value.nfo_task.selected,
|
||||||
|
json_task_selected: progressData.value.json_task.selected,
|
||||||
|
|
||||||
|
video_quality: progressData.value.video_task.video_quality,
|
||||||
|
codec_type: progressData.value.video_task.codec_type,
|
||||||
|
audio_quality: progressData.value.audio_task.audio_quality,
|
||||||
|
})
|
||||||
|
|
||||||
|
props.destroyDialog()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-row-2">
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="w-15 font-bold">主要内容</span>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.video_task.selected">下载视频</n-checkbox>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.audio_task.selected">下载音频</n-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="w-15 font-bold">视频处理</span>
|
||||||
|
<n-tooltip placement="top" trigger="hover">
|
||||||
|
<div>自动合并音频和视频</div>
|
||||||
|
<template #trigger>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.video_process_task.merge_selected">
|
||||||
|
自动合并
|
||||||
|
</n-checkbox>
|
||||||
|
</template>
|
||||||
|
</n-tooltip>
|
||||||
|
<n-tooltip placement="top" trigger="hover">
|
||||||
|
<div>如果视频有章节分段,则将章节信息嵌入mp4文件的元数据中</div>
|
||||||
|
<div>使视频在各类播放器中支持章节导航(例如进度条分段)</div>
|
||||||
|
<template #trigger>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.video_process_task.embed_chapter_selected">
|
||||||
|
标记章节
|
||||||
|
</n-checkbox>
|
||||||
|
</template>
|
||||||
|
</n-tooltip>
|
||||||
|
<n-tooltip placement="top" trigger="hover">
|
||||||
|
<div>将视频的广告部分以章节的形式嵌入mp4文件的元数据中</div>
|
||||||
|
<div>可以实现自动跳过广告(如果播放器支持的话)</div>
|
||||||
|
<template #trigger>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.video_process_task.embed_skip_selected">
|
||||||
|
标记广告
|
||||||
|
</n-checkbox>
|
||||||
|
</template>
|
||||||
|
</n-tooltip>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="w-15 font-bold">下载弹幕</span>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.danmaku_task.xml_selected">xml弹幕</n-checkbox>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.danmaku_task.ass_selected">ass弹幕</n-checkbox>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.danmaku_task.json_selected">json弹幕</n-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="w-15 font-bold">其他内容</span>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.subtitle_task.selected">下载字幕</n-checkbox>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.cover_task.selected">下载封面</n-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<span class="w-15 font-bold">元数据</span>
|
||||||
|
<n-tooltip placement="top" trigger="hover">
|
||||||
|
<div>还会顺便下载poster和fanart(如果有的话)</div>
|
||||||
|
<template #trigger>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.nfo_task.selected">nfo刮削</n-checkbox>
|
||||||
|
</template>
|
||||||
|
</n-tooltip>
|
||||||
|
<n-checkbox class="w-22" v-model:checked="progressData.json_task.selected">json刮削</n-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<n-button class="mt-2" type="primary" @click="restartDownloadTask">修改完毕,按照这个配置重新开始下载吧</n-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
Reference in New Issue
Block a user