e3b20089f0
release / release (push) Successful in 14s
- feat(alerts): desktop notifications (notify-send) for overheat (GPU/CPU past a configurable threshold), GPU-lost, and a new-version-available alert (once per version). Edge-triggered with cooldown so it doesn't spam (core/alerts.py) - feat(gui): Notifications page to configure alerts (enable, GPU/CPU thresholds, Send test); changes apply live and persist via config.save_config/update_config - feat(gui): ship a RigDoctor icon; the GUI self-registers the icon + .desktop on launch and sets the Wayland app-id, so the dock shows it after an update + relaunch (no installer re-run); installer/uninstaller updated to manage the icon - config: alerts_enabled, gpu_temp_alert, cpu_temp_alert; flat-TOML writer - tests for the alert monitor and config round-trip Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
"""Uninstall the user-local RigDoctor install (app files; optionally all data).
|
|
|
|
Mirrors `install.sh --uninstall`. The removal runs in a detached shell so it can
|
|
delete the venv the current process is running from once we exit.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import shlex
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
from .. import config
|
|
from . import reccontrol
|
|
|
|
|
|
def targets(purge: bool = False) -> list[Path]:
|
|
"""Paths removed by an uninstall. With purge, also config/state/logs."""
|
|
home = Path.home()
|
|
share = config.DATA_DIR.parent # ~/.local/share
|
|
items = [
|
|
config.DATA_DIR / "venv",
|
|
home / ".local" / "bin" / "rigdoctor",
|
|
home / ".local" / "bin" / "rigdoctor-gui",
|
|
share / "applications" / "rigdoctor.desktop",
|
|
share / "icons" / "hicolor" / "scalable" / "apps" / "rigdoctor.svg",
|
|
]
|
|
if purge:
|
|
items += [config.CONFIG_DIR, config.STATE_DIR, config.DATA_DIR]
|
|
return items
|
|
|
|
|
|
def uninstall(purge: bool = False) -> None:
|
|
"""Stop the recorder, clear the token if purging, and remove the install."""
|
|
reccontrol.stop_background()
|
|
if purge:
|
|
config.clear_token() # removes keyring entry + any file fallback
|
|
paths = " ".join(shlex.quote(str(p)) for p in targets(purge))
|
|
subprocess.Popen(
|
|
["/bin/sh", "-c", f"sleep 1; rm -rf {paths}"],
|
|
start_new_session=True,
|
|
)
|