支持内核卸载
This commit is contained in:
parent
8a362b0548
commit
aab5b67836
@ -10,5 +10,6 @@
|
|||||||
<file>icon/dialog-question.svg</file>
|
<file>icon/dialog-question.svg</file>
|
||||||
<file>icon/dialog-warning.svg</file>
|
<file>icon/dialog-warning.svg</file>
|
||||||
<file>icon/icon.svg</file>
|
<file>icon/icon.svg</file>
|
||||||
|
<file>shell/kernel-installer-remove-template.sh</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -109,3 +109,9 @@ QString KernelInformation::localKernelName() const
|
|||||||
process.close();
|
process.close();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool KernelInformation::get_installedAlready(int value) const
|
||||||
|
{
|
||||||
|
QString pkgName = this->get_pkgName(value).at(0);
|
||||||
|
return QFile::exists("/var/lib/dpkg/info/" + pkgName + ".list");
|
||||||
|
}
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
class KernelInformation : public QObject
|
class KernelInformation : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -31,6 +33,7 @@ public:
|
|||||||
QStringList get_pkgName(int value) const;
|
QStringList get_pkgName(int value) const;
|
||||||
QStringList get_system(int value) const;
|
QStringList get_system(int value) const;
|
||||||
QStringList get_arch(int value) const;
|
QStringList get_arch(int value) const;
|
||||||
|
bool get_installedAlready(int value) const;
|
||||||
|
|
||||||
QString localKernelName() const;
|
QString localKernelName() const;
|
||||||
|
|
||||||
|
@ -10,17 +10,25 @@
|
|||||||
#define MAX_TMP_NUM 1024
|
#define MAX_TMP_NUM 1024
|
||||||
#define MIN_TMP_NUM 0
|
#define MIN_TMP_NUM 0
|
||||||
|
|
||||||
KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) :
|
KernelInstaller::KernelInstaller(Option option, QStringList kernelList, QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
ui(new Ui::KernelInstaller)
|
ui(new Ui::KernelInstaller)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
runOption = option;
|
||||||
// 修改提示文本
|
// 修改提示文本
|
||||||
QString kernel = "";
|
QString kernel = "";
|
||||||
foreach (QString name, kernelList) {
|
foreach (QString name, kernelList) {
|
||||||
kernel += name + " ";
|
kernel += name + " ";
|
||||||
}
|
}
|
||||||
ui->m_status->setText(tr("Try to install ") + kernel);
|
|
||||||
|
switch(runOption) {
|
||||||
|
case Option::Install:
|
||||||
|
ui->m_status->setText(tr("Try to install ") + kernel);
|
||||||
|
case Option::Remove:
|
||||||
|
ui->m_status->setText(tr("Try to remove ") + kernel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this->kernelList = kernelList;
|
this->kernelList = kernelList;
|
||||||
terminal = new QTermWidget(0);
|
terminal = new QTermWidget(0);
|
||||||
@ -63,7 +71,15 @@ QString KernelInstaller::BuildKernelInstallerBash(QStringList kernelList, QStrin
|
|||||||
foreach (QString name, kernelList) {
|
foreach (QString name, kernelList) {
|
||||||
kernel += name + " ";
|
kernel += name + " ";
|
||||||
}
|
}
|
||||||
QFile file(":/shell/kernel-installer-template.sh");
|
QString filePath = ":/shell/kernel-installer-template.sh";
|
||||||
|
switch(runOption) {
|
||||||
|
case Option::Install:
|
||||||
|
filePath = ":/shell/kernel-installer-template.sh";
|
||||||
|
case Option::Remove:
|
||||||
|
filePath = ":/shell/kernel-installer-remove-template.sh";
|
||||||
|
}
|
||||||
|
|
||||||
|
QFile file(filePath);
|
||||||
file.open(QFile::ReadOnly);
|
file.open(QFile::ReadOnly);
|
||||||
QString data = file.readAll();
|
QString data = file.readAll();
|
||||||
data = data.replace("${KernelList}", kernel);
|
data = data.replace("${KernelList}", kernel);
|
||||||
|
@ -14,13 +14,20 @@ class KernelInstaller : public QMainWindow
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit KernelInstaller(QStringList kernelList, QWidget *parent = nullptr);
|
enum Option {
|
||||||
|
Install,
|
||||||
|
Remove
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit KernelInstaller(Option option, QStringList kernelList, QWidget *parent = nullptr);
|
||||||
~KernelInstaller();
|
~KernelInstaller();
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void InstallFinished(int status);
|
void InstallFinished(int status);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Option runOption;
|
||||||
Ui::KernelInstaller *ui;
|
Ui::KernelInstaller *ui;
|
||||||
QTermWidget *terminal;
|
QTermWidget *terminal;
|
||||||
QStringList kernelList;
|
QStringList kernelList;
|
||||||
|
@ -31,12 +31,13 @@ void MainWindow::RefreshKernelListView(KernelInformation *info)
|
|||||||
// 更新列表
|
// 更新列表
|
||||||
int count = info->get_count();
|
int count = info->get_count();
|
||||||
QStandardItemModel *model = new QStandardItemModel();
|
QStandardItemModel *model = new QStandardItemModel();
|
||||||
model->setHorizontalHeaderLabels(QStringList() << tr("ID") << tr("Kernel Name") << tr("Author") << tr("Arch"));
|
model->setHorizontalHeaderLabels(QStringList() << tr("ID") << tr("Kernel Name") << tr("Author") << tr("Arch") << tr("Installed"));
|
||||||
for(int i = 0; i < count; i++) {
|
for(int i = 0; i < count; i++) {
|
||||||
model->setItem(i, 0, new QStandardItem(QString::number(i)));
|
model->setItem(i, 0, new QStandardItem(QString::number(i)));
|
||||||
model->setItem(i, 1, new QStandardItem(info->get_name(i)));
|
model->setItem(i, 1, new QStandardItem(info->get_name(i)));
|
||||||
model->setItem(i, 2, new QStandardItem(info->get_author(i)));
|
model->setItem(i, 2, new QStandardItem(info->get_author(i)));
|
||||||
model->setItem(i, 3, new QStandardItem(info->get_arch(i).at(0)));
|
model->setItem(i, 3, new QStandardItem(info->get_arch(i).at(0)));
|
||||||
|
model->setItem(i, 4, new QStandardItem((QStringList() << "" << "Y").at(info->get_installedAlready(i))));
|
||||||
}
|
}
|
||||||
ui->m_kernelShow->setModel(model);
|
ui->m_kernelShow->setModel(model);
|
||||||
}
|
}
|
||||||
@ -66,7 +67,7 @@ void MainWindow::on_m_installButton_clicked()
|
|||||||
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
||||||
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
||||||
// 获取选中行
|
// 获取选中行
|
||||||
KernelInstaller *installer = new KernelInstaller(kernelInformation->get_pkgName(id));
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Install, kernelInformation->get_pkgName(id));
|
||||||
installer->show();
|
installer->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,3 +96,21 @@ void MainWindow::on_actionGithub_triggered()
|
|||||||
QDesktopServices::openUrl(QUrl("https://github.com/GXDE-OS/gxde-kernel-manager"));
|
QDesktopServices::openUrl(QUrl("https://github.com/GXDE-OS/gxde-kernel-manager"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::on_m_removeButton_clicked()
|
||||||
|
{
|
||||||
|
QModelIndex list = ui->m_kernelShow->selectionModel()->currentIndex();
|
||||||
|
int row = list.row();
|
||||||
|
if(row <= 0) {
|
||||||
|
// 未选中任何内容
|
||||||
|
QMessageBox::critical(this, tr("Error"), tr("Nothing to choose"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 获取 ID
|
||||||
|
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
||||||
|
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
||||||
|
// 获取选中行
|
||||||
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Remove, kernelInformation->get_pkgName(id));
|
||||||
|
installer->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,8 @@ private slots:
|
|||||||
|
|
||||||
void on_actionGithub_triggered();
|
void on_actionGithub_triggered();
|
||||||
|
|
||||||
|
void on_m_removeButton_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
KernelInformation *kernelInformation;
|
KernelInformation *kernelInformation;
|
||||||
|
@ -71,6 +71,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_removeButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
5
shell/kernel-installer-remove-template.sh
Normal file
5
shell/kernel-installer-remove-template.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
rm /tmp/gxde-kernel-manager-installer-status -f
|
||||||
|
apt purge ${KernelList} -y
|
||||||
|
rm -f "${kernelInstallerShellTempPath}"
|
Loading…
x
Reference in New Issue
Block a user