summaryrefslogtreecommitdiff
path: root/raveos-app-installer/raveos-app-installer.py
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-app-installer/raveos-app-installer.py')
-rw-r--r--raveos-app-installer/raveos-app-installer.py75
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()