Files
caorushizi a9e3ed6a22 feat(core): switch direct downloader from gopeed to aria2
Gopeed's last release is aging and its SChannel-linked Windows build
chokes on modern CDN TLS handshakes (we hit SEC_I_MESSAGE_FRAGMENT on
twimg.com). Replace it with aria2 — same short flags (-x/-s/-k carry
over verbatim), stricter arg handling, and well-trodden cross-platform
builds.

Binaries are vendored in-tree at extra/aria2/<os>/<arch>/ rather than
pulled from a single GitHub release, because aria2 static builds for
Linux / macOS / Windows come from different upstream repos. To keep
the deps pipeline unified:

- `scripts/download-deps.ts` grows a "source": "local" branch that
  copies from `extra/<tool>/<os>/<arch>/` into `.deps/<os>-<arch>/`
  instead of fetching from GitHub. Resulting layout matches the rest
  of the tools, so binaryResolver.ts needs no changes.
- `scripts/deps-versions.json`: `gopeed` entry removed, `aria2`
  entry added with source:"local" + path:"extra/aria2".
- `apps/core/internal/core/types.go`: BinaryNames[TypeDirect]
  `"gopeed"` → `"aria2c"`.
- `apps/core/internal/core/schema/loader.go`: direct schema's Args
  map to aria2's flags (-d / -o, plus --console-log-level=notice /
  --summary-interval=1 / --allow-overwrite=true /
  --auto-file-renaming=false for parseable output and predictable
  rerun behaviour). ConsoleReg regexes updated to aria2's summary
  line format (e.g. "DL:512KiB" for speed, "(83%)" for percent).
  `--check-certificate=false` tacked on as a workaround for the
  SChannel handshake issue on the bundled 1.19.0 Windows build —
  proper fix is upgrading the vendored binary to a build that links
  against OpenSSL (e.g. 1.37.0), comment calls that out.
- `apps/core/.env`, `Dockerfile`, `apps/electron/scripts/build.ts`,
  `apps/core/README.md`: gopeed → aria2c / aria2 references.

No DB migration: existing `type: "direct"` rows keep working, the
underlying binary just swaps.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 17:09:35 +08:00
..

aria2

Pre-compiled aria2c static binaries bundled with MediaGo.

Field Value
Version 1.19.0
Upstream https://github.com/aria2/aria2
License GPL-2.0-or-later (SPDX: GPL-2.0-or-later)
Source https://github.com/aria2/aria2/releases/tag/release-1.19.0
Role Backs DownloadType: "direct" (replaces gopeed from v3.5.0-beta.2 onward)

Layout

extra/aria2/
├── darwin/arm64/aria2c
├── darwin/x64/aria2c
├── linux/arm64/aria2c
├── linux/x64/aria2c
├── win32/arm64/aria2c.exe
└── win32/x64/aria2c.exe

The wrapping deps pipeline (scripts/download-deps.ts) copies the correct per-platform binary into .deps/<os>-<arch>/aria2c[.exe] on pnpm deps:download, so the Go Core's BinaryNames[TypeDirect] = "aria2c" lookup finds it at the same location that third-party tools (ffmpeg, N_m3u8DL-RE, BBDown, yt-dlp) land.

License notice

aria2 is licensed under the GNU General Public License, version 2 or any later version (GPL-2.0-or-later). The MediaGo project itself is MIT-licensed; aria2 is redistributed here as an aggregation — MediaGo invokes aria2c as a separate subprocess, not as a linked library, which keeps the GPL boundary at the binary.

The full GPL text ships with each binary (run aria2c --version to see the copyright notice) and is available at: https://github.com/aria2/aria2/blob/master/COPYING

Written offer (GPL-2.0 §3(b))

For any version of aria2 bundled here, the corresponding machine-readable source code is publicly available at the upstream GitHub repository linked above, at no charge. No further steps required from users.

How to refresh these binaries

  1. Fetch the new version's static builds from a trusted static-build distributor (the originals bundled here are from the aria2 GitHub releases on Windows; other platforms use static builds).
  2. Replace each extra/aria2/<os>/<arch>/aria2c[.exe] file.
  3. Update the Version and Source rows above.
  4. Run pnpm deps:download locally to refresh .deps/ and smoke-test a direct download.