mirror of
https://github.com/lanyeeee/bilibili-video-downloader.git
synced 2026-09-04 23:17:45 +08:00
feat: 支持修改下载内容
This commit is contained in:
@@ -11,8 +11,9 @@ import {
|
||||
PhFolderOpen,
|
||||
PhFileVideo,
|
||||
PhMagnifyingGlass,
|
||||
PhWrench,
|
||||
} from '@phosphor-icons/vue'
|
||||
import { ProgressProps } from 'naive-ui'
|
||||
import { ProgressProps, useDialog } from 'naive-ui'
|
||||
import UpInfoBadge from '../../../components/UpInfoBadge.vue'
|
||||
import { computed, DeepReadonly, inject } from 'vue'
|
||||
import ColorfulTag from '../../../components/ColorfulTag.vue'
|
||||
@@ -20,6 +21,9 @@ import { searchPaneRefKey } from '../../../injection_keys.ts'
|
||||
import { ProgressData } from '../DownloadPane.vue'
|
||||
import { ensureHttps } from '../../../utils.tsx'
|
||||
import IconButton from '../../../components/IconButton.vue'
|
||||
import ModifyProgressDialogContent from './ModifyProgressDialogContent.vue'
|
||||
|
||||
const dialog = useDialog()
|
||||
|
||||
const store = useStore()
|
||||
|
||||
@@ -128,6 +132,15 @@ function handleSearchClick() {
|
||||
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>
|
||||
|
||||
<template>
|
||||
@@ -252,6 +265,9 @@ function handleSearchClick() {
|
||||
<IconButton title="在浏览器中打开" :href="href">
|
||||
<PhGoogleChromeLogo :size="24" />
|
||||
</IconButton>
|
||||
<IconButton title="修改下载内容" @click="handleModifyClick">
|
||||
<PhWrench :size="24" />
|
||||
</IconButton>
|
||||
</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