aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-06-04 13:06:28 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2017-06-04 13:06:28 +0200
commit77a27e730b2e8baed2a8b954e4da5bb162d9d824 (patch)
treeae3f3b5e95df4d6eeb70cccbd6ac7ea5fe4240cf /src/browser.cpp
parentAdding plugin action to the menu bar (diff)
downloadsmolbote-77a27e730b2e8baed2a8b954e4da5bb162d9d824.tar.xz
Browser class refactoring
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp129
1 files changed, 57 insertions, 72 deletions
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 <i>%1</i> 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 <i>%1</i> 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));
- }
-}