@@ -67,7 +67,7 @@ uv run yutto -v
6767│ ├── __init__.py
6868│ ├── __main__.py # 命令行入口,含所有命令选项
6969│ ├── __version__.py
70- │ ├── _typing .py # yutto 的主要类型声明(非全部,部分类型是定义在自己模块之内的)
70+ │ ├── types .py # yutto 的主要类型声明(非全部,部分类型是定义在自己模块之内的)
7171│ ├── api # bilibili API 的基本函数封装,输入输出转换为 yutto 的主要类型
7272│ │ ├── __init__.py
7373│ │ ├── bangumi.py # 番剧相关
@@ -77,7 +77,12 @@ uv run yutto -v
7777│ │ ├── space.py # 个人空间相关(收藏夹、合集、列表)
7878│ │ ├── ugc_video.py # 投稿视频相关
7979│ │ └── user_info.py # 用户信息相关
80- │ ├── bilibili_typing # bilibili 自己的一些数据类型绑定
80+ │ ├── cli # 命令行界面相关模块
81+ │ │ ├── __init__.py
82+ │ │ ├── cli.py # 命令行解析
83+ │ │ └── settings.py # 设置相关
84+ │ ├── download_manager.py # 下载管理器
85+ │ ├── media # bilibili 自己的一些数据类型绑定
8186│ │ ├── __init__.py
8287│ │ ├── codec.py # bilibili 的 codec
8388│ │ └── quality.py # bilibili 的 qn
@@ -98,15 +103,16 @@ uv run yutto -v
98103│ │ ├── user_all_favourites.py # 全部收藏夹
99104│ │ ├── user_all_ugc_videos.py # 个人空间全部
100105│ │ └── user_watch_later.py # 稍后再看
101- │ ├── processor # 一些在提取/下载过程中用到的基本处理方法(该部分很可能进一步重构)
106+ │ ├── downloader # 下载器相关模块
102107│ │ ├── __init__.py
103108│ │ ├── downloader.py # 下载器
104- │ │ ├── parser.py # 文件解析器(解析任务列表、alias 文件)
105- │ │ ├── path_resolver.py # 路径处理器(需处理路径变量)
106109│ │ ├── progressbar.py # 进度条(本部分可替换成为其他行为以支持更丰富的进度显示方式)
107110│ │ └── selector.py # 选集、内容过滤器(本部分可修改成支持交互的)
111+ │ ├── input_parser.py # 文件解析器(解析任务列表、alias 文件)
112+ │ ├── mcp_server.py # MCP 服务器
113+ │ ├── path_templates.py # 路径处理器(需处理路径变量)
108114│ ├── py.typed
109- │ ├── utils # yutto 无关或弱相关模块,不应依赖 yutto 强相关模块(api、extractor、processor ),含部分类型资源的基本封装(弹幕、字幕、描述文件)
115+ │ ├── utils # yutto 无关或弱相关模块,不应依赖 yutto 强相关模块(api、extractor、downloader ),含部分类型资源的基本封装(弹幕、字幕、描述文件)
110116│ │ ├── __init__.py
111117│ │ ├── asynclib.py # 封装部分异步相关方法
112118│ │ ├── console # 命令行打印相关
@@ -121,12 +127,13 @@ uv run yutto -v
121127│ │ ├── ffmpeg.py # FFmpeg 驱动单例模块
122128│ │ ├── file_buffer.py # 文件缓冲器(yutto 下载原理的核心)
123129│ │ ├── filter.py # 数据过滤器(根据时间过滤选择的剧集)
124- │ │ ├── funcutils # yutto 需要用的一些实用基本函数(很多是直接参考 StackOverflow 的)
130+ │ │ ├── functional # yutto 需要用的一些实用基本函数(很多是直接参考 StackOverflow 的)
125131│ │ │ ├── __init__.py # 一些实用函数
126- │ │ │ ├── aobject .py # 一个简单的抽象类
127- │ │ │ ├── as_sync .py # 异步转同步
132+ │ │ │ ├── async_object .py # 一个简单的抽象类
133+ │ │ │ ├── async_to_sync .py # 异步转同步
128134│ │ │ ├── data_access.py # 数据访问
129- │ │ │ ├── filter_none_value.py # 过滤 None 值
135+ │ │ │ ├── filter_none_values.py # 过滤 None 值
136+ │ │ │ ├── functional.py # 函数式编程工具
130137│ │ │ ├── singleton.py # 单例模式
131138│ │ │ └── xmerge.py # 合并多个迭代器
132139│ │ ├── metadata.py # 「资源文件」描述文件基本封装
@@ -147,7 +154,7 @@ uv run yutto -v
147154│ │ ├── test_ugc_video.py
148155│ │ └── test_user_info.py
149156│ ├── test_e2e.py # 端到端测试
150- │ ├── test_processor # processor 测试模块,对应 yutto/processor
157+ │ ├── test_processor # processor 测试模块,对应 yutto/downloader
151158│ │ ├── __init__.py
152159│ │ ├── test_downloader.py
153160│ │ ├── test_path_resolver.py
@@ -164,7 +171,7 @@ uv run yutto -v
164171切入代码的最好方式自然是从入口开始啦~ yutto 的命令行入口是 [ ` src/yutto/__main__.py ` ] ( ./src/yutto/__main__.py ) ,这里列出了 yutto 整个的工作流程:
165172
1661731 . 解析参数并利用 [ yutto/validator.py] ( ./src/yutto/validator.py ) 验证参数的正确性,虽然 argparse 已经做了基本的验证,但 validator 会进一步的验证。另外目前 validator 还会顺带做全局状态的设置的工作,这部分以后可能修改。
167- 2 . 利用 [ yutto/processor/parser .py] ( ./src/yutto/processor/parser .py ) 解析 alias 和任务列表
174+ 2 . 利用 [ yutto/input_parser .py] ( ./src/yutto/input_parser .py ) 解析 alias 和任务列表
1681753 . 遍历任务列表下载:
169176 1 . 初始化提取器 [ yutto/extractor/] ( ./src/yutto/extractor/ )
170177 2 . 利用所有提取器处理 id 为可识别的 url
@@ -179,7 +186,7 @@ uv run yutto -v
179186 3 . 选集(如果支持的话)
180187 4 . 根据列表构造协程任务(任务包含了解析信息和利用低阶提取器提取)
181188 5 . 构造解析任务
182- 5 . 依次执行解析任务,并将结果依次传入 [ ` src/yutto/utils /downloader.py ` ] ( src/yutto/utils/../processor /downloader.py ) 进行下载
189+ 5 . 依次执行解析任务,并将结果依次传入 [ ` src/yutto/downloader /downloader.py ` ] ( src/yutto/downloader /downloader.py ) 进行下载
183190 1 . 选择清晰度
184191 2 . 显示详细信息
185192 3 . 字幕、弹幕、描述文件等额外资源下载
0 commit comments