diff options
author | Martin Kampas <martin.kampas@jolla.com> | 2016-09-23 07:39:13 +0200 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2016-10-06 12:47:24 +0000 |
commit | 78e7badb14e055704683195f8bfd2fc6d8da5a03 (patch) | |
tree | 482b1325b9b6894cd7cd221bbf1e15c9e3fa25f3 | |
parent | 55839e085ccc1a487b97338328add3e8b0941e75 (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.cpp | 27 | ||||
-rw-r--r-- | src/bench/hostmodel.h | 1 | ||||
-rw-r--r-- | src/bench/main.cpp | 35 | ||||
-rw-r--r-- | src/bench/options.cpp | 10 | ||||
-rw-r--r-- | src/bench/options.h | 12 |
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; }; |