aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kampas <martin.kampas@jolla.com>2016-09-23 07:39:13 +0200
committerJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2016-10-06 12:47:24 +0000
commit78e7badb14e055704683195f8bfd2fc6d8da5a03 (patch)
tree482b1325b9b6894cd7cd221bbf1e15c9e3fa25f3
parent55839e085ccc1a487b97338328add3e8b0941e75 (diff)
Bench: Allow non-interactive adding of remote hosts
Change-Id: Idfa63d4c7e03443c5f63a833114d045dae3258cb Reviewed-by: Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>
-rw-r--r--src/bench/hostmodel.cpp27
-rw-r--r--src/bench/hostmodel.h1
-rw-r--r--src/bench/main.cpp35
-rw-r--r--src/bench/options.cpp10
-rw-r--r--src/bench/options.h12
5 files changed, 85 insertions, 0 deletions
diff --git a/src/bench/hostmodel.cpp b/src/bench/hostmodel.cpp
index 674c7f6..a94b37e 100644
--- a/src/bench/hostmodel.cpp
+++ b/src/bench/hostmodel.cpp
@@ -150,6 +150,33 @@ void HostModel::clear()
endResetModel();
}
+void HostModel::addOrUpdateHost(QSettings *s, const QString &name, const QString &address, int port)
+{
+ Q_ASSERT(s);
+
+ HostModel model;
+ model.restoreFromSettings(s);
+
+ Host *host = 0;
+ foreach (Host *existing, model.m_hosts) {
+ if (existing->name() == name) {
+ host = existing;
+ break;
+ }
+ }
+
+ if (host == 0) {
+ host = new Host(Host::Manual, &model);
+ host->setName(name);
+ model.addHost(host);
+ }
+
+ host->setAddress(address);
+ host->setPort(port);
+
+ model.saveToSettings(s);
+}
+
QList<Host *> HostModel::findByAutoDiscoveryId(QUuid id) const
{
QList<Host *> hosts;
diff --git a/src/bench/hostmodel.h b/src/bench/hostmodel.h
index 581fd1f..1a1aadf 100644
--- a/src/bench/hostmodel.h
+++ b/src/bench/hostmodel.h
@@ -57,6 +57,7 @@ public:
void removeHost(int index);
int indexOf(Host* host);
void clear();
+ static void addOrUpdateHost(QSettings *s, const QString &name, const QString &address, int port);
QList<Host*> findByAutoDiscoveryId(QUuid id) const;
diff --git a/src/bench/main.cpp b/src/bench/main.cpp
index 18337a1..a111bf2 100644
--- a/src/bench/main.cpp
+++ b/src/bench/main.cpp
@@ -32,6 +32,7 @@
#include <QtGui>
#include <QtWidgets>
+#include "hostmodel.h"
#include "options.h"
#include "mainwindow.h"
#include "qmllive_version.h"
@@ -75,6 +76,8 @@ static void parseArguments(const QStringList& arguments, Options *options)
parser.addOption(importPathOption);
QCommandLineOption stayOnTopOption("stayontop", "keep viewer window on top");
parser.addOption(stayOnTopOption);
+ QCommandLineOption addHostOption("addhost", "add or update remote host configuration and exit", "name,address[,port]");
+ parser.addOption(addHostOption);
parser.process(arguments);
@@ -82,6 +85,30 @@ static void parseArguments(const QStringList& arguments, Options *options)
options->setImportPaths(parser.values(importPathOption));
options->setStayOnTop(parser.isSet(stayOnTopOption));
+ if (parser.isSet(addHostOption)) {
+ foreach (const QString &value, parser.values(addHostOption)) {
+ const QStringList split = value.split(QLatin1Char(','));
+ if (split.count() < 2 || split.count() > 3) {
+ qWarning() << "Invalid argument: " << value;
+ parser.showHelp(-1);
+ }
+
+ Options::HostOptions host;
+ host.name = split.at(0);
+ host.address = split.at(1);
+ if (split.count() == 3) {
+ bool ok;
+ host.port = split.at(2).toInt(&ok);
+ if (!ok) {
+ qWarning() << "Port must be specified with a number" << value;
+ parser.showHelp(-1);
+ }
+ }
+
+ options->addHostToAdd(host);
+ }
+ }
+
const QStringList positionalArguments = parser.positionalArguments();
if (positionalArguments.count() >= 1) {
QString argument = positionalArguments.value(0);
@@ -134,6 +161,14 @@ int main(int argc, char** argv)
Options *options = Options::instance();
parseArguments(app.arguments(), options);
+ if (!options->hostsToAdd().isEmpty()) {
+ QSettings s;
+ foreach (const Options::HostOptions &host, options->hostsToAdd()) {
+ HostModel::addOrUpdateHost(&s, host.name, host.address, host.port);
+ }
+ return EXIT_SUCCESS;
+ }
+
MainWindow win;
win.init(options); // Parse and apply command line and settings file options
win.show();
diff --git a/src/bench/options.cpp b/src/bench/options.cpp
index ed7ca33..13549c1 100644
--- a/src/bench/options.cpp
+++ b/src/bench/options.cpp
@@ -106,3 +106,13 @@ void Options::setStayOnTop(bool stayOnTop)
{
m_stayOnTop = stayOnTop;
}
+
+QList<Options::HostOptions> Options::hostsToAdd() const
+{
+ return m_hostsToAdd;
+}
+
+void Options::addHostToAdd(const HostOptions &hostOptions)
+{
+ m_hostsToAdd.append(hostOptions);
+}
diff --git a/src/bench/options.h b/src/bench/options.h
index 8a0ceed..93c6a0b 100644
--- a/src/bench/options.h
+++ b/src/bench/options.h
@@ -36,6 +36,14 @@
class Options : public QObject
{
Q_OBJECT
+
+public:
+ struct HostOptions {
+ QString name;
+ QString address;
+ int port = 10234;
+ };
+
private:
explicit Options(QObject *parent = 0);
public:
@@ -58,6 +66,9 @@ public:
bool stayOnTop() const;
void setStayOnTop(bool stayOnTop);
+ QList<HostOptions> hostsToAdd() const;
+ void addHostToAdd(const HostOptions &hostOptions);
+
private:
static Options *s_instance;
QString m_activeDocument;
@@ -65,5 +76,6 @@ private:
QString m_pluginPath;
QStringList m_importPaths;
bool m_stayOnTop;
+ QList<HostOptions> m_hostsToAdd;
};