Mirror the Android bulk feature in the Qt uploader: choose several photos
at once, each a card with its own caption, date, and upload status, and
post the batch.
- Per-photo cards (PhotoItemWidget) in a scrollable list; retry re-posts
only the failures.
- One upload per photo with a per-item UUID slug suffix so a batch posted
in the same second cannot collide.
- Image prep runs off the UI thread via QtConcurrent so the window stays
responsive.
- A "Simultaneous uploads" setting (1–8, default 3) caps how many photos
are prepared/uploaded at once; the rest queue and fill freed slots.
A native Qt6/C++ desktop client for the gallery's POST /upload API, in
desktop/ with its own flake (kept separate from the Go server module the
same way android/ is). Single-photo parity with the Android app:
- multipart upload with preemptive HTTP Basic auth and retry-aware outcome
classification (uploadclient)
- JPEG/PNG metadata stripped byte-for-byte to drop embedded GPS, EXIF
orientation baked in, and a quality/scale valve for the 20M nginx cap;
HEIC decodes via the qtimageformats plugin (imageprep)
- base URL / username in QSettings, password in the system keychain via
qtkeychain; https required and a trailing /upload stripped (settings)
- settings and post screens in a QStackedWidget (mainwindow)
Native Wayland or xcb is selected at runtime. Bulk upload, EXIF
capture-date prefill, and moving image prep off the UI thread are left as
follow-ups.