aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-12-22 23:00:45 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2017-12-22 23:00:45 +0100
commit3ace62f90d48015fec1bd37ad216466fb666061d (patch)
treeac64ca02db0e046a781d79dc83758311f4dadf90 /src/main.cpp
parentEdited documentation (diff)
downloadsmolbote-3ace62f90d48015fec1bd37ad216466fb666061d.tar.xz
Single instance check works again
- In Debug builds, startup time is calculated
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp52
1 files changed, 34 insertions, 18 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 7433cc8..e8307c6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -15,6 +15,11 @@
#include <QStandardPaths>
#include "mainwindow.h"
+// startup time measuring
+#ifdef QT_DEBUG
+#include <QElapsedTimer>
+#endif
+
// read config into std::string, supports qrc
inline std::string readConfig(QString path)
{
@@ -60,6 +65,11 @@ int main(int argc, char *argv[])
instance.setApplicationVersion("1.0.0");
#endif
+#ifdef QT_DEBUG
+ QElapsedTimer timer;
+ timer.start();
+#endif
+
QCommandLineParser parser;
parser.setApplicationDescription("yet another Qt browser");
parser.addHelpOption();
@@ -87,15 +97,13 @@ int main(int argc, char *argv[])
profileOption.setDefaultValue("");
parser.addOption(profileOption);
- QCommandLineOption newInstanceOption("new-instance", "Skip instance check at startup");
- parser.addOption(newInstanceOption);
+ QCommandLineOption socketOption("socket", "Set socket to use for IPC, leave blank for default, 'none' to disable.", "name");
+ socketOption.setDefaultValue("");
+ parser.addOption(socketOption);
QCommandLineOption newWindowOption("in-new-window", "Open URL in new window");
parser.addOption(newWindowOption);
- QCommandLineOption newTabOption("in-new-tab", "Open URL in new tab");
- parser.addOption(newTabOption);
-
parser.addPositionalArgument("URL", "URL(s) to open");
parser.process(instance);
@@ -111,7 +119,24 @@ int main(int argc, char *argv[])
return 0;
}
+ Browser::SessionParam sessionParams;
+ sessionParams.profile = parser.value(profileOption);
+ sessionParams.newWindow = parser.isSet(newWindowOption);
+ for(const QString &url : parser.positionalArguments()) {
+ sessionParams.urls.append(QUrl::fromUserInput(url));
+ }
+
// TODO: check for other instances
+ // if we socket hasn't been disabled (socket is not none)
+ if(parser.value(socketOption) != "none") {
+ bool bindOk = instance.bindLocalSocket(parser.value(socketOption));
+ if(bindOk) {
+ qDebug("Connected to local socket: %s", qUtf8Printable(instance.serverName()));
+ } else {
+ // pass arguments to new instance
+ return instance.sendMessage(sessionParams);
+ }
+ }
std::shared_ptr<Configuration> config = std::make_shared<Configuration>();
config->readDefaultConfiguration(readConfig(parser.value(defaultConfigOption)));
@@ -148,19 +173,10 @@ int main(int argc, char *argv[])
instance.setConfiguration(config);
instance.loadProfiles();
- MainWindow* mainWindow = instance.createWindow();
- if(parser.isSet(profileOption)) {
- mainWindow->setProfile(instance.profile(parser.value(profileOption)));
- }
-
- if(parser.positionalArguments().isEmpty()) {
- // no URLs were given
- mainWindow->newTab(QUrl::fromUserInput(config->value<std::string>("profile.homepage").value().c_str()));
- } else {
- for(const QString &url : parser.positionalArguments()) {
- mainWindow->newTab(QUrl::fromUserInput(url));
- }
- }
+ instance.createSession(sessionParams);
+#ifdef QT_DEBUG
+ qDebug("Startup complete in %lldms", timer.elapsed());
+#endif
return instance.exec();
}