File indexing completed on 2024-05-19 04:58:35
0001 /* ============================================================ 0002 * Falkon - Qt web browser 0003 * Copyright (C) 2010-2016 David Rosca <nowrep@gmail.com> 0004 * 0005 * This program is free software: you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation, either version 3 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0017 * ============================================================ */ 0018 #include "commandlineoptions.h" 0019 0020 #include <QFileInfo> 0021 #include <QCoreApplication> 0022 #include <QCommandLineParser> 0023 0024 #include <iostream> 0025 0026 CommandLineOptions::CommandLineOptions() 0027 { 0028 parseActions(); 0029 } 0030 0031 CommandLineOptions::ActionPairList CommandLineOptions::getActions() 0032 { 0033 return m_actions; 0034 } 0035 0036 void CommandLineOptions::parseActions() 0037 { 0038 // Options 0039 QCommandLineOption authorsOption(QStringList({QSL("a"), QSL("authors")})); 0040 authorsOption.setDescription(QSL("Displays author information.")); 0041 0042 QCommandLineOption profileOption(QStringList({QSL("p"), QSL("profile")})); 0043 profileOption.setValueName(QSL("profileName")); 0044 profileOption.setDescription(QSL("Starts with specified profile.")); 0045 0046 QCommandLineOption noExtensionsOption(QStringList({QSL("e"), QSL("no-extensions")})); 0047 noExtensionsOption.setDescription(QSL("Starts without extensions.")); 0048 0049 QCommandLineOption privateBrowsingOption(QStringList({QSL("i"), QSL("private-browsing")})); 0050 privateBrowsingOption.setDescription(QSL("Starts private browsing.")); 0051 0052 QCommandLineOption portableOption(QStringList({QSL("o"), QSL("portable")})); 0053 portableOption.setDescription(QSL("Starts in portable mode.")); 0054 0055 QCommandLineOption noRemoteOption(QStringList({QSL("r"), QSL("no-remote")})); 0056 noRemoteOption.setDescription(QSL("Starts new browser instance.")); 0057 0058 QCommandLineOption newTabOption(QStringList({QSL("t"), QSL("new-tab")})); 0059 newTabOption.setDescription(QSL("Opens new tab.")); 0060 0061 QCommandLineOption newWindowOption(QStringList({QSL("w"), QSL("new-window")})); 0062 newWindowOption.setDescription(QSL("Opens new window.")); 0063 0064 QCommandLineOption downloadManagerOption(QStringList({QSL("d"), QSL("download-manager")})); 0065 downloadManagerOption.setDescription(QSL("Opens download manager.")); 0066 0067 QCommandLineOption currentTabOption(QStringList({QSL("c"), QSL("current-tab")})); 0068 currentTabOption.setValueName(QSL("URL")); 0069 currentTabOption.setDescription(QSL("Opens URL in current tab.")); 0070 0071 QCommandLineOption openWindowOption(QStringList({QSL("u"), QSL("open-window")})); 0072 openWindowOption.setValueName(QSL("URL")); 0073 openWindowOption.setDescription(QSL("Opens URL in new window.")); 0074 0075 QCommandLineOption fullscreenOption(QStringList({QSL("f"), QSL("fullscreen")})); 0076 fullscreenOption.setDescription(QSL("Toggles fullscreen.")); 0077 0078 QCommandLineOption wmclassOption(QStringList({QSL("wmclass")})); 0079 wmclassOption.setValueName(QSL("WM_CLASS")); 0080 wmclassOption.setDescription(QSL("Application class (X11 only).")); 0081 0082 // Parser 0083 QCommandLineParser parser; 0084 parser.setApplicationDescription(QSL("QtWebEngine based browser")); 0085 QCommandLineOption helpOption = parser.addHelpOption(); 0086 QCommandLineOption versionOption = parser.addVersionOption(); 0087 parser.addOption(authorsOption); 0088 parser.addOption(profileOption); 0089 parser.addOption(noExtensionsOption); 0090 parser.addOption(privateBrowsingOption); 0091 parser.addOption(portableOption); 0092 parser.addOption(noRemoteOption); 0093 parser.addOption(newTabOption); 0094 parser.addOption(newWindowOption); 0095 parser.addOption(downloadManagerOption); 0096 parser.addOption(currentTabOption); 0097 parser.addOption(openWindowOption); 0098 parser.addOption(fullscreenOption); 0099 parser.addOption(wmclassOption); 0100 parser.addPositionalArgument(QSL("URL"), QSL("URLs to open"), QSL("[URL...]")); 0101 0102 // parse() and not process() so we can pass arbitrary options to Chromium 0103 parser.parse(QCoreApplication::arguments()); 0104 0105 if (parser.isSet(helpOption)) { 0106 parser.showHelp(); 0107 } 0108 0109 if (parser.isSet(QSL("help-all"))) { 0110 parser.process({QSL("falkon"), QSL("--help-all")}); 0111 } 0112 0113 if (parser.isSet(versionOption)) { 0114 parser.showVersion(); 0115 } 0116 0117 if (parser.isSet(authorsOption)) { 0118 std::cout << "David Rosca <nowrep@gmail.com>" << std::endl; 0119 0120 ActionPair pair; 0121 pair.action = Qz::CL_ExitAction; 0122 m_actions.append(pair); 0123 return; 0124 } 0125 0126 if (parser.isSet(profileOption)) { 0127 const QString profileName = parser.value(profileOption); 0128 std::cout << "Falkon: Starting with profile '" << profileName.toUtf8().data() << "'" << std::endl; 0129 0130 ActionPair pair; 0131 pair.action = Qz::CL_StartWithProfile; 0132 pair.text = profileName; 0133 m_actions.append(pair); 0134 } 0135 0136 if (parser.isSet(noExtensionsOption)) { 0137 ActionPair pair; 0138 pair.action = Qz::CL_StartWithoutAddons; 0139 m_actions.append(pair); 0140 } 0141 0142 if (parser.isSet(privateBrowsingOption)) { 0143 ActionPair pair; 0144 pair.action = Qz::CL_StartPrivateBrowsing; 0145 m_actions.append(pair); 0146 } 0147 0148 if (parser.isSet(portableOption)) { 0149 ActionPair pair; 0150 pair.action = Qz::CL_StartPortable; 0151 m_actions.append(pair); 0152 } 0153 0154 if (parser.isSet(noRemoteOption)) { 0155 ActionPair pair; 0156 pair.action = Qz::CL_StartNewInstance; 0157 m_actions.append(pair); 0158 } 0159 0160 if (parser.isSet(newTabOption)) { 0161 ActionPair pair; 0162 pair.action = Qz::CL_NewTab; 0163 m_actions.append(pair); 0164 } 0165 0166 if (parser.isSet(newWindowOption)) { 0167 ActionPair pair; 0168 pair.action = Qz::CL_NewWindow; 0169 m_actions.append(pair); 0170 } 0171 0172 if (parser.isSet(downloadManagerOption)) { 0173 ActionPair pair; 0174 pair.action = Qz::CL_ShowDownloadManager; 0175 m_actions.append(pair); 0176 } 0177 0178 if (parser.isSet(currentTabOption)) { 0179 ActionPair pair; 0180 pair.action = Qz::CL_OpenUrlInCurrentTab; 0181 pair.text = parser.value(currentTabOption); 0182 m_actions.append(pair); 0183 } 0184 0185 if (parser.isSet(openWindowOption)) { 0186 ActionPair pair; 0187 pair.action = Qz::CL_OpenUrlInNewWindow; 0188 pair.text = parser.value(openWindowOption); 0189 m_actions.append(pair); 0190 } 0191 0192 if (parser.isSet(fullscreenOption)) { 0193 ActionPair pair; 0194 pair.action = Qz::CL_ToggleFullScreen; 0195 m_actions.append(pair); 0196 } 0197 0198 if (parser.isSet(wmclassOption)) { 0199 ActionPair pair; 0200 pair.action = Qz::CL_WMClass; 0201 pair.text = parser.value(wmclassOption); 0202 m_actions.append(pair); 0203 } 0204 0205 if (parser.positionalArguments().isEmpty()) 0206 return; 0207 0208 QString url = parser.positionalArguments().constLast(); 0209 QFileInfo fileInfo(url); 0210 0211 if (fileInfo.exists()) { 0212 url = fileInfo.absoluteFilePath(); 0213 } 0214 0215 if (!url.isEmpty() && !url.startsWith(QLatin1Char('-'))) { 0216 ActionPair pair; 0217 pair.action = Qz::CL_OpenUrl; 0218 pair.text = url; 0219 m_actions.append(pair); 0220 } 0221 }