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