feat(core,fuse,gui,cli): upload and download bandwidth limits (phase 6)

Every transfer charges the bytes it moves to its direction's rate limit,
a virtual clock shared by all transfers with a one-second burst, and sleeps
off any overshoot. On runtime workers the sleep goes through block_in_place
so FUSE reads keep their threads.

The caps are set live with SetBandwidthLimits, persisted to config and
applied at mount start. Preferences gains a Network group with debounced
MiB/s editors, and the CLI gains `pdfs sync limit --up/--down`.
This commit is contained in:
nvrl committed 2026-09-23 02:43:42 +02:00
1 parent b58b60010e
commit 8351382ef2
9 files changed
+306 -2

No files matched your search

+4
View File
@@ -31,6 +31,10 @@ Schema: **30** (unchanged).
straight away. `pdfs sync pause --folder <id>` / `pdfs sync resume --folder <id>` do the same, and
`pdfs sync list` marks paused folders. The pause is kept across restarts. On-demand folders
upload through the shared queue, so only the global pause holds them back.
- **Bandwidth limits.** Preferences → General → Network caps upload and download speed in MiB/s,
shared by every transfer and applied to running ones from their next block; downloads include
reads through the mount. `pdfs sync limit --up 2M --down 0` does the same, and `pdfs sync limit`
on its own prints the current caps. The caps are kept in `config.json` across restarts.
### Changed
- **New app shell.** Every page has its own header bar; the sidebar ends in a footer with sync