你的第一个 FeaturePack
从零创建一个可加载的 FeaturePack。
以 http_pack 为模板,创建一个处理自定义协议的 Pack。
定义 Pack 类
from app.models.pack import FeaturePack, TaskParser
class MyPack(FeaturePack):
packId = "my_pack"
parsers = [MyParser]packId 全局唯一。parsers 列出这个 Pack 提供的所有 Parser。
实现 Parser
from app.models.task import Task, TaskOptions
from urllib.parse import urlparse
class MyParser(TaskParser):
priority = 40 # 数字越小越优先匹配
def match(self, options: TaskOptions) -> bool:
return urlparse(options.url).hostname == "example.com"
async def parse(self, options: TaskOptions) -> Task:
# 构造并返回一个 Task
task = HttpTask(
name="example.zip",
url=options.url,
fileSize=0,
outputFolder=options.outputFolder,
)
task.addStep(HttpTaskStep(...))
return taskmatch()返回True时此 Parser 接管这个 URLparse()负责将 URL 解析为可执行的 Taskpriority越低越先被检查,HTTP 兜底 Parser 是 100
添加 manifest.toml
在 features/my_pack/ 下创建 manifest.toml:
[pack]
entry = "pack.py"
class = "MyPack"
dependencies = ["http_pack"]entry— 入口文件名class— 入口文件中的 Pack 类名dependencies— 依赖的其他 Pack 目录名(按拓扑排序加载,先加载依赖)
启动时 FeatureService.load() 自动扫描 features/ 目录,读取每个子目录的 manifest.toml 并加载。不需要手动注册。
测试
启动应用,粘贴一个 example.com 的链接。如果 Parser 正常匹配,会弹出确认窗口。