feat: 支持修改下载内容

This commit is contained in:
lanyeeee
2026-01-27 15:20:27 +08:00
parent 948fecb7cd
commit 8c5cb7fa5c
2 changed files with 120 additions and 1 deletions
@@ -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>