1840 Commits
Author SHA1 Message Date
baked7015 073bf15108 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 97.9% (287 of 293 strings)

Co-authored-by: baked7015 <bingxyz1024@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/spoolman/web-client/zh_Hant/
Translation: Spoolman/Web Client LEGACY
2026-10-11 09:33:44 +00:00
EtienneB 15f0124a4c Translated using Weblate (Dutch)
Currently translated at 100.0% (293 of 293 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (293 of 293 strings)

Co-authored-by: EtienneB <eboeziek@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/spoolman/web-client/nl/
Translation: Spoolman/Web Client LEGACY
2026-10-11 09:33:43 +00:00
Donkie 1c87bb9c0e Merge pull request #1269 from Donkie/deps/bump-all
Bump dependencies within their declared ranges
2026-10-11 11:33:25 +02:00
Donkie 715cd47b9f Merge pull request #1268 from Donkie/fix/tag-scan-unknown-wording
Mention filaments in the unknown-tag and any-reader texts
2026-10-11 11:32:37 +02:00
Donkie fa92ab465d Merge pull request #1267 from Donkie/fix/location-rename-slash
Allow renaming a location whose name contains a slash
2026-10-11 11:31:52 +02:00
Donkie a9e1802c2a Merge pull request #1265 from Donkie/fix/add-spool-zero-values
Keep a typed 0 for tare, price and temperatures
2026-10-11 11:30:55 +02:00
Donkie 72031f0ea5 Merge pull request #1264 from Donkie/ci/bot-pr-checks
Run CI on bot PRs and merge Weblate PRs weekly
2026-10-11 11:30:16 +02:00
Donkie a3977509eb Bump dependencies within their declared ranges
Backend via uv lock --upgrade, client and client_v2 via npm update.
SQLAlchemy stays on 2.0.x: 2.1 is in range, but sqlalchemy-cockroachdb
2.0.4 requires <2.1 and uv would otherwise downgrade the dialect to
2.0.3, which lacks that cap. Paraglide stays on 2.23.0: 2.27.0 (with
@inlang/sdk 4) hangs compiling the inlang project.
2026-10-11 10:35:46 +02:00
Donkie 3a8ac87b13 Mention filaments in the unknown-tag and any-reader texts
Tags can be linked to filaments since 0.27, but the unknown-tag toast
only said to open the spool, and the any-reader setting said scans open
spools.
2026-10-11 10:33:44 +02:00
Donkie 3e9c3b68bd Allow renaming a location whose name contains a slash
PATCH /location/{location} returned 404 for names like "Shelf 1/2",
even URL-encoded, because the path is decoded before routing and the
default converter stops at a slash. Use the path converter.
2026-10-11 10:33:19 +02:00
Donkie 58a01e3389 Keep a typed 0 for tare, price and temperatures
The add-spool form and the new-filament flow turned a typed 0 into
"not set", so a spool or filament could not store a tare or price of 0
and fell back to the filament or vendor value instead. Blank still means
not set; 0 is now sent as 0. Comma decimals go through parseDecimal.
2026-10-11 10:31:49 +02:00
Donkie bb0bcc1b5f Run CI on bot PRs and merge Weblate PRs weekly
Dependabot and Weblate branches are excluded from push runs, and the
root jobs skipped same-repo pull_request runs, so their PRs got no
checks and stayed blocked. Let those PRs run the pull_request suite.

Weblate PRs are now merged by a Monday schedule instead of as soon as
each sync goes green, to cut down the merge commits on master.
2026-10-11 10:24:34 +02:00
Donkie 6b6c13e4f1 Merge pull request #1259 from Donkie/fix/silent-list-caps
Page through filament spools and dashboard groups
2026-10-11 10:11:51 +02:00
Donkie b0faab5cfd Merge pull request #1195 from Donkie/worktree-fix-1165-inverted-qr
Decode inverted QR codes in client_v2 scanner on Firefox
2026-10-11 10:11:45 +02:00
Donkie 62963935eb Merge branch 'master' into fix/silent-list-caps 2026-10-11 09:19:00 +02:00
Donkie 3f8cb8f1d1 Merge pull request #1263 from Donkie/fix/screenshots-wait-for-data
Wait for page data before taking Argos screenshots
2026-10-11 09:11:10 +02:00
Donkie 89fba3f4a8 Wait for page data before taking Argos screenshots
The screenshot spec shot each page as soon as the logo was visible, which
paints before any API data arrives. Argos only waits for aria-busy, which
client_v2 never sets, so the first shot of a page often caught it mid-load
(an empty Library list, half-loaded dashboard cards) and the Registered
blanking ran before the inspector had rendered. Every PR got the same
handful of noise diffs, master's baseline included.

Wait until no API request has been in flight for 300 ms before shooting.
2026-10-11 09:05:23 +02:00
Donkie e72b2d1821 Merge pull request #1262 from Donkie/fix/empty-locations-in-picker
Offer empty dashboard locations in the location pickers
2026-10-10 18:00:25 +02:00
Donkie 4658f42798 Merge pull request #1260 from Donkie/fix/1242-dashboard-card-height
Let dashboard cards use the screen height
2026-10-10 17:59:17 +02:00
Donkie abe5bd909f Merge pull request #1258 from Donkie/fix/low-stock-zero
Keep a stored threshold of 0 across reloads
2026-10-10 17:54:05 +02:00
Donkie 645ef72937 Merge pull request #1257 from Donkie/fix/1243-deep-link-unloaded
Open deep-linked items the list hasn't loaded
2026-10-10 17:53:01 +02:00
Donkie 12199575de Merge pull request #1256 from Donkie/fix/1246-backup-lock
Fix nightly backups failing on network shares, and the backup hang
2026-10-10 17:51:04 +02:00
Donkie 975e0cc702 Merge pull request #1255 from Donkie/fix/write-check-tempfile
Probe data dir writability with a uniquely named temp file
2026-10-10 17:49:37 +02:00
Donkie 15381fcf01 Merge pull request #1254 from Donkie/fix/metrics-stale-spools
Stop exporting archived and deleted spools in /metrics
2026-10-10 17:48:54 +02:00
Donkie ca007aa561 Merge pull request #1253 from Donkie/fix/measure-zero-tare
Keep an explicit 0 tare when measuring a spool
2026-10-10 17:47:03 +02:00
Donkie 43101b2a2d Offer empty dashboard locations in the location pickers
The spool inspector and the add spools dialog listed only what GET
/location returns, which is the locations that hold a spool right now.
An empty location kept as a dashboard card, like an idle toolhead,
could not be picked without typing it or parking another spool there
first. The old client merged its saved `locations` setting into these
dropdowns; this does the same with the dashboard's saved location
cards (which fall back to that old setting). The library's location
filter still lists only locations in use.

Fixes #1261
2026-10-10 15:03:43 +02:00
Donkie a31beee46b Let dashboard cards use the screen height
Card bodies were capped at min(52vh, 420px), so a group of more than
about eight spools scrolled inside its card while most of a desktop
screen stayed empty below it.

The cap now reaches down to the footer for a single row of cards, but
stops at 1000px. A card only fetches its next page when its list is
scrolled, so a body taller than one page of chips (about 1500px) shows
no scrollbar and never loads the rest; the cap proposed in the issue,
calc(100dvh - 220px), did exactly that on a 2160px tall screen. Narrow
touch layouts keep the old cap so a card can't swallow the page's
scroll. A Playwright spec pins the paging on a tall screen.
2026-10-10 14:59:07 +02:00
Donkie 6447198fe3 Page through filament spools and dashboard groups
The filament inspector asked for its first 100 spools and the dashboard
for its first 1000 groups, and both showed the result as if it were
everything. A filament with more spools got a wrong count and a wrong
total remaining, and groups past the first 1000 never got a card.

Both now page through the whole list with a small allPages helper. The
inspector's sort gets an id tie-break so offset paging is stable, and
duplicates from a spool moving up mid-load are dropped.
2026-10-10 14:50:42 +02:00
Donkie c35983ee52 Keep a stored threshold of 0 across reloads
The low-stock threshold was read back with `Number(stored) || default`,
so a threshold of 0 g came back as 150 on every reload. The search
box's colour-similarity slider had the same bug the other way round
(`n > 0`), turning a stored 0 (exact colour only) back into 20.

Read both with parseDecimal, which tells "nothing stored" apart from a
real 0, and still rejects NaN, negatives and other garbage.
2026-10-10 14:44:10 +02:00
Donkie 1e800ec5f8 Open deep-linked items the list hasn't loaded
A QR code or bookmark pointing at a spool that isn't on the first page of
the list left the inspector on "Loading..." for good. Arriving on the
Library rewrites the URL to restore the remembered view, which re-parses
the same selection into a new object. The inspector's fetch effect
followed that object, so it re-ran, its cleanup aborted the request, and
the re-run skipped the id it had already "attempted". Same for filament
and manufacturer links, and for ids that 404.

Follow the selection by value instead, and forget an attempt whose
request was cancelled before it answered.
2026-10-10 14:40:50 +02:00
Donkie 016ca6791e Back up to the target without taking file locks on it
Backup folders on network shares often refuse SQLite's file locks (CIFS
without nobrl, NFS without lockd). SQLite reports a refused lock as
SQLITE_BUSY, so every backup to such a folder retried until the 60 second
give-up and blamed a locked database, while the live database was not
locked at all (#1246).

The target is a scratch .pending file that nothing else opens, so open it
with nolock=1. The give-up message now names the live database, since that
is the only file a backup can still wait on.
2026-10-10 14:36:01 +02:00
Donkie e5944c94e0 Probe data dir writability with a uniquely named temp file
can_write_to_data_dir() touched and then deleted data/test.txt, which
silently wiped any file of the user's that happened to have that name.
It now uses tempfile.NamedTemporaryFile in the data dir, which picks an
unused name and removes only the file it created.
2026-10-10 14:33:28 +02:00
Donkie a35331e50a Stop exporting archived and deleted spools in /metrics
The metrics refresh only ever set label sets, never removed them, so a
spool that was archived or deleted (or a deleted filament, or a renamed
filament's old info labels) kept being exported with its last values
until the server restarted.

Each refresh now drops the label sets the database no longer has. The
current values are set before the stale ones are removed rather than
clearing the gauges first, because /metrics is served from a worker
thread and a scrape landing mid-refresh would otherwise see live series
briefly disappear.
2026-10-10 14:32:47 +02:00
Donkie bcc1ba1ace Stop a locked database from hanging the server during backup
sqlite3's Connection.backup() retries forever while the source is busy,
calling progress with 0 of 0 pages each time. The backup ran synchronously
on the event loop, so a lock that did not clear froze every request and
spammed "Copied 0 of 0 pages." into the log (#1191).

Run backups in a worker thread, give up after the source has been locked
for 60 seconds, and serialize backups now that they can overlap. Per-page
progress drops to debug.
2026-10-10 14:32:21 +02:00
Donkie 629b8228d8 chore: update sponsors image 2026-10-10 09:15:57 +00:00
Donkie 7fbe604cc2 Keep an explicit 0 tare when measuring a spool
measure() treated a spool_weight of 0 the same as a missing one and fell
back to the filament's tare, and since #1164 the vendor's. A refill wound
on no spool has a real tare of 0, so its scale reading was short by the
filament's spool weight. Only a missing tare now falls back.
2026-10-10 11:07:37 +02:00
Donkie bff2a485e6 Merge pull request #1248 from Donkie/feat/filament-manufacturer-list
Filament and manufacturer lists in the Library
2026-10-10 10:17:09 +02:00
Donkie 7e83451226 Catalog lists: Escape closes toolbar menus, tidier footer, list by id
Escape now closes the Filter, Group and Sort menus when they were opened
with a click, which left focus on their button where the menu never saw
the key.

The pager's page numbers and page-size picker wrap as one, so the
catalog's longer summary line no longer strands the picker on a line of
its own on phones.

"Show as a list" in the manufacturer inspector filters by the
manufacturer's id rather than its name, so a namesake stays out.
2026-10-10 10:02:26 +02:00
Donkie 30928407a7 Catalog lists: every sort and filter, plain #ids
The filament and manufacturer lists now sort by every field of the
filament or manufacturer, their custom fields included, plus spool and
filament counts, and offer the same filters as the spool view. A filter
on the spools themselves leaves out the filaments with none, as it does
there.

/spool/group takes the matching sort keys: filament.<column>,
filament.vendor.<column>, filament.extra.<key>,
filament.vendor.extra.<key> and group.filament_count. Keys it can't
resolve are still ignored.

Rows show the id as #id on the left like spool rows, and the Library
tab menu loses its descriptive sublines.
2026-10-10 10:02:26 +02:00
Donkie 02f5c07c13 Add filament and manufacturer lists to the Library
The Library gets two power-user sub-views, /?view=filaments and
/?view=manufacturers, reached from a menu on the Library tab, the search
panel and the manufacturer inspector. Rows are lists rather than tables so
translated labels and long names never widen them. The spool view is
unchanged.

The group endpoint gains what the lists need, all additive: a
group.vendor_name sort, include_empty for group_by=vendor, filament_count
on vendor groups, an opt-in preview of a group's first spools or
filaments, and X-Total-Spools / X-Total-Remaining-Weight headers.
2026-10-10 10:02:26 +02:00
Donkie 022285d64d Add Argos visual snapshots of client_v2 pages to CI
A screenshots Playwright project seeds a fixed dataset on the fresh CI
database and captures the main pages in light/dark at desktop and phone
widths. The Argos reporter uploads them from CI and posts the diff against
master on the PR. Fork PRs upload tokenless.

Also scope the transparency spec's swatch locator to the inspector header,
it picked the first list row once other spools sorted ahead of its own.
2026-10-10 09:35:51 +02:00
Donkie 6b1e01ecd8 chore: update sponsors image 2026-10-04 09:11:19 +00:00
Donkie 7c4dcc7da7 chore: update sponsors image 2026-10-01 09:38:56 +00:00
Donkie dcb4618399 chore: update sponsors image 2026-09-30 09:11:16 +00:00
Donkie 7a1114f8fc chore: update sponsors image 2026-09-29 09:20:58 +00:00
Donkie 423cf234be Decode inverted QR codes in client_v2 scanner on Firefox
Fixes #1165
2026-09-27 08:58:56 +02:00
Donkie 2c15af00b8 Merge pull request #1187 from Donkie/worktree-phone-nfc-auto-navigate
Auto-navigate on tags read by the phone's own NFC
2026-09-27 08:52:59 +02:00
Donkie ac9a32fa23 Merge pull request #1184 from IdefixRC/feat/scanner-camera-switch
Let the QR scanner pick between cameras
2026-09-27 08:48:16 +02:00
Donkie 787d912dec Merge pull request #1194 from Donkie/worktree-qr-custom-template-fields
Resolve label fields in custom QR URL templates
2026-09-27 08:46:52 +02:00
Donkie 8badd51707 Merge remote-tracking branch 'origin/master' into worktree-phone-nfc-auto-navigate 2026-09-27 08:44:40 +02:00