✨ Added
- Set Rating & Comment on shared files (aMule) — new action in the Shared files context menu opens a star-picker + textarea modal. Exposed via WebSocket (
setFileRatingComment) and HTTP (POST /api/v1/downloads/rating-comment). Guarded by a newset_commentcapability set_commentcapability — new sibling torename_files, added toALL_CAPABILITIES,SSO_DEFAULT_CAPABILITIES, the "Full" preset, CAPABILITY_GROUPS (Downloads), and the history-import migration defaults. Shown in the User Management UI- Star rating column on aMule search results (desktop, sortable) — rendered when aMule emits a rating (requires aMule PR #452). Mobile cards show the rating in the detail row alongside size and sources
- Canonical
comment/ratingfields on unified shared items replace the rawEC_TAG_KNOWNFILE_*plumbing in the File Info modal. Rating + Comment rows are always shown under "File Identification" with "Not rated" / "No comment" placeholders when unset - Peer completion percentage for aMule in the File Info modal — the "Done" column now renders for aMule peers too, matching the native aMule GUI's segment-bar semantics. Download sources use
EC_TAG_CLIENT_AVAILABLE_PARTSdirectly; upload peers use the peer-reportedEC_TAG_CLIENT_UPLOAD_PART_STATUSbitmap (bits counted on our side) because aMule'savailablePartsreads the download-side bitmap and is always 0 for pure uploaders. - Download Path column in Downloads and Shared Files views (desktop, hidden by default, togglable via "Configure columns"). For aMule partfiles without a filesystem path, falls back to the category's configured path or the client's default download directory
- Tracker favicons across the app — fetched on first use, cached to disk under
data/favicons/with a 24h TTL and stale-on-failure fallback, served viaGET /api/favicon/tracker/:host. Rendered in tracker labels, desktop filter trigger/dropdown, mobile filter sheet, and mobile filter pills; falls back to aservericon when a favicon isn't reachable. 1MB per-blob cap, single-flight per host to dedupe concurrent fetches - Multi-select tracker filter (desktop) — custom popover dropdown with per-row favicons, summary count in the trigger, click-outside/Escape dismissal, and "Clear" action. Multiple trackers use OR logic; selections reflect into the mobile pills/sheet
♻️ Improved
shareddir.datreload fires on connect —rescanAndWrite()now threads the manager intoexpandAndWrite(), so aMule re-reads the refreshed file after the server-side sync on connect (previously wrote the file but never triggered the reload)- Segments bar renders for aMule files with 0 sources — both in the File Info modal and on the Downloads-view progress bar hover. aMule skips emitting
EC_TAG_PARTFILE_PART_STATUSwhen no sources are contributing part-frequency data, but still emitsEC_TAG_PARTFILE_GAP_STATUS. We now fall back to gap-only rendering: completed regions stay green, missing regions show solid red (the "missing, no sources" color in aMule's own palette) - File Info modal is wider on desktop — bumped from
max-w-4xltomax-w-5xlso long tracker URLs, paths, and peer comment lists breathe a bit more. Mobile is unchanged (stillw-full) - Multiple peer ratings now rendered in the Download Info modal — aMule emits
EC_TAG_PARTFILE_COMMENTSas a flat sequence of 4 child tags per peer (username, filename, rating, comment), all under the same tag ID. The formatter now chunks the array back into tuples and renders one card per peer (previously silently truncated to the first peer only) - Column config respects
defaultHiddenfor newly-added columns — previously, once a user saved a column configuration, any column added in a later release was forced visible. Now columns declared hidden-by-default stay hidden for existing users too - SSO / history-import capability defaults unified —
userManager.jsis the single source of truth forSSO_DEFAULT_CAPABILITIES;trustedProxy.jsand the legacy history-user import both consume the same list, so adding a default-on capability only requires one edit - Dockerfile copies
server/package-lock.jsonand usesnpm ci— ensures deterministic installs and that lockfile bumps (e.g. git-dep SHA updates) actually invalidate the Docker layer instead of serving cachednode_modules
📦 Dependencies
- amule-ec-node — four updates since 3.6.1:
- Mojibake filename correction — non-ASCII filenames (CJK, accented European, etc.) that aMule reports in the wrong encoding are now decoded correctly. The raw value is preserved as
rawFileNameso move/category commands still address the file by the name aMule expects - Canonical
comment/ratingparsing plus a newsetFileRatingCommentmethod for shared files (8da8eaa) - Aggregated user rating on search results (95879bb, requires aMule PR #452 to be merged upstream or applied to your aMule build for the tag to actually be emitted)
EC_TAG_CLIENT_UPLOAD_PART_STATUSparsing (df97f5e) — exposes the peer-reported part bitmap for upload peers so we can compute their real completion %, matching what aMule's native GUI shows
- Mojibake filename correction — non-ASCII filenames (CJK, accented European, etc.) that aMule reports in the wrong encoding are now decoded correctly. The raw value is preserved as