app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
v1.9.59: tick section-scoping
5 files changed
+46−27
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.58+1.9.59
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: