Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
add installer support for Valetudo RE
Browse files Browse the repository at this point in the history
  • Loading branch information
LazyT committed Aug 19, 2020
1 parent 9f67367 commit 35cbd4f
Show file tree
Hide file tree
Showing 7 changed files with 441 additions and 253 deletions.
88 changes: 75 additions & 13 deletions installer.cpp
Expand Up @@ -10,14 +10,19 @@ installerDialog::installerDialog(QWidget *parent) : QDialog(parent)
buttonBox->button(QDialogButtonBox::Apply)->setText(tr("Install"));
buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false);

QMessageBox::warning(parent, APPNAME, tr("Installing Valetudo > 0.5.x or Valetudo RE will make map display unusable!"));

QTimer::singleShot(1, this, SLOT(getReleases()));
}

void installerDialog::getReleases()
{
step = 0;

if(!Download(VALETUDO_REL))
comboBox->clear();
comboBox->addItem(tr("Searching for Releases..."));

if(!Download(vre ? VALETUDORE_REL : VALETUDO_REL))
{
QJsonDocument doc = QJsonDocument::fromJson(download);
QJsonArray arr = doc.array();
Expand Down Expand Up @@ -45,12 +50,18 @@ void installerDialog::getReleases()

sub = arr[i].toObject().value("assets").toArray();

if(sub[0].toObject().contains("browser_download_url"))
for(int i = 0; i < sub.count(); i++)
{
file = sub[0].toObject().value("browser_download_url").toString();
if(sub[i].toObject().contains("browser_download_url"))
{
if(sub[i].toObject().value("name").toString().endsWith("valetudo") || sub[i].toObject().value("name").toString().endsWith("valetudo.tar.gz"))
{
file = sub[i].toObject().value("browser_download_url").toString();

comboBox->addItem(QString("%1 [ %2 %3 ]").arg(name).arg(date.left(10)).arg(date.mid(11, 8)), file);
}
}
}

comboBox->addItem(QString("%1 [ %2 %3 ]").arg(name).arg(date.left(10)).arg(date.mid(11, 8)), file);
}

if(!comboBox->count())
Expand All @@ -77,6 +88,8 @@ bool installerDialog::Download(QString url)
QNetworkAccessManager *netmgr = new QNetworkAccessManager(this);
QNetworkRequest request = QNetworkRequest(QUrl(url));

bool tgz = false, canceled = false, finished = false;

if(step)
{
plainTextEdit->appendPlainText(tr("GET: %1 started\n").arg(url));
Expand Down Expand Up @@ -106,6 +119,12 @@ bool installerDialog::Download(QString url)
{
file.setFileName(VALETUDO_BIN_SRC);
}
else if(url.endsWith("valetudo.tar.gz"))
{
file.setFileName(VALETUDO_BIN_SRC + ".tar.gz");

tgz = true;
}
else if(url.endsWith("valetudo.conf"))
{
file.setFileName(VALETUDO_CFG_SRC);
Expand All @@ -124,6 +143,34 @@ bool installerDialog::Download(QString url)
file.write(download);
file.close();
}

if(tgz)
{
QArchive::Extractor extractor;

extractor
.setArchive(file.fileName(), QStandardPaths::writableLocation(QStandardPaths::TempLocation))
.setFunc(QArchive::FINISHED, [&]()
{
finished = true;

plainTextEdit->appendPlainText(tr("TGZ: finished\n"));
})
.setFunc(QArchive::CANCELED, [&]()
{
canceled = true;
failed = true;

plainTextEdit->appendPlainText(tr("TGZ: failed!"));
})
.start();

while(!finished && !canceled)
{
QThread::msleep(10);
QCoreApplication::processEvents();
}
}
}

return failed;
Expand Down Expand Up @@ -241,7 +288,7 @@ void installerDialog::finished(QNetworkReply *reply)
{
failed = true;

if(reply->url().toString() != VALETUDO_REL)
if(reply->url().toString() != (vre ? VALETUDORE_REL : VALETUDO_REL))
{
updateProgress();

Expand Down Expand Up @@ -411,7 +458,7 @@ void installerDialog::ssh_pullSuccessful(__attribute__((unused)) QString localFi

mergeFiles(RCLOCAL);

ssh->executeCommand(VALETUDO_CMD_STOP);
ssh->executeCommand(QString(VALETUDO_CMD_STOP).arg(comboBox_control->currentText().split("<").at(0)));
}
}

Expand Down Expand Up @@ -459,7 +506,7 @@ void installerDialog::ssh_commandExecuted(QString command, QString response)

QThread::msleep(250);

if(command == VALETUDO_CMD_STOP)
if(command == QString(VALETUDO_CMD_STOP).arg(comboBox_control->currentText().split("<").at(0)))
{
updateProgress();

Expand All @@ -471,9 +518,9 @@ void installerDialog::ssh_commandExecuted(QString command, QString response)
{
updateProgress();

ssh->executeCommand(VALETUDO_CMD_START);
ssh->executeCommand(QString(VALETUDO_CMD_START).arg(comboBox_control->currentText().split("<").at(0)));
}
else if(command == VALETUDO_CMD_START)
else if(command == QString(VALETUDO_CMD_START).arg(comboBox_control->currentText().split("<").at(0)))
{
updateProgress();

Expand Down Expand Up @@ -504,6 +551,21 @@ void installerDialog::ssh_error(QSshSocket::SshError error)
ssh->disconnectFromHost();
}


void installerDialog::on_radioButton_valetudo_clicked()
{
vre = false;

getReleases();
}

void installerDialog::on_radioButton_valetudore_clicked()
{
vre = true;

getReleases();
}

void installerDialog::reject()
{
if(reply && reply->isRunning())
Expand Down Expand Up @@ -574,21 +636,21 @@ void installerDialog::on_buttonBox_clicked(QAbstractButton *button)
return;
}

if(Download(VALETUDO_CFG))
if(Download(vre ? VALETUDORE_CFG : VALETUDO_CFG))
{
QMessageBox::warning(this, APPNAME, tr("Valetudo installation failed!"));

return;
}

if(Download(VALETUDO_HOSTS))
if(Download(vre ? VALETUDORE_HOSTS : VALETUDO_HOSTS))
{
QMessageBox::warning(this, APPNAME, tr("Valetudo installation failed!"));

return;
}

if(Download(VALETUDO_RCLOCAL))
if(Download(vre ? VALETUDORE_RCLOCAL : VALETUDO_RCLOCAL))
{
QMessageBox::warning(this, APPNAME, tr("Valetudo installation failed!"));

Expand Down
13 changes: 11 additions & 2 deletions installer.h
Expand Up @@ -9,6 +9,11 @@
#define VALETUDO_HOSTS "https://github.com/Hypfer/Valetudo/raw/master/deployment/etc/hosts"
#define VALETUDO_RCLOCAL "https://github.com/Hypfer/Valetudo/raw/master/deployment/etc/rc.local"

#define VALETUDORE_REL "https://api.github.com/repos/rand256/valetudo/releases"
#define VALETUDORE_CFG "https://github.com/rand256/Valetudo/raw/testing/deployment/valetudo.conf"
#define VALETUDORE_HOSTS "https://github.com/rand256/Valetudo/raw/testing/deployment/etc/hosts"
#define VALETUDORE_RCLOCAL "https://github.com/rand256/Valetudo/raw/testing/deployment/etc/rc.local"

#define VALETUDO_BIN_SRC QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/valetudo"
#define VALETUDO_CFG_SRC QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/valetudo.conf"
#define VALETUDO_HOSTS_SRC QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/hosts"
Expand All @@ -20,8 +25,8 @@
#define VALETUDO_RCLOCAL_DST "/etc/rc.local"

#define VALETUDO_CMD_CHMOD "chmod +x " VALETUDO_BIN_DST
#define VALETUDO_CMD_STOP "service valetudo stop"
#define VALETUDO_CMD_START "service valetudo start"
#define VALETUDO_CMD_STOP "%1 stop"
#define VALETUDO_CMD_START "%1 start"

#define HOSTS_INIT "### VALETUDO HOSTS INIT ###"
#define HOSTS_EXIT "### VALETUDO HOSTS EXIT ###"
Expand Down Expand Up @@ -49,6 +54,7 @@ class installerDialog : public QDialog, private Ui::Dialog_Installer
QSshSocket *ssh = nullptr;
bool finish, failed;
int step;
bool vre = false;

private slots:

Expand All @@ -65,6 +71,9 @@ private slots:
void ssh_pushSuccessful(QString, QString);
void ssh_commandExecuted(QString, QString);

void on_radioButton_valetudo_clicked();
void on_radioButton_valetudore_clicked();

void reject();

void on_buttonBox_clicked(QAbstractButton*);
Expand Down
Binary file modified lng/rrcc_de.qm
Binary file not shown.

0 comments on commit 35cbd4f

Please sign in to comment.