$ show DavidoTek/ProtonUp-Qt
ProtonUp-Qt is a Linux desktop GUI built with PySide6/Qt6 for installing, updating, and removing Wine/Proton-based compatibility tools (GE-Proton, Proton-tkg, Wine builds, DXVK/VKD3D, SteamTinkerLaunch, Boxtron, Luxtorpeda, etc.) across Steam, Lutris, Heroic, Bottles, and custom launchers. Architecturally it is a client-side Qt application: the main window orchestrates background download/extraction jobs, a dynamic plugin loader (`ctloader.py`) discovers compatibility-tool modules under `resources/ctmods/`, and per-launcher adapters (`steamutil.py`, `lutrisutil.py`, `heroicutil.py`) read/write local game databases and config files. Release metadata is fetched from GitHub/GitLab/Codeberg REST APIs with rate-limit handling and optional user tokens. There is no server or data-processing component; external anti-cheat/compatibility datasets are only consumed to enrich the game-list dialog. The codebase demonstrates a credible plugin architecture, typed domain data in `datastructures.py`, and reusable network/download utilities. Maintenance is active, but the many tool-specific ctmods duplicate logic (fetch/install/extract), translations lag source strings, and the project depends on third-party release APIs and Steam's local formats, which makes some features inherently fragile.
The LLM identified 3 files worth highlighting for reuse:
Discovers compatibility-tool modules from the ctmods package via pkgutil.iter_modules, loads their metadata and CtInstaller classes, and reports per-tool load failures. The module-level contract (name, launchers, description, installer subclass) is a clean, lightweight plugin-discovery pattern that can be extracted for any desktop application needing user-installable provider plugins.
Provides a centralized streaming download helper with progress callbacks, cancellation support, and chunked-encoding handling. It is designed for background GUI use and is largely self-contained, making it reusable for other Python desktop apps that need robust, user-cancellable file downloads from REST APIs or arbitrary URLs.
Defines launcher and compatibility-tool enums plus small data classes (BasicCompatTool, SteamApp, LutrisGame, HeroicGame) that are shared by the UI dialogs and launcher adapters. Separating typed domain models from Qt UI code and launcher-specific parsing is a clean pattern for multi-backend tools and avoids stringly-typed glue across modules.