Falkon Develop
Cross-platform Qt-based web browser
commandlineoptions.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2010-2016 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "commandlineoptions.h"
19
20#include <QFileInfo>
21#include <QCoreApplication>
22#include <QCommandLineParser>
23
24#include <iostream>
25
27{
28 parseActions();
29}
30
32{
33 return m_actions;
34}
35
36void CommandLineOptions::parseActions()
37{
38 // Options
39 QCommandLineOption authorsOption(QStringList({QSL("a"), QSL("authors")}));
40 authorsOption.setDescription(QSL("Displays author information."));
41
42 QCommandLineOption profileOption(QStringList({QSL("p"), QSL("profile")}));
43 profileOption.setValueName(QSL("profileName"));
44 profileOption.setDescription(QSL("Starts with specified profile."));
45
46 QCommandLineOption noExtensionsOption(QStringList({QSL("e"), QSL("no-extensions")}));
47 noExtensionsOption.setDescription(QSL("Starts without extensions."));
48
49 QCommandLineOption privateBrowsingOption(QStringList({QSL("i"), QSL("private-browsing")}));
50 privateBrowsingOption.setDescription(QSL("Starts private browsing."));
51
52 QCommandLineOption portableOption(QStringList({QSL("o"), QSL("portable")}));
53 portableOption.setDescription(QSL("Starts in portable mode."));
54
55 QCommandLineOption noRemoteOption(QStringList({QSL("r"), QSL("no-remote")}));
56 noRemoteOption.setDescription(QSL("Starts new browser instance."));
57
58 QCommandLineOption newTabOption(QStringList({QSL("t"), QSL("new-tab")}));
59 newTabOption.setDescription(QSL("Opens new tab."));
60
61 QCommandLineOption newWindowOption(QStringList({QSL("w"), QSL("new-window")}));
62 newWindowOption.setDescription(QSL("Opens new window."));
63
64 QCommandLineOption downloadManagerOption(QStringList({QSL("d"), QSL("download-manager")}));
65 downloadManagerOption.setDescription(QSL("Opens download manager."));
66
67 QCommandLineOption currentTabOption(QStringList({QSL("c"), QSL("current-tab")}));
68 currentTabOption.setValueName(QSL("URL"));
69 currentTabOption.setDescription(QSL("Opens URL in current tab."));
70
71 QCommandLineOption openWindowOption(QStringList({QSL("u"), QSL("open-window")}));
72 openWindowOption.setValueName(QSL("URL"));
73 openWindowOption.setDescription(QSL("Opens URL in new window."));
74
75 QCommandLineOption fullscreenOption(QStringList({QSL("f"), QSL("fullscreen")}));
76 fullscreenOption.setDescription(QSL("Toggles fullscreen."));
77
78 QCommandLineOption wmclassOption(QStringList({QSL("wmclass")}));
79 wmclassOption.setValueName(QSL("WM_CLASS"));
80 wmclassOption.setDescription(QSL("Application class (X11 only)."));
81
82 // Parser
83 QCommandLineParser parser;
84 parser.setApplicationDescription(QSL("QtWebEngine based browser"));
85 QCommandLineOption helpOption = parser.addHelpOption();
86 QCommandLineOption versionOption = parser.addVersionOption();
87 parser.addOption(authorsOption);
88 parser.addOption(profileOption);
89 parser.addOption(noExtensionsOption);
90 parser.addOption(privateBrowsingOption);
91 parser.addOption(portableOption);
92 parser.addOption(noRemoteOption);
93 parser.addOption(newTabOption);
94 parser.addOption(newWindowOption);
95 parser.addOption(downloadManagerOption);
96 parser.addOption(currentTabOption);
97 parser.addOption(openWindowOption);
98 parser.addOption(fullscreenOption);
99 parser.addOption(wmclassOption);
100 parser.addPositionalArgument(QSL("URL"), QSL("URLs to open"), QSL("[URL...]"));
101
102 // parse() and not process() so we can pass arbitrary options to Chromium
103 parser.parse(QCoreApplication::arguments());
104
105 if (parser.isSet(helpOption)) {
106 parser.showHelp();
107 }
108
109 if (parser.isSet(QSL("help-all"))) {
110 parser.process({QSL("falkon"), QSL("--help-all")});
111 }
112
113 if (parser.isSet(versionOption)) {
114 parser.showVersion();
115 }
116
117 if (parser.isSet(authorsOption)) {
118 std::cout << "David Rosca <nowrep@gmail.com>" << std::endl;
119
120 ActionPair pair;
121 pair.action = Qz::CL_ExitAction;
122 m_actions.append(pair);
123 return;
124 }
125
126 if (parser.isSet(profileOption)) {
127 const QString profileName = parser.value(profileOption);
128 std::cout << "Falkon: Starting with profile '" << profileName.toUtf8().data() << "'" << std::endl;
129
130 ActionPair pair;
131 pair.action = Qz::CL_StartWithProfile;
132 pair.text = profileName;
133 m_actions.append(pair);
134 }
135
136 if (parser.isSet(noExtensionsOption)) {
137 ActionPair pair;
138 pair.action = Qz::CL_StartWithoutAddons;
139 m_actions.append(pair);
140 }
141
142 if (parser.isSet(privateBrowsingOption)) {
143 ActionPair pair;
144 pair.action = Qz::CL_StartPrivateBrowsing;
145 m_actions.append(pair);
146 }
147
148 if (parser.isSet(portableOption)) {
149 ActionPair pair;
150 pair.action = Qz::CL_StartPortable;
151 m_actions.append(pair);
152 }
153
154 if (parser.isSet(noRemoteOption)) {
155 ActionPair pair;
156 pair.action = Qz::CL_StartNewInstance;
157 m_actions.append(pair);
158 }
159
160 if (parser.isSet(newTabOption)) {
161 ActionPair pair;
162 pair.action = Qz::CL_NewTab;
163 m_actions.append(pair);
164 }
165
166 if (parser.isSet(newWindowOption)) {
167 ActionPair pair;
168 pair.action = Qz::CL_NewWindow;
169 m_actions.append(pair);
170 }
171
172 if (parser.isSet(downloadManagerOption)) {
173 ActionPair pair;
174 pair.action = Qz::CL_ShowDownloadManager;
175 m_actions.append(pair);
176 }
177
178 if (parser.isSet(currentTabOption)) {
179 ActionPair pair;
180 pair.action = Qz::CL_OpenUrlInCurrentTab;
181 pair.text = parser.value(currentTabOption);
182 m_actions.append(pair);
183 }
184
185 if (parser.isSet(openWindowOption)) {
186 ActionPair pair;
187 pair.action = Qz::CL_OpenUrlInNewWindow;
188 pair.text = parser.value(openWindowOption);
189 m_actions.append(pair);
190 }
191
192 if (parser.isSet(fullscreenOption)) {
193 ActionPair pair;
194 pair.action = Qz::CL_ToggleFullScreen;
195 m_actions.append(pair);
196 }
197
198 if (parser.isSet(wmclassOption)) {
199 ActionPair pair;
200 pair.action = Qz::CL_WMClass;
201 pair.text = parser.value(wmclassOption);
202 m_actions.append(pair);
203 }
204
205 if (parser.positionalArguments().isEmpty())
206 return;
207
208 QString url = parser.positionalArguments().constLast();
209 QFileInfo fileInfo(url);
210
211 if (fileInfo.exists()) {
212 url = fileInfo.absoluteFilePath();
213 }
214
215 if (!url.isEmpty() && !url.startsWith(QLatin1Char('-'))) {
216 ActionPair pair;
217 pair.action = Qz::CL_OpenUrl;
218 pair.text = url;
219 m_actions.append(pair);
220 }
221}
ActionPairList getActions()
QVector< ActionPair > ActionPairList
@ CL_OpenUrl
Definition: qzcommon.h:73
@ CL_WMClass
Definition: qzcommon.h:86
@ CL_ToggleFullScreen
Definition: qzcommon.h:81
@ CL_OpenUrlInNewWindow
Definition: qzcommon.h:75
@ CL_StartNewInstance
Definition: qzcommon.h:83
@ CL_OpenUrlInCurrentTab
Definition: qzcommon.h:74
@ CL_NewWindow
Definition: qzcommon.h:79
@ CL_NewTab
Definition: qzcommon.h:78
@ CL_ShowDownloadManager
Definition: qzcommon.h:80
@ CL_StartWithProfile
Definition: qzcommon.h:76
@ CL_StartPrivateBrowsing
Definition: qzcommon.h:82
@ CL_ExitAction
Definition: qzcommon.h:85
@ CL_StartPortable
Definition: qzcommon.h:84
@ CL_StartWithoutAddons
Definition: qzcommon.h:77
#define QSL(x)
Definition: qzcommon.h:40