项目说明
TurboDL 是什么、能做什么、怎么加进项目、API 有哪些 —— 就是仓库里的那篇 README。
下面每一页都是仓库里的一个文件,官网与 GitHub 读的是同一份源 —— 所以两边不会各说各话。每页都留了原文入口,想拿原始文件随时可以拿。
下表就是全部文档:左边是仓库里的路径,右边是它变成的页面。重建站点时两边由同一个源渲染,改任何一边都会反映到另一边。
docs/ → 网站
没有对应语言版本的那几页会退回另一种语言的原文,并在页首说明。
全部通过三样东西完成:一个依赖、一个配置对象、一次提交。暂停、继续、取消、批量与诊断都在同一个 client 上。
// build.gradle.kts
dependencies {
implementation("dev.turbodl:turbodl-core:0.4.1.0")
}
// Kotlin
val client = TurboClient(TurboConfig(maxConnectionsPerTask = 16))
val id = client.submit(DownloadRequest(url, File("out.bin")))
val result = client.await(id)java -jar turbodl-cli-all.jar <url> -o out.bin -c 64
java -jar turbodl-cli-all.jar <url> --json # NDJSON
java -jar turbodl-cli-all.jar --batch tasks.txt # one URL per line{"type":"start","url":"<url>","output":"out.bin"}
{"type":"timing","stage":"metadata","t_ms":184,"probe_ms":96,"resume":""}
{"type":"progress","state":"downloading","downloaded":222732288,"total":358411469,"percent":62,"speed":19503514,"connections":16,"eta_ms":7020}
{"type":"completed","url":"<url>","file":"out.bin","bytes":358411469,"sha256":"0f3a…"}
{"type":"summary","total":1,"failed":0}九个字段,全部公开、全部有明确取值域。运行时没有别的可调项 —— 引擎没有隐藏旋钮,也没有打电话回家的默认值。
TurboConfig 的字段
取值是 TurboConfig.kt 里的默认值;每一个都能按 client 单独设置。
一个插件 = 一个 JAR + 这个文件。参考页列了每个字段的类型、是否必填、以及允许的取值。
turbodl-plugin.json
{
"manifestVersion": "1.0",
"id": "parser.example",
"name": "Example parser",
"description": "Turns example:// links into download requests.",
"version": "0.1.0",
"author": "you",
"homepage": "https://github.com/you/turbodl-plugin-example",
"license": "MIT",
"category": "turbodl-parser",
"capabilities": [
"dev.turbodl.cap.parser"
],
"protocols": [
"example"
],
"turbodl": {
"apiMajor": 1,
"requiredApiVersion": "1.0.0"
},
"entry": {
"language": "kotlin",
"pluginClass": "com.example.ExamplePlugin"
},
"extensionPoints": [
"turbo.linkParser"
]
}与「清单字段参考」那一页用同一个常量渲染,两页不会各说各话。
TurboDL 是什么、能做什么、怎么加进项目、API 有哪些 —— 就是仓库里的那篇 README。
怎么写出一个插件、怎么被加载进来:接口、分类,以及你必须遵守的生命周期。
兼容性规则:什么算稳定 API、版本怎么协商、命名怎么定,以及插件不能弯的安全底线。
没有需要注册的中心仓库。插件靠 GitHub topic 加一份清单被发现 —— 这套约定就是全部。
`host`/`plugin` ABI、构成一切的那三个原语,以及脚本被有意禁止做的事情。
加载器为什么长这样:runtime 与 context 的归属、卸载顺序,以及宿主一侧的边界。
turbodl-plugin.json 的每一个字段 —— 由校验它的那份 JSON Schema 生成。
这个项目的每个设计问题都由三条规则决定: