Skip to content

fb0sh/ProxyDownloadManager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

158 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProxyDownloadManager

多代理下载管理器 — 基于 Tauri 2 + React 19 构建。

ProxyDownloadManager 是一款开源的多代理下载工具。每个下载任务可独立选择 HTTP / SOCKS5 代理,支持多候选代理自动切换。浏览器扩展一键拦截,多线程并发加速,断点续传不中断。

🚀 在线演示

👉 点此体验在线演示

无需安装,浏览器中即可体验完整的 ProxyDownloadManager 界面,包括下载管理、代理配置、实时进度等功能。

特性

  • 每下载独立选代理 — 每个任务可选择不同代理(HTTP / SOCKS5),支持多候选代理自动切换
  • 多线程并发下载 — 单任务最高 64 线程并行下载,自动根据文件大小调整连接数
  • 断点续传 — 支持 HTTP Range 请求,中断后自动恢复
  • 浏览器扩展联动 — Chrome / Edge / Firefox 扩展,右键菜单或自动拦截下载,URL 实时发送到桌面端
  • 剪贴板智能监测 — 自动识别剪贴板中的下载链接
  • 重试机制 — 下载失败自动切换代理和 User-Agent 重试
  • 重复检测 — 文件已存在时提示,缺失时自动重新下载
  • 下载日志 — 颜色分级日志,应用内可查看
  • 系统托盘 — 后台下载、开机自启、通知推送
  • 国际化 — 中英文界面
  • 跨平台 — macOS、Windows、Linux

演示

image image image image

下载

Releases 页面 下载对应平台的安装包。

平台 格式
macOS .dmg
Windows .exe / .msi
Linux .deb / .rpm / .AppImage

浏览器扩展

ProxyDownloadManager 附带浏览器扩展,Chrome / Edge / Firefox 均可使用。

macOS — 安装步骤

扩展文件位于 ~/Library/Application Support/com.fb0sh.proxydownloadmanager/extensions/,需先显示 ~/Library 文件夹。

  1. 打开 Finder → 菜单栏 前往
  2. 按住 Option 键 → 资源库 出现,点击进入

    或按 ⌘⇧G,输入 ~/Library 回车

  3. 进入 Application Supportcom.fb0sh.proxydownloadmanagerextensions

Chrome / Edge

  1. 打开浏览器,访问 chrome://extensionsedge://extensions
  2. 开启 开发者模式(右上角开关)
  3. 点击 加载已解压的扩展,选择 extensions 目录下的 chromeedge 文件夹
  4. 启用扩展,点击工具栏图标可开关下载拦截

Firefox

  1. 打开 Firefox,访问 about:debugging#/runtime/this-firefox
  2. 点击 加载临时附加组件,选择 firefox 目录下的 manifest.json
  3. 扩展为临时加载,重启后需重新加载

Windows / Linux — 安装步骤

  1. 打开应用,点击工具栏 Extensions
  2. 点击 Open Folder 打开扩展目录
  3. 同上 Chrome / Edge / Firefox 的加载步骤

开发环境

依赖

启动

pnpm install
pnpm tauri dev

项目结构

├── src/                              # React 前端
│   ├── components/
│   │   ├── dialogs/                  # SettingsDialog、AboutDialog、PropertiesDialog 等
│   │   ├── columns.tsx               # DownloadTable 列定义
│   │   ├── Layout.tsx / Toolbar.tsx  # 布局与工具栏
│   │   └── DownloadTable.tsx         # 下载列表主表格
│   ├── hooks/
│   │   ├── useDownloadEvents.ts      # 统一 Tauri 事件订阅
│   │   ├── useDownloadDetail.ts      # 下载详情(PropertiesDialog/DetailsWindow 共用)
│   │   ├── useSettingsForm.ts        # 设置表单状态管理
│   │   ├── useUpdateChecker.ts       # 版本检查逻辑
│   │   ├── useContextMenu.ts         # 右键菜单状态
│   │   └── useWindowManager.ts       # Tauri 窗口创建
│   ├── contexts/AppContext.tsx        # 全局状态 + actions context
│   ├── utils/
│   │   ├── format.ts                 # formatBytes、statusString 等纯函数
│   │   ├── url.ts                    # looksLikeDownloadUrl、extractFilename
│   │   └── file.ts                   # openFile、openFolder(Tauri IPC)
│   ├── constants/events.json         # 事件名定义(与 Rust 共享)
│   ├── i18n/                         # 中英文翻译
│   ├── stores/                       # Zustand 状态管理
│   └── App.tsx                       # 根组件
├── src-tauri/                        # Rust 后端
│   └── src/
│       ├── types/                    # 类型定义(error/download/config/event 子模块)
│       ├── engine/                   # 下载引擎(concurrent.rs + file_io.rs + task_download.rs + chunk.rs)
│       ├── worker.rs                 # 工作池(含全局/单任务限速)
│       ├── network/                  # HTTP 客户端池、MultiLimiter 速率限制
│       ├── state/                    # gob.rs(全局状态)、db.rs(SQLite)、runtime.rs
│       ├── services/                 # SettingsService、NetworkService
│       ├── probe.rs                  # URL 探测 + mock 测试
│       ├── filename.rs               # 文件名提取(URL + Content-Disposition)
│       ├── logger.rs                 # log crate 集成,统一日志
│       ├── event_bus.rs              # Tauri 前端事件桥接
│       ├── download_manager.rs       # 下载编排器( facade 模式)
│       ├── cmd.rs                    # Tauri IPC 命令
│       └── lib.rs                    # 应用启动、插件注册
├── browsers-extension/               # 浏览器扩展(Chrome/Edge/Firefox)
└── docs/                             # 设计文档

构建

pnpm tauri build

构建产物在 src-tauri/target/release/bundle/ 目录下。

技术栈

技术
桌面框架 Tauri 2
前端 React 19TypeScriptVite
UI Primer React 38Octicons
状态管理 Zustand 5
后端 Rusttokioreqwest 0.12
存储 SQLite via rusqlite
日志 log crate(统一 log::info! / log::error!,输出到 ~/Library/Logs/ProxyDM/proxydm.log
代理 HTTP / SOCKS5 via reqwest
扩展 Chrome MV3、Firefox Manifest V2

贡献指南

报告问题

  • Bug 报告 — 注明应用版本、操作系统、复现步骤,附上日志(应用内 Log → 复制)
  • 功能建议 — 描述使用场景

Pull Request

  1. Fork 仓库,从 main 创建分支
  2. 功能型 PR 请先开 issue 讨论设计
  3. 确保类型检查和测试通过:
    npx tsc --noEmit
    pnpm test
    cd src-tauri && cargo check && cargo test
  4. 更新 README 如果改动影响用户可见功能
  5. PR 标题和描述清晰

开发约定

  • 前端 — React 函数组件 + Hooks;事件名统一在 src/constants/events.json 定义;i18n 键在 src/i18n/
  • 后端 — Tauri 命令在 cmd.rs,下载引擎在 engine/;日志用 log::info! / log::error!(不用 eprintln!
  • 事件名同步src-tauri/events.json 为唯一数据源,build.rs 编译时校验与前端拷贝一致
  • 浏览器扩展 — Chrome/Edge MV3,Firefox Manifest V2,WebSocket(ws://127.0.0.1:18999)通信
  • 提交格式Conventional Commitsfeat:fix:docs:refactor:

添加语言

  1. 创建 src/i18n/xx.ts,导出 Translations 对象
  2. src/i18n/index.ts 中注册
  3. src-tauri/src/types/config.rssrc/utils/format.ts 中添加语言代码到 Settings.language

许可

MIT © fb0sh

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors