MopicHub 1.2.0
1.2.0 keeps the hub responsive when the license server is slow or unreachable, makes sure every app runs on a MOPIC runtime it is compatible with, and publishes a shared hub state that newer MOPIC runtimes can read instead of looking up licenses again.
Runtime and compatibility
- Compatible runtime for every app. If an app needs a MOPIC runtime version that is not installed, the hub installs a compatible one right after the app is installed and again just before launch, with a waiting overlay. An app that requires a runtime is no longer launched without one.
- Compatibility ranges come from the server. The runtime range for apps, engines, and the OpenXR runtime is read from the server catalog first, and from the app manifest only when the catalog has none. Required engines are matched to that runtime; if no matching engine version exists, the latest one is used after a warning.
- Eye tracker matched to the hub runtime. The eye-tracking module is installed and launched in the version compatible with the hub runtime, and its license file is saved in that same version folder.
- OpenXR runtime copy refreshed on install. Right after the OpenXR runtime is installed, its runtime folder is overwritten without a version check, so an outdated copy is not left in place.
- New versions show up on the Add-on screen right away. After a background install (at startup, in the hourly sweep, or on catalog refresh), the newest installed version is selected immediately instead of after the tab is reopened.
License and stability
- No freeze when the license server does not respond. Runtime initialization and monitor enumeration run off the main thread, network timeouts now cover reading the response body, and each license request is capped at 45 seconds, after which the hub continues with the cached state and shows a timeout notice. Display changes no longer pile up repeated license requests.
- Exit always completes. Cleanup steps at exit are capped at 3 seconds each and 8 seconds in total, and the hub ends immediately if native calls are still pending. A hung exit can no longer hold the single-instance lock and block the next launch.
- Shared hub state. The hub writes the connected monitors and their license decisions to hub_state.json in %APPDATA%\MOPIC whenever a license or monitor changes, including when a monitor is only moved, and marks the hub as stopped on exit. Newer MOPIC runtimes read this file and skip their own license lookup while the hub is running.
Diagnostics
- Facts first while checking. While the first check is running, the Connection screen shows facts such as model, license key, camera, and GPU right away, and holds back verdicts, Fix buttons, and HubDoctor cards from the previous snapshot until the check finishes. The Details button stays available during the check.
- A main-thread stall detector writes a log entry whenever the hub UI is blocked for more than 5 seconds, to help support locate freezes.