gxde-kernel-manager/kernelinstaller.cpp

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;
}