From f180021aefbeaddcef6db74e9d0f088a14daa623 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 7 Jun 2018 21:18:49 +0200 Subject: Improve plugin loading - load plugins last - plugin.path can now also be a path to a single plugin, not just a folder --- src/browser.cpp | 89 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/src/browser.cpp b/src/browser.cpp index bb29ff7..99ddcc3 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -22,30 +22,54 @@ #include #include -inline QVector loadPlugins(const QString &location) +inline Plugin loadPluginFromPath(const QString &path) { - QDir pluginsDir(location); - QVector list; + Plugin p; + QPluginLoader loader(path); - if(pluginsDir.exists()) { - const QStringList entries = pluginsDir.entryList(QDir::Files | QDir::Readable); + if(loader.load()) { +#ifdef QT_DEBUG + qDebug("Loading plugin: %s [ok]", qUtf8Printable(path)); +#endif - for(const QString &name : entries) { - QPluginLoader loader(pluginsDir.absoluteFilePath(name)); + p.instance = std::shared_ptr(loader.instance()); - if(loader.load()) { #ifdef QT_DEBUG - qDebug("Loading plugin: %s [ok]", qUtf8Printable(pluginsDir.absoluteFilePath(name))); + } else { + qDebug("Loading pluing: %s [failed]", qUtf8Printable(path)); #endif - Plugin p; - p.instance = std::shared_ptr(loader.instance()); + } + + return p; +} + +inline QVector loadPlugins(const QString &path) +{ + QVector list; + QFileInfo location(path); + if(!location.exists()) { + return list; + } + + if(location.isFile()) { + // only load this one plugin + auto p = loadPluginFromPath(location.absoluteFilePath()); + if(p.instance) + list.append(p); + + } else if(location.isDir()) { + // load all profiles from this directory + const auto entries = QDir(location.absoluteFilePath()).entryInfoList(QDir::Files | QDir::Readable); + for(const auto &f : entries) { + auto p = loadPluginFromPath(f.absoluteFilePath()); + if(p.instance) list.append(p); - } else { + } + + } else { #ifdef QT_DEBUG - qDebug("Loading plugin: %s [failed]", qUtf8Printable(name)); + qDebug("Path is neither file nor folder: %s", qUtf8Printable(path)); #endif - } - } } return list; @@ -113,7 +137,24 @@ void Browser::setup(const QString &defaultProfile) } } - // plugins + // url request filter + m_urlFilter = std::make_shared(QString::fromStdString(m_config->value("filter.path").value())); + WebProfile::defaultProfile()->setRequestInterceptor(m_urlFilter.get()); + + // cookie request filter + + // bookmarks + m_bookmarks = std::make_shared(QString::fromStdString(m_config->value("bookmarks.path").value())); + connect(m_bookmarks.get(), &BookmarksWidget::openUrl, this, [this](const QUrl &url) { + m_windows.last()->createTab(url); + }); + connect(WebProfile::defaultProfile(), &WebProfile::addBookmarkRequested, m_bookmarks.get(), &BookmarksWidget::addBookmark); + + // downloads + m_downloads = std::make_shared(QString::fromStdString(m_config->value("downloads.path").value())); + connect(WebProfile::defaultProfile(), &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload); + + // load plugins last m_plugins.append(loadPlugins(QString::fromStdString(m_config->value("plugins.path").value()))); // register commands @@ -132,22 +173,6 @@ void Browser::setup(const QString &defaultProfile) } } - // url request filter - m_urlFilter = std::make_shared(QString::fromStdString(m_config->value("filter.path").value())); - WebProfile::defaultProfile()->setRequestInterceptor(m_urlFilter.get()); - - // cookie request filter - - // bookmarks - m_bookmarks = std::make_shared(QString::fromStdString(m_config->value("bookmarks.path").value())); - connect(m_bookmarks.get(), &BookmarksWidget::openUrl, this, [this](const QUrl &url) { - m_windows.last()->createTab(url); - }); - connect(WebProfile::defaultProfile(), &WebProfile::addBookmarkRequested, m_bookmarks.get(), &BookmarksWidget::addBookmark); - - // downloads - m_downloads = std::make_shared(QString::fromStdString(m_config->value("downloads.path").value())); - connect(WebProfile::defaultProfile(), &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload); } WebProfile *Browser::profile(const QString &name) const -- cgit v1.2.1