✨ Added
- aMule incremental updates — new
getUpdate()method usesEC_OP_GET_UPDATEwithEC_DETAIL_INC_UPDATEfor stateful incremental polling. Only changed fields are transferred after the initial full response, significantly reducing bandwidth and CPU usage for aMule connections - Download Sources table in FileInfoModal — aMule download sources (peers we download from) now have a dedicated table section with columns for User, State, Source origin, Queue rank, Downloaded, and DL speed
- aMule peer state labels — download states (Downloading, On Queue, Connecting, etc.), upload states, and source origin labels (Server, Kad, Exchange, etc.) displayed in human-readable form
- File rename — rename downloads and shared files from the context menu (aMule only). Gated by
renameFileclient capability andrename_filesuser permission - Rename files user capability — new
rename_filescapability in the Downloads group, configurable per-user in the User Management UI
♻️ Refactored
- Unified peers model — replaced three separate peer arrays (
peersDetailed,activeUploads,downloadSources) with a singleitem.peersarray across all 5 client types. Each peer carries arolefield:'peer','upload','download'. Eliminates ~200 lines of duplicated code - Peers embedded in source objects — managers embed peers directly into download/shared file objects instead of returning separate arrays
- Removed source names caching from QueuedAmuleClient — replaced by amule-ec-node's native incremental update with deep merge
- Removed dead
ipToString— IP decoding now lives solely in amule-ec-node
🐛 Fixed
- aMule download completion detection — fixed completion never firing during runtime. Downloads at 100% are now detected directly from progress instead of relying on shared files list, which doesn't work with incremental updates
- Stale item removal — aMule
getUpdate()uses set-based reconciliation to remove disconnected peers, completed downloads, and unshared files - Deep merge for incremental EC updates — ID-based array reconciliation matching aMule GUI's
CPartFile_Encoderbehaviour. Fixes Source Reported Filenames disappearing after incremental updates - Empty download source rows — peers in "Connecting" state with no IP filtered out
- UploadsView duplicate rows — peer IDs include
parentHashto prevent duplicates across torrents