Skip to content

po: update French & Turkish translations - #847

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
cardpuncher:master
Jun 4, 2026
Merged

po: update French & Turkish translations#847
mrjimenez merged 1 commit into
amule-project:masterfrom
cardpuncher:master

Conversation

@cardpuncher

Copy link
Copy Markdown
Contributor

Both at 100%. Regarding the French translation, non-breaking space punctuation rules were applied throughout the file (NBSP, not NNBSP -- see https://en.wikipedia.org/wiki/Non-breaking_space#Spacing_punctuation_in_French for more information.)

Both at 100%. Regarding the French translation, non-breaking space punctuation rules were applied throughout the file (NBSP, not NNBSP  -- see https://en.wikipedia.org/wiki/Non-breaking_space#Spacing_punctuation_in_French for more information.)
@mrjimenez
mrjimenez merged commit 56a6f3a into amule-project:master Jun 4, 2026
7 checks passed
got3nks added a commit to got3nks/amule that referenced this pull request Jun 7, 2026
…ule-project#912)

Extends existing categories (preferring extensions over new lines):
- Performance/Upload: amule-project#898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  amule-project#879/amule-project#882/amule-project#890/amule-project#886; new amuleweb security hardening bullet
  consolidating ngosang's amule-project#869-amule-project#874 triage (all landed in amule-project#875);
  amulegui list extended with amule-project#857; shared-folder watcher extended
  with amule-project#858.
- Packaging: Windows installer i18n line extended with amule-project#899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering amule-project#851/amule-project#855/amule-project#862/amule-project#888/amule-project#900/amule-project#866/amule-project#867/amule-project#895 and amule-project#909/amule-project#910/amule-project#912.
- Translations: new pre-release final-wave bullet covering amule-project#847/amule-project#856/
  amule-project#891/amule-project#908/amule-project#860/amule-project#904/amule-project#859/amule-project#863/amule-project#861/amule-project#880/amule-project#911/amule-project#901/amule-project#902/amule-project#889/amule-project#868/amule-project#853.
- Bug Fixes & Stability: amule-project#850/amule-project#854/amule-project#878/amule-project#906.
- CI: ccache wiring (amule-project#892, amule-project#903) + CodeQL binutils-dev (amule-project#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through amule-project#912.
mrjimenez pushed a commit that referenced this pull request Jun 8, 2026
Extends existing categories (preferring extensions over new lines):
- Performance/Upload: #898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  #879/#882/#890/#886; new amuleweb security hardening bullet
  consolidating ngosang's #869-#874 triage (all landed in #875);
  amulegui list extended with #857; shared-folder watcher extended
  with #858.
- Packaging: Windows installer i18n line extended with #899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering #851/#855/#862/#888/#900/#866/#867/#895 and #909/#910/#912.
- Translations: new pre-release final-wave bullet covering #847/#856/
  #891/#908/#860/#904/#859/#863/#861/#880/#911/#901/#902/#889/#868/#853.
- Bug Fixes & Stability: #850/#854/#878/#906.
- CI: ccache wiring (#892, #903) + CodeQL binutils-dev (#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through #912.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…els (amule-project#847)

* feat(gui): show free disk space on the Downloads and Shared Files panels

The Downloads panel now reports the free space on the filesystem holding
the part files beside the queue size, and turns red once that space no
longer covers what is left to download. The Shared Files panel reports
the free space where finished downloads land. Requested in amule-project#757.

Which filesystem, and what to compare against, both follow from how the
directories actually work. There is one temp directory for every
category -- a category chooses where a file lands when it finishes, not
where it downloads -- so the figure is global and the warning is
measured against the whole queue rather than the category on screen; a
per-category comparison would only fire once it was already too late.
The threshold uses the bytes still to download, not the total queue
size: the bytes a part file already holds are off the free-space figure
already, so what is left is exactly what the disk still has to find room
for. Incoming, by contrast, is per category, and the Shared Files panel
has no category selector, so it reports the default category's -- and
carries no threshold, since nothing there stops when the disk fills.

Only the core can answer either question: the GUI may be on another
machine entirely, and even where it mounts the same share it can see a
different size or quota. Two new stats tags carry the figures over EC.
An absent tag means unknown rather than zero, so a daemon older than
these tags leaves the field empty instead of reporting a full disk.

Both getters are cache-backed, re-sampling at most every ten seconds.
statvfs()/GetDiskFreeSpaceEx() blocks on the directory, and on a network
mount -- temp and incoming commonly are one -- a slow or stale server
blocks it for as long as the mount's timeout. The callers are a
per-second GUI refresh and every stats poll from every connected client,
so an uncached read would multiply that exposure by the poll rate. A
path that cannot be queried at all reports FREE_SPACE_UNKNOWN, which
empties the label rather than printing "0 bytes" and never colours it
red.

The GUI side is gated on what is actually on screen: the timer refreshes
only the panel currently displayed, and nothing at all while the window
is hidden to the tray or minimized. That matters because the Downloads
refresh walks the whole queue to decide whether to warn -- skipped
outright when there is no figure to compare against -- and because each
label is resolved by name, which is now done once and cached rather than
per tick.

The Shared Files statistics box grows from four columns to five: the
collapse/expand button keeps a narrow column of its own and the size
figures get a column beside it, one figure per row, so the total size
lines up with the counters and the free space with the gauges.

One new translatable string, "Free space: %s", shared by both panels;
catalogs regenerated. The separator between the queue size and the free
space is built in code so translators are given the figure alone.

Builds clean on macOS (amule + amulegui + amuled); clang-format and both
clang-tidy tiers clean over the diff.

* perf(core): probe free space on its own thread, off the main loop

CStatistics::GetTempFreeSpace() / GetIncomingFreeSpace() called
CPath::GetFreeSpaceAt() inline, cached for ten seconds. Both callers are
latency critical: the GUI timer on the main thread, and the EC stats
reply on amuled's core thread.

statvfs() / GetDiskFreeSpaceEx() blocks on the directory it is asked
about. Measured read-only on a live host, 50 samples per path: ext4 0.002
ms median, mergerfs 0.678 ms, nfs4 0.204-0.222 ms, worst case 1.765 ms.
So the healthy cost was never the problem, and the interval was not
either. What those numbers do not cover is the pathological case: a cold
autofs mount takes tens to hundreds of milliseconds, and an unreachable
server blocks for timeo x retrans on a soft mount and indefinitely on a
hard one. Either directory is commonly a network mount, and that stall
landed on the main loop -- freezing the GUI and stalling EC replies.

Nothing else in the core reaches those filesystems from the main loop:
downloads write through CPartFileWriteThread, uploads read through
CUploadDiskIOThread. This probe was the one exception.

CFreeSpaceThread is a dedicated joinable worker rather than a task on
CThreadScheduler, for the reason CMediaProbeThread was split out (amule-project#280):
the scheduler runs one task at a time and owns completion, allocation,
hashing, verification and IP filtering, so a probe blocked on a hung
mount would not delay that queue but stop it -- and would couple
unrelated filesystems, a hung incoming mount blocking the hashing of part
files on a healthy local disk. Here a hung mount can only ever delay the
next sample: the figure goes stale, the label empties, nothing else
notices.

The two figures become std::atomic<sint64>, written by the worker and
read by the main and EC threads; the getters are plain relaxed loads that
cannot block, so no caller changed. The worker wakes every second and
samples each path only when its own interval has elapsed -- separately
timed, so a slow incoming cannot hold temp back -- and the wake interval
is shorter than the sample interval so shutdown does not wait out a
sleeping thread.

The worker reads no preferences. The temp and incoming paths can change
under the preferences dialog, no worker in the tree touches thePrefs, and
a wxString read while another thread assigns it is a race whatever the
value; so CamuleApp hands the worker mutex-guarded copies, at
construction and on each core tick. That also removes any question of
teardown ordering against thePrefs.

Constructed alongside mediaProbeThread, which is post-fork so the POSIX
threads belong to the daemon child (amule-project#849), and torn down beside it in
OnExit().

The panel-visibility gate stays, but it now skips pointless work rather
than a blocking call: CDownloadListCtrl::UpdateFreeSpace() still walks
the queue to decide whether to warn. Refreshing when a panel becomes
active as well as on the timer means switching to a panel no longer
shows the figure it had when it was last visible until the next tick.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants