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