Compare commits
2 Commits
ac4863b0d4
...
8094a6f8c1
| Author | SHA1 | Date | |
|---|---|---|---|
|
8094a6f8c1
|
|||
|
a05fb0e9d6
|
@@ -5,6 +5,14 @@ All notable changes to RigDoctor are recorded here. Format follows
|
|||||||
(`MAJOR.MINOR.PATCH`, pre-1.0). `__version__` and `pyproject.toml` must match the git
|
(`MAJOR.MINOR.PATCH`, pre-1.0). `__version__` and `pyproject.toml` must match the git
|
||||||
release tag (so the auto-updater, D18, can compare versions).
|
release tag (so the auto-updater, D18, can compare versions).
|
||||||
|
|
||||||
|
## [0.42.1] - 2026-05-29
|
||||||
|
### Fixed
|
||||||
|
- **GUI "Add game…" can now link a launcher.** The dialog only asked for a name, so a custom
|
||||||
|
game (e.g. SPT) couldn't be given its launch command or log folder from the app — those were
|
||||||
|
CLI-only, leaving it unlaunchable from the GUI. It's now a proper form: name + an optional
|
||||||
|
launch command/script (with a **Browse…** file picker) + an optional log folder (auto-detected
|
||||||
|
from the script's folder when left blank).
|
||||||
|
|
||||||
## [0.42.0] - 2026-05-29
|
## [0.42.0] - 2026-05-29
|
||||||
### Added
|
### Added
|
||||||
- **Detect hard freezes that log no Xid.** The kernel-log scanner caught Xid codes, OOM, panic,
|
- **Detect hard freezes that log no Xid.** The kernel-log scanner caught Xid codes, OOM, panic,
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "rigdoctor"
|
name = "rigdoctor"
|
||||||
version = "0.42.0"
|
version = "0.42.1"
|
||||||
description = "Modular hardware monitoring & crash diagnostics for Linux gamers."
|
description = "Modular hardware monitoring & crash diagnostics for Linux gamers."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""RigDoctor — modular hardware monitoring & crash diagnostics for Linux gamers."""
|
"""RigDoctor — modular hardware monitoring & crash diagnostics for Linux gamers."""
|
||||||
|
|
||||||
__version__ = "0.42.0"
|
__version__ = "0.42.1"
|
||||||
|
|||||||
@@ -430,19 +430,78 @@ class GamesPage(QWidget):
|
|||||||
self._banner.hide()
|
self._banner.hide()
|
||||||
|
|
||||||
def _add_custom_game(self) -> None:
|
def _add_custom_game(self) -> None:
|
||||||
"""Manually add a game no launcher reports (e.g. SPT), then rescan to show it."""
|
"""Manually add a game no launcher reports (e.g. SPT): name + an optional launch
|
||||||
from PySide6.QtWidgets import QInputDialog
|
command/script (so it can be launched under crash-capture) and log folder."""
|
||||||
|
|
||||||
from ..core import customgames
|
from ..core import customgames
|
||||||
|
|
||||||
name, ok = QInputDialog.getText(
|
dlg = QDialog(self)
|
||||||
self, "Add game", "Game name (e.g. SPT) — for titles no launcher reports:")
|
dlg.setWindowTitle("Add game")
|
||||||
if not ok:
|
dlg.setMinimumWidth(560)
|
||||||
|
v = QVBoxLayout(dlg)
|
||||||
|
v.setContentsMargins(20, 18, 20, 16)
|
||||||
|
v.setSpacing(10)
|
||||||
|
|
||||||
|
intro = QLabel(
|
||||||
|
"Add a game no launcher reports — a standalone mod launcher like SPT, an itch.io "
|
||||||
|
"download, or any hand-installed game.")
|
||||||
|
intro.setWordWrap(True)
|
||||||
|
v.addWidget(intro)
|
||||||
|
|
||||||
|
name_edit = QLineEdit()
|
||||||
|
name_edit.setPlaceholderText("SPT")
|
||||||
|
v.addWidget(QLabel("Game name"))
|
||||||
|
v.addWidget(name_edit)
|
||||||
|
|
||||||
|
cmd_edit = QLineEdit()
|
||||||
|
cmd_edit.setPlaceholderText("e.g. /run/media/.../Escape-From-Tarkov/tarkov.sh")
|
||||||
|
cmd_row = QHBoxLayout()
|
||||||
|
cmd_row.addWidget(cmd_edit, 1)
|
||||||
|
cmd_browse = QPushButton("Browse…")
|
||||||
|
cmd_row.addWidget(cmd_browse, 0)
|
||||||
|
v.addWidget(QLabel("Launch command / script (optional — enables launch + auto-capture)"))
|
||||||
|
v.addLayout(cmd_row)
|
||||||
|
|
||||||
|
log_edit = QLineEdit()
|
||||||
|
log_edit.setPlaceholderText("auto-detected from the script's folder (its logs/ subfolder)")
|
||||||
|
log_row = QHBoxLayout()
|
||||||
|
log_row.addWidget(log_edit, 1)
|
||||||
|
log_browse = QPushButton("Browse…")
|
||||||
|
log_row.addWidget(log_browse, 0)
|
||||||
|
v.addWidget(QLabel("Log folder (optional — read into crash diagnostics)"))
|
||||||
|
v.addLayout(log_row)
|
||||||
|
|
||||||
|
def _pick_command() -> None:
|
||||||
|
path, _ = QFileDialog.getOpenFileName(dlg, "Select the launch script/executable")
|
||||||
|
if path:
|
||||||
|
cmd_edit.setText(path)
|
||||||
|
|
||||||
|
def _pick_logdir() -> None:
|
||||||
|
path = QFileDialog.getExistingDirectory(dlg, "Select the game's log folder")
|
||||||
|
if path:
|
||||||
|
log_edit.setText(path)
|
||||||
|
|
||||||
|
cmd_browse.clicked.connect(_pick_command)
|
||||||
|
log_browse.clicked.connect(_pick_logdir)
|
||||||
|
|
||||||
|
buttons = QHBoxLayout()
|
||||||
|
buttons.addStretch(1)
|
||||||
|
cancel = QPushButton("Cancel")
|
||||||
|
cancel.clicked.connect(dlg.reject)
|
||||||
|
buttons.addWidget(cancel)
|
||||||
|
add = QPushButton("Add")
|
||||||
|
add.setObjectName("PrimaryButton")
|
||||||
|
add.setDefault(True)
|
||||||
|
add.clicked.connect(dlg.accept)
|
||||||
|
buttons.addWidget(add)
|
||||||
|
v.addLayout(buttons)
|
||||||
|
|
||||||
|
if dlg.exec() != QDialog.DialogCode.Accepted:
|
||||||
return
|
return
|
||||||
name = name.strip()
|
name = name_edit.text().strip()
|
||||||
if not name:
|
if not name:
|
||||||
return
|
return
|
||||||
if customgames.add(name):
|
if customgames.add(name, command=cmd_edit.text().strip() or None,
|
||||||
|
logdir=log_edit.text().strip() or None):
|
||||||
self.refresh()
|
self.refresh()
|
||||||
else:
|
else:
|
||||||
QMessageBox.information(self, "Add game", f"'{name}' is already in your games.")
|
QMessageBox.information(self, "Add game", f"'{name}' is already in your games.")
|
||||||
|
|||||||
Reference in New Issue
Block a user