From 073c531855d4470beccf8ca9a7d425ffa811d4a7 Mon Sep 17 00:00:00 2001 From: Rob Blanckaert Date: Wed, 6 Feb 2019 00:08:24 -0800 Subject: [PATCH] Connect from commandline (#3556) * - Use Qt argument parser - Add --connect command line option. * Better version info --- cockatrice/src/main.cpp | 23 ++++++++++++++++++++--- cockatrice/src/window_main.cpp | 5 ++++- cockatrice/src/window_main.h | 5 +++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/main.cpp b/cockatrice/src/main.cpp index a574fd70..f8147ba2 100644 --- a/cockatrice/src/main.cpp +++ b/cockatrice/src/main.cpp @@ -30,6 +30,7 @@ #include "soundengine.h" #include "spoilerbackgroundupdater.h" #include "thememanager.h" +#include "version_string.h" #include "window_main.h" #include #include @@ -91,9 +92,6 @@ int main(int argc, char *argv[]) QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); qInstallMessageHandler(CockatriceLogger); - if (app.arguments().contains("--debug-output")) - Logger::getInstance().logToFile(true); - #ifdef Q_OS_WIN app.addLibraryPath(app.applicationDirPath() + "/plugins"); #endif @@ -103,6 +101,7 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationName("Cockatrice"); QCoreApplication::setOrganizationDomain("cockatrice.de"); QCoreApplication::setApplicationName("Cockatrice"); + QCoreApplication::setApplicationVersion(VERSION_STRING); #ifdef Q_OS_MAC qApp->setAttribute(Qt::AA_DontShowIconsInMenus, true); @@ -116,6 +115,21 @@ int main(int argc, char *argv[]) translationPath = qApp->applicationDirPath() + "/../share/cockatrice/translations"; #endif + QCommandLineParser parser; + parser.setApplicationDescription("Cockatrice"); + parser.addHelpOption(); + parser.addVersionOption(); + + parser.addOptions( + {{{"c", "connect"}, QCoreApplication::translate("main", "Connect on startup"), "user:pass@host:port"}, + {{"d", "debug-output"}, QCoreApplication::translate("main", "Debug to file")}}); + + parser.process(app); + + if (parser.isSet("debug-output")) { + Logger::getInstance().logToFile(true); + } + rng = new RNG_SFMT; settingsCache = new SettingsCache; themeManager = new ThemeManager; @@ -132,6 +146,9 @@ int main(int argc, char *argv[]) qDebug("main(): starting main program"); MainWindow ui; + if (parser.isSet("connect")) { + ui.setConnectTo(parser.value("connect")); + } qDebug("main(): MainWindow constructor finished"); ui.setWindowIcon(QPixmap("theme:cockatrice")); diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 326e0dda..7c726728 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -948,7 +948,10 @@ void MainWindow::changeEvent(QEvent *event) else if (event->type() == QEvent::ActivationChange) { if (isActiveWindow() && !bHasActivated) { bHasActivated = true; - if (settingsCache->servers().getAutoConnect()) { + if (!connectTo.isEmpty()) { + qDebug() << "Command line connect to " << connectTo; + client->connectToServer(connectTo.host(), connectTo.port(), connectTo.userName(), connectTo.password()); + } else if (settingsCache->servers().getAutoConnect()) { qDebug() << "Attempting auto-connect..."; DlgConnect dlg(this); client->connectToServer(dlg.getHost(), static_cast(dlg.getPort()), dlg.getPlayerName(), diff --git a/cockatrice/src/window_main.h b/cockatrice/src/window_main.h index 68067924..15d3bc55 100644 --- a/cockatrice/src/window_main.h +++ b/cockatrice/src/window_main.h @@ -137,9 +137,14 @@ private: DlgConnect *dlgConnect; GameReplay *replay; DlgTipOfTheDay *tip; + QUrl connectTo; public: explicit MainWindow(QWidget *parent = nullptr); + void setConnectTo(QString url) + { + connectTo = QUrl(QString("cockatrice://%1").arg(url)); + } ~MainWindow() override; protected: