from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QHBoxLayout, QMessageBox, QVBoxLayout, QWidget from raveos_center import driverek, muveletek from raveos_center.elemek import Kartya, cimke, gomb from raveos_center.folyamat import FolyamatAblak from raveos_center.hatter import ervenytelenit, gyorsitott AZON = "driverek" CIM = "Driverek" class EszkozSor(QWidget): def __init__(self, elem, telepit): super().__init__() self.setObjectName("appsor") self.setAttribute(Qt.WidgetAttribute.WA_StyledBackground, True) sor = QHBoxLayout(self) sor.setContentsMargins(16, 12, 16, 12) sor.setSpacing(16) szovegek = QVBoxLayout() szovegek.setSpacing(3) nev = cimke(elem["nev"], tordel=True) nev.setStyleSheet("font-size: 14px; font-weight: 600;") szovegek.addWidget(nev) szovegek.addWidget(cimke(f"Jelenlegi driver: {elem['jelenlegi'] or 'nincs betöltve'}", "monohalvany")) if elem["hianyzik"]: hiany = cimke(f"Hiányzó csomagok: {' '.join(elem['hianyzik'])}", "monohalvany", True) hiany.setStyleSheet("color: #d9a441;") szovegek.addWidget(hiany) if elem["megjegyzes"]: szovegek.addWidget(cimke(elem["megjegyzes"], "halvany", True)) sor.addLayout(szovegek, 1) if elem["hianyzik"]: g = gomb("Ajánlott telepítése", fo=True, kicsi=True) g.setEnabled(muveletek.helper_elerheto()) g.clicked.connect(lambda: telepit([elem])) sor.addWidget(g, 0, Qt.AlignmentFlag.AlignVCenter) else: rendben = cimke("RENDBEN", "allapotcimke") rendben.setProperty("szin", "zold") sor.addWidget(rendben, 0, Qt.AlignmentFlag.AlignVCenter) class Driverek(QWidget): def __init__(self, kozpont): super().__init__() self.kozpont = kozpont self.elemek = [] self.kapott = None doboz = QVBoxLayout(self) doboz.setContentsMargins(0, 20, 0, 0) doboz.setSpacing(16) fej = QHBoxLayout() fej.addWidget( cimke( "A RaveOS felismeri a géped eszközeit, és megmutatja, melyikhez van ajánlott driver. " "A videokártya drivere a telepítéskor is ugyanígy kerül fel.", "masodlagos", True, ), 1, ) self.ujra = gomb("Újraellenőrzés", kicsi=True) self.ujra.clicked.connect(self.frissit) fej.addWidget(self.ujra, 0, Qt.AlignmentFlag.AlignTop) self.mind = gomb("Minden ajánlott telepítése", fo=True, kicsi=True) self.mind.clicked.connect(lambda: self._telepit([e for e in self.elemek if e["hianyzik"]])) self.mind.hide() fej.addWidget(self.mind, 0, Qt.AlignmentFlag.AlignTop) doboz.addLayout(fej) self.figyelem = cimke("", "figyelem", True) self.figyelem.hide() doboz.addWidget(self.figyelem) self.lista = QVBoxLayout() self.lista.setSpacing(20) doboz.addLayout(self.lista) doboz.addStretch(1) def megjelenik(self, *_): gyorsitott("driverek", driverek.allapot, kesz=self._kesz, hiba=self._hiba, kor=120) def frissit(self): self.ujra.setEnabled(False) ervenytelenit("driverek") gyorsitott("driverek", driverek.allapot, kesz=self._kesz, hiba=self._hiba) def _hiba(self, uzenet): self.ujra.setEnabled(True) self.figyelem.setText(f"A hardver felismerése nem sikerült: {uzenet}") self.figyelem.show() def _kesz(self, elemek): self.ujra.setEnabled(True) if elemek == self.kapott: return self.kapott = elemek self.elemek = elemek while self.lista.count(): w = self.lista.takeAt(0).widget() if w: w.deleteLater() if not muveletek.helper_elerheto(): self.figyelem.setText("A RaveOS Center rendszerhelpere nincs telepítve, ezért driver nem telepíthető.") self.figyelem.show() else: self.figyelem.hide() if driverek.szkript() is None: self.figyelem.setText("A driverfelismerő szkript nincs telepítve.") self.figyelem.show() for azon, nev in driverek.KATEGORIAK: sajat = [e for e in elemek if e["kategoria"] == azon] if not sajat: continue csoport = QWidget() cs = QVBoxLayout(csoport) cs.setContentsMargins(0, 0, 0, 0) cs.setSpacing(10) cs.addWidget(cimke(nev.upper(), "h2")) kartya = Kartya(terkoz=0, margo=0) for i, e in enumerate(sajat): sor = EszkozSor(e, self._telepit) sor.setProperty("utolso", i == len(sajat) - 1) kartya.elrendezes.addWidget(sor) cs.addWidget(kartya) self.lista.addWidget(csoport) if not elemek: self.lista.addWidget(cimke("Nem található kezelhető eszköz.", "halvany")) hianyzo = [e for e in elemek if e["hianyzik"]] self.mind.setVisible(len(hianyzo) > 1) self.mind.setEnabled(muveletek.helper_elerheto()) def _telepit(self, elemek): if not elemek: return lepesek = [] egyeb = [] if any(e["gpu"] for e in elemek): lepesek.append(muveletek.Lepes("Videokártya driverek", muveletek.root("driverek"))) for e in elemek: if not e["gpu"]: egyeb += [p for p in e["hianyzik"] if p not in egyeb] if egyeb: lepesek.append(muveletek.Lepes("További driverek", muveletek.root("telepit", *egyeb))) ablak = FolyamatAblak(self, "Driverek telepítése", lepesek, "A driverek telepítve.") ablak.exec() if ablak.rendben and any(driverek.ujrainditas_kell(e) for e in elemek): doboz = QMessageBox(self) doboz.setWindowTitle("Újraindítás szükséges") doboz.setText("Az új videokártya-driver az újraindítás után töltődik be.") most = doboz.addButton("Újraindítás most", QMessageBox.ButtonRole.AcceptRole) doboz.addButton("Később", QMessageBox.ButtonRole.RejectRole) doboz.exec() if doboz.clickedButton() is most: muveletek.Futtato(self).indit([muveletek.Lepes("Újraindítás", ["systemctl", "reboot"])]) self.frissit() FUL = Driverek