maziggy 2 settimane fa
parent
commit
490f72fe21
1 ha cambiato i file con 1 aggiunte e 2 eliminazioni
  1. 1 2
      CHANGELOG.md

+ 1 - 2
CHANGELOG.md

@@ -14,10 +14,9 @@ All notable changes to Bambuddy will be documented in this file.
 - **Camera view mode is picked at the camera button, per printer** — Whether a camera opened in its own browser window or as a floating overlay was one dropdown in Settings → General → Camera, applied to every camera on the install. Deciding it per printer meant leaving the Printers page, changing the setting, coming back, opening the camera, and going back again to undo it. The camera button on the printer card is now a split control: the icon opens the camera whichever way you opened the last one, and the caret beside it offers both modes, with the one in effect ticked. Picking a mode opens the camera that way as well as making it the mode the icon uses from then on, because a menu that only changed a preference would leave you a second click to do the thing you had already asked for. The choice lives in your own browser, so two people watching the same farm can each have the view they want; `camera_view_mode` survives as the default a browser that has never chosen starts from, and is written back when you hold `settings:update`. The Cam Wall follows the same remembered mode, and the popup-opening code the card and the wall each had a copy of is now shared, with a corrupt saved window geometry falling back to defaults instead of throwing. The effect that force-closed every open overlay when the setting flipped to window is gone — it made sense for a global switch, not for a choice made per click. No new locale strings: the four the settings control used are reused as the menu's labels and tooltips.
 - **A file dropped on a busy or offline printer is queued instead of refused (#2849, reporter @abraha2d)** — Dragging a sliced file onto a printer card refused the drop unless the printer was connected and neither printing nor paused. The overlay went red with "Printer busy", the handler returned early, and the file was discarded with no toast and nothing uploaded; the card's Print button was hidden by the same condition, so both routes into printing from the card closed at once and the way through was the File Manager. The gate never described a real constraint. Every print Bambuddy sends becomes a queue item, and dropping onto an idle printer only looks instant because the scheduler dispatches it on the next pass — busy is a timing difference, not a different path, which is why the print dialog has always accepted a busy target and said the job would start later. Offline is included for the same reason: the queue dispatches when the printer comes back, so a machine that is powered down can be given work. The overlay now says which one is happening, "Drop to print" when the job would start immediately and "Drop to queue" when it would wait, using the same predicate the print dialog uses for its own later-start notice so the card cannot promise something the dialog contradicts a second later. The drop is also gated on the permissions the flow actually exercises — `library:upload` and `queue:create`, the pair the Print button beside it has always checked — instead of `printers:control`, which it checked and never used, and which let someone holding it alone get the file uploaded and then rejected by the queue, leaving an orphaned library row behind.
 - **An archive that arrives with only a name now says what to do about it (#2843, reporter @gyrene2083)** — The no-3MF banner and the connection diagnostic both explained why a print archived with nothing but a name and offered nothing to do about it, and the explanation was wrong in the way that mattered most: both blamed the printer's firmware and said no setting changes it, which reads as "your machine is broken and nothing will help". Measured on hardware: same Bambu Studio, same model, three printers a minute apart, all reporting the external-storage option as on — the H2C and H2D went to internal storage and archived with a name only, the X1C went to the card and archived in full. The same H2C and H2D sliced in OrcaSlicer put the file on the card and archived in full, and turning the option off changed nothing, because OrcaSlicer always uploads over FTPS. So the destination is the slicer's choice, not the printer's, and the option governs neither slicer on this generation. Both strings now name Bambu Studio rather than the firmware and lead with the two routes that take one step — start the print from Bambuddy, or slice in OrcaSlicer — with Send-with-External followed by a separate print start offered as the way to stay in Bambu Studio. Both also mention that a card or stick is still needed, since with an empty slot OrcaSlicer refuses to send at all. Translated in all thirteen locales, and the README callout and this entry now link the upstream issue, bambulab/BambuStudio#10481, so the behaviour can be followed where it is tracked.
-
-### Changed
 - **The Watchtower we recommend for daily builds is the maintained fork (#2917, reported by @CamelT0E)** — The daily-build instructions in the README, on Docker Hub and in every daily prerelease pointed at containrrr.dev/watchtower. That project has been archived and read-only since December 2025 and its last release, v1.7.1, is from November 2023, so anyone following the recommendation was being handed a container with Docker socket access that had not received a fix in over two years. Development continues in Nicholas Fedor's fork, which ships as `nickfedor/watchtower` and released v1.21.0 this month. All four references now point at watchtower.nickfedor.com and name the image, including the release-notes template in `docker-publish-daily-beta.sh` that produced the screenshot in the report — the READMEs alone would have left every future daily prerelease repeating the dead link. Existing images keep working; only the recommendation changed.
 - **The Windows installer build is split in two so a signing request can wait for a human (SignPath Foundation)** — Release tags are Authenticode-signed through the SignPath Foundation OSS programme, and the production certificate does not sign on demand the way the self-signed test certificate does: every request has to be approved by hand in the SignPath UI, because the Foundation verifies what is being signed and which build it came from. The submitting action waits for that approval with a default timeout of 600 seconds, which is ample when the test policy approves automatically in seconds and far too short once the wait is a person noticing a tag went out. A tag pushed at night would have failed the run ten minutes later with the installer already compiled and thrown away. The compile now ends in its own job that uploads the unsigned artifact and stops; a second job downloads it, signs it, and does the release-facing work, with the wait raised to an hour. Because the artifact is uploaded before the wait begins and is addressed by id, a missed approval window is recovered by re-running the second job alone rather than rebuilding the installer — which is the reason to separate them rather than simply raise the timeout in place. The second job runs for unsigned builds too, so the daily prereleases that are deliberately left unsigned to preserve the signing quota keep going out through exactly one set of alias, artifact and release steps. The property that matters is unchanged and now recorded next to the steps that depend on it: none of the alias, upload or release-attach steps carry `always()`, so GitHub skips all three when signing fails or times out, and an unsigned `.exe` cannot reach a release. Nothing about the signed output changes, and the restructure behaves identically under the test policy — the request simply completes immediately instead of waiting — so it can be proven green before the production certificate arrives.
+- **Generated thumbnails are lit, so one model no longer looks like the next (#2816, requested by @NaegeliJ, contributed by @sadontsev in #2861)** — Both renderers that draw a model themselves — the File Manager's STL/3MF thumbnails and the plate cards — handed matplotlib a mesh with no light source, and without one every triangle is filled with the identical green whichever way it faces. The result was a flat silhouette, so two models of similar outline were the same picture. The mesh is now shaded from a fixed light whose angle is pinned to the camera angle rather than chosen freely: the two are a pair, and a light aimed at the far side of the model gives both visible faces the same brightness and no contrast at all. Lighting then exposed two faults a flat render had hidden. A face wound the wrong way shades as though it faced away, so an STL with inconsistent winding came out patchy like camouflage; winding is now repaired before the render — outward rather than merely consistent, and only for the meshes that need it, since the check is milliseconds where the repair is seconds. And a mesh whose facets are all zero-area or collinear — stub or truncated STLs, 3MFs with an empty triangle list — would have failed outright once lit, so those are detected and still render flat instead of counting as a failure in a folder-wide batch. Both renderers share one copy of the light, the camera and the repair, so a plate card and a library thumbnail of the same model cannot drift apart. Passing the faces as an array rather than a list of lists also cut the collection build on an 82k-face mesh from ~0.19s to ~0.007s, which speeds up the unlit path too.
 
 ### Fixed
 - **The bundled chamber-preheat table was unreadable to the code that reads it** — every lookup of the per-filament chamber map happens after the keys are upper-cased, but an install that had never opened the setting got the bundled table back exactly as declared, with its lowercase `default` row. The scheduler then looked for `DEFAULT`, found nothing, and used a hardcoded 0 for any filament without a row of its own. It reported the right number only because that bundled default is 0 — raising it would have silently changed nothing for everyone who had not customised the map. Both paths out of the parser now honour the one contract it documents.