You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
aMule incremental updates — new getUpdate() method uses EC_OP_GET_UPDATE with EC_DETAIL_INC_UPDATE for 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 renameFile client capability and rename_files user permission
Rename files user capability — new rename_files capability 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 single item.peers array across all 5 client types. Each peer carries a role field: '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_Encoder behaviour. 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 parentHash to prevent duplicates across torrents