Skip to content

Commit 64421ab

Browse files
authored
Merge pull request #8 from Acik-Kaynak-Gelistirme-Toplulugu/fix/driver-install
feat: implement NvidiaInstaller for driver management
2 parents 98c4bd2 + 5ca76ba commit 64421ab

2 files changed

Lines changed: 99 additions & 3 deletions

File tree

src/backend/nvidia/installer.cpp

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,84 @@
1-
// Surucu kurulum / kaldırma
2-
31
#include "installer.h"
2+
#include "system/commandrunner.h"
43

54
NvidiaInstaller::NvidiaInstaller(QObject *parent)
65
: QObject(parent)
76
{}
7+
8+
void NvidiaInstaller::install()
9+
{
10+
CommandRunner runner;
11+
12+
// CommandRunner'dan gelen her satırı QML'e ilet
13+
connect(&runner, &CommandRunner::outputLine,
14+
this, &NvidiaInstaller::progressMessage);
15+
16+
emit progressMessage(QStringLiteral("RPM Fusion deposu kontrol ediliyor..."));
17+
18+
// Adım 1: RPM Fusion reposunu etkinleştir
19+
auto result = runner.runAsRoot(
20+
QStringLiteral("dnf"),
21+
{ QStringLiteral("install"), QStringLiteral("-y"),
22+
QStringLiteral("https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm"),
23+
QStringLiteral("https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm") }
24+
);
25+
26+
emit progressMessage(QStringLiteral("NVIDIA sürücüsü kuruluyor (akmod-nvidia)..."));
27+
28+
// Adım 2: akmod-nvidia kur
29+
result = runner.runAsRoot(
30+
QStringLiteral("dnf"),
31+
{ QStringLiteral("install"), QStringLiteral("-y"), QStringLiteral("akmod-nvidia") }
32+
);
33+
34+
if (!result.success()) {
35+
emit installFinished(false, QStringLiteral("Kurulum başarısız: ") + result.stderr);
36+
return;
37+
}
38+
39+
emit progressMessage(QStringLiteral("Kernel modülü derleniyor (bu birkaç dakika sürebilir)..."));
40+
41+
// Adım 3: akmods ile modülü derle
42+
runner.runAsRoot(QStringLiteral("akmods"), { QStringLiteral("--force") });
43+
44+
emit installFinished(true, QStringLiteral("NVIDIA sürücüsü başarıyla kuruldu. Lütfen sistemi yeniden başlatın."));
45+
}
46+
47+
void NvidiaInstaller::remove()
48+
{
49+
CommandRunner runner;
50+
connect(&runner, &CommandRunner::outputLine,
51+
this, &NvidiaInstaller::progressMessage);
52+
53+
emit progressMessage(QStringLiteral("NVIDIA sürücüsü kaldırılıyor..."));
54+
55+
const auto result = runner.runAsRoot(
56+
QStringLiteral("dnf"),
57+
{ QStringLiteral("remove"), QStringLiteral("-y"), QStringLiteral("akmod-nvidia"), QStringLiteral("xorg-x11-drv-nvidia*") }
58+
);
59+
60+
emit removeFinished(result.success(),
61+
result.success()
62+
? QStringLiteral("Sürücü başarıyla kaldırıldı.")
63+
: QStringLiteral("Kaldırma başarısız: ") + result.stderr);
64+
}
65+
66+
void NvidiaInstaller::deepClean()
67+
{
68+
CommandRunner runner;
69+
connect(&runner, &CommandRunner::outputLine,
70+
this, &NvidiaInstaller::progressMessage);
71+
72+
emit progressMessage(QStringLiteral("Eski sürücü kalıntıları temizleniyor..."));
73+
74+
// Tüm nvidia paketlerini kaldır
75+
runner.runAsRoot(QStringLiteral("dnf"), {
76+
QStringLiteral("remove"), QStringLiteral("-y"),
77+
QStringLiteral("*nvidia*"), QStringLiteral("*akmod*")
78+
});
79+
80+
// DNF cache temizle
81+
runner.runAsRoot(QStringLiteral("dnf"), { QStringLiteral("clean"), QStringLiteral("all") });
82+
83+
emit progressMessage(QStringLiteral("Temizlik tamamlandı."));
84+
}

src/backend/nvidia/installer.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,31 @@
11
#pragma once
22

33
#include <QObject>
4+
#include <QString>
45

5-
// DNF ile sürücü kurulum/kaldırma
6+
// NvidiaInstaller: DNF üzerinden NVIDIA sürücü kurulum/kaldırma işlemleri.
7+
// Tüm işlemler root gerektirir — polkit üzerinden yetki alınır.
68
class NvidiaInstaller : public QObject
79
{
810
Q_OBJECT
911

1012
public:
1113
explicit NvidiaInstaller(QObject *parent = nullptr);
14+
15+
// Sürücüyü kur (akmod-nvidia)
16+
Q_INVOKABLE void install();
17+
18+
// Sürücüyü kaldır
19+
Q_INVOKABLE void remove();
20+
21+
// Eski sürücü kalıntılarını temizle
22+
Q_INVOKABLE void deepClean();
23+
24+
signals:
25+
// İşlem adımları — QML'e ilerleme göstermek için
26+
void progressMessage(const QString &message);
27+
28+
// İşlem tamamlandı
29+
void installFinished(bool success, const QString &message);
30+
void removeFinished(bool success, const QString &message);
1231
};

0 commit comments

Comments
 (0)