from datetime import datetime from PyQt6.QtCore import Qt, QUrl from PyQt6.QtGui import QDesktopServices from PyQt6.QtWidgets import QHBoxLayout, QMessageBox, QProgressBar, QPushButton, QVBoxLayout, QWidget from raveos_center import gaming, muveletek, rendszerinfo from raveos_center.elemek import Kartya, Oldal, Racs, cimke, frissit_stilus, gomb from raveos_center.forditas import tr from raveos_center.hatter import ervenytelenit, gyorsitott, tarolt AZON = "attekintes" MENU = tr("Áttekintés") IKON = "attekintes" GYORS = [ ("01", tr("Alkalmazás telepítése"), tr("Böngészés kategóriák szerint"), "alkalmazasok", ()), ("02", tr("Rendszerfrissítés"), "pacman + AUR + Flatpak", "frissitesek", ()), ("03", tr("Driverek"), tr("GPU, Wi-Fi, kontrollerek"), "rendszer", ("driverek",)), ("04", tr("Takarítás"), tr("Cache, árva csomagok"), "rendszer", ("karbantartas",)), ("05", tr("Gaming tweakek"), "GameMode, Proton, MangoHud", "rendszer", ("gaming",)), ("06", tr("Visszaállítás"), tr("Snapshot betöltése"), "rendszer", ("snapshotok",)), ] KOZOSSEG = [ ("rp1.hu", "https://rp1.hu"), ("Discord", "https://discord.gg/gSdVMXRFQc"), ("Stream", "https://kick.com/rpslair"), ] class Csempe(QPushButton): def __init__(self, kod, cim, alcim): super().__init__() self.setObjectName("csempe") self.setCursor(Qt.CursorShape.PointingHandCursor) doboz = QVBoxLayout(self) doboz.setContentsMargins(18, 18, 18, 18) doboz.setSpacing(4) self.kod = cimke(kod, "monozold") doboz.addWidget(self.kod) doboz.addStretch(1) self.cim = cimke(cim) self.cim.setStyleSheet("font-size: 15px; font-weight: 600;") doboz.addWidget(self.cim) self.alcim = cimke(alcim, "halvany", True) doboz.addWidget(self.alcim) for c in (self.kod, self.cim, self.alcim): c.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents) def allapotkartya(cim): kartya = Kartya(cim) ertek = cimke("...", "nagyszam") kartya.elrendezes.addWidget(ertek) return kartya, ertek class Attekintes(Oldal): def __init__(self, kozpont): super().__init__(kozpont, tr("ÜDV ÚJRA"), tr("Áttekintés")) self.frissites_gomb = self.fejlec_gomb(gomb(tr("Frissítés most"), fo=True)) self.frissites_gomb.clicked.connect(lambda: self.kozpont.mutat("frissitesek")) self.snapshot_gomb = self.fejlec_gomb(gomb(tr("Snapshot készítése"))) self.snapshot_gomb.clicked.connect(lambda: self.kozpont.mutat("rendszer", "snapshotok", "uj")) allapot = Racs(220) k, self.frissites_szam = allapotkartya(tr("Frissítések")) self.frissites_szam.setProperty("zold", True) self.frissites_reszlet = cimke(tr("ellenőrzés..."), "masodlagos") k.elrendezes.addWidget(self.frissites_reszlet) allapot.hozzaad(k) k, self.snapshot_ertek = allapotkartya(tr("Utolsó snapshot")) self.snapshot_reszlet = cimke("", "masodlagos") k.elrendezes.addWidget(self.snapshot_reszlet) allapot.hozzaad(k) k, self.lemez_ertek = allapotkartya(tr("Lemez")) self.lemez_sav = QProgressBar() self.lemez_sav.setObjectName("sav") self.lemez_sav.setTextVisible(False) self.lemez_sav.setFixedHeight(6) k.elrendezes.addWidget(self.lemez_sav) allapot.hozzaad(k) k, self.gaming_ertek = allapotkartya(tr("Gaming mód")) self.gaming_adat = None self.gaming_gomb = gomb("...", kicsi=True) self.gaming_gomb.clicked.connect(self._gaming_valt) k.elrendezes.addWidget(self.gaming_gomb, 0, Qt.AlignmentFlag.AlignLeft) allapot.hozzaad(k) self.torzs.addWidget(allapot) also = QHBoxLayout() also.setSpacing(24) bal = QVBoxLayout() bal.setSpacing(16) bal.addWidget(cimke(tr("GYORS MŰVELETEK"), "h2")) self.gyors = Racs(180, 12) self.csempek = [] for kod, cim, alcim, cel, al in GYORS: csempe = Csempe(kod, cim, alcim) csempe.clicked.connect(lambda _=False, c=cel, a=al: self.kozpont.mutat(c, *a)) self.csempek.append((csempe, cel, al)) self.gyors.hozzaad(csempe) bal.addWidget(self.gyors) bal.addStretch(1) also.addLayout(bal, 2) jobb = QVBoxLayout() jobb.setSpacing(16) jobb.addWidget(cimke(tr("RENDSZER"), "h2")) self.info = Kartya(terkoz=0, margo=20) self.info.elrendezes.setContentsMargins(20, 8, 20, 8) self.info_sorok = {} for kulcs in ("Kernel", "Asztal", "CPU", "GPU", "Memória", "Fájlrendszer", "Uptime"): sor = QWidget() sl = QHBoxLayout(sor) sl.setContentsMargins(0, 12, 0, 12) sl.addWidget(cimke(tr(kulcs), "monohalvany")) sl.addStretch(1) ertek = cimke("...", "mono") ertek.setAlignment(Qt.AlignmentFlag.AlignRight) ertek.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) sl.addWidget(ertek) self.info_sorok[kulcs] = ertek self.info.elrendezes.addWidget(sor) jobb.addWidget(self.info) kozosseg = Kartya(tr("Közösség"), terkoz=12) nev = cimke("RaveCore") nev.setStyleSheet("font-size: 15px; font-weight: 600;") kozosseg.elrendezes.addWidget(nev) kozosseg.elrendezes.addWidget( cimke(tr("Kérdésed van, vagy hibát találtál? Gyere a közösségbe, vagy írj nekünk hibajegyet."), "masodlagos", True) ) linkek = QHBoxLayout() linkek.setSpacing(16) for szoveg, cim in KOZOSSEG: link = cimke(f'{szoveg}', "link") link.setOpenExternalLinks(True) linkek.addWidget(link) self.hibajegy_link = cimke( f'{tr("Hibajegy")}', "link" ) self.hibajegy_link.linkActivated.connect(lambda _: self.kozpont.mutat("visszajelzes")) linkek.addWidget(self.hibajegy_link) linkek.addStretch(1) kozosseg.elrendezes.addLayout(linkek) jobb.addWidget(kozosseg) jobb.addStretch(1) also.addLayout(jobb, 1) self.torzs.addLayout(also) self.torzs.addStretch(1) def megjelenik(self, *_): self.frissites_gomb.setEnabled(self.kozpont.van("frissitesek")) self.snapshot_gomb.setEnabled(self.kozpont.van("rendszer", "snapshotok")) if tarolt("gaming") is None: self.gaming_gomb.setEnabled(False) gyorsitott("gaming", gaming.allapot, kesz=self._gaming_kesz, kor=30) for csempe, cel, al in self.csempek: elerheto = self.kozpont.van(cel, *al) csempe.setEnabled(elerheto) csempe.setToolTip("" if elerheto else tr("Hamarosan")) self._lemez() gyorsitott("info", self._info_gyujt, kesz=self._info_kesz, kor=300) gyorsitott("frissitesek", rendszerinfo.frissitesek, kesz=self._frissites_kesz, hiba=self._frissites_hiba, kor=60) gyorsitott("snapshot", rendszerinfo.utolso_snapshot, kesz=self._snapshot_kesz, kor=60) def _gaming_kesz(self, adat): self.gaming_adat = adat aktiv = gaming.gaming_mod_aktiv(adat) self.gaming_ertek.setText(tr("BEKAPCSOLVA") if aktiv else tr("KIKAPCSOLVA")) self.gaming_ertek.setProperty("zold", aktiv) frissit_stilus(self.gaming_ertek) self.gaming_gomb.setText(tr("Kikapcsolás") if aktiv else tr("Bekapcsolás")) self.gaming_gomb.setProperty("fo", not aktiv) frissit_stilus(self.gaming_gomb) valtozas = gaming.gaming_mod_valtozasok(adat, not aktiv) self.gaming_gomb.setEnabled(bool(valtozas) and muveletek.helper_elerheto()) self.gaming_gomb.setToolTip( "" if valtozas else tr("Ezen a gépen a Gaming mód elemei nem kapcsolhatók ki, a GameMode a Rendszer > Gaming fülön távolítható el.") ) def _gaming_valt(self): if not self.gaming_adat: return from raveos_center.oldalak.rendszer.gaming import alkalmaz self.gaming_gomb.setEnabled(False) aktiv = gaming.gaming_mod_aktiv(self.gaming_adat) hiba = alkalmaz(self, gaming.gaming_mod_valtozasok(self.gaming_adat, not aktiv)) if hiba: QMessageBox.warning(self, tr("Gaming mód"), hiba) ervenytelenit("gaming") gyorsitott("gaming", gaming.allapot, kesz=self._gaming_kesz) def _lemez(self): hasznalt, ossz = rendszerinfo.lemez() self.lemez_ertek.setText(f"{hasznalt / 1e9:.0f} / {ossz / 1e9:.0f} GB") self.lemez_sav.setValue(int(hasznalt * 100 / ossz) if ossz else 0) @staticmethod def _info_gyujt(): gpu = ", ".join(rendszerinfo.gpuk()) or tr("ismeretlen") driver = ", ".join(rendszerinfo.gpu_driverek()) return { "Kernel": rendszerinfo.kernel(), "Asztal": rendszerinfo.asztal(), "CPU": rendszerinfo.cpu(), "GPU": f"{gpu} · {driver}" if driver else gpu, "Memória": rendszerinfo.memoria(), "Fájlrendszer": rendszerinfo.fajlrendszer(), "Uptime": rendszerinfo.uzemido(), } def _info_kesz(self, adat): for kulcs, ertek in adat.items(): self.info_sorok[kulcs].setText(ertek) def _frissites_kesz(self, csomagok): szam = len(csomagok) self.kozpont.jelveny("frissitesek", szam) if not szam: self.frissites_szam.setText(tr("NAPRAKÉSZ")) self.frissites_reszlet.setText(tr("nincs elérhető frissítés")) return self.frissites_szam.setText(tr("{0} ELÉRHETŐ", szam)) reszek = [] ujrainditos = sum(1 for c in csomagok if c["ujrainditas"]) aur = sum(1 for c in csomagok if c["forras"] == "aur") flatpak = sum(1 for c in csomagok if c["forras"] == "flatpak") if ujrainditos: reszek.append(tr("{0} újraindítást igényel", ujrainditos)) if aur: reszek.append(f"{aur} AUR") if flatpak: reszek.append(f"{flatpak} Flatpak") self.frissites_reszlet.setText(" · ".join(reszek) or tr("csak hivatalos csomagok")) def _frissites_hiba(self, _): self.frissites_szam.setText("-") self.frissites_reszlet.setText(tr("az ellenőrzés nem sikerült")) def _snapshot_kesz(self, snapshot): if snapshot is None: self.snapshot_ertek.setText("-") self.snapshot_reszlet.setText(tr("a snapper nem érhető el")) return if not snapshot: self.snapshot_ertek.setText(tr("NINCS")) self.snapshot_reszlet.setText(tr("még nem készült snapshot")) return try: ido = datetime.fromisoformat(snapshot.get("date", "")) nap = (datetime.now() - ido).days self.snapshot_ertek.setText(tr("MA") if nap == 0 else tr("{0} NAPJA", nap)) except (TypeError, ValueError): self.snapshot_ertek.setText("?") self.snapshot_reszlet.setText(f"btrfs · {snapshot.get('description') or snapshot.get('type', '')}") OLDAL = Attekintes