feat: 新增客户端协议生成系统,支持8种主流下载工具

🚀 核心功能
- 新增完整的客户端下载链接生成器系统
- 支持ARIA2、Motrix、比特彗星、迅雷、wget、cURL、IDM、FDM、PowerShell等8种客户端
- 自动处理防盗链参数(User-Agent、Referer、Cookie等)
- 提供可扩展的生成器架构,支持自定义客户端

🔧 技术实现
- ClientLinkGeneratorFactory: 工厂模式管理生成器
- DownloadLinkMeta: 元数据存储下载信息
- ClientLinkUtils: 便捷工具类
- 线程安全的ConcurrentHashMap设计

🌐 前端集成
- 新增ClientLinks.vue界面,支持客户端链接展示
- Element Plus图标系统,混合图标显示
- 客户端检测逻辑优化,避免自动打开外部应用
- 移动端和PC端环境判断

📚 文档完善
- 完整的CLIENT_LINK_GENERATOR_GUIDE.md使用指南
- API文档和测试用例
- 输出示例和最佳实践

从单纯的网盘解析工具升级为完整的下载解决方案生态
This commit is contained in:
q
2025-10-24 09:25:57 +08:00
parent 231d5c3fb9
commit 42b721eabf
47 changed files with 3740 additions and 96 deletions

37
test_client_links.java Normal file
View File

@@ -0,0 +1,37 @@
import cn.qaiu.entity.ShareLinkInfo;
import cn.qaiu.parser.clientlink.ClientLinkGeneratorFactory;
import cn.qaiu.parser.clientlink.DownloadLinkMeta;
import java.util.Map;
public class TestClientLinks {
public static void main(String[] args) {
// 创建一个测试用的 ShareLinkInfo模拟解析器没有实现客户端下载文件元数据的情况
ShareLinkInfo shareLinkInfo = ShareLinkInfo.newBuilder()
.shareUrl("https://example.com/share/test123")
.panName("测试网盘")
.type("test")
.build();
// 添加文件名信息(模拟解析器只解析了文件名)
shareLinkInfo.getOtherParam().put("fileInfo", new cn.qaiu.entity.FileInfo() {
@Override
public String getFileName() {
return "test-file.zip";
}
});
// 测试 DownloadLinkMeta.fromShareLinkInfo() 方法
DownloadLinkMeta meta = DownloadLinkMeta.fromShareLinkInfo(shareLinkInfo);
System.out.println("DownloadLinkMeta: " + meta);
System.out.println("Has valid URL: " + meta.hasValidUrl());
// 测试生成客户端链接
Map<cn.qaiu.parser.clientlink.ClientLinkType, String> clientLinks =
ClientLinkGeneratorFactory.generateAll(shareLinkInfo);
System.out.println("Generated client links count: " + clientLinks.size());
for (Map.Entry<cn.qaiu.parser.clientlink.ClientLinkType, String> entry : clientLinks.entrySet()) {
System.out.println(entry.getKey().getDisplayName() + ": " + entry.getValue());
}
}
}