diff options
Diffstat (limited to 'raveos-center/raveos_center/oldalak/rendszer/karbantartas.py')
| -rw-r--r-- | raveos-center/raveos_center/oldalak/rendszer/karbantartas.py | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/raveos-center/raveos_center/oldalak/rendszer/karbantartas.py b/raveos-center/raveos_center/oldalak/rendszer/karbantartas.py new file mode 100644 index 0000000..91b7113 --- /dev/null +++ b/raveos-center/raveos_center/oldalak/rendszer/karbantartas.py @@ -0,0 +1,177 @@ +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 |