1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-23 02:32:10 +02:00
falkonOfficial/src/lib/app/commandlineoptions.cpp
2017-08-25 17:32:32 +02:00

206 lines
6.8 KiB
C++

/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2016 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "commandlineoptions.h"
#include <QFileInfo>
#include <QCoreApplication>
#include <QCommandLineParser>
#include <iostream>
CommandLineOptions::CommandLineOptions()
{
parseActions();
}
CommandLineOptions::ActionPairList CommandLineOptions::getActions()
{
return m_actions;
}
void CommandLineOptions::parseActions()
{
// Options
QCommandLineOption authorsOption(QStringList({QSL("a"), QSL("authors")}));
authorsOption.setDescription(QSL("Displays author information."));
QCommandLineOption profileOption(QStringList({QSL("p"), QSL("profile")}));
profileOption.setValueName(QSL("profileName"));
profileOption.setDescription(QSL("Starts with specified profile."));
QCommandLineOption noExtensionsOption(QStringList({QSL("e"), QSL("no-extensions")}));
noExtensionsOption.setDescription(QSL("Starts without extensions."));
QCommandLineOption privateBrowsingOption(QStringList({QSL("i"), QSL("private-browsing")}));
privateBrowsingOption.setDescription(QSL("Starts private browsing."));
QCommandLineOption portableOption(QStringList({QSL("o"), QSL("portable")}));
portableOption.setDescription(QSL("Starts in portable mode."));
QCommandLineOption noRemoteOption(QStringList({QSL("r"), QSL("no-remote")}));
noRemoteOption.setDescription(QSL("Starts new browser instance."));
QCommandLineOption newTabOption(QStringList({QSL("t"), QSL("new-tab")}));
newTabOption.setDescription(QSL("Opens new tab."));
QCommandLineOption newWindowOption(QStringList({QSL("w"), QSL("new-window")}));
newWindowOption.setDescription(QSL("Opens new window."));
QCommandLineOption downloadManagerOption(QStringList({QSL("d"), QSL("download-manager")}));
downloadManagerOption.setDescription(QSL("Opens download manager."));
QCommandLineOption currentTabOption(QStringList({QSL("c"), QSL("current-tab")}));
currentTabOption.setValueName(QSL("URL"));
currentTabOption.setDescription(QSL("Opens URL in current tab."));
QCommandLineOption openWindowOption(QStringList({QSL("u"), QSL("open-window")}));
openWindowOption.setValueName(QSL("URL"));
openWindowOption.setDescription(QSL("Opens URL in new window."));
QCommandLineOption fullscreenOption(QStringList({QSL("f"), QSL("fullscreen")}));
fullscreenOption.setDescription(QSL("Toggles fullscreen."));
// Parser
QCommandLineParser parser;
parser.setApplicationDescription(QSL("QtWebEngine based browser"));
QCommandLineOption helpOption = parser.addHelpOption();
QCommandLineOption versionOption = parser.addVersionOption();
parser.addOption(authorsOption);
parser.addOption(profileOption);
parser.addOption(noExtensionsOption);
parser.addOption(privateBrowsingOption);
parser.addOption(portableOption);
parser.addOption(noRemoteOption);
parser.addOption(newTabOption);
parser.addOption(newWindowOption);
parser.addOption(downloadManagerOption);
parser.addOption(currentTabOption);
parser.addOption(openWindowOption);
parser.addOption(fullscreenOption);
parser.addPositionalArgument(QSL("URL"), QSL("URLs to open"), QSL("[URL...]"));
// parse() and not process() so we can pass arbitrary options to Chromium
parser.parse(QCoreApplication::arguments());
if (parser.isSet(helpOption)) {
parser.showHelp();
}
if (parser.isSet(versionOption)) {
parser.showVersion();
}
if (parser.isSet(authorsOption)) {
std::cout << "David Rosca <nowrep@gmail.com>" << std::endl;
ActionPair pair;
pair.action = Qz::CL_ExitAction;
m_actions.append(pair);
return;
}
if (parser.isSet(profileOption)) {
const QString profileName = parser.value(profileOption);
std::cout << "Falkon: Starting with profile '" << profileName.toUtf8().data() << "'" << std::endl;
ActionPair pair;
pair.action = Qz::CL_StartWithProfile;
pair.text = profileName;
m_actions.append(pair);
}
if (parser.isSet(noExtensionsOption)) {
ActionPair pair;
pair.action = Qz::CL_StartWithoutAddons;
m_actions.append(pair);
}
if (parser.isSet(privateBrowsingOption)) {
ActionPair pair;
pair.action = Qz::CL_StartPrivateBrowsing;
m_actions.append(pair);
}
if (parser.isSet(portableOption)) {
ActionPair pair;
pair.action = Qz::CL_StartPortable;
m_actions.append(pair);
}
if (parser.isSet(noRemoteOption)) {
ActionPair pair;
pair.action = Qz::CL_StartNewInstance;
m_actions.append(pair);
}
if (parser.isSet(newTabOption)) {
ActionPair pair;
pair.action = Qz::CL_NewTab;
m_actions.append(pair);
}
if (parser.isSet(newWindowOption)) {
ActionPair pair;
pair.action = Qz::CL_NewWindow;
m_actions.append(pair);
}
if (parser.isSet(downloadManagerOption)) {
ActionPair pair;
pair.action = Qz::CL_ShowDownloadManager;
m_actions.append(pair);
}
if (parser.isSet(currentTabOption)) {
ActionPair pair;
pair.action = Qz::CL_OpenUrlInCurrentTab;
pair.text = parser.value(currentTabOption);
m_actions.append(pair);
}
if (parser.isSet(openWindowOption)) {
ActionPair pair;
pair.action = Qz::CL_OpenUrlInNewWindow;
pair.text = parser.value(openWindowOption);
m_actions.append(pair);
}
if (parser.isSet(fullscreenOption)) {
ActionPair pair;
pair.action = Qz::CL_ToggleFullScreen;
m_actions.append(pair);
}
if (parser.positionalArguments().isEmpty())
return;
QString url = parser.positionalArguments().last();
QFileInfo fileInfo(url);
if (fileInfo.exists()) {
url = fileInfo.absoluteFilePath();
}
if (!url.isEmpty() && !url.startsWith(QLatin1Char('-'))) {
ActionPair pair;
pair.action = Qz::CL_OpenUrl;
pair.text = url;
m_actions.append(pair);
}
}