from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QDialog, QHBoxLayout, QListWidget, QListWidgetItem, QVBoxLayout, QWidget from raveos_center import karbantartas, muveletek from raveos_center.elemek import Kartya, Racs, cimke, gomb from raveos_center.folyamat import FolyamatAblak from raveos_center.hatter import gyorsitott, tarolt AZON = "karbantartas" CIM = "Karbantartás" MUVELETEK = [ ("cache", "paccache -rk2", "Csomag cache ürítése", "Minden csomagból csak az utolsó két verzió marad, az eltávolított csomagok fájljai törlődnek.", True), ("arva", "pacman -Qdtq", "Árva csomagok", "Már semmi által nem használt függőségek eltávolítása. Az előnézetben egyenként kiveheted, amit megtartanál.", True), ("naplo", "journalctl --vacuum", "Naplók takarítása", "A két hétnél régebbi rendszernaplók törlése, legfeljebb 100 MB marad.", True), ("tukrok", "reflector", "Tükrök frissítése", "A leggyorsabb közeli letöltési szerverek kiválasztása. A régi lista biztonsági másolatként megmarad.", False), ("kulcsok", "pacman-key --populate", "Kulcsok frissítése", "A csomagaláíró kulcsok újratöltése. Segít, ha a frissítés aláírási hibával áll le.", False), ("flatpak", "flatpak uninstall --unused", "Flatpak takarítás", "A már egyik alkalmazás által sem használt runtime-ok eltávolítása.", True), ] class ElonezetAblak(QDialog): def __init__(self, szulo, cim, szoveg, elemek, valaszthato, gomb_szoveg): super().__init__(szulo) self.setWindowTitle(cim) self.resize(640, 480) doboz = QVBoxLayout(self) doboz.setContentsMargins(28, 24, 28, 20) doboz.setSpacing(12) doboz.addWidget(cimke("ELŐNÉZET", "eyebrow")) doboz.addWidget(cimke(cim.upper(), "h2", True)) doboz.addWidget(cimke(szoveg, "masodlagos", True)) self.lista = QListWidget() for elem in elemek: sor = QListWidgetItem(elem) if valaszthato: sor.setFlags(sor.flags() | Qt.ItemFlag.ItemIsUserCheckable) sor.setCheckState(Qt.CheckState.Checked) self.lista.addItem(sor) self.lista.setVisible(bool(elemek)) doboz.addWidget(self.lista, 1) if not elemek: doboz.addStretch(1) gombok = QHBoxLayout() gombok.addStretch(1) megse = gomb("Mégse") megse.clicked.connect(self.reject) gombok.addWidget(megse) self.mehet = gomb(gomb_szoveg, fo=True) self.mehet.clicked.connect(self.accept) gombok.addWidget(self.mehet) doboz.addLayout(gombok) if valaszthato: self.lista.itemChanged.connect(lambda _: self.mehet.setEnabled(bool(self.kivalasztott()))) def kivalasztott(self): return [ self.lista.item(i).text() for i in range(self.lista.count()) if self.lista.item(i).checkState() == Qt.CheckState.Checked ] class MuveletKartya(Kartya): def __init__(self, parancs, nev, leiras, futtat): super().__init__(terkoz=8, margo=20) self.elrendezes.addWidget(cimke(parancs, "monohalvany")) cim = cimke(nev) cim.setStyleSheet("font-size: 15px; font-weight: 600;") self.elrendezes.addWidget(cim) self.elrendezes.addWidget(cimke(leiras, "halvany", True)) self.elrendezes.addStretch(1) self.osszegzes = cimke("Ellenőrzés...", "monozold", True) self.elrendezes.addWidget(self.osszegzes) sor = QHBoxLayout() self.gomb = gomb("Futtatás", kicsi=True) self.gomb.clicked.connect(futtat) sor.addWidget(self.gomb) sor.addStretch(1) self.elrendezes.addLayout(sor) class Karbantartas(QWidget): def __init__(self, kozpont): super().__init__() self.kozpont = kozpont self.adat = {} doboz = QVBoxLayout(self) doboz.setContentsMargins(0, 20, 0, 0) doboz.setSpacing(16) doboz.addWidget( cimke( "Rendszeres takarítás és javítás. A törléssel járó műveletek előtt megmutatjuk, mi kerülne törlésre, " "és csak a megerősítésed után futnak.", "masodlagos", True, ) ) self.figyelem = cimke("", "figyelem", True) self.figyelem.hide() doboz.addWidget(self.figyelem) self.racs = Racs(260, 12) self.kartyak = {} for azon, parancs, nev, leiras, _ in MUVELETEK: kartya = MuveletKartya(parancs, nev, leiras, lambda _=False, a=azon: self._futtat(a)) self.kartyak[azon] = kartya self.racs.hozzaad(kartya) doboz.addWidget(self.racs) doboz.addStretch(1) def megjelenik(self, *_): helper = muveletek.helper_elerheto() self.figyelem.setText("A RaveOS Center rendszerhelpere nincs telepítve, a műveletek nem futtathatók.") self.figyelem.setVisible(not helper) for azon in self.kartyak: self._ellenoriz(azon) def _ellenoriz(self, azon): kartya = self.kartyak[azon] if tarolt(f"karbantartas_{azon}") is None: kartya.gomb.setEnabled(False) kartya.osszegzes.setText("Ellenőrzés...") gyorsitott( f"karbantartas_{azon}", karbantartas.ELONEZETEK[azon], kesz=lambda adat, a=azon: self._kesz(a, adat), hiba=lambda uzenet, a=azon: self._kesz(a, {"elerheto": False, "osszegzes": uzenet, "elemek": []}), kor=60, ) def _kesz(self, azon, adat): self.adat[azon] = adat kartya = self.kartyak[azon] kartya.osszegzes.setText(adat["osszegzes"]) torlo = next(m[4] for m in MUVELETEK if m[0] == azon) teendo = not torlo or azon == "naplo" or bool(adat["elemek"]) kartya.gomb.setEnabled(adat["elerheto"] and teendo and muveletek.helper_elerheto()) def _futtat(self, azon): adat = self.adat.get(azon) if not adat: return nev = next(m[2] for m in MUVELETEK if m[0] == azon) kivalasztott = None if azon == "cache": szoveg = f"Ezek a csomagfájlok törlődnek a cache-ből ({adat['osszegzes']}). A telepített programokat nem érinti." elif azon == "arva": szoveg = ( "Pontosan ezek a csomagok törlődnek, más nem. Vedd ki a pipát annál, amit megtartanál. " "Utána újabb árva függőségek jelenhetnek meg, ezeket a kártya újra megmutatja." ) elif azon == "naplo": szoveg = f"{adat['osszegzes']}. A két hétnél régebbi naplók törlődnek, és legfeljebb 100 MB marad." elif azon == "flatpak": szoveg = "Ezek a runtime-ok törlődnek. Az alkalmazásaid továbbra is működnek." else: szoveg = "" if szoveg: ablak = ElonezetAblak(self, nev, szoveg, adat["elemek"], azon == "arva", "Törlés") if ablak.exec() != QDialog.DialogCode.Accepted: return if azon == "arva": kivalasztott = ablak.kivalasztott() lepesek = karbantartas.lepesek(azon, adat, kivalasztott) if not lepesek: return FolyamatAblak(self, nev, lepesek, "A művelet elkészült.").exec() self._ellenoriz(azon) FUL = Karbantartas