Persistent settings + autostart + security tab
Change-Id: Iec35f732268caa99ff541e6d5d6478049ec41d50
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
index 40eb98e..daf28d5 100644
--- a/linux/tray-menu.cpp
+++ b/linux/tray-menu.cpp
@@ -26,11 +26,20 @@
#include <QDebug>
#include <QtXml>
#include <QStandardItemModel>
+#include <QDir>
TrayMenu::TrayMenu(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::TrayMenu)
{
+ networkManager = new NetworkManager();
+
+ QCoreApplication::setOrganizationName("UCLA");
+ QCoreApplication::setOrganizationDomain("named-data.net");
+ QCoreApplication::setApplicationName("NDNx Control Center");
+
+ persistentSettings = new QSettings();
+
ui->setupUi(this);
createTrayIcon();
@@ -38,9 +47,7 @@
createToolbar();
createTableView();
- startDaemon();
-
- networkManager = new NetworkManager();
+ loadSettings();
connect(ui->openTrafficMapButton, SIGNAL(pressed()), this, SLOT(openTrafficMap()));
connect(ui->openRoutingStatusButton, SIGNAL(pressed()), this, SLOT(openRoutingStatus()));
@@ -51,6 +58,7 @@
connect(ui->loginStartCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeLoginStart()));
connect(ui->shutdownCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeShutdownExit()));
connect(ui->tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectTableRow()));
+ connect(ui->openNdnCertificationButton, SIGNAL(released()), this, SLOT(openCertificationPage()));
statusUpdateThread = new QThread();
statusUpdateThread->start();
@@ -62,36 +70,136 @@
trayIcon->show();
}
+void TrayMenu::loadSettings()
+{
+ QVariant value;
+
+ value = persistentSettings->value(ALLOW_SOFTWARE_UPDATES);
+ if(!value.isNull())
+ {
+ allowAutomaticUpdates = value.toBool();
+ ui->softwareUpdateCheckbox->setChecked(allowAutomaticUpdates);
+ }
+ else
+ {
+ ui->softwareUpdateCheckbox->setChecked(true);
+ changeSoftwareUpdate();
+ }
+
+ value = persistentSettings->value(ENABLE_HUB_DISCOVERY);
+ if(!value.isNull())
+ {
+ enableHubDiscovery = value.toBool();
+ ui->hubDiscoveryCheckbox->setChecked(enableHubDiscovery);
+ }
+ else
+ {
+ ui->hubDiscoveryCheckbox->setChecked(true);
+ changeHubDiscovery();
+ }
+
+ value = persistentSettings->value(ENABLE_START_ON_LOGIN);
+ if(!value.isNull())
+ {
+ enableStartOnLogin = value.toBool();
+ ui->loginStartCheckbox->setChecked(enableStartOnLogin);
+ }
+ else
+ {
+ ui->loginStartCheckbox->setChecked(false);
+ changeLoginStart();
+ }
+
+ value = persistentSettings->value(SHUTDOWN_ON_EXIT);
+ if(!value.isNull())
+ {
+ shutdownOnExit = value.toBool();
+ ui->shutdownCheckbox->setChecked(shutdownOnExit);
+ }
+ else
+ {
+ ui->shutdownCheckbox->setChecked(false);
+ changeShutdownExit();
+ }
+}
+
void TrayMenu::changeSoftwareUpdate()
{
if(ui->softwareUpdateCheckbox->isChecked())
+ {
allowAutomaticUpdates = true;
+ persistentSettings->setValue(ALLOW_SOFTWARE_UPDATES, true);
+ }
else
+ {
allowAutomaticUpdates = false;
+ persistentSettings->setValue(ALLOW_SOFTWARE_UPDATES, false);
+ }
}
void TrayMenu::changeHubDiscovery()
{
if(ui->hubDiscoveryCheckbox->isChecked())
+ {
enableHubDiscovery = true;
+ persistentSettings->setValue(ENABLE_HUB_DISCOVERY, true);
+ }
else
+ {
enableHubDiscovery = false;
+ persistentSettings->setValue(ENABLE_HUB_DISCOVERY, false);
+ }
}
void TrayMenu::changeLoginStart()
{
if(ui->loginStartCheckbox->isChecked())
+ {
enableStartOnLogin = true;
+ persistentSettings->setValue(ENABLE_START_ON_LOGIN, true);
+ makeAutostartDirectory();
+ }
else
+ {
enableStartOnLogin = false;
+ persistentSettings->setValue(ENABLE_START_ON_LOGIN, false);
+
+ QProcess *process = new QProcess();
+ QStringList arguments;
+ arguments << QDir::homePath() + AUTOSTART_DIRECTORY + SHORTCUT_FILE;
+ process->start("rm", arguments);
+ }
+}
+
+void TrayMenu::makeAutostartDirectory()
+{
+ QProcess *process = new QProcess();
+ connect(process, SIGNAL(finished(int)), this, SLOT(copyFile()));
+ QStringList arguments;
+ arguments << QDir::homePath() + AUTOSTART_DIRECTORY;
+ process->start("mkdir", arguments);
+}
+
+void TrayMenu::copyFile()
+{
+ QProcess *process = new QProcess();
+ QStringList arguments;
+ arguments << QApplication::applicationDirPath() + "/" + SHORTCUT_FILE << QDir::homePath() + AUTOSTART_DIRECTORY;
+ process->start("cp",arguments);
}
void TrayMenu::changeShutdownExit()
{
if(ui->shutdownCheckbox->isChecked())
+ {
shutdownOnExit = true;
+ persistentSettings->setValue(SHUTDOWN_ON_EXIT, true);
+ }
else
+ {
shutdownOnExit = false;
+ persistentSettings->setValue(SHUTDOWN_ON_EXIT, false);
+ }
}
void TrayMenu::showFibInputDialog()
@@ -110,6 +218,11 @@
QDesktopServices::openUrl(QUrl("http://netlab.cs.memphis.edu/script/htm/status.htm", QUrl::TolerantMode));
}
+void TrayMenu::openCertificationPage()
+{
+ QDesktopServices::openUrl(QUrl("http://ndncert.named-data.net", QUrl::TolerantMode));
+}
+
void TrayMenu::createTrayIcon()
{
trayIconMenu = new QMenu(this);
@@ -209,14 +322,19 @@
dialog->hide();
- QProcess *process = new QProcess(this);
- process->start(NDND_FIB_COMMAND,arguments);
+ QProcess *process = new QProcess();
+ process->start(NDND_FIB_COMMAND, arguments);
}
void TrayMenu::confirmQuit()
{
- QuitDialog dialog(this);
- dialog.exec();
+ if(shutdownOnExit)
+ terminateDaemonAndClose();
+ else
+ {
+ QuitDialog dialog(this);
+ dialog.exec();
+ }
}
void TrayMenu::terminateDaemonAndClose()
@@ -256,12 +374,6 @@
trayIcon->setIcon(QIcon(":/resource/Resources/icon-disconnected-white.png"));
}
-void TrayMenu::startDaemon()
-{
- QProcess *process = new QProcess(this);
- process->start(NDND_START_COMMAND);
-}
-
void TrayMenu::daemonStatusUpdate()
{
QXmlQuery query(QXmlQuery::XSLT20);
@@ -270,9 +382,32 @@
query.setQuery(QUrl("qrc:/resource/Resources/status.xslt")); // TODO: I suspect it's being read from HDD each time
query.evaluateTo(&statusXml);
+ if(statusXml == "") // there was an error during Query evaluation
+ {
+ daemonStarted = false;
+ setIcon(false);
+ statusIndicator->setText(tr("Starting..."));
+
+ QProcess *process = new QProcess();
+ if(enableHubDiscovery)
+ connect(process, SIGNAL(finished(int)), networkManager, SLOT(autoconfigDaemon()));
+ process->start(NDND_START_COMMAND);
+ }
+ else
+ {
+ daemonStarted = true;
+ setIcon(true);
+ statusIndicator->setText(tr("Active"));
+ }
+
query.setQuery(QUrl("qrc:/resource/Resources/status-to-fib.xslt")); // TODO: I suspect it's being read from HDD each time
query.evaluateTo(&fibContentsXml);
+ if ((enableHubDiscovery) && (fibContentsXml.indexOf("ndn:/autoconf-route",0,Qt::CaseInsensitive) == -1))
+ {
+ networkManager->autoconfigDaemon();
+ }
+
QDomDocument xmldoc;
QDomElement root;
@@ -294,12 +429,6 @@
QDomNode ip = properties.at(1);
QDomNode prefix = properties.at(2);
- // bad: causes scroll to go up every time and overall flickering
- /*QList<QStandardItem*> row = QList<QStandardItem*>() << new QStandardItem(prefix.toElement().text())
- << new QStandardItem(faceID.toElement().text())
- << new QStandardItem(ip.toElement().text());
- model->appendRow(row);*/
-
model->setItem(row, 0, new QStandardItem(prefix.toElement().text()));
model->setItem(row, 1, new QStandardItem(faceID.toElement().text()));
model->setItem(row, 2, new QStandardItem(ip.toElement().text()));
@@ -344,8 +473,8 @@
QStringList arguments;
arguments << "del" << prefix->text() << "face" << faceID->text();
- QProcess *process = new QProcess(this);
- process->start(NDND_FIB_COMMAND,arguments);
+ QProcess *process = new QProcess();
+ process->start(NDND_FIB_COMMAND, arguments);
}
TrayMenu::~TrayMenu()