/******************************************************************************* ** ** smolbote: yet another qute browser ** Copyright (C) 2017 Xian Nox ** ** 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 . ** ******************************************************************************/ #include #include "browser.h" #include "mainwindow.h" #include #include /** * @brief printPoiToml Print the built-in config * @param output std::ostream to print to */ void printPoiToml(std::ostream &output) { QFile conf(":/poi.toml"); if(conf.open(QIODevice::ReadOnly)) { output << conf.readAll().toStdString() << std::endl; conf.close(); } } const QHash parseCommandLine(QApplication &app) { QCommandLineParser parser; parser.setApplicationDescription("yet another Qt browser"); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption configOption(QStringList() << "c" << "config", "Set configuration file.", "PATH"); parser.addOption(configOption); QCommandLineOption defaultConfigOption(QStringList() << "print-defaults", "Print default configuration."); parser.addOption(defaultConfigOption); QCommandLineOption profileOption(QStringList() << "p" << "profile", "Use this profile.", "PROFILE"); parser.addOption(profileOption); //QCommandLineOption nopluginsOption(QStringList() << "n" << "no-plugins", "Don't load plugins"); //parser.addOption(nopluginsOption); QCommandLineOption newInstanceOption(QStringList() << "new-instance", "Skip instance check at startup"); parser.addOption(newInstanceOption); QCommandLineOption newWindowOption(QStringList() << "in-new-window", "Open URL in new window"); parser.addOption(newWindowOption); QCommandLineOption newTabOption(QStringList() << "in-new-tab", "Open URL in new tab"); parser.addOption(newTabOption); parser.addPositionalArgument("URL", "URL(s) to open"); parser.process(app); QHash options; if(parser.isSet(configOption)) { options.insert("config", parser.value(configOption)); } if(parser.isSet(defaultConfigOption)) { options.insert("print-defaults", true); } if(parser.isSet(profileOption)) { options.insert("profile", parser.value(profileOption)); } if(parser.isSet(newInstanceOption)) { options.insert("new-instance", true); } if(parser.isSet(newWindowOption)) { options.insert("in-new-window", true); } if(parser.isSet(newTabOption)) { options.insert("in-new-tab", true); } options.insert("urls", parser.positionalArguments()); return options; } int main(int argc, char *argv[]) { // Create application object Browser app(argc, argv); // program init { // parse command line options const QHash options = parseCommandLine(app); // Check for another instance unless specified not to if(!options.contains("new-instance")) { app.bindLocalSocket(); if(app.isRunning()) { qDebug("Another instance is running, returning..."); app.sendMessage(options); return 0; } } if(options.contains("print-defaults")) { printPoiToml(std::cout); return 0; } app.setWindowIcon(QIcon(QLatin1String(":/icon.svg"))); // This lets the web view automatically scale on high-dpi displays. app.setAttribute(Qt::AA_EnableHighDpiScaling); // Set configuration app.loadSettings(options.value("config", "").toString()); // Load profiles app.loadProfiles(); // Load plugins // if(!parser.isSet(nopluginsOption)) { // app.loadPlugins(); // } app.createWindow(options); } return app.exec(); }