59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
#include "kernelinstaller.h"
|
|
#include "ui_kernelinstaller.h"
|
|
|
|
#include <ctime>
|
|
#include <cstdlib>
|
|
#include <QFile>
|
|
|
|
#define MAX_TMP_NUM 1024
|
|
#define MIN_TMP_NUM 0
|
|
|
|
KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) :
|
|
QMainWindow(parent),
|
|
ui(new Ui::KernelInstaller)
|
|
{
|
|
ui->setupUi(this);
|
|
this->kernelList = kernelList;
|
|
terminal = new QTermWidget(0);
|
|
terminal->setColorScheme("DarkPastels");
|
|
terminal->setAutoClose(true);
|
|
ui->verticalLayout->addWidget(terminal);
|
|
StartInstaller();
|
|
}
|
|
|
|
void KernelInstaller::StartInstaller()
|
|
{
|
|
terminal->setShellProgram("/usr/bin/pkexec");
|
|
// 随机生成目录
|
|
srand(time(0));
|
|
int randomNumber = (rand() % (MAX_TMP_NUM - MIN_TMP_NUM)) + 1; // 左闭右闭
|
|
QString tempPath = tempDir + "/gxde-kernel-manager-installer-" + QString::number(randomNumber) + ".sh";
|
|
QFile file(tempPath);
|
|
file.open(QFile::WriteOnly);
|
|
file.write(BuildKernelInstallerBash(this->kernelList, tempPath).toUtf8());
|
|
file.close();
|
|
terminal->setArgs(QStringList() << "bash" << tempPath);
|
|
terminal->startShellProgram();
|
|
}
|
|
|
|
QString KernelInstaller::BuildKernelInstallerBash(QStringList kernelList, QString tempFilePath) const
|
|
{
|
|
// 转换数据
|
|
QString kernel = "";
|
|
foreach (QString name, kernelList) {
|
|
kernel += name + " ";
|
|
}
|
|
QFile file(":/shell/kernel-installer-template.sh");
|
|
file.open(QFile::ReadOnly);
|
|
QString data = file.readAll();
|
|
data = data.replace("${KernelList}", kernel);
|
|
data += "\nrm -v '" + tempFilePath + "'";
|
|
file.close();
|
|
return data;
|
|
}
|
|
|
|
KernelInstaller::~KernelInstaller()
|
|
{
|
|
delete ui;
|
|
}
|