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.45: mid-session seat takeover sweep (always take over; both dialogs; debounced toast)
5 files changed
+55−6
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.42+1.9.45
CHANGELOG.md+11@@ -3,6 +3,17 @@ 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.45 - 2026-08-16++- **Seat conflicts: ALWAYS take over the session, even mid-session (John's call).** The proven+ background resolver (UIA-clicks Continue through BOTH Autodesk dialogs - 'Active Sessions+ Exceeded' then the 'Suspend Remote Session' confirm - with owned-popup verification) previously+ ran only at launch and on readiness polls, so a seat dialog popping mid-session sat unhandled.+ It now also runs from the janitor loop every ~20s: cheap no-op when clear, automatic takeover+ when Autodesk flags the session limit. Suspend is the pre-selected option, so the other+ machine's Fusion suspends RESUMABLY (nothing lost) and this machine gets the seat. The user+ gets ONE toast after a real takeover (debounced 120s) so they know the other box was suspended.+ ## 1.9.44 - 2026-08-16 (dashboard only; bridge zip stays 1.9.42) - **Dashboard house-contract completion (John's callout: no favicon = not done).** Served
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.42",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.42/adom-bridge-fusion-v1.9.42.zip",- "sha256": "dba598f8af903ab8884d969d4736ef94c8b42cf7e9492ee49f76d1a53d68d269",- "size": 390596,+ "version": "1.9.45",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.45/adom-bridge-fusion-v1.9.45.zip",+ "sha256": "1dbdcec7d90f98044b8a9595c3a7c6b5581f0c30bc4ea9a3886d577e958dee69",+ "size": 391583, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.42",+ "version": "1.9.45", "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+38@@ -4983,11 +4983,49 @@ def _signin_goal_met(kind) -> bool: return False +_last_seat_takeover_notice = [0.0]+++def _seat_sweep_tick():+ """ALWAYS take over the Autodesk seat (John, 2026-08-16: "always just take over the+ session"). The launch/readiness paths already auto-resolve the 'Active Sessions+ Exceeded' -> 'Suspend Remote Session' dialog pair, but a MID-SESSION seat conflict+ (Autodesk pops it whenever another machine signs in) sat unhandled until someone+ happened to poll readiness. This tick runs from the janitor loop every ~20s: cheap+ no-op when no dialog (local Win32 window walk), and when one IS up it clicks+ 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."""+ try:+ 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")))+ except Exception:+ pass++ def _signin_janitor_loop(): """Poll until each tracked sign-in window can be closed, then close it.""" while True: try: _t2.sleep(20)+ _seat_sweep_tick() # Periodic AUTO-UPDATE sweep. Fusion's update nag only enters the UIA tree while its # Job Status panel is open, so a single check at readiness time misses most of them. # Sweeping on a schedule catches the nag whenever Fusion actually shows it, and the