Files
dysync/docs/下载配置功能说明.md
T
yuming ad97fd3da5 整理仓库:扩展 gitignore、归档文档、清理冗余 Dockerfile
- .gitignore 新增忽略 .idea/、videos/、*.tar.gz、*.csproj.user、db 运行时文件
- 根目录 15 个中文运维 md 归档到 docs/
- 删除无部署脚本引用的 Dockerfile 与 Dockerfile-arm(保留 Dockerfile.prod)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 21:28:41 +08:00

237 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 下载配置功能说明
## 📋 功能概述
为了避免自动下载占用过多存储空间,系统现在支持可配置的下载策略。**默认情况下,系统不会自动下载视频**,只会同步视频信息到数据库。
## 🎯 功能特点
1. **默认不下载**:未配置的用户不会自动下载视频,避免占用存储空间
2. **按时间范围配置**:可以设置只下载指定天数内的视频(例如:只下载最近30天)
3. **按作者配置**:支持作者白名单和黑名单
4. **按类型配置**:可以分别控制是否下载"喜欢的视频"和"收藏的视频"
## ⚙️ 配置选项
### 1. 启用自动下载
- **开关**:启用/禁用自动下载功能
- **默认值**:关闭(`false`)
- **说明**:关闭后,系统只同步视频信息到数据库,不会下载视频文件
### 2. 下载时间范围
- **类型**:数字(天数)
- **默认值**:0(不限制)
- **说明**:
- `0`:不限制时间,下载所有符合条件的视频
- `30`:只下载最近30天的视频
- `90`:只下载最近90天的视频
- 最大支持 3650 天(10年)
### 3. 下载类型
- **下载喜欢的视频**:是否下载"喜欢的视频"(`ViedoType = "1"`)
- **下载收藏的视频**:是否下载"收藏的视频"(`ViedoType = "2"`)
- **默认值**:都关闭(`false`)
### 4. 作者白名单
- **类型**:多行文本(每行一个作者)
- **格式**:每行一个作者名称或作者ID
- **说明**:
- 配置后,**只有**白名单中的作者视频才会被下载
- 留空则不限制
- 支持作者名称或作者ID(`AuthorId`)
- 示例:
```
作者1
作者2
MS4wLjABAAAA...
```
### 5. 作者黑名单
- **类型**:多行文本(每行一个作者)
- **格式**:每行一个作者名称或作者ID
- **说明**:
- 配置后,黑名单中的作者视频**不会**被下载
- 留空则不限制
- 支持作者名称或作者ID(`AuthorId`)
- 示例:
```
作者1
作者2
MS4wLjABAAAA...
```
## 🔍 判断逻辑
系统按照以下顺序判断是否应该下载视频:
1. **检查是否启用自动下载**
- 如果未启用,直接跳过下载
2. **检查视频类型**
- 如果视频类型为"喜欢"(`ViedoType = "1"`),检查 `DownloadFavorite` 是否为 `true`
- 如果视频类型为"收藏"(`ViedoType = "2"`),检查 `DownloadCollect` 是否为 `true`
- 如果对应类型未启用,跳过下载
3. **检查时间范围**
- 如果配置了 `DownloadDaysRange > 0`,检查视频创建时间是否在范围内
- 超出时间范围的视频跳过下载
4. **检查作者白名单**
- 如果配置了白名单,检查作者是否在白名单中
- 不在白名单中的视频跳过下载
5. **检查作者黑名单**
- 如果配置了黑名单,检查作者是否在黑名单中
- 在黑名单中的视频跳过下载
6. **所有检查通过,开始下载**
## 📝 配置示例
### 示例 1:只下载最近30天的喜欢视频
```
启用自动下载:✅ 开启
下载时间范围:30 天
下载喜欢的视频:✅ 开启
下载收藏的视频:❌ 关闭
作者白名单:(留空)
作者黑名单:(留空)
```
### 示例 2:只下载指定作者的视频
```
启用自动下载:✅ 开启
下载时间范围:0(不限制)
下载喜欢的视频:✅ 开启
下载收藏的视频:✅ 开启
作者白名单:
作者1
作者2
MS4wLjABAAAA...
作者黑名单:(留空)
```
### 示例 3:排除某些作者,下载其他所有视频
```
启用自动下载:✅ 开启
下载时间范围:0(不限制)
下载喜欢的视频:✅ 开启
下载收藏的视频:✅ 开启
作者白名单:(留空)
作者黑名单:
不想下载的作者1
不想下载的作者2
```
### 示例 4:不自动下载(默认)
```
启用自动下载:❌ 关闭
(其他选项无效)
```
## 🚀 使用方法
1. **登录系统**,进入"设置"页面
2. **点击"修改配置"**按钮
3. **配置下载选项**:
- 开启"启用自动下载"
- 根据需要设置时间范围、类型、作者白名单/黑名单
4. **点击"确认"**保存配置
5. **系统会在下次同步时应用新配置**
## 📊 数据库变更
### AppConfig 表新增字段
```sql
-- 以下字段已添加到 dy_app_config 表
EnableAutoDownload BOOLEAN DEFAULT 0 -- 是否启用自动下载
DownloadDaysRange INTEGER DEFAULT 0 -- 下载时间范围(天数)
AuthorWhitelist TEXT -- 作者白名单(JSON数组)
AuthorBlacklist TEXT -- 作者黑名单(JSON数组)
DownloadFavorite BOOLEAN DEFAULT 0 -- 是否下载喜欢的视频
DownloadCollect BOOLEAN DEFAULT 0 -- 是否下载收藏的视频
```
## 🔧 技术实现
### 后端变更
1. **模型扩展**:`AppConfig` 模型新增下载配置字段
2. **服务新增**:`DownloadConfigService` 服务实现下载判断逻辑
3. **Job 修改**:
- `DouYinFavoritSyncJob`:在下载前检查配置
- `DouYinCollectSyncJob`:在下载前检查配置
4. **服务更新**:`CommonService` 支持保存和读取下载配置
### 前端变更
1. **配置页面**:`AppSet.vue` 新增下载配置界面
2. **表单字段**:添加下载相关的表单字段
3. **数据处理**:处理作者白名单/黑名单的 JSON 转换
## ⚠️ 注意事项
1. **默认行为**:未配置的用户默认不会下载视频,只会同步视频信息
2. **配置优先级**:白名单和黑名单同时配置时,黑名单优先级更高
3. **时间计算**:时间范围基于视频的创建时间(`CreateTime`),不是同步时间
4. **作者匹配**:支持按作者名称或作者ID匹配,不区分大小写
5. **配置生效**:配置修改后,会在下次同步任务执行时生效
## 🐛 故障排查
### 问题:配置了但视频仍然不下载
**检查项**:
1. 确认"启用自动下载"已开启
2. 确认对应的视频类型(喜欢/收藏)已开启
3. 检查时间范围是否合理(视频是否在范围内)
4. 检查作者是否在白名单中(如果配置了白名单)
5. 检查作者是否在黑名单中(如果配置了黑名单)
### 问题:配置了白名单但所有视频都不下载
**可能原因**:
- 作者名称或ID不匹配
- 白名单格式错误(应该是每行一个)
**解决方法**:
- 检查作者名称是否完全匹配(包括空格、特殊字符)
- 尝试使用作者ID而不是名称
- 查看日志中的"不符合下载配置"提示
### 问题:配置了时间范围但旧视频仍然下载
**可能原因**:
- 时间范围配置未生效
- 视频创建时间解析错误
**解决方法**:
- 确认配置已保存
- 检查日志中的时间判断逻辑
- 重启服务后重试
## 📚 相关文件
- **后端模型**:`model/AppConfig.cs`
- **下载服务**:`service/DownloadConfigService.cs`
- **配置服务**:`service/CommonService.cs`
- **喜欢视频Job**:`job/DouYinFavoritSyncJob.cs`
- **收藏视频Job**:`job/DouYinCollectSyncJob.cs`
- **前端配置页**:`app/src/pages/set/AppSet.vue`
- **API控制器**:`Controllers/ConfigController.cs`
---
**最后更新**:2024-11-24