mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-11-28 21:38:51 +03:00
commit
32490f1ef6
7 changed files with 135 additions and 100 deletions
|
@ -310,6 +310,11 @@ QString SearchEngine::categoryFullName(const QString &categoryName)
|
|||
return tr(m_categoryNames.value(categoryName).toUtf8().constData());
|
||||
}
|
||||
|
||||
QString SearchEngine::pluginFullName(const QString &pluginName)
|
||||
{
|
||||
return pluginInfo(pluginName) ? pluginInfo(pluginName)->fullName : QString();
|
||||
}
|
||||
|
||||
QString SearchEngine::pluginsLocation()
|
||||
{
|
||||
return QString("%1/engines").arg(engineLocation());
|
||||
|
|
|
@ -88,6 +88,7 @@ public:
|
|||
|
||||
static qreal getPluginVersion(QString filePath);
|
||||
static QString categoryFullName(const QString &categoryName);
|
||||
QString pluginFullName(const QString &pluginName);
|
||||
static QString pluginsLocation();
|
||||
|
||||
signals:
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<property name="windowTitle">
|
||||
<string>Search plugins</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<layout class="QVBoxLayout" name="pluginSelectLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="lbl_plugins">
|
||||
<property name="font">
|
||||
|
@ -82,16 +82,13 @@
|
|||
<property name="text">
|
||||
<string>You can get new search engine plugins here: <a href="http://plugins.qbittorrent.org">http://plugins.qbittorrent.org</a></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<layout class="QHBoxLayout" name="layout1">
|
||||
<item>
|
||||
<widget class="QPushButton" name="installButton">
|
||||
<property name="text">
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<ui version="4.0" >
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>PluginSourceDlg</class>
|
||||
<widget class="QDialog" name="PluginSourceDlg" >
|
||||
<property name="geometry" >
|
||||
<widget class="QDialog" name="PluginSourceDlg">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
|
@ -9,36 +10,36 @@
|
|||
<height>76</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<property name="windowTitle">
|
||||
<string>Plugin source</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<layout class="QVBoxLayout" name="pluginSourceLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="source_lbl" >
|
||||
<property name="font" >
|
||||
<widget class="QLabel" name="source_lbl">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<underline>true</underline>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<property name="text">
|
||||
<string>Search plugin source:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" >
|
||||
<layout class="QHBoxLayout" name="layout1">
|
||||
<item>
|
||||
<widget class="QPushButton" name="localButton" >
|
||||
<property name="text" >
|
||||
<widget class="QPushButton" name="localButton">
|
||||
<property name="text">
|
||||
<string>Local file</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="urlButton" >
|
||||
<property name="text" >
|
||||
<widget class="QPushButton" name="urlButton">
|
||||
<property name="text">
|
||||
<string>Web link</string>
|
||||
</property>
|
||||
</widget>
|
||||
|
|
|
@ -61,7 +61,6 @@
|
|||
#include "mainwindow.h"
|
||||
#include "addnewtorrentdialog.h"
|
||||
#include "guiiconprovider.h"
|
||||
#include "lineedit.h"
|
||||
#include "pluginselectdlg.h"
|
||||
#include "searchsortmodel.h"
|
||||
#include "searchtab.h"
|
||||
|
@ -78,13 +77,8 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
|
|||
{
|
||||
setupUi(this);
|
||||
|
||||
m_searchPattern = new LineEdit(this);
|
||||
searchBarLayout->insertWidget(0, m_searchPattern);
|
||||
connect(m_searchPattern, SIGNAL(returnPressed()), searchButton, SLOT(click()));
|
||||
|
||||
QString searchPatternHint;
|
||||
QTextStream stream(&searchPatternHint, QIODevice::WriteOnly);
|
||||
|
||||
stream << "<html><head/><body><p>"
|
||||
<< tr("A phrase to search for.") << "<br>"
|
||||
<< tr("Spaces in a search term may be protected by double quotes.")
|
||||
|
@ -99,7 +93,6 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
|
|||
"Search phrase example, illustrates quotes usage, double quoted"
|
||||
"pair of space delimited words, the whole pair is highlighted")
|
||||
<< "</p></body></html>" << flush;
|
||||
|
||||
m_searchPattern->setToolTip(searchPatternHint);
|
||||
|
||||
// Icons
|
||||
|
@ -108,7 +101,6 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
|
|||
goToDescBtn->setIcon(GuiIconProvider::instance()->getIcon("application-x-mswinurl"));
|
||||
pluginsButton->setIcon(GuiIconProvider::instance()->getIcon("preferences-system-network"));
|
||||
copyURLBtn->setIcon(GuiIconProvider::instance()->getIcon("edit-copy"));
|
||||
tabWidget->setTabsClosable(true);
|
||||
connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
|
||||
|
||||
m_searchEngine = new SearchEngine;
|
||||
|
@ -122,28 +114,45 @@ SearchWidget::SearchWidget(MainWindow *mainWindow)
|
|||
fillCatCombobox();
|
||||
fillPluginComboBox();
|
||||
|
||||
connect(m_searchPattern, SIGNAL(returnPressed()), searchButton, SLOT(click()));
|
||||
connect(m_searchPattern, SIGNAL(textEdited(QString)), this, SLOT(searchTextEdited(QString)));
|
||||
connect(selectPlugin, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(selectMultipleBox(const QString &)));
|
||||
connect(selectPlugin, SIGNAL(currentIndexChanged(int)), this, SLOT(selectMultipleBox(int)));
|
||||
}
|
||||
|
||||
void SearchWidget::fillCatCombobox()
|
||||
{
|
||||
comboCategory->clear();
|
||||
comboCategory->addItem(SearchEngine::categoryFullName("all"), QVariant("all"));
|
||||
foreach (QString cat, m_searchEngine->supportedCategories()) {
|
||||
qDebug("Supported category: %s", qPrintable(cat));
|
||||
comboCategory->addItem(SearchEngine::categoryFullName(cat), QVariant(cat));
|
||||
comboCategory->insertSeparator(1);
|
||||
|
||||
using QStrPair = QPair<QString, QString>;
|
||||
QList<QStrPair> tmpList;
|
||||
foreach (const QString &cat, m_searchEngine->supportedCategories())
|
||||
tmpList << qMakePair(SearchEngine::categoryFullName(cat), cat);
|
||||
std::sort(tmpList.begin(), tmpList.end(), [](const QStrPair &l, const QStrPair &r) { return (l.first < r.first); } );
|
||||
|
||||
foreach (const QStrPair &p, tmpList) {
|
||||
qDebug("Supported category: %s", qPrintable(p.second));
|
||||
comboCategory->addItem(p.first, QVariant(p.second));
|
||||
}
|
||||
}
|
||||
|
||||
void SearchWidget::fillPluginComboBox()
|
||||
{
|
||||
selectPlugin->clear();
|
||||
selectPlugin->addItem(tr("All enabled"), QVariant("enabled"));
|
||||
selectPlugin->addItem(tr("All plugins"), QVariant("all"));
|
||||
foreach (QString name, m_searchEngine->enabledPlugins())
|
||||
selectPlugin->addItem(name, QVariant(name));
|
||||
selectPlugin->addItem(tr("Multiple..."), QVariant("multi"));
|
||||
selectPlugin->addItem(tr("Only enabled"), QVariant("enabled"));
|
||||
selectPlugin->addItem(tr("Select..."), QVariant("multi"));
|
||||
selectPlugin->insertSeparator(3);
|
||||
|
||||
using QStrPair = QPair<QString, QString>;
|
||||
QList<QStrPair> tmpList;
|
||||
foreach (const QString &name, m_searchEngine->enabledPlugins())
|
||||
tmpList << qMakePair(m_searchEngine->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)
|
||||
selectPlugin->addItem(p.first, QVariant(p.second));
|
||||
}
|
||||
|
||||
QString SearchWidget::selectedCategory() const
|
||||
|
@ -190,9 +199,10 @@ void SearchWidget::tab_changed(int t)
|
|||
}
|
||||
}
|
||||
|
||||
void SearchWidget::selectMultipleBox(const QString &text)
|
||||
void SearchWidget::selectMultipleBox(int index)
|
||||
{
|
||||
if (text == tr("Multiple..."))
|
||||
Q_UNUSED(index);
|
||||
if (selectedPlugin() == "multi")
|
||||
on_pluginsButton_clicked();
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
#include "ui_searchwidget.h"
|
||||
|
||||
class MainWindow;
|
||||
class LineEdit;
|
||||
class SearchEngine;
|
||||
struct SearchResult;
|
||||
class SearchTab;
|
||||
|
@ -71,7 +70,7 @@ private slots:
|
|||
void searchStarted();
|
||||
void searchFinished(bool cancelled);
|
||||
void searchFailed();
|
||||
void selectMultipleBox(const QString &text);
|
||||
void selectMultipleBox(int index);
|
||||
|
||||
void addTorrentToSession(const QString &source);
|
||||
|
||||
|
@ -84,7 +83,6 @@ private:
|
|||
QString selectedCategory() const;
|
||||
QString selectedPlugin() const;
|
||||
|
||||
LineEdit *m_searchPattern;
|
||||
SearchEngine *m_searchEngine;
|
||||
QPointer<SearchTab> m_currentSearchTab; // Selected tab
|
||||
QPointer<SearchTab> m_activeSearchTab; // Tab with running search
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1382</width>
|
||||
<width>843</width>
|
||||
<height>669</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -17,13 +17,36 @@
|
|||
<item>
|
||||
<layout class="QHBoxLayout" name="searchBarLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboCategory"/>
|
||||
<widget class="LineEdit" name="m_searchPattern"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="selectPlugin"/>
|
||||
<widget class="QComboBox" name="comboCategory">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="selectPlugin">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="searchButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Search</string>
|
||||
</property>
|
||||
|
@ -33,74 +56,74 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
<property name="tabsClosable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout">
|
||||
<layout class="QHBoxLayout" name="layout2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="downloadButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Download</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="goToDescBtn">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Go to description page</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="copyURLBtn">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Copy description page URL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>601</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pluginsButton">
|
||||
<property name="text">
|
||||
<string>Search plugins...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<widget class="QPushButton" name="downloadButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Download</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="goToDescBtn">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Go to description page</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="copyURLBtn">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Copy description page URL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="spacer2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pluginsButton">
|
||||
<property name="text">
|
||||
<string>Search plugins...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>LineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>lineedit.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
Loading…
Reference in a new issue