diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 52 |
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(); } |