Skip to content

Releases

v0.11.3

Choose a tag to compare

@spaulll spaulll released this 07 Nov 17:21

Changed

  • Version is now baked into the source (internal/version, default
    v0.11.3, bumped on each release). Docker builds report the correct
    version with zero configuration — the VERSION build-arg /
    ARIAFLOW_VERSION env is now an optional override instead of a
    requirement.
  • /start version line can also append the short VCS commit when available
    (local/git builds).

v0.11.2

Choose a tag to compare

@spaulll spaulll released this 07 Nov 15:30

Added

  • Bot version in the /start welcome message — shows the build version
    (injected via -ldflags "-X ariaflow/internal/version.Version=…"),
    host uptime, storage free/total, and aria2 active/stopped counts. Docker
    builds accept VERSION build-arg (compose: ARIAFLOW_VERSION).

v0.11.1

Choose a tag to compare

@spaulll spaulll released this 07 Nov 15:28

Added

  • Recovery for interrupted Telegram-forwarded downloads. If the bot dies
    after the local Bot API server finished fetching a forwarded file but
    before it was staged/organized, startup recovery now finishes it: it
    matches leftover server temp files to the task by exact expected size
    (persisted at registration time) and a stable age of ≥2 minutes, then
    stages + organizes them. Partial or size-unknown downloads are never
    touched.

Fixed

  • Blank line between GID and the system footer in yt-dlp live messages —
    the CPU/DISK/RAM + DL/UL footer now sits one empty line below the task
    block, exactly like the aria2 task list.

v0.11.0

Choose a tag to compare

@spaulll spaulll released this 07 Nov 15:21

Changed

  • Unified live download message structure. Telegram-forwarded files and
    yt-dlp downloads now render the exact same progress frame as normal direct
    URLs in the aria2 task list:
    Filename → progress bar + percent → Downloaded → Speed → ETA →
    GID, followed by the CPU/DISK/RAM + DL/UL system line.
    • Telegram-forwarded files (local engine) use the frame in the "Downloading"
      view, including the system footer when no aria2 tasks are shown.
    • yt-dlp live messages now use the same frame (previously a free-form
      "⬇️ Downloading / bar / URL" block), rendered with Markdown like the
      aria2 list, with the source URL as the Filename and the task GID shown.
    • Processing stage shows the same envelope with a Status line.
  • System-info footer is cached for 5 s (cpu.Percent samples for 1 s;
    recomputing every tick would stall progress updates).

v0.10.0

Choose a tag to compare

@spaulll spaulll released this 07 Nov 14:51

Fixed

  • Magnet .torrent metadata files are now cleaned up reliably. aria2
    writes <infohash>.torrent into the download folder
    (--bt-save-metadata); cleanup previously depended on the in-memory task
    record surviving, so after a restart the file lingered forever even with
    keepTorrent=false. Cleanup now falls back to aria2's own infoHash, and
    startup recovery sweeps orphaned <infohash>.torrent files for completed
    downloads.
  • Task store is now actually persisted (tasks.json) — persist() was
    a no-op, so ownership, links and download history vanished on every
    restart. Tasks now survive restarts (atomic temp+rename writes).
  • monitor can no longer panic the bot — GetDiskPercent dereferenced
    a nil disk.Usage result (e.g. USB/NAS mount hiccup) and
    GetCpuPercent indexed an empty slice; both now return 0 safely.
  • TMAllowDownloads map race fixed — the torrent file-selection map was
    written from the Telegram handler and read from the testTMStop
    goroutine without a lock; Go maps are not concurrent-safe and could fatal
    with "concurrent map read and map write". Now mutex-guarded.
  • Websocket RPC write errors are surfaced — a failed WriteJSON now
    triggers the reconnect loop instead of silently waiting out timeouts.
  • Removed dead tool/controller code — legacy CopyFiles/RemoveFiles
    (panic-on-error, weak path guard) were referenced by nothing.
  • runOrganizeDual deletes its "Download completed" messages when
    organizing is disabled
    instead of leaving them in the chat.
  • Vet-clean RPC client — Call value receivers containing sync.Once
    flagged copylocks; switched to pointer receivers.

