mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-03 06:02:29 -06:00
committed by
GitHub
parent
4fc36b9e99
commit
f9f4b60b83
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2018-2024 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2018-2025 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2006 Christophe Dumez <chris@qbittorrent.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -61,12 +61,30 @@ namespace
|
||||
{
|
||||
return QApplication::palette().color(QPalette::Disabled, QPalette::WindowText);
|
||||
}
|
||||
|
||||
QString statusText(SearchJobWidget::Status st)
|
||||
{
|
||||
switch (st)
|
||||
{
|
||||
case SearchJobWidget::Status::Ongoing:
|
||||
return SearchJobWidget::tr("Searching...");
|
||||
case SearchJobWidget::Status::Finished:
|
||||
return SearchJobWidget::tr("Search has finished");
|
||||
case SearchJobWidget::Status::Aborted:
|
||||
return SearchJobWidget::tr("Search aborted");
|
||||
case SearchJobWidget::Status::Error:
|
||||
return SearchJobWidget::tr("An error occurred during search...");
|
||||
case SearchJobWidget::Status::NoResults:
|
||||
return SearchJobWidget::tr("Search returned no results");
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, IGUIApplication *app, QWidget *parent)
|
||||
: GUIApplicationComponent(app, parent)
|
||||
, m_ui {new Ui::SearchJobWidget}
|
||||
, m_searchHandler {searchHandler}
|
||||
, m_nameFilteringMode {u"Search/FilteringMode"_s}
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
@@ -94,7 +112,6 @@ SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, IGUIApplication *
|
||||
m_proxyModel = new SearchSortModel(this);
|
||||
m_proxyModel->setDynamicSortFilter(true);
|
||||
m_proxyModel->setSourceModel(m_searchListModel);
|
||||
m_proxyModel->setNameFilter(searchHandler->pattern());
|
||||
m_ui->resultsBrowser->setModel(m_proxyModel);
|
||||
|
||||
m_ui->resultsBrowser->hideColumn(SearchSortModel::DL_LINK); // Hide url column
|
||||
@@ -134,8 +151,9 @@ SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, IGUIApplication *
|
||||
connect(header(), &QHeaderView::sortIndicatorChanged, this, &SearchJobWidget::saveSettings);
|
||||
|
||||
fillFilterComboBoxes();
|
||||
setStatusTip(statusText(m_status));
|
||||
|
||||
updateFilter();
|
||||
assignSearchHandler(searchHandler);
|
||||
|
||||
m_lineEditSearchResultsFilter = new LineEdit(this);
|
||||
m_lineEditSearchResultsFilter->setPlaceholderText(tr("Filter search results..."));
|
||||
@@ -165,13 +183,6 @@ SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, IGUIApplication *
|
||||
|
||||
connect(m_ui->resultsBrowser, &QAbstractItemView::doubleClicked, this, &SearchJobWidget::onItemDoubleClicked);
|
||||
|
||||
connect(searchHandler, &SearchHandler::newSearchResults, this, &SearchJobWidget::appendSearchResults);
|
||||
connect(searchHandler, &SearchHandler::searchFinished, this, &SearchJobWidget::searchFinished);
|
||||
connect(searchHandler, &SearchHandler::searchFailed, this, &SearchJobWidget::searchFailed);
|
||||
connect(this, &QObject::destroyed, searchHandler, &QObject::deleteLater);
|
||||
|
||||
setStatusTip(statusText(m_status));
|
||||
|
||||
connect(UIThemeManager::instance(), &UIThemeManager::themeChanged, this, &SearchJobWidget::onUIThemeChanged);
|
||||
}
|
||||
|
||||
@@ -181,6 +192,15 @@ SearchJobWidget::~SearchJobWidget()
|
||||
delete m_ui;
|
||||
}
|
||||
|
||||
QString SearchJobWidget::searchPattern() const
|
||||
{
|
||||
Q_ASSERT(m_searchHandler);
|
||||
if (!m_searchHandler) [[unlikely]]
|
||||
return {};
|
||||
|
||||
return m_searchHandler->pattern();
|
||||
}
|
||||
|
||||
void SearchJobWidget::onItemDoubleClicked(const QModelIndex &index)
|
||||
{
|
||||
downloadTorrent(index);
|
||||
@@ -238,8 +258,33 @@ LineEdit *SearchJobWidget::lineEditSearchResultsFilter() const
|
||||
return m_lineEditSearchResultsFilter;
|
||||
}
|
||||
|
||||
void SearchJobWidget::assignSearchHandler(SearchHandler *searchHandler)
|
||||
{
|
||||
Q_ASSERT(searchHandler);
|
||||
if (!searchHandler) [[unlikely]]
|
||||
return;
|
||||
|
||||
m_searchListModel->removeRows(0, m_searchListModel->rowCount());
|
||||
delete m_searchHandler;
|
||||
|
||||
m_searchHandler = searchHandler;
|
||||
m_searchHandler->setParent(this);
|
||||
connect(m_searchHandler, &SearchHandler::newSearchResults, this, &SearchJobWidget::appendSearchResults);
|
||||
connect(m_searchHandler, &SearchHandler::searchFinished, this, &SearchJobWidget::searchFinished);
|
||||
connect(m_searchHandler, &SearchHandler::searchFailed, this, &SearchJobWidget::searchFailed);
|
||||
|
||||
m_proxyModel->setNameFilter(m_searchHandler->pattern());
|
||||
updateFilter();
|
||||
|
||||
setStatus(Status::Ongoing);
|
||||
}
|
||||
|
||||
void SearchJobWidget::cancelSearch()
|
||||
{
|
||||
Q_ASSERT(m_searchHandler);
|
||||
if (!m_searchHandler) [[unlikely]]
|
||||
return;
|
||||
|
||||
m_searchHandler->cancelSearch();
|
||||
}
|
||||
|
||||
@@ -296,7 +341,8 @@ void SearchJobWidget::copyField(const int column) const
|
||||
|
||||
void SearchJobWidget::setStatus(Status value)
|
||||
{
|
||||
if (m_status == value) return;
|
||||
if (m_status == value)
|
||||
return;
|
||||
|
||||
m_status = value;
|
||||
setStatusTip(statusText(value));
|
||||
@@ -444,25 +490,6 @@ void SearchJobWidget::contextMenuEvent(QContextMenuEvent *event)
|
||||
menu->popup(event->globalPos());
|
||||
}
|
||||
|
||||
QString SearchJobWidget::statusText(SearchJobWidget::Status st)
|
||||
{
|
||||
switch (st)
|
||||
{
|
||||
case Status::Ongoing:
|
||||
return tr("Searching...");
|
||||
case Status::Finished:
|
||||
return tr("Search has finished");
|
||||
case Status::Aborted:
|
||||
return tr("Search aborted");
|
||||
case Status::Error:
|
||||
return tr("An error occurred during search...");
|
||||
case Status::NoResults:
|
||||
return tr("Search returned no results");
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
SearchJobWidget::NameFilteringMode SearchJobWidget::filteringMode() const
|
||||
{
|
||||
return static_cast<NameFilteringMode>(m_ui->filterMode->itemData(m_ui->filterMode->currentIndex()).toInt());
|
||||
|
||||
Reference in New Issue
Block a user