WebUI: fix window can not close regression
[qBittorrent.git] / src / base / search / searchhandler.h
blob40cf58754e3c0eee899039af3f008784b271d0c0
1 /*
2 * Bittorrent Client using Qt and libtorrent.
3 * Copyright (C) 2015-2024 Vladimir Golovnev <glassez@yandex.ru>
4 * Copyright (C) 2006 Christophe Dumez <chris@qbittorrent.org>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * In addition, as a special exception, the copyright holders give permission to
21 * link this program with the OpenSSL project's "OpenSSL" library (or with
22 * modified versions of it that use the same license as the "OpenSSL" library),
23 * and distribute the linked executables. You must obey the GNU General Public
24 * License in all respects for all of the code used other than "OpenSSL". If you
25 * modify file(s), you may extend this exception to your version of the file(s),
26 * but you are not obligated to do so. If you do not wish to do so, delete this
27 * exception statement from your version.
30 #pragma once
32 #include <QByteArray>
33 #include <QDateTime>
34 #include <QList>
35 #include <QObject>
36 #include <QString>
37 #include <QtContainerFwd>
39 class QProcess;
40 class QTimer;
42 struct SearchResult
44 QString fileName;
45 QString fileUrl;
46 qlonglong fileSize = 0;
47 qlonglong nbSeeders = 0;
48 qlonglong nbLeechers = 0;
49 QString engineName;
50 QString siteUrl;
51 QString descrLink;
52 QDateTime pubDate;
55 class SearchPluginManager;
57 class SearchHandler : public QObject
59 Q_OBJECT
60 Q_DISABLE_COPY_MOVE(SearchHandler)
62 friend class SearchPluginManager;
64 SearchHandler(const QString &pattern, const QString &category
65 , const QStringList &usedPlugins, SearchPluginManager *manager);
67 public:
68 bool isActive() const;
69 QString pattern() const;
70 SearchPluginManager *manager() const;
71 QList<SearchResult> results() const;
73 void cancelSearch();
75 signals:
76 void searchFinished(bool cancelled = false);
77 void searchFailed();
78 void newSearchResults(const QList<SearchResult> &results);
80 private:
81 void readSearchOutput();
82 void processFailed();
83 void processFinished(int exitcode);
84 bool parseSearchResult(QStringView line, SearchResult &searchResult);
86 const QString m_pattern;
87 const QString m_category;
88 const QStringList m_usedPlugins;
89 SearchPluginManager *m_manager = nullptr;
90 QProcess *m_searchProcess = nullptr;
91 QTimer *m_searchTimeout = nullptr;
92 QByteArray m_searchResultLineTruncated;
93 bool m_searchCancelled = false;
94 QList<SearchResult> m_results;