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.hatter import ervenytelenit, gyorsitott, tarolt AZON = "attekintes" MENU = "Áttekintés" IKON = "attekintes" GYORS = [ ("01", "Alkalmazás telepítése", "Böngészés kategóriák szerint", "alkalmazasok", ()), ("02", "Rendszerfrissítés", "pacman + AUR + Flatpak", "frissitesek", ()), ("03", "Driverek", "GPU, Wi-Fi, kontrollerek", "rendszer", ("driverek",)), ("04", "Takarítás", "Cache, árva csomagok", "rendszer", ("karbantartas",)), ("05", "Gaming tweakek", "GameMode, Proton, MangoHud", "rendszer", ("gaming",)), ("06", "Visszaállítás", "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, "ÜDV ÚJRA", "Áttekintés") self.frissites_gomb = self.fejlec_gomb(gomb("Frissítés most", fo=True)) self.frissites_gomb.clicked.connect(lambda: self.kozpont.mutat("frissitesek")) self.snapshot_gomb = self.fejlec_gomb(gomb("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("Frissítések") self.frissites_szam.setProperty("zold", True) self.frissites_reszlet = cimke("ellenőrzés...", "masodlagos") k.elrendezes.addWidget(self.frissites_reszlet) allapot.hozzaad(k) k, self.snapshot_ertek = allapotkartya("Utolsó snapshot") self.snapshot_reszlet = cimke("", "masodlagos") k.elrendezes.addWidget(self.snapshot_reszlet) allapot.hozzaad(k) k, self.lemez_ertek = allapotkartya("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("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("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("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(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("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("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('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 "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("BEKAPCSOLVA" if aktiv else "KIKAPCSOLVA") self.gaming_ertek.setProperty("zold", aktiv) frissit_stilus(self.gaming_ertek) self.gaming_gomb.setText("Kikapcsolás" if aktiv else "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 "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, "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 "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("NAPRAKÉSZ") self.frissites_reszlet.setText("nincs elérhető frissítés") return self.frissites_szam.setText(f"{szam} ELÉRHETŐ") 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(f"{ujrainditos} újraindítást igényel") if aur: reszek.append(f"{aur} AUR") if flatpak: reszek.append(f"{flatpak} Flatpak") self.frissites_reszlet.setText(" · ".join(reszek) or "csak hivatalos csomagok") def _frissites_hiba(self, _): self.frissites_szam.setText("-") self.frissites_reszlet.setText("az ellenőrzés nem sikerült") def _snapshot_kesz(self, snapshot): if snapshot is None: self.snapshot_ertek.setText("-") self.snapshot_reszlet.setText("a snapper nem érhető el") return if not snapshot: self.snapshot_ertek.setText("NINCS") self.snapshot_reszlet.setText("még nem készült snapshot") return try: ido = datetime.fromisoformat(snapshot.get("date", "")) nap = (datetime.now() - ido).days self.snapshot_ertek.setText("MA" if nap == 0 else f"{nap} NAPJA") except (TypeError, ValueError): self.snapshot_ertek.setText("?") self.snapshot_reszlet.setText(f"btrfs · {snapshot.get('description') or snapshot.get('type', '')}") OLDAL = Attekintes