mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-03-13 05:41:17 +00:00
Make SearchManager singleton
This commit is contained in:
parent
f3d370870d
commit
279bce2014
@ -35,6 +35,7 @@
|
||||
#include <QDomElement>
|
||||
#include <QDomNode>
|
||||
#include <QList>
|
||||
#include <QPointer>
|
||||
#include <QProcess>
|
||||
|
||||
#include "base/logger.h"
|
||||
@ -47,12 +48,17 @@
|
||||
#include "searchdownloadhandler.h"
|
||||
#include "searchhandler.h"
|
||||
|
||||
static inline void removePythonScriptIfExists(const QString &scriptPath)
|
||||
namespace
|
||||
{
|
||||
Utils::Fs::forceRemove(scriptPath);
|
||||
Utils::Fs::forceRemove(scriptPath + "c");
|
||||
inline void removePythonScriptIfExists(const QString &scriptPath)
|
||||
{
|
||||
Utils::Fs::forceRemove(scriptPath);
|
||||
Utils::Fs::forceRemove(scriptPath + "c");
|
||||
}
|
||||
}
|
||||
|
||||
QPointer<SearchPluginManager> SearchPluginManager::m_instance = nullptr;
|
||||
|
||||
const QHash<QString, QString> SearchPluginManager::m_categoryNames {
|
||||
{"all", QT_TRANSLATE_NOOP("SearchEngine", "All categories")},
|
||||
{"movies", QT_TRANSLATE_NOOP("SearchEngine", "Movies")},
|
||||
@ -68,6 +74,9 @@ const QHash<QString, QString> SearchPluginManager::m_categoryNames {
|
||||
SearchPluginManager::SearchPluginManager()
|
||||
: m_updateUrl(QString("http://searchplugins.qbittorrent.org/%1/engines/").arg(Utils::Misc::pythonVersion() >= 3 ? "nova3" : "nova"))
|
||||
{
|
||||
Q_ASSERT(!m_instance); // only one instance is allowed
|
||||
m_instance = this;
|
||||
|
||||
updateNova();
|
||||
update();
|
||||
}
|
||||
@ -77,6 +86,11 @@ SearchPluginManager::~SearchPluginManager()
|
||||
qDeleteAll(m_plugins);
|
||||
}
|
||||
|
||||
SearchPluginManager *SearchPluginManager::instance()
|
||||
{
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
QStringList SearchPluginManager::allPlugins() const
|
||||
{
|
||||
return m_plugins.keys();
|
||||
|
@ -61,6 +61,8 @@ public:
|
||||
SearchPluginManager();
|
||||
~SearchPluginManager() override;
|
||||
|
||||
static SearchPluginManager *instance();
|
||||
|
||||
QStringList allPlugins() const;
|
||||
QStringList enabledPlugins() const;
|
||||
QStringList supportedCategories() const;
|
||||
@ -107,6 +109,7 @@ private:
|
||||
|
||||
static QString pluginPath(const QString &name);
|
||||
|
||||
static QPointer<SearchPluginManager> m_instance;
|
||||
static const QHash<QString, QString> m_categoryNames;
|
||||
|
||||
const QString m_updateUrl;
|
||||
|
@ -135,17 +135,18 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
|
||||
connect(m_tabStatusChangedMapper, static_cast<void (QSignalMapper::*)(QWidget *)>(&QSignalMapper::mapped)
|
||||
, this, &SearchWidget::tabStatusChanged);
|
||||
|
||||
m_searchManager = new SearchPluginManager;
|
||||
// NOTE: Although SearchManager is Application-wide component now, we still create it the legacy way.
|
||||
auto *searchManager = new SearchPluginManager;
|
||||
const auto onPluginChanged = [this]()
|
||||
{
|
||||
fillCatCombobox();
|
||||
fillPluginComboBox();
|
||||
selectActivePage();
|
||||
};
|
||||
connect(m_searchManager, &SearchPluginManager::pluginInstalled, this, onPluginChanged);
|
||||
connect(m_searchManager, &SearchPluginManager::pluginUninstalled, this, onPluginChanged);
|
||||
connect(m_searchManager, &SearchPluginManager::pluginUpdated, this, onPluginChanged);
|
||||
connect(m_searchManager, &SearchPluginManager::pluginEnabled, this, onPluginChanged);
|
||||
connect(searchManager, &SearchPluginManager::pluginInstalled, this, onPluginChanged);
|
||||
connect(searchManager, &SearchPluginManager::pluginUninstalled, this, onPluginChanged);
|
||||
connect(searchManager, &SearchPluginManager::pluginUpdated, this, onPluginChanged);
|
||||
connect(searchManager, &SearchPluginManager::pluginEnabled, this, onPluginChanged);
|
||||
|
||||
// Fill in category combobox
|
||||
onPluginChanged();
|
||||
@ -163,7 +164,7 @@ void SearchWidget::fillCatCombobox()
|
||||
|
||||
using QStrPair = QPair<QString, QString>;
|
||||
QList<QStrPair> tmpList;
|
||||
foreach (const QString &cat, m_searchManager->supportedCategories())
|
||||
foreach (const QString &cat, SearchPluginManager::instance()->supportedCategories())
|
||||
tmpList << qMakePair(SearchPluginManager::categoryFullName(cat), cat);
|
||||
std::sort(tmpList.begin(), tmpList.end(), [](const QStrPair &l, const QStrPair &r) { return (QString::localeAwareCompare(l.first, r.first) < 0); });
|
||||
|
||||
@ -185,8 +186,8 @@ void SearchWidget::fillPluginComboBox()
|
||||
|
||||
using QStrPair = QPair<QString, QString>;
|
||||
QList<QStrPair> tmpList;
|
||||
foreach (const QString &name, m_searchManager->enabledPlugins())
|
||||
tmpList << qMakePair(m_searchManager->pluginFullName(name), name);
|
||||
foreach (const QString &name, SearchPluginManager::instance()->enabledPlugins())
|
||||
tmpList << qMakePair(SearchPluginManager::instance()->pluginFullName(name), name);
|
||||
std::sort(tmpList.begin(), tmpList.end(), [](const QStrPair &l, const QStrPair &r) { return (l.first < r.first); } );
|
||||
|
||||
foreach (const QStrPair &p, tmpList)
|
||||
@ -208,7 +209,7 @@ QString SearchWidget::selectedPlugin() const
|
||||
|
||||
void SearchWidget::selectActivePage()
|
||||
{
|
||||
if (m_searchManager->allPlugins().isEmpty()) {
|
||||
if (SearchPluginManager::instance()->allPlugins().isEmpty()) {
|
||||
m_ui->stackedPages->setCurrentWidget(m_ui->emptyPage);
|
||||
m_ui->m_searchPattern->setEnabled(false);
|
||||
m_ui->comboCategory->setEnabled(false);
|
||||
@ -227,7 +228,7 @@ void SearchWidget::selectActivePage()
|
||||
SearchWidget::~SearchWidget()
|
||||
{
|
||||
qDebug("Search destruction");
|
||||
delete m_searchManager;
|
||||
delete SearchPluginManager::instance();
|
||||
delete m_ui;
|
||||
}
|
||||
|
||||
@ -262,7 +263,7 @@ void SearchWidget::selectMultipleBox(int index)
|
||||
|
||||
void SearchWidget::on_pluginsButton_clicked()
|
||||
{
|
||||
new PluginSelectDlg(m_searchManager, this);
|
||||
new PluginSelectDlg(SearchPluginManager::instance(), this);
|
||||
}
|
||||
|
||||
void SearchWidget::searchTextEdited(QString)
|
||||
@ -303,15 +304,15 @@ void SearchWidget::on_searchButton_clicked()
|
||||
}
|
||||
|
||||
QStringList plugins;
|
||||
if (selectedPlugin() == "all") plugins = m_searchManager->allPlugins();
|
||||
else if (selectedPlugin() == "enabled") plugins = m_searchManager->enabledPlugins();
|
||||
else if (selectedPlugin() == "multi") plugins = m_searchManager->enabledPlugins();
|
||||
if (selectedPlugin() == "all") plugins = SearchPluginManager::instance()->allPlugins();
|
||||
else if (selectedPlugin() == "enabled") plugins = SearchPluginManager::instance()->enabledPlugins();
|
||||
else if (selectedPlugin() == "multi") plugins = SearchPluginManager::instance()->enabledPlugins();
|
||||
else plugins << selectedPlugin();
|
||||
|
||||
qDebug("Search with category: %s", qUtf8Printable(selectedCategory()));
|
||||
|
||||
// Launch search
|
||||
auto *searchHandler = m_searchManager->startSearch(pattern, selectedCategory(), plugins);
|
||||
auto *searchHandler = SearchPluginManager::instance()->startSearch(pattern, selectedCategory(), plugins);
|
||||
|
||||
// Tab Addition
|
||||
auto *newTab = new SearchTab(searchHandler, this);
|
||||
|
@ -37,7 +37,6 @@ class QSignalMapper;
|
||||
class QTabWidget;
|
||||
|
||||
class MainWindow;
|
||||
class SearchPluginManager;
|
||||
class SearchTab;
|
||||
|
||||
namespace Ui
|
||||
@ -80,7 +79,6 @@ private:
|
||||
QString selectedPlugin() const;
|
||||
|
||||
Ui::SearchWidget *m_ui;
|
||||
SearchPluginManager *m_searchManager;
|
||||
QSignalMapper *m_tabStatusChangedMapper;
|
||||
QPointer<SearchTab> m_currentSearchTab; // Selected tab
|
||||
QPointer<SearchTab> m_activeSearchTab; // Tab with running search
|
||||
|
Loading…
x
Reference in New Issue
Block a user