summaryrefslogtreecommitdiff
path: root/raveos-center/raveos_center/oldalak/rendszer/karbantartas.py
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-center/raveos_center/oldalak/rendszer/karbantartas.py')
-rw-r--r--raveos-center/raveos_center/oldalak/rendszer/karbantartas.py177
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