🐛 Fixed
- Doubled
refreshSharedFiles()every auto-reload cycle — the v3.7.0 fix that maderescanAndWrite()reload aMule on connect also unintentionally caused the hourly auto-reload scheduler to callrefreshSharedFiles()twice per cycle (once insiderescanAndWrite(), once standalone right after). Over many hours with large shared libraries this could wedge aMule's EC handler. The scheduler now delegates the reload torescanAndWrite()when shared-dir roots are configured, or does a standalone refresh when not — never both. - Silent
getUpdate()failure masking state drift — the aMule fetch loop was swallowinggetUpdate()errors and returning empty arrays, making the UI show "no items" while on-demand calls (search, logs, categories) still worked. Worse, aMule's server-sideCValueMapflips to "delivered" even when our request times out, permanently desyncing the incremental diff state for any fields that changed in that cycle. Now: a failedgetUpdate()explicitly closes the stale socket (resetting aMule's valuemap), clears the client, and schedules a 1 s reconnect — so the next full-state fetch resynchronizes both sides cleanly. - Transient fetch failures no longer flash the UI to empty —
DataFetchServicenow caches the last successful frame per client manager and reuses it for one cycle on a transient fetch exception (aMule reconnecting, a BitTorrent client's HTTP timeout, etc.). The next cycle reflects whatever real state then returns. Applies to all managers, not just aMule.