Commit Graph
587 Commits
Author SHA1 Message Date
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
MartinNYHC bb4902ad53 Merge branch '0.2.1b' into add-H2D-Pro-png 2026-02-18 17:16:12 +01:00
MartinNYHC 1d636c9a16 Merge branch '0.2.1b' into refactor-all-pages 2026-02-18 16:54:55 +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 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
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
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
Matteo Parenti 07015a7f8f fix(i18n): update remaining filament labels in multiple languages 2026-02-18 14:16:03 +01:00
tridev 5794f0ffe7 Add H2D Pro printer image and mapping 2026-02-18 14:08:11 +01:00
MartinNYHC 445865bbde Remove empty line at the beginning of file 2026-02-18 13:56:36 +01:00
MartinNYHC fa4bb4fd5c Fix missing newline at end of file.test.ts
Add newline at the end of the file to comply with style guidelines.
2026-02-18 13:56:11 +01:00
AneoPsy d9dd15dbff fix(ui): storage size formatting, overdue queue items, and i18n fixes
- Add formatStorageSize helper in FileManagerModal to display storage
  in GB/MB instead of raw bytes
- Show "Overdue" label for queue items whose scheduled time has passed
  by more than 1 minute
- Fix missing "in" prefix for English inDays translation
- Fix swapped justNow/now translations in Italian locale
- Fix whitespace formatting for waiting key across all locales
- Add trailing newline to date.ts and date.test.ts
2026-02-18 02:45:43 -10:00
MartinNYHC 626a345596 Merge branch '0.2.1b' into feature/use_remaining_filament 2026-02-18 13:42:56 +01:00
AneoPsy 6c308ecbd2 feat(queue): improve mobile responsiveness for QueuePage
- Summary cards: 2-col mobile grid with responsive padding, icons, and text sizing; 5th card spans full width on 2-col layout
- Filters: flex-wrap with scaled text/padding; selects share width on mobile; clear history button goes full-width
- Section headers (Pending/History): flex-wrap so sort controls wrap below title; drag hint hidden on mobile; responsive icon and text sizes
- Bulk action toolbar: flex-wrap with tighter gaps/padding; vertical divider hidden on mobile; scaled button text and icons
- SortableQueueItem: top-aligned on mobile; smaller thumbnail (10→14 at sm); metadata row wraps with truncated printer name; username hidden on mobile; badges scale down; status badge and actions stack vertically on mobile; tighter button padding
2026-02-18 02:08:42 -10:00
AneoPsy 3a028724a8 Merge remote-tracking branch 'upstream/0.2.1b' into refactor-all-pages 2026-02-18 01:31:40 -10:00
MartinNYHC 72f5bd445f Merge branch '0.2.1b' into feature/filament-fix 2026-02-18 12:23:21 +01:00
MartinNYHC 8a0fbbd7b4 Merge branch '0.2.1b' into feature/brazilianPortugueseTranslation 2026-02-18 12:13:33 +01:00
Matteo Parenti a649a246b2 Merge branch 'feature/filament-fix' of https://github.com/Keybored02/bambuddy into feature/filament-fix 2026-02-18 12:03:02 +01:00
Matteo Parenti 87c6bfe672 fix(spool-form): improve handling of core_weight_catalog_id and catalog ID selection logic 2026-02-18 12:02:55 +01:00
maziggy 2fd90e9dce refactor(api): rename /filaments/ to /filament-catalog/ for clarity (#427)
The /filaments/ endpoint manages material type definitions (cost, temps,
density) but shares its name with the UI's "Filament" page which shows
the spool inventory (/inventory/spools/). This caused users to expect
the API to return their spool inventory.

Rename to /filament-catalog/ to make the distinction clear. No frontend
behavior change — these API methods are defined but unused in the UI.
2026-02-18 11:58:17 +01:00
MartinNYHC e60832d9f4 Merge branch '0.2.1b' into feature/brazilianPortugueseTranslation 2026-02-18 11:34:33 +01:00
MartinNYHC b0d341a58a Merge branch '0.2.1b' into feature/filament-fix 2026-02-18 11:32:43 +01:00
MartinNYHC f38aced463 Merge branch '0.2.1b' into refactor-all-pages 2026-02-18 11:32:19 +01:00
maziggy 60b5ff2363 Closes #426 2026-02-18 11:05:16 +01:00
maziggy bedcd0a73e 1. ajv is only used by eslint to validate config schemas during linting
2. It's a dev dependency, never reaches production
  3. The ReDoS requires crafted $data schema input — not an attack vector in a linting config
2026-02-18 09:30:29 +01:00
maziggy 29e9593f6c AMS mapping fixes (7 bugs):
- backend/app/services/print_scheduler.py — hard nozzle filter + external spool extruder
- backend/app/api/routes/printers.py — ams_extruder_map race condition
- backend/app/utils/threemf_tools.py — group_id priority + dual-nozzle detection
- frontend/src/hooks/useFilamentMapping.ts — external spool extruder
- frontend/src/pages/PrintersPage.tsx — AMS-HT globalTrayId
- frontend/src/components/PrintModal/FilamentMapping.tsx — dropdown nozzle filter

Usage tracking fix:
- backend/app/services/bambu_mqtt.py — capture last valid progress/layer
- backend/app/services/usage_tracker.py — use captured values on cancel

UI fix:
- frontend/src/components/spool-form/ColorSection.tsx — color tooltip z-index

Tests:
- backend/tests/unit/test_scheduler_ams_mapping.py — 63 tests
- frontend/src/__tests__/hooks/useFilamentMapping.test.ts — 43 tests

Static assets:
- static/ — rebuilt frontend bundles
2026-02-18 09:17:50 +01:00
Wesley Silva 3291e8c6f9 Added translation to Brazilian Portuguese on existing strings. 2026-02-17 19:49:57 +00:00
Matteo Parenti 7efbb1fc58 Show remaining spool weigth instead of used 2026-02-17 17:25:04 +01:00
Matteo Parenti e17b55fe22 Add tests for core_weight_catalog_id handling 2026-02-17 16:23:06 +01:00
Matteo Parenti 233f50c38d fix(inventory): spool catalog entry ID matching 2026-02-17 16:07:15 +01:00
AneoPsy 82b3d5f23e fix
- Fix clearedPlate
- Remove useless import
2026-02-17 02:12:01 -10:00
AneoPsy 59fd7a3b5c Merge remote-tracking branch 'upstream/0.2.0b' into refactor-all-pages 2026-02-17 01:28:16 -10:00
AneoPsy b477fbf46d Refactors date and file formatting utilities
refactor(utils): consolidate date and file size formatting

Extracts formatting logic into dedicated utility functions to improve
code maintainability and consistency across components.

Changes:
- Consolidate date formatting functions (formatRelativeTime, etc.)
- Consolidate file size formatting into single formatFileSize utility
- Fix file size calculation errors
- Update UI components to use new utilities
- Change "ASAP" to "Waiting" for unscheduled queue items

Tests:
- Add comprehensive unit tests for date utilities
- Add unit tests for file size formatting
2026-02-17 01:15:33 -10: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 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
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
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
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 957e57f689 Merge branch '0.2.0b' into feature/ui_improvements 2026-02-16 09:59:00 +01:00
MartinNYHC 78fdb27fa5 Fix indentation in QueuePage.tsx 2026-02-16 09:55:30 +01:00