Connect from commandline (#3556)

* - Use Qt argument parser
- Add --connect command line option.

* Better version info
This commit is contained in:
Rob Blanckaert 2019-02-06 00:08:24 -08:00 committed by Zach H
parent 9118871afb
commit 073c531855
3 changed files with 29 additions and 4 deletions

View file

@ -30,6 +30,7 @@
#include "soundengine.h" #include "soundengine.h"
#include "spoilerbackgroundupdater.h" #include "spoilerbackgroundupdater.h"
#include "thememanager.h" #include "thememanager.h"
#include "version_string.h"
#include "window_main.h" #include "window_main.h"
#include <QApplication> #include <QApplication>
#include <QCryptographicHash> #include <QCryptographicHash>
@ -91,9 +92,6 @@ int main(int argc, char *argv[])
QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
qInstallMessageHandler(CockatriceLogger); qInstallMessageHandler(CockatriceLogger);
if (app.arguments().contains("--debug-output"))
Logger::getInstance().logToFile(true);
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
app.addLibraryPath(app.applicationDirPath() + "/plugins"); app.addLibraryPath(app.applicationDirPath() + "/plugins");
#endif #endif
@ -103,6 +101,7 @@ int main(int argc, char *argv[])
QCoreApplication::setOrganizationName("Cockatrice"); QCoreApplication::setOrganizationName("Cockatrice");
QCoreApplication::setOrganizationDomain("cockatrice.de"); QCoreApplication::setOrganizationDomain("cockatrice.de");
QCoreApplication::setApplicationName("Cockatrice"); QCoreApplication::setApplicationName("Cockatrice");
QCoreApplication::setApplicationVersion(VERSION_STRING);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
qApp->setAttribute(Qt::AA_DontShowIconsInMenus, true); qApp->setAttribute(Qt::AA_DontShowIconsInMenus, true);
@ -116,6 +115,21 @@ int main(int argc, char *argv[])
translationPath = qApp->applicationDirPath() + "/../share/cockatrice/translations"; translationPath = qApp->applicationDirPath() + "/../share/cockatrice/translations";
#endif #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; rng = new RNG_SFMT;
settingsCache = new SettingsCache; settingsCache = new SettingsCache;
themeManager = new ThemeManager; themeManager = new ThemeManager;
@ -132,6 +146,9 @@ int main(int argc, char *argv[])
qDebug("main(): starting main program"); qDebug("main(): starting main program");
MainWindow ui; MainWindow ui;
if (parser.isSet("connect")) {
ui.setConnectTo(parser.value("connect"));
}
qDebug("main(): MainWindow constructor finished"); qDebug("main(): MainWindow constructor finished");
ui.setWindowIcon(QPixmap("theme:cockatrice")); ui.setWindowIcon(QPixmap("theme:cockatrice"));

View file

@ -948,7 +948,10 @@ void MainWindow::changeEvent(QEvent *event)
else if (event->type() == QEvent::ActivationChange) { else if (event->type() == QEvent::ActivationChange) {
if (isActiveWindow() && !bHasActivated) { if (isActiveWindow() && !bHasActivated) {
bHasActivated = true; 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..."; qDebug() << "Attempting auto-connect...";
DlgConnect dlg(this); DlgConnect dlg(this);
client->connectToServer(dlg.getHost(), static_cast<unsigned int>(dlg.getPort()), dlg.getPlayerName(), client->connectToServer(dlg.getHost(), static_cast<unsigned int>(dlg.getPort()), dlg.getPlayerName(),

View file

@ -137,9 +137,14 @@ private:
DlgConnect *dlgConnect; DlgConnect *dlgConnect;
GameReplay *replay; GameReplay *replay;
DlgTipOfTheDay *tip; DlgTipOfTheDay *tip;
QUrl connectTo;
public: public:
explicit MainWindow(QWidget *parent = nullptr); explicit MainWindow(QWidget *parent = nullptr);
void setConnectTo(QString url)
{
connectTo = QUrl(QString("cockatrice://%1").arg(url));
}
~MainWindow() override; ~MainWindow() override;
protected: protected: