Add POST /api/categories/edit. Renames a category, updating its save
path and reassigning every torrent that referenced the old name; the
empty-named Uncategorized pseudo-category can have its save path set
but not renamed. Changes persist via the daemon taxonomy.
Closes ISSUES #2.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A paused torrent never ran a worker, so it never verified on-disk data
and showed no progress. Add a one-shot check-only swarm mode (open +
resume scan + report, no peers/engine/download). The reconciler runs it
for a paused torrent flagged needs_check (set on paused-add and recheck);
the worker stays paused afterward. New TORRENT_CHECKING state -> webui
checkingDL/UP. Mark #11 done.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
spawn_torrent parses each torrent's file list (at add and restore) and
refuses an add whose files would write where a registered torrent's data
lives (NAUT_ERR_EXIST). Magnets are checked once metadata is known is
out of scope; restore skips the check. webui surfaces it as HTTP 409.
Mark #10 done.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
report_progress now fills peer_stats via engine_peer_list, so the peer
list (ip, progress, dl rate, state) shows again. Mark #12 done.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
api_add forwards tags to the daemon, assigns them to the new torrent,
and registers any new tag names in the persisted taxonomy. Mark #7 done.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
api_add now forwards the chosen category to the daemon (and fixes a
use-after-free reading it from the freed request). Mark issues #3, #8, #9
done in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>