diff options
| author | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-09 11:28:55 +0200 |
|---|---|---|
| committer | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-09 11:28:55 +0200 |
| commit | cdb1f1b31f8135e4b995251874832f0883e4da31 (patch) | |
| tree | 619fbdc0e062124c7667250d8a414b6ce2fcd48d /raveos-app-installer/raveos-app-installer.py | |
| parent | 91978706279a19a3ac96393630876f3e50cbc518 (diff) | |
| download | RaveOS-PKGBUILD-cdb1f1b31f8135e4b995251874832f0883e4da31.tar.gz RaveOS-PKGBUILD-cdb1f1b31f8135e4b995251874832f0883e4da31.zip | |
appinstaller.sb
Diffstat (limited to 'raveos-app-installer/raveos-app-installer.py')
| -rw-r--r-- | raveos-app-installer/raveos-app-installer.py | 75 |
1 files changed, 48 insertions, 27 deletions
diff --git a/raveos-app-installer/raveos-app-installer.py b/raveos-app-installer/raveos-app-installer.py index d696a58..15f9f77 100644 --- a/raveos-app-installer/raveos-app-installer.py +++ b/raveos-app-installer/raveos-app-installer.py @@ -33,8 +33,8 @@ from pathlib import Path APP_NAME = "RaveOS App Installer" -APP_ID = "raveos-app-installer" # Wayland app_id (Hyprland window rule-okhoz) -APP_VERSION = "3.1" +APP_ID = "raveos-app-installer" +APP_VERSION = "3.18" _SCRIPT_DIR = Path(__file__).resolve().parent APP_LIST_CANDIDATES = [ @@ -51,7 +51,7 @@ C = { "surface_hi": "#34353a", "border": "#3a3b40", "border_hi": "#4a4b52", - "accent": "#62a052", # muted natural green + "accent": "#62a052", "accent_hi": "#72b062", "accent_dim": "#4d8043", "text": "#eaeaea", @@ -82,6 +82,7 @@ T = { "nav_sb": {"hu": "Secure Boot", "en": "Secure Boot"}, "header_sb": {"hu": " · SECURE BOOT", "en": " · SECURE BOOT"}, "sb_desc": {"hu": "A telepített rendszer aláírása és a kulcsok telepítése a firmware-be.\nWindows dual-boot mellett is biztonságos (Microsoft kulcsok megőrizve).", "en": "Sign the installed system and enroll the keys into the firmware.\nSafe with dual-boot Windows (Microsoft keys preserved)."}, + "sb_beta": {"hu": "Ez egy béta funkció. A használat saját felelősségre történik.", "en": "This is a beta feature. Use at your own risk."}, "sb_lbl_sb": {"hu": "Secure Boot", "en": "Secure Boot"}, "sb_lbl_setup": {"hu": "Setup Mode", "en": "Setup Mode"}, "sb_lbl_keys": {"hu": "Gépkulcs", "en": "Machine key"}, @@ -96,13 +97,15 @@ T = { "sb_btn_setup": {"hu": "Secure Boot beállítása", "en": "Set up Secure Boot"}, "sb_btn_resign": {"hu": "Újra-aláírás", "en": "Re-sign"}, "sb_pending": {"hu": "Újraindítás szükséges a befejezéshez!", "en": "Reboot required to finish!"}, - "sb_bl_warn": {"hu": "BitLocker: ha Windows-on be van kapcsolva, előbb indítsd el a Windowst és futtasd: manage-bde -protectors -disable C: -rebootcount 2 — vagy legyen kéznél a helyreállítási kulcs.", "en": "BitLocker: if enabled on Windows, boot Windows first and run: manage-bde -protectors -disable C: -rebootcount 2 — or have the recovery key ready."}, + "sb_bl_warn": {"hu": "BitLocker: ha Windows-on be van kapcsolva, előbb indítsd el a Windowst és futtasd: manage-bde -protectors -disable C: -rebootcount 2, vagy legyen kéznél a helyreállítási kulcs.", "en": "BitLocker: if enabled on Windows, boot Windows first and run: manage-bde -protectors -disable C: -rebootcount 2, or have the recovery key ready."}, "sb_done_title": {"hu": "Secure Boot beállítva", "en": "Secure Boot configured"}, - "sb_done_msg": {"hu": "Az aláírások és a kulcsok készen vannak.\n\nA BIOS-ban állítsd: Secure Boot → Enabled, majd indítsd újra a gépet.", "en": "Signatures and keys are ready.\n\nIn the BIOS set: Secure Boot → Enabled, then reboot."}, + "sb_done_msg": {"hu": "Az aláírások és a kulcsok készen vannak.\n\nA BIOS-ban állítsd a Secure Boot-ot Enabled-re, majd indítsd újra a gépet.", "en": "Signatures and keys are ready.\n\nIn the BIOS set Secure Boot to Enabled, then reboot."}, "sb_reboot_title": {"hu": "Újraindítás szükséges", "en": "Reboot required"}, - "sb_reboot_msg": {"hu": "A BIOS-ban töröld a Secure Boot kulcsokat (Clear Secure Boot keys → Setup Mode).\nMentés után indítsd újra a gépet — a beállítás boot után automatikusan befejeződik.\n\nÚjraindítsam most?", "en": "In the BIOS clear the Secure Boot keys (Clear Secure Boot keys → Setup Mode).\nSave and reboot — the setup finishes automatically after boot.\n\nReboot now?"}, + "sb_reboot_msg": {"hu": "A BIOS-ban töröld a Secure Boot kulcsokat (Clear Secure Boot keys, ezzel a gép Setup Mode-ba kerül).\nMentés után indítsd újra a gépet. A folyamat boot után automatikusan befejeződik.", "en": "In the BIOS clear the Secure Boot keys (Clear Secure Boot keys, the machine enters Setup Mode).\nSave and reboot. The setup will finish automatically after boot."}, + "sb_btn_reboot": {"hu": "Újraindítás", "en": "Restart"}, + "sb_btn_cancel": {"hu": "Mégse", "en": "Cancel"}, "sb_err_title": {"hu": "Secure Boot hiba", "en": "Secure Boot error"}, - "sb_err_msg": {"hu": "A művelet nem sikerült — a részletek a naplóban láthatók.", "en": "The operation failed — details are in the log."}, + "sb_err_msg": {"hu": "A művelet nem sikerült, a részletek a naplóban láthatók.", "en": "The operation failed, see the log for details."}, "tab_all": {"hu": "Összes", "en": "All"}, "tab_installed": {"hu": "Telepített", "en": "Installed"}, "search_placeholder": {"hu": "Keresés…", "en": "Search…"}, @@ -577,7 +580,7 @@ def run_gui() -> int: f = QFont(fam, size) f.setLetterSpacing(QFont.SpacingType.PercentageSpacing, 104) return f - f = QFont() # fallback: rendszer sans, bold + tracking + f = QFont() f.setPointSize(size) f.setBold(True) f.setLetterSpacing(QFont.SpacingType.PercentageSpacing, 102) @@ -585,8 +588,8 @@ def run_gui() -> int: class Worker(QThread): log = pyqtSignal(str) - progress = pyqtSignal(int) # 0..100 - done = pyqtSignal(int, int) # ok_steps, total_steps + progress = pyqtSignal(int) + done = pyqtSignal(int, int) def __init__(self, steps, password: str = ""): super().__init__() @@ -688,8 +691,8 @@ def run_gui() -> int: def __init__(self, paths, dest, restore=False, password=""): super().__init__() - self.paths = paths # [(label, abs_path, requires_root), ...] - self.dest = dest # str: .tar.gz útvonal + self.paths = paths + self.dest = dest self.restore = restore self.password = password @@ -817,10 +820,11 @@ def run_gui() -> int: self.rows = [] self.worker = None self.sb_worker = None + self.sb_data = None self.backup_worker = None - self.backup_checkboxes = {} # item_id -> (QCheckBox, abs_path, label, requires_root) + self.backup_checkboxes = {} self._sudo_pw = "" - self._sudo_pw_ts = 0.0 # timestamp: mikor lett megjegyezve + self._sudo_pw_ts = 0.0 self.setWindowTitle(APP_NAME) self.resize(1060, 820) @@ -1014,6 +1018,11 @@ def run_gui() -> int: self.sb_desc.setStyleSheet(f"color:{C['text_dim']};") sbl.addWidget(self.sb_desc) + self.sb_beta = QLabel(tr("sb_beta")) + self.sb_beta.setWordWrap(True) + self.sb_beta.setStyleSheet("color:#d0a24c; font-weight:600;") + sbl.addWidget(self.sb_beta) + self.sb_lbls = {} self.sb_vals = {} srow1 = QHBoxLayout() @@ -1108,6 +1117,7 @@ def run_gui() -> int: self.btn_nav.setText(tr("nav_back") if idx != 0 else tr("nav_backup")) self.btn_sb.setText(tr("nav_sb")) self.sb_desc.setText(tr("sb_desc")) + self.sb_beta.setText(tr("sb_beta")) for key, lbl in self.sb_lbls.items(): lbl.setText(tr(key)) self.sb_warn.setText(tr("sb_bl_warn")) @@ -1115,6 +1125,7 @@ def run_gui() -> int: self.btn_sb_refresh.setText(tr("sb_btn_refresh")) self.btn_sb_setup.setText(tr("sb_btn_setup")) self.btn_sb_resign.setText(tr("sb_btn_resign")) + self._sb_apply_values() self.tab_all.setText(tr("tab_all")) self.tab_inst.setText(tr("tab_installed")) self.search.setPlaceholderText(tr("search_placeholder")) @@ -1220,6 +1231,19 @@ def run_gui() -> int: self.btn_nav.clicked.connect(self._go_apps) self._sb_refresh() + def _sb_apply_values(self): + data = self.sb_data + if not data: + return + on = lambda x: tr("sb_val_on") if x == "1" else tr("sb_val_off") + yes = lambda x: tr("sb_val_yes") if x == "1" else tr("sb_val_no") + ok = lambda x: tr("sb_val_ok") if x == "1" else tr("sb_val_missing") + self.sb_vals["sb_lbl_sb"].setText(on(data.get("secureboot", "?"))) + self.sb_vals["sb_lbl_setup"].setText(yes(data.get("setupmode", "?"))) + self.sb_vals["sb_lbl_keys"].setText(ok(data.get("keys", "0"))) + self.sb_vals["sb_lbl_signed"].setText(ok(data.get("signed", "0"))) + self.sb_pending.setVisible(data.get("pending") == "1") + def _sb_refresh(self): self.sb_log.clear() import time @@ -1250,14 +1274,8 @@ def run_gui() -> int: if not out.strip(): self.sb_log.appendPlainText("[raveos-sb] Az allapot nem olvashato.") return - on = lambda x: tr("sb_val_on") if x == "1" else tr("sb_val_off") - yes = lambda x: tr("sb_val_yes") if x == "1" else tr("sb_val_no") - ok = lambda x: tr("sb_val_ok") if x == "1" else tr("sb_val_missing") - self.sb_vals["sb_lbl_sb"].setText(on(data.get("secureboot", "?"))) - self.sb_vals["sb_lbl_setup"].setText(yes(data.get("setupmode", "?"))) - self.sb_vals["sb_lbl_keys"].setText(ok(data.get("keys", "0"))) - self.sb_vals["sb_lbl_signed"].setText(ok(data.get("signed", "0"))) - self.sb_pending.setVisible(data.get("pending") == "1") + self.sb_data = data + self._sb_apply_values() def _sb_run(self, mode): if self.sb_worker and self.sb_worker.isRunning(): @@ -1297,10 +1315,13 @@ def run_gui() -> int: if rc == 0: QMessageBox.information(self, tr("sb_done_title"), tr("sb_done_msg")) elif rc == 10: - answer = QMessageBox.question( - self, tr("sb_reboot_title"), tr("sb_reboot_msg"), - QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) - if answer == QMessageBox.StandardButton.Yes: + box = QMessageBox(self) + box.setWindowTitle(tr("sb_reboot_title")) + box.setText(tr("sb_reboot_msg")) + reboot_button = box.addButton(tr("sb_btn_reboot"), QMessageBox.ButtonRole.AcceptRole) + box.addButton(tr("sb_btn_cancel"), QMessageBox.ButtonRole.RejectRole) + box.exec() + if box.clickedButton() == reboot_button: subprocess.Popen(["systemctl", "reboot"]) else: QMessageBox.critical(self, tr("sb_err_title"), tr("sb_err_msg")) @@ -1556,7 +1577,7 @@ def run_gui() -> int: app = QApplication(sys.argv) app.setApplicationName(APP_NAME) app.setApplicationDisplayName(APP_NAME) - app.setDesktopFileName(APP_ID) # Wayland app_id -> Hyprland window rule + app.setDesktopFileName(APP_ID) try: catalog = load_catalog() |