v0.9.0

Choose a tag to compare

@spaulll spaulll released this 07 Nov 14:12

Fixed

  • Bot no longer crashes on transient aria2 RPC timeouts — the 5-second
    live progress poll used to panic on any RPC error (e.g. aria2 busy
    finalising a large file on a slow disk), killing the whole bot. RPC/data
    errors are now logged and the view degrades gracefully instead.
  • Crash-recovery now covers all completed downloads, not just archives —
    if the bot dies after a download completes but before the organize pipeline
    moves it, the startup recovery re-runs the media pipeline for every
    completed aria2 task whose files are still in the download folder (torrent
    folders included), with a 7-day recency guard so old intentional leftovers
    are never touched.
  • BitTorrent completion now triggers the organize pipeline — previously
    only onDownloadComplete did, so a torrent that finished and stopped
    seeding (e.g. seed-time=0) would silently stay in the download folder.
  • Deduplicated organize runs — onDownloadComplete/onBtDownloadComplete
    and startup recovery can no longer process the same download twice.
  • Release-group folder naming follows the media pipeline — movie release
    directories with site/group prefixes (www.Site.org - Title ...) now land
    in Movies/Title (Year)/Title (Year).ext derived from the video file,
    instead of polluting the folder name with the prefix.
  • Log rendering of fatal errors fixed — %w is not supported by zap;
    panics now log a readable message instead of %!w(....).
  • Torrent upload failures are non-fatal — a failed fetch of an uploaded
    .torrent file logs and skips instead of killing the process.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 14:06

Added

  • Jellyfin/Plex library refresh — after organizing a download into a
    media-library category (movies/series/anime/music), the bot can now
    optionally trigger an on-demand rescan on Jellyfin and/or Plex so the new
    content appears immediately instead of waiting for the periodic scan. Both
    targets run concurrently with a short timeout; the outcome (success or
    failure) is shown on the final "All done!" summary. Configure via
    organize.refreshJellyfin/jellyfinUrl/jellyfinApiKey and
    organize.refreshPlex/plexUrl/plexToken (env: REFRESH_JELLYFIN,
    JELLYFIN_*, REFRESH_PLEX, PLEX_*).

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 17:23

Added

  • Docker Compose deployment — now the recommended path. A
    docker-compose.yml plus docker/ stack runs the bot, an aria2c
    daemon, and an optional local Bot API server as containers sharing one
    media volume; no manual binary or dependency installation.
  • Project renamed to AriaFlow: the Go module, binary, and release
    artifacts are now ariaflow (ariaflow-linux-amd64 / -arm64), and the
    GitHub repository moved to spaulll/AriaFlow.
  • Docker image bundles the full runtime toolset, including unrar (non-free)
    alongside yt-dlp, ffmpeg/ffprobe, 7z and unzip.

Changed

  • README restructured to lead with the Docker quick start; the prebuilt-binary
    path is documented as the alternative.
  • Containerized build no longer silently drops unrar (non-free repo enabled).

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 07 Oct 05:26

Fixed

  • Percent-encoded filenames (e.g. %20 for spaces) are URL-decoded before
    media routing: previously the trailing 20 of an encoded space could glue
    to the x264/x265 codec tag, faking an episode marker and mis-sorting a
    movie into Series/.../Season 20. Codec tags never count as episode
    markers now, and cleaned movie names carry no percent-escapes.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 18:30

Added

  • Disk guard: links whose size is known via HEAD are refused up front
    with ⚠️ Not enough disk space when they provably don't fit the download
    filesystem. Unknown sizes (magnets, torrents) always allowed.
  • Orphan sweeper: startup + hourly scan of the download folder deletes
    stale *.aria2 debris and their partials (no referencing task, older than
    30 min). Directories, lone data files, and anything live are never touched.
  • Duplicate guard: warns before re-downloading — same link already active,
    or normalized show+season / episode / movie already in the library — with
    override buttons (never blocks: quality upgrades are legit). Opaque links
    (e.g. googleusercontent) are re-checked once the real filename arrives;
    on a hit the download pauses and asks to keep or stop+delete.