diff --git a/main.cpp b/main.cpp index f88ed29..d45c545 100644 --- a/main.cpp +++ b/main.cpp @@ -1,14 +1,12 @@ #include "snigdhaosblackbox.h" -// #include "./ui_snigdhaosblackbox.h" #include -// const char* INTERNET_CHECK_URL = "https://snigdhaos.org/"; int main(int argc, char *argv[]) { QApplication a(argc, argv); - SnigdhaOSBlackBox w; + SnigdhaOSBlackBox w(nullptr, a.arguments().length() > 1 ? a.arguments()[1] : ""); w.show(); return a.exec(); } diff --git a/snigdhaosblackbox.cpp b/snigdhaosblackbox.cpp index 469a98f..8c8234a 100644 --- a/snigdhaosblackbox.cpp +++ b/snigdhaosblackbox.cpp @@ -20,7 +20,7 @@ SnigdhaOSBlackBox::~SnigdhaOSBlackBox() delete ui; } -void SnigdhaOSBlackbox::doInternetUpRequest(){ +void SnigdhaOSBlackBox::doInternetUpRequest(){ QNetworkAccessManager* = network_manager = new QNetworkAccessManager(); auto network_reply = network_manager->head(QNetworkRequest(QString(INTERNET_CHECK_URL))); @@ -42,4 +42,66 @@ void SnigdhaOSBlackbox::doInternetUpRequest(){ doInternetUpRequest(); } }); +} + +void SnigdhaOSBlackBox::doUpdate(){ + if (qEnvironmentVaribaleSet("SNIGDHAOS_BLACKBOX_SELFUPDATE")) { + updateState(State::SELECT); + return; + } + auto process = new QProcess(this); + QTemporaryFile* file = new QTemporaryFile(this); + file->open(); + file->setAutoRemove(true); + process->start("/usr/lib/snigdhaos/launch-terminal", QStringList() << QString("sudo pacman -Syyu 2>&1 && rm \"" + file->fileName() + "\"; read -p 'Press Ebter to Exit'")); + connect(process,QOverload::of(&QProcess::finished), this, [this, process, file](int exitcode, QProcess::ExitStatus status){ + process->deleteLater(); + file->deleteLater(); + + if (exitcode == 0 && !file->exists()){ + relaunchSelf("POST_UPDATE"); + } + else{ + relaunchSelf("UPDATE_RETRY"); + } + }); +} + +void SnigdhaOSBlackBox::doApply(){ + QStringList packages; + QStringList setup_commands; + QStringList prepare_commands; + + auto checkboxList = ui->selectWidget_tabs->findChildren(); + + for (auto checkbox : checkboxList){ + if (checkbox->isChecked()){ + packages += checkbox->property("packages").toStringList(); + setup_commands += checkbox->property("setup_commands").toStringList(); + prepare_commands += checkbox->property("prepare_commands").toStringList(); + } + } + + if (packages.empty()){ + updateState(State::SUCCESS); + return; + } + + if (packages.contains("docker")){ + setup_commands += "systemctl enable --now docker.socket"; + } + if (packages.contains("virt-manager-meta") && packages.contains("gnome-boxes")){ + setup_commands += "systemctl enable --now libvirtd"; + } + + packages.removeDuplicates(); + + QTemporaryFile* prepareFile = new QTemporaryFile(this); + prepareFile->setAutoRemove(true); + prepareFile->open(); + QTextStream prepareStream(prepareFile); + prepareStream << prepare_commands.join('\n'); + prepareFile->close(); + QTemporaryFile* packagesFiles = new QTemporaryFile(this); + } \ No newline at end of file diff --git a/snigdhaosblackbox.h b/snigdhaosblackbox.h index 68fcfb5..57a455f 100644 --- a/snigdhaosblackbox.h +++ b/snigdhaosblackbox.h @@ -3,7 +3,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE namespace Ui { @@ -16,10 +16,26 @@ class SnigdhaOSBlackBox : public QMainWindow Q_OBJECT public: - SnigdhaOSBlackBox(QWidget *parent = nullptr); + enum class State { + QUIT, + WELCOME, + INTERNET, + UPDATE, + UPDATE_RETRY, + SELECT, + APPLY, + APPLY_RETRY, + SUCCESS + }; + + SnigdhaOSBlackBox(QWidget *parent = nullptr, QString state = "WELCOME"); ~SnigdhaOSBlackBox(); private: Ui::SnigdhaOSBlackBox *ui; + QDateTime executable_modify_date; + State currentState; + + void doInternetUpRequest(); }; #endif // SNIGDHAOSBLACKBOX_H