Do not exit app on unknown CLI options anymore.

This commit is contained in:
Martin Rotter 2021-05-31 09:15:57 +02:00
parent 26f073d844
commit e5685513f1
3 changed files with 83 additions and 67 deletions

View File

@ -91,6 +91,10 @@
#define EXTERNAL_TOOL_SEPARATOR "|||"
#define USER_DATA_PLACEHOLDER "%data%"
#define CLI_VER_SHORT "v"
#define CLI_VER_LONG "version"
#define CLI_HELP_SHORT "h"
#define CLI_HELP_LONG "help"
#define CLI_LOG_SHORT "l"
#define CLI_LOG_LONG "log"
#define CLI_DAT_SHORT "d"

View File

@ -53,11 +53,9 @@ WebPage* WebViewer::page() const {
}
void WebViewer::displayMessage() {
setHtml(m_messageContents, QUrl::fromUserInput(INTERNAL_URL_MESSAGE));
setContent(m_messageContents.toUtf8(), "text/html", QUrl::fromUserInput(INTERNAL_URL_MESSAGE));
qDebugNN << LOGSEC_CORE
<< "Displaying contents:"
<< QUOTE_W_SPACE_DOT(m_messageContents);
//setHtml(m_messageContents, QUrl::fromUserInput(INTERNAL_URL_MESSAGE));
}
bool WebViewer::increaseWebPageZoom() {

View File

@ -364,65 +364,6 @@ void Application::restoreDatabaseSettings(bool restore_database, bool restore_se
}
}
void Application::parseCmdArgumentsFromOtherInstance(const QString& message) {
if (message.isEmpty()) {
qDebugNN << LOGSEC_CORE << "No execution message received from other app instances.";
return;
}
qDebugNN << LOGSEC_CORE
<< "Received"
<< QUOTE_W_SPACE(message)
<< "execution message.";
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, Qt::SplitBehaviorFlags::SkipEmptyParts);
#else
QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, QString::SplitBehavior::SkipEmptyParts);
#endif
QCommandLineParser cmd_parser;
messages.prepend(qApp->applicationFilePath());
cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_QUIT_INSTANCE));
cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_IS_RUNNING));
cmd_parser.addPositionalArgument("urls",
"List of URL addresses pointing to individual online feeds which should be added.",
"[url-1 ... url-n]");
cmd_parser.process(messages);
if (cmd_parser.isSet(CLI_QUIT_INSTANCE)) {
quit();
return;
}
else if (cmd_parser.isSet(CLI_IS_RUNNING)) {
showGuiMessage(APP_NAME, tr("Application is already running."), QSystemTrayIcon::MessageIcon::Information);
mainForm()->display();
}
messages = cmd_parser.positionalArguments();
for (const QString& msg : qAsConst(messages)) {
// Application was running, and someone wants to add new feed.
ServiceRoot* rt = boolinq::from(feedReader()->feedsModel()->serviceRoots()).firstOrDefault([](ServiceRoot* root) {
return root->supportsFeedAdding();
});
if (rt != nullptr) {
rt->addNewFeed(nullptr, msg);
}
else {
showGuiMessage(tr("Cannot add feed"),
tr("Feed cannot be added because there is no active account which can add feeds."),
QSystemTrayIcon::MessageIcon::Warning,
qApp->mainForm(),
true);
}
}
}
SystemTrayIcon* Application::trayIcon() {
if (m_trayIcon == nullptr) {
if (qApp->settings()->value(GROUP(GUI), SETTING(GUI::MonochromeTrayIcon)).toBool()) {
@ -611,7 +552,72 @@ void Application::determineFirstRuns() {
eliminateFirstRuns();
}
void Application::parseCmdArgumentsFromOtherInstance(const QString& message) {
if (message.isEmpty()) {
qDebugNN << LOGSEC_CORE << "No execution message received from other app instances.";
return;
}
qDebugNN << LOGSEC_CORE
<< "Received"
<< QUOTE_W_SPACE(message)
<< "execution message.";
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, Qt::SplitBehaviorFlags::SkipEmptyParts);
#else
QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, QString::SplitBehavior::SkipEmptyParts);
#endif
QCommandLineParser cmd_parser;
messages.prepend(qApp->applicationFilePath());
cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_QUIT_INSTANCE));
cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_IS_RUNNING));
cmd_parser.addPositionalArgument("urls",
"List of URL addresses pointing to individual online feeds which should be added.",
"[url-1 ... url-n]");
if (!cmd_parser.parse(messages)) {
qCriticalNN << LOGSEC_CORE << cmd_parser.errorText();
}
if (cmd_parser.isSet(CLI_QUIT_INSTANCE)) {
quit();
return;
}
else if (cmd_parser.isSet(CLI_IS_RUNNING)) {
showGuiMessage(APP_NAME, tr("Application is already running."), QSystemTrayIcon::MessageIcon::Information);
mainForm()->display();
}
messages = cmd_parser.positionalArguments();
for (const QString& msg : qAsConst(messages)) {
// Application was running, and someone wants to add new feed.
ServiceRoot* rt = boolinq::from(feedReader()->feedsModel()->serviceRoots()).firstOrDefault([](ServiceRoot* root) {
return root->supportsFeedAdding();
});
if (rt != nullptr) {
rt->addNewFeed(nullptr, msg);
}
else {
showGuiMessage(tr("Cannot add feed"),
tr("Feed cannot be added because there is no active account which can add feeds."),
QSystemTrayIcon::MessageIcon::Warning,
qApp->mainForm(),
true);
}
}
}
void Application::parseCmdArgumentsFromMyInstance() {
QCommandLineOption help(QStringList() << CLI_HELP_SHORT << CLI_HELP_LONG,
"Displays overview of CLI.");
QCommandLineOption version(QStringList() << CLI_VER_SHORT << CLI_VER_LONG,
"Displays version of the application.");
QCommandLineOption log_file(QStringList() << CLI_LOG_SHORT << CLI_LOG_LONG,
"Write application debug log to file. Note that logging to file may slow application down.",
"log-file");
@ -623,14 +629,15 @@ void Application::parseCmdArgumentsFromMyInstance() {
QCommandLineOption disable_debug(QStringList() << CLI_NDEBUG_SHORT << CLI_NDEBUG_LONG,
"Completely disable stdout/stderr outputs.");
m_cmdParser.addOptions({ log_file, custom_data_folder, disable_singleinstance, disable_debug });
m_cmdParser.addHelpOption();
m_cmdParser.addVersionOption();
m_cmdParser.addOptions({ help, version, log_file, custom_data_folder, disable_singleinstance, disable_debug });
m_cmdParser.addPositionalArgument("urls",
"List of URL addresses pointing to individual online feeds which should be added.",
"[url-1 ... url-n]");
m_cmdParser.setApplicationDescription(APP_NAME);
m_cmdParser.process(QCoreApplication::arguments());
if (!m_cmdParser.parse(QCoreApplication::arguments())) {
qCriticalNN << LOGSEC_CORE << m_cmdParser.errorText();
}
s_customLogFile = m_cmdParser.value(CLI_LOG_SHORT);
@ -647,6 +654,13 @@ void Application::parseCmdArgumentsFromMyInstance() {
m_allowMultipleInstances = false;
}
if (m_cmdParser.isSet(CLI_HELP_SHORT)) {
m_cmdParser.showHelp();
}
else if (m_cmdParser.isSet(CLI_VER_SHORT)) {
m_cmdParser.showVersion();
}
if (m_cmdParser.isSet(CLI_SIN_SHORT)) {
m_allowMultipleInstances = true;
qDebugNN << LOGSEC_CORE << "Explicitly allowing this instance to run.";