1725 Commits
Author SHA1 Message Date
maziggy b473b5b19e Revert " Fix beta updates shown when disabled (#731)"
This reverts commit ec7f7ec5ab.
2026-03-17 13:40:08 +01:00
maziggy ec7f7ec5ab Fix beta updates shown when disabled (#731)
Daily beta build tags (e.g. v0.2.3b1-daily.20260316) were not detected
  as prereleases because parse_version() only checked the last
  dot-separated segment for letters. The daily date suffix is purely
  numeric, so it passed the stable release check. Now checks the entire
  version string for prerelease markers.
2026-03-17 13:18:20 +01:00
maziggy 2e7529a540 Fix ethernet badge false positive and MQTT thread crash (#585)
Three bugs: (1) home_flag bit 18 is set on all printers regardless
    of connection type, so every ethernet-capable model showed the badge
    even on WiFi. Replaced with wifi_signal heuristic — ethernet printers
    with WiFi disabled report a hardcoded -90 dBm sentinel. (2) The lazy
    import used `from app.utils.printer_models` which crashes with
    ModuleNotFoundError in paho-mqtt's background thread (correct path:
    backend.app.utils.printer_models). This killed the thread, causing
    all printers to go stale after 60s and disconnect/reconnect in a
    loop. (3) WiFi-only models excluded via model-based gating.
v0.2.2b3-1
2026-03-11 14:35:34 +01:00
maziggy 26a3b2172d Fix ethernet badge shown on WiFi-only printers (#585)
home_flag bit 18 is set on all printers regardless of hardware,
    causing the ethernet badge to appear on WiFi-only models (A1, P1P,
    etc.). The previous fix removed the feature entirely, so ethernet
    printers lost their badge too.

    Now only trusts bit 18 on models with an ethernet port (X1C, X1E,
    P1S, P2S, H2D, H2D Pro, H2C, H2S). WiFi-only models always show
    the WiFi signal badge.
2026-03-11 12:56:23 +01:00
maziggy 1ad44cd41f Updated docker-publish-daily-beta.sh 2026-03-11 11:01:19 +01:00
maziggy 7eb82f58fa Updated CHANGELOG 2026-03-11 10:13:35 +01:00
maziggy c873b74fe6 Merge branch '0.2.2b3' into 0.2.3b1 2026-03-11 10:05:02 +01:00
maziggy d374e5f70b Fix debug logging endpoint 500 error after version upgrade
The GET /api/v1/support/debug-logging endpoint returned 500 when the
  database contained a timezone-aware enabled_at timestamp written by
  0.2.2b3. The duration calculation mixed offset-aware and offset-naive
  datetimes, raising TypeError. Strip tzinfo when reading the stored value.
2026-03-11 09:58:51 +01:00
maziggy f4758e4464 Add Home Assistant as notification provider (#656)
Sends persistent notifications to the HA dashboard using the existing
  HA connection from Settings. Zero config — just select "Home Assistant"
  as provider type. Users can forward notifications to mobile via HA
  automations.
2026-03-11 09:58:17 +01:00
maziggy 3788dd723c Added debug logging for ffmpeg process 2026-03-11 09:57:55 +01:00
maziggy f69b0413f0 Fix bed cooled notification never firing (#497)
Two bugs prevented bed cooldown notifications from working:

  1. Stale temperature data: After print completion, the printer sends
     partial MQTT updates without bed_temper, leaving the cached value
     frozen at the end-of-print temperature. The monitor polled for 30
     minutes seeing the stale value above threshold, then timed out.
     Fix: send periodic pushall commands to force fresh temperature data.

  2. Missing fields in provider create endpoint: on_bed_cooled and all 7
     queue event toggles were omitted from the NotificationProvider
     constructor, silently discarding user selections on create (update
     worked fine via dynamic setattr).

  Also added debug logging to the bed cooldown polling loop.
2026-03-11 09:57:55 +01:00
maziggy 1402293072 Updated README 2026-03-11 09:57:55 +01:00
maziggy 5e05903acc Revert "Updated README"
This reverts commit 987e18bab9.
2026-03-11 09:57:55 +01:00
maziggy 10df1ce1da Updated README 2026-03-11 09:57:55 +01:00
maziggy 54110cd8c2 Housekeeping 2026-03-11 09:57:47 +01:00
maziggy ed99ee68f4 Shorten inventory location labels for compact display
AMS slots now show "B3" instead of "AMS-B Slot 3" and external spool
  holders show "Ext" instead of "External", keeping the table readable
  at narrow widths.
2026-03-11 09:57:38 +01:00
maziggy a0fee9a1b6 Fix debug logging banner showing negative timer duration
The debug logging banner displayed a negative elapsed time (e.g. "-60m -59s")
  equal to the server's UTC offset. datetime.now() stored local time without a
  timezone indicator, but the frontend's parseUTCDate() interpreted it as UTC.

  Use datetime.now(tz=timezone.utc) consistently for storing, parsing, and
  comparing the enabled_at timestamp.
2026-03-11 09:57:34 +01:00
maziggy a77bfc5e62 Updated CHANGELOG 2026-03-11 09:56:57 +01:00
Dakota G be2ddbee5d [Fix]: Update location when linking/unlinking to/from Spoolman (#669)
* Enhance link spool functionality with additional printer and AMS details

* Refactor linkSpool function to accept detailed context object for improved spooling integration

* Enhance LinkSpoolModal to include amsName in props and linkSpool mutation for improved functionality

* Add amsName prop to PrinterCard for enhanced spool linking functionality

* Updates LinkSpoolModal test to work with recent spool location update changes

* Adds clear_location to unlink testing

* Refactor LinkSpoolRequest to remove ams_name and update location generation logic for improved clarity

* Remove amsName from LinkSpoolModal and PrinterCard for cleaner API integration

* Remove amsName from LinkSpoolModal test props and update linkSpool mock response for improved clarity
2026-03-11 09:38:14 +01:00
maziggy 53b8cbc169 Added debug logging for ffmpeg process 2026-03-11 09:29:03 +01:00
maziggy 283eaed2de Fix bed cooled notification never firing (#497)
Two bugs prevented bed cooldown notifications from working:

  1. Stale temperature data: After print completion, the printer sends
     partial MQTT updates without bed_temper, leaving the cached value
     frozen at the end-of-print temperature. The monitor polled for 30
     minutes seeing the stale value above threshold, then timed out.
     Fix: send periodic pushall commands to force fresh temperature data.

  2. Missing fields in provider create endpoint: on_bed_cooled and all 7
     queue event toggles were omitted from the NotificationProvider
     constructor, silently discarding user selections on create (update
     worked fine via dynamic setattr).

  Also added debug logging to the bed cooldown polling loop.
2026-03-11 08:55:03 +01:00
maziggy 4989f5cd42 Updated README 2026-03-11 08:32:15 +01:00
maziggy 253828c2b5 Fix debug logging endpoint 500 error after version upgrade
The GET /api/v1/support/debug-logging endpoint returned 500 when the
  database contained a timezone-aware enabled_at timestamp written by
  0.2.2b3. The duration calculation mixed offset-aware and offset-naive
  datetimes, raising TypeError. Strip tzinfo when reading the stored value.
2026-03-10 14:13:32 +01:00
maziggy 3578e7d008 sync 2026-03-10 14:10:05 +01:00
Dakota GandMartinNYHC 971984f91d [Fix]: Non-Bambu Lab Spools can now be fully linked/unlinked to Spoolman (#653)
* Expanded link logic to accept a generic spool tag (spool_tag, tray_uuid, or tag_uid) and validate 16/32-char hex values, including rejection of all-zero tags. Added a new unlink endpoint that clears Spoolman extra.tag for a given spool ID.

* Updated the link validation expectation to match the new 16-or-32-hex rule. Added an integration test for the new unlink endpoint to verify extra.tag is cleared and success is returned.

* Updated the link API call to send spool_tag instead of tray_uuid. Added a new unlinkSpool API helper that calls the new backend unlink route.

* Switched modal data source from inventory spools to Spoolman unlinked spools so the list matches the backend response you shared. Updated the link action to call Spoolman link directly and use trayUuid or tagUid as the slot tag.

* Refactored Spoolman card behavior so actions render correctly across linked/unlinked cases, and added support for an Unlink from Spoolman button under Open in Spoolman. Final UI rule now hides Unlink for Bambu Lab filament and shows it only for non-Bambu linked spools.

* Added fallback slot-tag generation so untagged slots can still be linked/unlinked reliably and linked spool lookups work consistently across AMS, AMS-HT, and external trays. Wired a new unlink mutation and passed per-slot unlink callbacks into the hover card, with query invalidation for linked/unlinked spool caches after unlink.

* Added/updated the noTrayUuid message to reflect that either tray UUID or tag UID is required when no slot tag is available. This keeps error text aligned with the new tag fallback and modal behavior.

* Added noTrayUuid message in the other languages. The translation was done using Google Translate.

* Updated LinkSpoolModal tests to use Spoolman API instead of inventory API, with new UnlinkedSpool data structure and Select Spool UI text.

* Adds hashSerialToHex32, uses new function in getFallbackSpoolTag and updates all uses. This ensures we're generating a fallback spool tag using the printers serial number rather than the database ID for consistency.

* Removes 'import json' from unlink_spool and moves to the top of the file.

* Removes hasUnlinkedSpools and related references since it's no longer used

* Removes noTrayUuid from translations and references in components.

* Adds confirmation dialog before fully unlinking spool from Spoolman

* Adds unlinkConfrimTitle and unlinkConfirmMessage. All languages other than English were done using Google Translate

* Fixes unlink toast to use dedicated unlinkSuccess and unlinkFailed keys.

* Changes tag priority on spoolTag, fixes type error by adding non-null assertion to spoolTag

* Switches around tag_uid and tray_uuid on const trayTag

---------

Co-authored-by: MartinNYHC <mz@v8w.de>
2026-03-10 14:06:09 +01:00
maziggy 19d056bbc8 Revert "Updated README"
This reverts commit 987e18bab9.
2026-03-10 12:57:18 +01:00
maziggy 987e18bab9 Updated README 2026-03-10 12:53:48 +01:00
maziggy f5df4c3623 Housekeeping 2026-03-10 11:38:52 +01:00
maziggy 1b32cc26cc Shorten inventory location labels for compact display
AMS slots now show "B3" instead of "AMS-B Slot 3" and external spool
  holders show "Ext" instead of "External", keeping the table readable
  at narrow widths.
2026-03-10 11:36:08 +01:00
maziggy 63208cf6f1 Fix debug logging banner showing negative timer duration
The debug logging banner displayed a negative elapsed time (e.g. "-60m -59s")
  equal to the server's UTC offset. datetime.now() stored local time without a
  timezone indicator, but the frontend's parseUTCDate() interpreted it as UTC.

  Use datetime.now(tz=timezone.utc) consistently for storing, parsing, and
  comparing the enabled_at timestamp.
2026-03-10 10:51:23 +01:00
maziggy fe6c022be6 Updated CHANGELOG 2026-03-10 10:34:45 +01:00
maziggy ae82cde7bc Change license from MIT to AGPL-3.0
Prevent unauthorized closed-source redistribution of Bambuddy.
  AGPL-3.0 requires anyone who modifies and distributes or hosts
  Bambuddy to share their source code.

  All prior contributions were made under MIT, which is
  forward-compatible with AGPL-3.0 — no contributor rights are
  affected. Community usage, forking, and contributions continue
  as before; the only change is that derivative works must remain
  open source.

  Files changed:
  - LICENSE: replaced MIT with AGPL-3.0 (from gnu.org)
  - README.md: updated license reference
  - CHANGELOG.md: documented license change under [0.2.3b1]
2026-03-10 10:34:02 +01:00
maziggy 788b396406 Updated CHANGELOG 2026-03-10 10:32:55 +01:00
maziggy 4a1a0b6abe Change license from MIT to AGPL-3.0
Prevent unauthorized closed-source redistribution of Bambuddy.
  AGPL-3.0 requires anyone who modifies and distributes or hosts
  Bambuddy to share their source code.

  All prior contributions were made under MIT, which is
  forward-compatible with AGPL-3.0 — no contributor rights are
  affected. Community usage, forking, and contributions continue
  as before; the only change is that derivative works must remain
  open source.

  Files changed:
  - LICENSE: replaced MIT with AGPL-3.0 (from gnu.org)
  - README.md: updated license reference
  - CHANGELOG.md: documented license change under [0.2.3b1]
2026-03-10 10:31:18 +01:00
maziggy 698b4cf374 Updated CHANGELOG 2026-03-10 10:31:08 +01:00
maziggy f28421d1ae Add Home Assistant as notification provider (#656)
Sends persistent notifications to the HA dashboard using the existing
  HA connection from Settings. Zero config — just select "Home Assistant"
  as provider type. Users can forward notifications to mobile via HA
  automations.
2026-03-10 10:10:14 +01:00
maziggy 0fe5837d2c Housekeeping 2026-03-10 09:25:40 +01:00
maziggy ea07a0ab8e Fix archive card button overlap at narrow viewport widths (#641)
The "Reprint" and "Schedule" buttons at the bottom of archive cards
  overlapped when the browser was narrower than the card grid expected
  (e.g. half-screen on a 2K monitor). The text labels used a viewport-
  based sm: breakpoint that didn't account for actual card width.

  Added overflow-hidden to the flex buttons and truncate to the text
  spans so labels clip with ellipsis instead of bleeding into neighbors.
2026-03-10 09:00:12 +01:00
maziggy f7d733dd96 Updated README 2026-03-10 08:56:17 +01:00
maziggy 688804ac07 Housekeeping 2026-03-10 08:38:29 +01:00
maziggy fa4bb92f7d Add higher FTP timeout options for large 3MF files (#660)
Large Hueforge 3MF files (~28 MB) can't be downloaded from the
  printer's FTP server within the previous 120s max timeout, especially
  during active printing. Added 180s and 300s timeout options to the
  FTP settings dropdown.
2026-03-10 08:31:44 +01:00
maziggy 68d2230cab Fix H2D AMS units displayed on wrong nozzle (#659)
Three interrelated bugs in AMS info field parsing caused AMS units
  to appear on the wrong nozzle on H2D dual-nozzle printers:

  1. Info field parsed as decimal instead of hex (BambuStudio uses
     std::stoull with base 16)
  2. Extruder ID extracted as 1-bit instead of 4-bit field (bits 8-11)
  3. Partial MQTT updates replaced the full extruder map instead of
     merging into it
2026-03-10 08:18:23 +01:00
maziggy c5269b5b0c Fix GitHub backup requiring cloud login and backup log timestamps (#655)
- Remove Bambu Cloud authentication gate from GitHub backup settings card.
    K-profiles and app settings backup work without cloud login; the Cloud
    Profiles checkbox is disabled with a hint when not authenticated.
  - Fix backup log timestamps showing UTC instead of local time by using
    the shared parseUTCDate utility for correct timezone conversion.
2026-03-10 07:49:35 +01:00
maziggy a95fa9e124 chore: rebuild static assets after merge 2026-03-09 12:47:44 +01:00
maziggy fa8aa5e828 Merge 0.2.2b3 into 0.2.3b1 2026-03-09 12:47:21 +01:00
maziggy 9986656491 Housekeeping 2026-03-09 12:40:00 +01:00
maziggy 3c2c61617c Housekeeping 2026-03-09 12:39:07 +01:00
maziggy be5925352d Updated README 2026-03-09 12:37:20 +01:00
maziggy e4bdddcde1 Housekeeping 2026-03-09 12:35:05 +01:00
maziggy ec8b1f935d Fixed frontend/src/__tests__/utils/currency.test.ts 2026-03-09 12:35:05 +01:00