← Commit history

v1.9.59: tick section-scoping

John Lauer ·9282535003 ·1mo ago ·parent b44c8eb
5 files changed +46−27
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.9.58\ No newline at end of file+1.9.59\ No newline at end of file
CHANGELOG.md+9
@@ -3,6 +3,15 @@ All notable changes to the Adom Bridge Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/fusion-bridge · GitHub backup: `adom-inc/fusion-bridge` +## 1.9.59 - 2026-08-17++- **Janitor tick section-scoping (found by the badge-shed watcher within the hour).** The seat+  section's early returns exited the whole 20s tick on the NO-dialog path - the normal case - so+  the badge idle-shed never ran and the save-prompt sweep only ran when a seat dialog happened to+  be up (also the true reason yesterday's standing Save prompt survived the sweep). The tick's+  three jobs (seat takeover, badge shed, save sweep) are now self-contained sections; none may+  return.+ ## 1.9.58 - 2026-08-17  - **Driving badge sheds on idle, nb-style (John's call).** Every non-passive verb stamps a
adom-bridge-fusion-manifest.json+4−4
@@ -1,10 +1,10 @@ {     "manifest_version": 1,     "name": "fusion360",-    "version": "1.9.58",-    "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.58/adom-bridge-fusion-v1.9.58.zip",-    "sha256": "ce08bd435735759f758f11b07f90185cf54faa8e1aecc249b4dfea21d1eb6c5a",-    "size": 403808,+    "version": "1.9.59",+    "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.59/adom-bridge-fusion-v1.9.59.zip",+    "sha256": "44aa7bcc595a5b4aa944e34a5bcf7c8dabd3fb0a45a1a30a78d22e1bf1353fea",+    "size": 404015,     "verbPrefixes": [         "fusion_"     ],
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.9.58",+  "version": "1.9.59",   "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.",   "homepage": "https://wiki.adom.inc/adom/fusion-bridge",   "author": "Adom Inc.",
server.py+31−21
@@ -5206,30 +5206,17 @@ def _seat_sweep_tick():     Continue on BOTH dialogs in the background (Suspend pre-selected = this machine     takes the seat; the other machine's Fusion suspends resumably, nothing is lost).     Toasts the user AFTER a real takeover so they know the other box got suspended."""+    # ⚠ SECTION SCOPING (v1.9.59, found by the badge-shed watcher): this tick has THREE+    # independent jobs - seat takeover, badge shed, save-prompt sweep. The seat section's+    # old early `return`s exited the WHOLE function on the no-dialog (normal!) path, so+    # the badge NEVER shed and the save sweep NEVER ran unless a seat dialog was up.+    # Each section is now self-contained; none may `return`.     try:-        if not _seat_takeover_enabled():-            return-        if not find_licensing_dialog():-            return-        r = _resolve_seat_dialog(max_clicks=3)-        if r.get("clicks"):-            now = _t2.time()-            if now - _last_seat_takeover_notice[0] > 120:-                _last_seat_takeover_notice[0] = now-                try:-                    ad_client.notify(-                        "Fusion seat taken over on this machine",-                        "Autodesk flagged your account's session limit, so I clicked through the "-                        "'Active Sessions Exceeded' dialogs in the background and took the seat here. "-                        "Fusion on your other machine is SUSPENDED (resumable, nothing lost) - "-                        "using Fusion there will simply grab the seat back the same way.",-                        level="info", reach_user=True)-                except Exception:-                    pass-            print("[Fusion Bridge] seat sweep: took over the session (clicks=%s, verified=%s)"-                  % (r.get("clicks"), r.get("verified")))+        if _seat_takeover_enabled() and find_licensing_dialog():+            _seat_resolve_section()     except Exception:         pass+     # Shed the driving badge after idle (John: "so the user knows we are DONE controlling").     try:         from handlers.taskbar_overlay import badge_active, clear_driving_badge@@ -5249,6 +5236,29 @@ def _seat_sweep_tick():         pass  +def _seat_resolve_section():+    try:+        r = _resolve_seat_dialog(max_clicks=3)+        if r.get("clicks"):+            now = _t2.time()+            if now - _last_seat_takeover_notice[0] > 120:+                _last_seat_takeover_notice[0] = now+                try:+                    ad_client.notify(+                        "Fusion seat taken over on this machine",+                        "Autodesk flagged your account's session limit, so I clicked through the "+                        "'Active Sessions Exceeded' dialogs in the background and took the seat here. "+                        "Fusion on your other machine is SUSPENDED (resumable, nothing lost) - "+                        "using Fusion there will simply grab the seat back the same way.",+                        level="info", reach_user=True)+                except Exception:+                    pass+            print("[Fusion Bridge] seat sweep: took over the session (clicks=%s, verified=%s)"+                  % (r.get("clicks"), r.get("verified")))+    except Exception:+        pass++ def _signin_janitor_loop():     """Poll until each tracked sign-in window can be closed, then close it."""     while True: