Skip to content

Plugin system + Steam Workshop + Steam CMD#38

Open
PyXiion wants to merge 22 commits into
mainfrom
feat/steam-cmd
Open

Plugin system + Steam Workshop + Steam CMD#38
PyXiion wants to merge 22 commits into
mainfrom
feat/steam-cmd

Conversation

@PyXiion

@PyXiion PyXiion commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Implements #6 and partially #28

PyXiion and others added 3 commits July 19, 2026 01:03
…ixes

Add a JetBrains-like vertical icon rail switching whole-window views
(Mods, Steam Workshop). Steam Workshop uses a parented QWebEngineProfile
+ WebView with simple placeholder swap, LocalStorage enabled, and
badge injection via runJavaScript at loadFinished.

Co-Authored-By: opencode <opencode@anomalyco.com>
…ntCreation

- QWebEngineScript at DocumentCreation for inject.js (no flash, observer
  catches elements before paint)
- New detail page IIFE: removes #SubscribeItemBtn, replaces with
  pxmodrim-subscribe-btn (Add to Queue / In Queue / Installed)
- Expose window.__pxmodrim shared state for cross-IIFE communication
- onStateChange callback syncs button state from Python→JS pushes
- Cleanup IIFE: CSS hide + MutationObserver, targets #global_header
  and .sharedfiles_item_page_header
@PyXiion PyXiion self-assigned this Jul 19, 2026
@PyXiion PyXiion added the enhancement New feature or request label Jul 19, 2026
@codacy-production

codacy-production Bot commented Jul 19, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 38 high · 20 medium · 33 minor

Alerts:
⚠ 91 issues (≤ 0 issues of at least minor severity)

Results:
91 new issues

Category Results
UnusedCode 4 medium
BestPractice 4 medium
Documentation 12 minor
ErrorProne 4 medium
4 high
Security 1 medium
1 minor
34 high
CodeStyle 14 minor
Complexity 7 medium
5 minor
Comprehensibility 1 minor

View in Codacy

🟢 Metrics 645 complexity · 7 duplication

Metric Results
Complexity 645
Duplication 7

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

codacy-production[bot]

This comment was marked as outdated.

PyXiion added 7 commits July 19, 2026 08:50
… bar

- chevron-left icon (Feather chevron mirrored)
- Toolbar with back, forward, reload IconButtons + QLineEdit URL bar
- URL bar: Enter navigates to URL, auto-prefixes https:// if missing
- Back/forward buttons update enabled state from page history
- Wire page.urlChanged to sync URL bar text
- _update_nav_buttons() called on loadFinished and urlChanged
Fragile :// check replaced with QUrl.fromUserInput which handles
user-entered URLs correctly (auto-scheme, IPv6, etc). Also upgrade
http→https for security.
- Plugin base + PluginRegistry with setup/init/shutdown lifecycle
- SteamCmdUiPlugin registering rail view, wrapping UI interactions
- SteamCMD service extracted with loading_state support
- CoreContext extension points (register_plugin, add_rail_view)
- Fix: validate downloads respects UIPrefs; teardown disconnects all signals
- Fix: remove dead target_folder param; use RIMWORLD_STEAM_APP_ID constant
- Fix: OSError propagates instead of SymlinkConflictError for OS failures
- Fix: stray save_config on strategy toggle removed
…d fixes

- Bundle qwebchannel.js as package data via importlib.resources
  instead of hardcoded Linux path; works cross-platform
- Add retry limit (100 attempts / ~3s) to inject.js setupWebChannel
  to prevent infinite loop
- Remove no-op except OSError: raise in ensure_symlink
- Remove unreachable if forced: branch in steam_cmd_plugin
- Use RIMWORLD_STEAM_APP_ID constant instead of hardcoded 294100
- Use NamedTemporaryFile for steamcmd scripts; clean up in worker
  after each batch
codacy-production[bot]

This comment was marked as outdated.

PyXiion and others added 2 commits July 21, 2026 15:10
Co-authored-by: codacy-production[bot] <61871480+codacy-production[bot]@users.noreply.github.com>
Co-authored-by: codacy-production[bot] <61871480+codacy-production[bot]@users.noreply.github.com>
@PyXiion PyXiion changed the title Steam Workshop + Steam CMD Plugin system + Steam Workshop + Steam CMD Jul 21, 2026
PyXiion added 9 commits July 21, 2026 20:17
Sets QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor and
QT_ENABLE_HIGHDPI_SCALING=1 before QApplication creation.

Fractional scale factors (e.g. 1.25×, 1.5×) cause QtWebEngine to render
at an integer buffer scale while the compositor upscales, producing
pixelated content. This matches the workaround used by Anki and
qutebrowser for QTBUG-113574.
Replaces the old QWebEngineView-based toolbar and navigation with a
QML implementation (SteamWorkshop.qml) using QtWebEngineQuick.
Adds inject.js for DOM cleanup, mod-status badges, and detail-page
button replacement. Updates tests for the new QML architecture.

Also fixes:
- worker.quit() called after download completes (adds quit() to
  DownloadRunner protocol)
- Worker thread cleanup in steam_cmd_service.py finally block
- steam_cmd_worker: suppress ProcessLookupError in os.getpgid()
- steam_workshop_view: keep failed downloads in queue for retry
- steam_cmd_service: narrow Exception to httpx.HTTPError/ValueError/OSError
- main_window: already uses save_ui_prefs (no-op)
- Add route dispatcher for details/grid pages in inject.js
- Implement dep tree UI with collapsible nodes, circular/limit handling
- Add API strategy (async Python fetch via bridge) + DOM strategy fallback
- Add queue-with-deps and queue-solo buttons on detail pages
- Improve SteamCMD worker regex robustness and logging
- Fix _is_safe_member path traversal check and symlink creation
- Update tests for .workshopItemTitle usage in inject.js
Comment thread src/pxmodrim/core/services/steam_cmd_service.py Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant