Commit Graph
1288 Commits
Author SHA1 Message Date
MartinNYHC a5ccdf561a Make 'latest version' field required in bug report 2026-02-24 17:49:20 +01:00
maziggy 8e39b12c5d Updated .github/ISSUE_TEMPLATE/bug_report.yml 2026-02-24 16:49:32 +01:00
maziggy 59be1b0d4d Updated .github/ISSUE_TEMPLATE/bug_report.yml 2026-02-24 16:48:12 +01:00
MartinNYHC e19a92384d Merge pull request #495 from maziggy/dependabot/npm_and_yarn/frontend/npm_and_yarn-f1bf2b0a19
build(deps-dev): bump ajv from 6.12.6 to 6.14.0 in /frontend in the npm_and_yarn group across 1 directory
v0.2.1b3
2026-02-23 09:10:56 +01:00
dependabot[bot] 07146beafa build(deps-dev): bump ajv
Bumps the npm_and_yarn group with 1 update in the /frontend directory: [ajv](https://github.com/ajv-validator/ajv).


Updates `ajv` from 6.12.6 to 6.14.0
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 6.14.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 23:19:44 +00:00
maziggy 9f06890c84 Housekeeping 2026-02-21 09:02:21 +01:00
maziggy 5e92bd319f Sync 2026-02-20 19:52:42 +01:00
maziggy 7c0eeed8d5 Both workflows now parse package-lock.json directly instead of trusting npm ls. The lockfile correctly marks minimatch as dev: true and doesn't contain npm/tar at all —
so all three npm-internal packages will be filtered out regardless of which npm version CI uses.
2026-02-20 19:32:07 +01:00
maziggy 4991192246 Updated CI 2026-02-20 19:22:50 +01:00
maziggy 802bfe330a Updated CI 2026-02-20 19:19:20 +01:00
maziggy 5d48ab88f0 Updated CI 2026-02-20 19:10:56 +01:00
maziggy 2c0d1c2fe6 Updated CI 2026-02-20 18:29:50 +01:00
maziggy 036ae16ad5 Updated CI 2026-02-18 18:08:23 +01:00
maziggy a361671952 Updated CI 2026-02-18 17:47:49 +01:00
MartinNYHC 0a725c0ccc Merge pull request #440 from maziggy/dependabot/github_actions/dot-github/workflows/github_actions-9bddd90c58
build(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows in the github_actions group across 1 directory
2026-02-18 17:32:27 +01:00
dependabot[bot] 971aa960a8 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>
2026-02-18 16:31:35 +00:00
maziggy 10cae700f4 Updated CI 2026-02-18 17:27:37 +01:00
MartinNYHC 5bcfadbd8d Merge pull request #437 from maziggy/dependabot/github_actions/dot-github/workflows/github_actions-9bddd90c58
build(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows in the github_actions group across 1 directory
2026-02-18 17:00:09 +01:00
dependabot[bot] 1d0875ee83 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>
2026-02-18 15:56:12 +00:00
maziggy 101288d1b2 Updated CI 2026-02-18 13:28:33 +01:00
maziggy 22ac7e97bb Closes #426 2026-02-18 13:16:48 +01:00
maziggy 257a65633a Housekeeping 2026-02-18 13:07:35 +01:00
maziggy ac2aaaac20 Bumped version v0.2.0 2026-02-17 12:36:53 +01:00
MartinNYHC 5987283f6f Merge pull request #411 from maziggy/0.2.0b
v0.2.0
2026-02-17 12:32:20 +01:00
MartinNYHC 2710fee82e Merge branch 'main' into 0.2.0b 2026-02-17 12:27:21 +01:00
maziggy a0abeba394 fix(queue): persist clear plate state across page refresh (#410)
After clicking "Clear Plate & Start Next", refreshing the page showed
the button again because the frontend determined the state purely from
the printer's FINISH/FAILED status. The backend already tracked a
plate_cleared flag in memory but never exposed it to the frontend.

- Add plate_cleared field to PrinterStatus schema and API response
- Pass plateCleared prop to PrinterQueueWidget
- Skip clear plate UI when plate is already acknowledged
- Add 2 tests for plateCleared=true behavior
2026-02-17 12:14:47 +01:00
maziggy 20e06bcf0c feat(virtual-printer): add port 3000 bind/detect server for slicer connectivity
Recent BambuStudio/OrcaSlicer updates require a bind/detect handshake on
port 3000 before connecting via MQTT/FTP. Without this, slicers cannot
discover or connect to the virtual printer in any mode.

- Add BindServer for server modes (immediate/review/print_queue)
- Add TCPProxy for raw TCP forwarding (proxy mode)
- Update Dockerfile (EXPOSE 3000) and docker-compose.yml (bridge port)
- Add 10 new tests for BindServer protocol and integration
2026-02-17 11:57:50 +01:00
maziggy a4fad2d2f5 fix(mqtt): fail-safe request topic subscription for ams_mapping capture (#405)
Some printer MQTT brokers (e.g. P1S) reject subscriptions to the request
topic by killing the TCP connection, causing a disconnect loop. The request
topic subscription for ams_mapping capture is now fail-safe with two
detection paths:

- SUBACK rejection: on_subscribe callback detects failure code 0x80
- Broker kills connection: on_disconnect detects disconnect within 10s of
  unconfirmed subscription attempt

After detection, the request topic is disabled for that printer and
reconnection succeeds with only the report topic. Printers that support
the request topic (e.g. X1E, H2D) get ams_mapping capture; printers that
don't (e.g. P1S) gracefully degrade to tray_now-based tracking.
2026-02-17 09:33:32 +01:00
maziggy bd84f8d87a Housekeeping 2026-02-17 08:57:27 +01:00
maziggy 83ed4b2581 Housekeeping 2026-02-17 08:57:09 +01:00
maziggy bc78f3f456 feat(timelapse): add upload and remove timelapse management (#406)
When the auto-scan attached the wrong timelapse (e.g. from a different
print), there was no way to fix it — the file couldn't be removed and
re-scanning was disabled once a timelapse was attached.
2026-02-17 08:49:32 +01:00
maziggy c82521efc9 fix(timelapse): support AVI format from P1-series printers (#405)
P1S/P1P save timelapses as AVI (MJPEG), but the scanner only looked
for MP4 files — so P1-series timelapses were never found or attached.
2026-02-17 08:29:47 +01:00
maziggy 4cd36abfef fix(queue): update queue item status before archive lookup early return
The queue item status update (printing → completed/failed) was placed
after `if not archive_id: return` in on_print_complete. When archive
lookup failed (app restart mid-print, manual deletion), the function
returned early and the queue item stayed stuck in "printing" forever.

Over multiple print cycles, stale items accumulated — showing double
the actual printer count in the "Printing" stat and completed prints
remaining in the "Currently Printing" section.

Move the entire queue item status update block (status transition,
MQTT relay, queue-completed notification, auto-power-off) to before
the archive_id early return, matching the pattern used for SD card
cleanup.
2026-02-17 07:41:12 +01:00
maziggy 27e4fe49bd fix(ghost-print): run SD card cleanup before archive lookup and add retry logic (#374)
The SD card file cleanup (which prevents phantom prints on power cycle)
was placed after the archive_id early-return in on_print_complete. Users
with auto-archiving disabled never reached the cleanup code, so ghost
prints persisted on every reboot.

- Move cleanup before the archive_id check so it always runs
- Add retry loop (3 attempts, 2s delay) for printers that briefly lock
  the filesystem after a print ends
- Try both .3mf and .gcode extensions

Reported by @DIYofThings in #374.
2026-02-17 07:26:28 +01:00
maziggy 12399abfea fix(usage-tracker): capture ams_mapping from MQTT request topic for slicer-initiated prints
Subscribe to the MQTT request topic (device/{serial}/request) to intercept
print commands from any source (BambuStudio, OrcaSlicer, Bambu Handy, or
Bambuddy itself). Captures ams_mapping from project_file commands and passes
it through print start/complete callbacks. Fixes wrong tray attribution on
H2D Pro when prints are started from external slicers.
2026-02-17 07:07:39 +01:00
maziggy ca9ffbba5d feat(usage-tracker): add diagnostic logging for slot-to-tray mapping investigation
Usage tracking works on X1E but fails on H2D Pro — the wrong tray
is identified, attributing usage to the wrong spool. The root cause
is unknown because we don't know what MQTT mapping data each printer
model reports.

Adds INFO-level logging at print start and completion:
- state.raw_data["mapping"] (unknown format, preserved but never parsed)
- tray_now, last_loaded_tray values
- All raw_data keys containing "map" (discovery)
- Per-AMS-tray summary: tray_type, tray_color, tray_now, tray_tar

This enables comparing MQTT behavior across printer models without
requiring DEBUG mode, so testers can send normal logs.
2026-02-16 17:04:47 +01:00
maziggy cf7c459099 fix(inventory): fix usage tracking for remapped AMS slots and slicer prints
Three fixes for inventory spool usage not updating after prints:

1. Store ams_mapping from print command (reprint, library print, queue)
   so the usage tracker maps 3MF slots to the actual physical trays
   the user selected, not the default slicer mapping.

2. Track last_loaded_tray on printer state — the last valid tray_now
   (0-253) seen during printing. On H2D printers, tray_now is always
   255 in AMS data; the real tray resolves via snow field ~44s after
   print start but reverts to "unloaded" at completion. The fallback
   chain is: tray_now_at_start > current tray_now > last_loaded_tray.

3. Use color similarity (Euclidean RGB distance, threshold 50) instead
   of exact hex match for auto-unlink fingerprint checks. RFID sensors
   report slightly different shades across reads (e.g. distance ~43.6
   for the same spool), causing false assignment unlinks after prints.
2026-02-16 15:46:32 +01:00
MartinNYHC ec82e4d428 Merge pull request #401 from aneopsy/queue-plate-name
feat(queue): display plate name alongside file name for multi-plate files
2026-02-16 13:50:43 +01:00
MartinNYHC f8768b9ee9 Merge branch '0.2.0b' into queue-plate-name 2026-02-16 13:48:14 +01:00
maziggy 6ba5d43a18 fix(queue): show library file name in printer queue widget (#364)
The "Next in queue" widget on the printer card only checked
archive_name/archive_id, so file-manager-sourced queue items
displayed "Archive #null". Now falls back to library_file_name
and library_file_id, matching the Queue page display logic.
2026-02-16 13:46:22 +01:00
AneoPsy 191600b006 fix: use same query keys as PrintModal and ArchivesPage 2026-02-16 02:42:18 -10:00
MartinNYHC bf9679f232 Merge branch '0.2.0b' into queue-plate-name 2026-02-16 13:07:32 +01:00
maziggy e13a72ef19 fix(queue): create archive for library-file prints so 3MF usage tracking works (#364)
When a print was queued from the file manager (library_file_id path),
the scheduler never created an archive or called register_expected_print().
This forced on_print_start to re-download the 3MF via FTP, and if that
failed, a fallback archive with no file was created — breaking 3MF-based
filament usage tracking entirely. The queue item's archive_id also stayed
NULL, so the usage tracker couldn't find the AMS slot mapping.

Now the scheduler creates an archive from the library file before uploading,
sets item.archive_id, and the existing register_expected_print() call fires
since archive is no longer None.
2026-02-16 13:04:10 +01:00
AneoPsy f1f27cefe1 feat(queue): display plate info alongside file name for multi-plate files
- Show plate name or plate ID next to the file name in queue items
- Add translation queue.plateNumber
2026-02-16 01:51:05 -10:00
maziggy 2f61973af2 Housekeeping 2026-02-16 10:57:39 +01:00
MartinNYHC 2cb1a7d8d6 Merge pull request #387 from Keybored02/feature/ui_improvements
Fixed Archive object card clipping, added reprint icon to list view
2026-02-16 10:34:39 +01:00
MartinNYHC bb4687a832 Merge branch '0.2.0b' into feature/ui_improvements 2026-02-16 10:30:08 +01:00
maziggy bc15d49a7e feat: add clear HMS errors button to dismiss stale print errors
Add a "Clear Errors" button to the HMS error modal that sends
clean_print_error via MQTT and locally clears hms_errors for
immediate UI feedback. Useful for dismissing stale print_error
values that persist after print cancellation or transient events.
2026-02-16 10:29:07 +01:00
Matteo Parenti b0d1358b2e Change gcode/3MF preview icon 2026-02-16 10:15:44 +01:00
MartinNYHC 82964da459 Merge pull request #395 from aneopsy/queue-currently-printing-card
feat(Queue) Add more information in Currently Printing job
2026-02-16 10:09:15 +01:00