From 77a27e730b2e8baed2a8b954e4da5bb162d9d824 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 4 Jun 2017 13:06:28 +0200 Subject: Browser class refactoring --- src/browser.cpp | 129 +++++++++++++++++++++++++------------------------------- 1 file changed, 57 insertions(+), 72 deletions(-) (limited to 'src/browser.cpp') diff --git a/src/browser.cpp b/src/browser.cpp index f95d01a..ce36123 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -28,10 +28,9 @@ #include "interfaces.h" Browser::Browser(int &argc, char *argv[]) : - QApplication(argc, argv) + SingleApplication(argc, argv) { m_settings = nullptr; - m_localServer = nullptr; m_networkAccessManager = nullptr; m_urlRequestInterceptor = nullptr; @@ -40,6 +39,13 @@ Browser::Browser(int &argc, char *argv[]) : m_blocklistManager = nullptr; m_plugin = nullptr; + + setApplicationName("smolbote"); +#ifdef GIT_VERSION + setApplicationVersion(GIT_VERSION); +#else + setApplicationVersion("1.0.0"); +#endif } Browser::~Browser() @@ -69,51 +75,8 @@ QString Browser::applicationLongVersion() const #endif } -bool Browser::prepare(QStringList urls) +void Browser::loadPlugins() { - if(m_settings->value("browser.singleInstance", true).toBool()) { - QString serverName = m_settings->value("browser.localSocket", "smolbote-singlelock").toString(); - - // Check for other running instance - QLocalSocket socket; - socket.connectToServer(serverName); - if(socket.waitForConnected(500)) { - QTextStream stream(&socket); - stream << urls.join('|'); - stream.flush(); - socket.waitForBytesWritten(); - return false; - } - - // There is no other instance - m_localServer = new QLocalServer(this); - connect(m_localServer, SIGNAL(newConnection()), this, SLOT(handleNewConnection())); - if (!m_localServer->listen(serverName) && m_localServer->serverError() == QAbstractSocket::AddressInUseError) { - // Could not create local server because the socket is already in use - QLocalServer::removeServer(serverName); - if (!m_localServer->listen(serverName)) { - // Couldn't free the socket - qWarning("Could not create local socket %s.", qPrintable(serverName)); - } - } else { - qDebug("Created local socket."); - } - } - - if(m_settings->isEmpty()) { - // There are no keys in the settings - QMessageBox::information(0, - tr("Configuration is empty"), - tr("The configuration file %1 is empty. Using default values").arg(m_settings->filePath())); - } - - m_networkAccessManager = new QNetworkAccessManager(); - m_bookmarksManager = new BookmarksWidget; - m_downloadManager = new DownloadsWidget; - m_blocklistManager = new BlockerManager; - - QtWebEngine::initialize(); - // Loading plugins qDebug(">> Looking for plugins..."); @@ -139,12 +102,13 @@ bool Browser::prepare(QStringList urls) } qDebug("<< Plugins end..."); +} +void Browser::loadProfiles() +{ // TODO properly profile(""); profile("Default"); - - return true; } Browser *Browser::instance() @@ -159,21 +123,33 @@ Settings *Browser::settings() QNetworkAccessManager *Browser::network() { + if(!m_networkAccessManager) { + m_networkAccessManager = new QNetworkAccessManager(); + } return m_networkAccessManager; } BookmarksWidget *Browser::bookmarks() { + if(!m_bookmarksManager) { + m_bookmarksManager = new BookmarksWidget(); + } return m_bookmarksManager; } DownloadsWidget *Browser::downloads() { + if(!m_downloadManager) { + m_downloadManager = new DownloadsWidget(); + } return m_downloadManager; } BlockerManager *Browser::blocklists() { + if(!m_blocklistManager) { + m_blocklistManager = new BlockerManager(); + } return m_blocklistManager; } @@ -203,6 +179,21 @@ void Browser::setConfigPath(const QString &path) else { m_settings = new Settings(); } + + if(m_settings->isEmpty()) { + // There are no keys in the settings + QMessageBox::information(0, + tr("Configuration is empty"), + tr("The configuration file %1 is empty. Using default values").arg(m_settings->filePath())); + } +} + +MainWindow *Browser::mainWindow() +{ + if(m_windows.isEmpty()) { + addWindow(new MainWindow()); + } + return m_windows.first(); } void Browser::addWindow(MainWindow *window) @@ -219,12 +210,24 @@ void Browser::addWindow(MainWindow *window) window->show(); } -MainWindow *Browser::mainWindow() +void Browser::addWindow(const QStringList params) { - if(m_windows.isEmpty()) { - addWindow(new MainWindow()); + QString p; // get default profile + QStringList urls; + + for(int i = 0; i < params.length(); i++) { + if(params.at(i) == "-p" || params.at(i) == "--profile") { + i++; + p = params.at(i); + } else if(!params.at(i).startsWith('-')) { + urls.append(params.at(i)); + } } - return m_windows.first(); + + MainWindow *w = new MainWindow(urls); + w->setProfile(profile(p)); + + addWindow(w); } void Browser::removeWindow(MainWindow *window) @@ -244,7 +247,7 @@ WebEngineProfile* Browser::profile(const QString name) if(!m_urlRequestInterceptor) { m_urlRequestInterceptor = new UrlRequestInterceptor(this); - m_urlRequestInterceptor->setSubscription(m_blocklistManager); + m_urlRequestInterceptor->setSubscription(blocklists()); } m_profiles[name]->setRequestInterceptor(m_urlRequestInterceptor); @@ -264,25 +267,7 @@ QStringList Browser::profiles() return l; } -QObject *Browser::plugin() +QObject *Browser::plugin(const QString name) { return m_plugin; } - -void Browser::handleNewConnection() -{ - QLocalSocket *socket = m_localServer->nextPendingConnection(); - if(!socket) { - // null socket -> return - return; - } - - socket->waitForReadyRead(); - const QStringList urls = QString(socket->readAll()).split('|'); - delete socket; - - QStringList::const_iterator i; - for(i = urls.constBegin(); i != urls.constEnd(); ++i) { - mainWindow()->newTab(QUrl::fromUserInput(*i)); - } -} -- cgit v1.2.1