128 lines
2.9 KiB
C++
128 lines
2.9 KiB
C++
/*
|
|
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
|
|
*/
|
|
|
|
#include "CommandLineParser.h"
|
|
|
|
#include "controller/AppController.h"
|
|
#include "DatagramHandlerImpl.h"
|
|
#include "LogHandler.h"
|
|
#include "NetworkManager.h"
|
|
#include "PortFile.h"
|
|
#include "SingletonHelper.h"
|
|
#include "UILoader.h"
|
|
|
|
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
|
#include "HttpServer.h"
|
|
#endif
|
|
|
|
#include <QCoreApplication>
|
|
|
|
|
|
using namespace governikus;
|
|
|
|
|
|
defineSingleton(CommandLineParser)
|
|
|
|
|
|
CommandLineParser::CommandLineParser()
|
|
: mParser()
|
|
, mOptionKeepLog(QStringLiteral("keep"), QStringLiteral("Keep log file."))
|
|
, mOptionNoLogFile(QStringLiteral("no-logfile"), QStringLiteral("Disable log file."))
|
|
, mOptionNoLogHandler(QStringLiteral("no-loghandler"), QStringLiteral("Disable default log handler."))
|
|
, mOptionShowWindow(QStringLiteral("show"), QStringLiteral("Show window on startup."))
|
|
, mOptionProxy(QStringLiteral("no-proxy"), QStringLiteral("Disable system proxy."))
|
|
, mOptionUi(QStringLiteral("ui"), QStringLiteral("Use given UI plugin."), UILoader::getInstance().getDefault().join(QLatin1Char(',')))
|
|
, mOptionPort(QStringLiteral("port"), QStringLiteral("Use listening port."), QString::number(PortFile::cDefaultPort))
|
|
{
|
|
addOptions();
|
|
}
|
|
|
|
|
|
CommandLineParser& CommandLineParser::getInstance()
|
|
{
|
|
return *Instance;
|
|
}
|
|
|
|
|
|
void CommandLineParser::addOptions()
|
|
{
|
|
mParser.addHelpOption();
|
|
mParser.addVersionOption();
|
|
|
|
mParser.addOption(mOptionKeepLog);
|
|
mParser.addOption(mOptionNoLogFile);
|
|
mParser.addOption(mOptionNoLogHandler);
|
|
|
|
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(Q_OS_WINRT)
|
|
mParser.addOption(mOptionShowWindow);
|
|
#endif
|
|
|
|
mParser.addOption(mOptionProxy);
|
|
mParser.addOption(mOptionUi);
|
|
mParser.addOption(mOptionPort);
|
|
}
|
|
|
|
|
|
void CommandLineParser::parse(QCoreApplication* pApp)
|
|
{
|
|
if (pApp == nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
mParser.process(*pApp);
|
|
parseUiPlugin();
|
|
|
|
const auto& logHandler = Env::getSingleton<LogHandler>();
|
|
if (mParser.isSet(mOptionKeepLog))
|
|
{
|
|
logHandler->setAutoRemove(false);
|
|
}
|
|
|
|
if (mParser.isSet(mOptionNoLogFile))
|
|
{
|
|
logHandler->setLogfile(false);
|
|
}
|
|
|
|
if (mParser.isSet(mOptionNoLogHandler))
|
|
{
|
|
logHandler->setUseHandler(false);
|
|
}
|
|
|
|
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(Q_OS_WINRT)
|
|
if (mParser.isSet(mOptionShowWindow))
|
|
{
|
|
AppController::cShowUi = true;
|
|
}
|
|
#endif
|
|
|
|
if (mParser.isSet(mOptionProxy))
|
|
{
|
|
NetworkManager::lockProxy(true);
|
|
}
|
|
|
|
if (mParser.isSet(mOptionPort))
|
|
{
|
|
bool converted = false;
|
|
const uint port = mParser.value(mOptionPort).toUInt(&converted);
|
|
if (converted && port <= std::numeric_limits<quint16>::max())
|
|
{
|
|
DatagramHandlerImpl::cPort = static_cast<quint16>(port);
|
|
|
|
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
|
HttpServer::cPort = DatagramHandlerImpl::cPort;
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CommandLineParser::parseUiPlugin()
|
|
{
|
|
if (mParser.isSet(mOptionUi))
|
|
{
|
|
UILoader::getInstance().setDefault(mParser.values(mOptionUi));
|
|
}
|
|
}
|