Commit Graph
1368 Commits
Author SHA1 Message Date
maziggy 2f51bec40d feat: add "Include beta updates" setting to filter prerelease notifications
Users on the Docker `latest` tag were seeing update notifications for beta
releases (e.g. v0.2.1b) they couldn't install. The update checker now fetches
/releases instead of /releases/latest and filters by parse_version() prerelease
detection. A new toggle in Settings (default: off) lets users opt in to beta
notifications.
2026-02-19 16:15:01 +01:00
maziggy 5e6c04f303 fix: queue stuck on "Busy" for "Any Model" jobs (#435)
When a print was queued with "Any [Model]", the queue widget only
queried items with printer_id=X after dispatch, missing the next
pending model-based item (printer_id IS NULL, target_model="P1S").
The "Clear Plate & Start Next" button never appeared, leaving the
scheduler stuck reporting "Busy".

Add optional target_model query parameter to GET /queue/. When
combined with printer_id, uses OR logic to also return unassigned
items whose target_model matches. The frontend now passes the
printer's model through PrinterQueueWidget to this query.
2026-02-19 14:22:28 +01:00
maziggy 72d4cea467 Bumped version 2026-02-19 13:59:56 +01:00
maziggy 30c8a03129 Updated docker-publish.sh v0.2.1b 2026-02-19 13:36:01 +01:00
maziggy 7b39026429 fix: resolve PFUS preset IDs causing slicer slot resets + fill level for new spools
BambuStudio actively resets AMS slots configured with unrecognized PFUS*
(user-local) preset IDs. Replace PFUS* with generic Bambu filament IDs
(e.g. GFL99 for PLA) in both the slot configure and inventory assignment
endpoints. When the slot already has a recognized cloud-synced preset for
the same material, reuse it to preserve K-profile calibration.

Also fix fill level bar not showing for brand new spools (weight_used=0)
by changing the condition from weight_used > 0 to weight_used != null.
2026-02-19 12:54:15 +01:00
maziggy c856badb84 fix: H2D tray_now disambiguation produces bogus IDs for AMS-HT (#364)
When the snow field hadn't arrived yet, the ams_extruder_map fallback
computed ams_id * 4 + slot for AMS-HT units (128-135), producing
invalid tray IDs like 512+. AMS-HT has a single slot; global ID = unit
ID.

- Single-AMS fallback: return ams_id directly for AMS-HT (128-135)
- Multi-AMS matching: decompose AMS-HT trays correctly (slot=0)
- Multi-AMS narrowing: slot > 0 eliminates AMS-HT candidates
- last_loaded_tray: tighten to valid IDs only (0-15, 128-135, 254)
- Add 10 tests for AMS-HT fallback and last_loaded_tray validation
2026-02-19 11:32:42 +01:00
maziggy d24e7cdf84 feat: multiple virtual printers with dedicated bind IPs + dual bind/detect ports (#445)
Multiple Virtual Printers:
- Each VP gets a dedicated bind IP with independent FTP, MQTT, SSDP, and Bind services
- New VirtualPrinter DB model, CRUD API (/api/virtual-printers), React UI
- VirtualPrinterList, VirtualPrinterCard, VirtualPrinterAddDialog components
- Per-instance TLS certificates (shared CA), 11 printer models, all 4 modes
- Auto-incremented serial suffixes, network interface override per VP

Dual Bind/Detect Ports (#445):
- Listen on both ports 3000 and 3002 for slicer bind/detect handshake
- Different BambuStudio/OrcaSlicer versions use different ports
- Applies to BindServer (server mode) and SlicerProxyManager (proxy mode)
- Updated Dockerfile, docker-compose.yml, firewall rules in wiki

Also:
- Rewrote VP test suite for new multi-instance architecture (75 tests)
- Rewritten "How it works" section with 3-step workflow explanation
- Updated all 5 locales (en, de, ja, fr, it)
- Updated wiki and website for multi-VP + dual ports
- New multi-VP screenshot
2026-02-19 11:22:28 +01:00
maziggy 623bbb0c7c Updated .gitignore 2026-02-19 09:59:23 +01:00
maziggy cb3363733e fix: remove dead PAUSED printer state checks (#447)
The printer only sends PAUSE via MQTT gcode_state, never PAUSED.
Removed all unreachable PAUSED comparisons from frontend (4 files)
and backend (2 files).
2026-02-19 09:42:11 +01:00
maziggy df83250ff8 feat: add dedicated clear_plate permission + full-page group editor (#446)
Add a new `printers:clear_plate` permission so admins can grant
plate-clearing ability without full `printers:control` access.
Existing groups with `printers:control` automatically receive the
new permission on startup via migration.

Replace the cramped permission modal in Settings with a dedicated
full-page group editor (`/groups/new`, `/groups/:id/edit`) featuring
search filtering, select all/clear all, category-level toggles,
and a responsive 2-column permission grid. Remove dead GroupsPage
code that was never routed.

- Backend: new Permission enum, category, defaults, endpoint guard, migration
- Frontend: GroupEditPage, updated routes, removed modal from SettingsPage
- Tests: 10 backend + 10 frontend tests for new permission and editor
- Docs: updated wiki (auth, printer-control, API), website, changelog
- i18n: added group editor keys to all 6 locale files (en/de/ja/fr/pt-BR/it)
2026-02-19 09:11:42 +01:00
b8d48b0362 Fix/hms flapping notifications (#444)
* Debounce HMS error tracking to prevent flapping notifications

HMS errors on newer printers (e.g. H2S) can flicker on and off
every few seconds as conditions fluctuate around thresholds. For
example, chamber temperature regulation during PETG prints sends
HMS code 0300A70000030001 repeatedly as temps oscillate. Previously
each reappearance after a brief hms:[] gap was treated as a new
error, triggering duplicate notifications. This adds a 30-second
grace period before clearing the notification tracking state so
flapping errors are only notified once per episode.

* build(deps): bump aquasecurity/trivy-action

Bumps the github_actions group with 1 update in the /.github/workflows directory: [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action).


Updates `aquasecurity/trivy-action` from 0.33.1 to 0.34.0
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.33.1...0.34.0)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-version: 0.34.0
  dependency-type: direct:production
  dependency-group: github_actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* Updated CI

* build(deps): bump aquasecurity/trivy-action

Bumps the github_actions group with 1 update in the /.github/workflows directory: [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action).


Updates `aquasecurity/trivy-action` from 0.33.1 to 0.34.0
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.33.1...0.34.0)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-version: 0.34.0
  dependency-type: direct:production
  dependency-group: github_actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* Updated CI

* Updated CI

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: MartinNYHC <mz@v8w.de>
2026-02-19 08:30:52 +01:00
MartinNYHC 81a3f399ea Merge pull request #434 from uefigs139/codex/add-systemd-updater-script
feat: Add native updater script with backup and safety checks
2026-02-19 08:26:28 +01:00
MartinNYHC 1ba681d7b7 Merge branch '0.2.1b' into codex/add-systemd-updater-script 2026-02-19 08:24:46 +01:00
maziggy 9e317bd775 Fix npm audit high-severity minimatch ReDoS (GHSA-3ppc-4f35-3m26)
by adding an npm override for minimatch@^10.2.1 in package.json.
2026-02-19 08:23:53 +01:00
maziggy bf33e6e16a Suppress the new minimatch ReDoS audit finding (GHSA-3ppc-4f35-3m26,
high) by changing audit-level from "high" to "critical" in .npmrc. Like
the existing ajv suppression, minimatch is a transitive dev dependency of
eslint/vitest with no non-breaking fix available — the ReDoS requires
untrusted glob patterns which never occur in linting/testing configs.
2026-02-19 08:19:11 +01:00
maziggy 9c81657df7 Fix Print Queue showing UUID hash instead of filename (#438)
Library files are stored on disk with UUID-hex filenames for uniqueness,
but archive_print() used the disk path as the display name. Pass the
original LibraryFile.filename through from both the print scheduler and
direct-print-from-library flow so the archive's filename, print_name,
and directory name all use the human-readable name.
2026-02-19 08:16:07 +01:00
MartinNYHC 8b0f39f595 Merge pull request #388 from wreuel/feature/addIpTablesOnDockerInstal
Adding the option to include the ip tables route when installing via …
2026-02-19 08:02:29 +01:00
MartinNYHC 324c716692 Fix indentation in iptables check 2026-02-19 08:02:11 +01:00
MartinNYHC a097bda2a3 Merge branch '0.2.1b' into feature/addIpTablesOnDockerInstal 2026-02-19 07:59:57 +01:00
maziggy ec751424b6 Fix AMS slot mapping for A1 Mini (#364)
Add color-matching fallback for slot-to-tray mapping on printers that
don't provide the MQTT mapping field (snow encoding) or reject request
topic subscription. Matches 3MF filament slot colors against AMS tray
colors to resolve the correct physical tray. Returns no match when
colors are ambiguous (duplicate tray colors) to safely fall through
to existing fallbacks.

Mapping priority chain: print_cmd → MQTT snow → queue → color match →
tray_now → slot_id-1.
2026-02-19 07:56:15 +01:00
uefigs139 891b6cc9ce Merge branch '0.2.1b' into codex/add-systemd-updater-script 2026-02-18 19:57:17 -05:00
uefigs139 e8b5f216cb Merge branch 'codex/add-systemd-updater-script' of https://github.com/uefigs139/bambuddy into codex/add-systemd-updater-script 2026-02-18 13:36:48 -05:00
uefigs139 3b02d3eedd Updated prompt flow of update 2026-02-18 13:36:45 -05:00
Wesley Reuel Marques Silva ca0fb0cca0 Merge branch '0.2.1b' into feature/addIpTablesOnDockerInstal 2026-02-18 18:01:51 +00:00
Wesley Reuel Marques Silva c879a787f6 Complying with PR 2026-02-18 18:00:23 +00:00
maziggy fbf676a77f Updated CI 2026-02-18 18:08:07 +01:00
MartinNYHC abc7737c85 Merge pull request #436 from cimdDev/add-H2D-Pro-png
Add H2D Pro printer image
2026-02-18 17:48:14 +01:00
maziggy c0948f7868 Updated CI 2026-02-18 17:47:29 +01:00
MartinNYHC d119219e4d Merge branch '0.2.1b' into add-H2D-Pro-png 2026-02-18 17:28:26 +01:00
maziggy 2bfb9d22c5 Updated CI 2026-02-18 17:26:09 +01:00
MartinNYHC bb4902ad53 Merge branch '0.2.1b' into add-H2D-Pro-png 2026-02-18 17:16:12 +01:00
MartinNYHC ee4def24b8 Merge branch '0.2.1b' into codex/add-systemd-updater-script 2026-02-18 17:09:54 +01:00
MartinNYHC c8be61f56e Merge pull request #412 from aneopsy/refactor-all-pages
refactor(utils): consolidate date and file size formatting
2026-02-18 17:06:43 +01:00
MartinNYHC 7c222cfd30 Merge branch '0.2.1b' into refactor-all-pages 2026-02-18 17:03:04 +01:00
maziggy e5f3b259ea Sync 2026-02-18 17:00:33 +01:00
MartinNYHC 1d636c9a16 Merge branch '0.2.1b' into refactor-all-pages 2026-02-18 16:54:55 +01:00
maziggy 1bb6758807 Updated CHANGELOG 2026-02-18 16:53:25 +01:00
MartinNYHC 8ce679986b Merge pull request #421 from wreuel/feature/brazilianPortugueseTranslation
Added translation to Brazilian Portuguese on existing strings.
2026-02-18 16:52:34 +01:00
MartinNYHC 181364c687 Merge branch '0.2.1b' into feature/brazilianPortugueseTranslation 2026-02-18 16:41:00 +01:00
maziggy a903816b8a fix(slicer): token-based auth for Open in Slicer downloads (#433)
Slicer protocol handlers (bambustudio://, orcaslicer://) launch the
slicer app which fetches files via HTTP but cannot send auth headers.
The global auth middleware returned 401, causing "importing failed."

Add short-lived, single-use download tokens: the frontend fetches a
token via authenticated POST, then builds a /dl/{token}/{filename} URL
the slicer can access without auth headers. Tokens are validated
server-side (5-min expiry, single-use). Applies to archive files,
source 3MFs, and library files.

Also fix platform-specific URL formats to match slicer source code:
- macOS: bambustudioopen:// with encodeURIComponent
- Windows/Linux: bambustudio://open?file= (was wrongly using macOS scheme on Linux)
- OrcaSlicer: orcaslicer://open?file=
2026-02-18 16:37:35 +01:00
MartinNYHC f13b385480 Merge pull request #429 from Keybored02/feature/use_remaining_filament
Show remaining spool weigth instead of used
2026-02-18 15:03:57 +01:00
MartinNYHC 1c068d2a2f Merge branch '0.2.1b' into feature/use_remaining_filament 2026-02-18 14:59:47 +01:00
maziggy 11d9c98b55 fix(inventory): require brand and subtype in spool form (#417)
The spool add/edit modal allowed saving without brand or subtype,
causing incomplete tray_sub_brands when assigned to AMS slots.
BambuStudio then failed to recognize the filament profile.

Brand and Subtype are now mandatory with validation errors on submit.
2026-02-18 14:59:03 +01:00
uefigs139 78f17614e7 fix: use robust systemd service detection in updater 2026-02-18 08:48:07 -05:00
Wesley Reuel Marques Silva f657e4c433 Merge branch '0.2.1b' into feature/brazilianPortugueseTranslation 2026-02-18 13:33:50 +00:00
AneoPsy 00b02ee620 Fix conflict 2026-02-18 03:32:24 -10:00
uefigs139 d12aaa222e feat: add native updater script with backup and safety checks 2026-02-18 08:32:04 -05:00
Wesley Silva 5415593951 Complying with PR 2026-02-18 13:27:34 +00:00
AneoPsy b931eeb3fd Merge remote-tracking branch 'upstream/0.2.1b' into refactor-all-pages 2026-02-18 03:25:56 -10:00
Matteo Parenti c68b73fde8 Merge branch 'feature/use_remaining_filament' of https://github.com/Keybored02/bambuddy into feature/use_remaining_filament 2026-02-18 14:16:21 +01:00