qBittorrent
torrentfileswatcher.h
Go to the documentation of this file.
1 /*
2  * Bittorrent Client using Qt and libtorrent.
3  * Copyright (C) 2021 Vladimir Golovnev <[email protected]>
4  * Copyright (C) 2010 Christian Kandeler, Christophe Dumez <[email protected]>
5  *
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.
10  *
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.
15  *
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.
19  *
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.
28  */
29 
30 #pragma once
31 
32 #include <QHash>
33 
35 
36 class QThread;
37 
38 namespace BitTorrent
39 {
40  class MagnetUri;
41 }
42 
43 /*
44  * Watches the configured directories for new .torrent files in order
45  * to add torrents to BitTorrent session. Supports Network File System
46  * watching (NFS, CIFS) on Linux and Mac OS.
47  */
48 class TorrentFilesWatcher final : public QObject
49 {
50  Q_OBJECT
51  Q_DISABLE_COPY_MOVE(TorrentFilesWatcher)
52 
53 public:
55  {
57  bool recursive = false;
58  };
59 
60  static void initInstance();
61  static void freeInstance();
62  static TorrentFilesWatcher *instance();
63 
64  static QString makeCleanPath(const QString &path);
65 
66  QHash<QString, WatchedFolderOptions> folders() const;
67  void setWatchedFolder(const QString &path, const WatchedFolderOptions &options);
68  void removeWatchedFolder(const QString &path);
69 
70 signals:
71  void watchedFolderSet(const QString &path, const WatchedFolderOptions &options);
72  void watchedFolderRemoved(const QString &path);
73 
74 private slots:
75  void onMagnetFound(const BitTorrent::MagnetUri &magnetURI, const BitTorrent::AddTorrentParams &addTorrentParams);
76  void onTorrentFound(const BitTorrent::TorrentInfo &torrentInfo, const BitTorrent::AddTorrentParams &addTorrentParams);
77 
78 private:
79  explicit TorrentFilesWatcher(QObject *parent = nullptr);
80  ~TorrentFilesWatcher() override;
81 
82  void load();
83  void loadLegacy();
84  void store() const;
85 
86  void doSetWatchedFolder(const QString &path, const WatchedFolderOptions &options);
87 
89 
90  QHash<QString, WatchedFolderOptions> m_watchedFolders;
91 
92  QThread *m_ioThread = nullptr;
93 
94  class Worker;
95  Worker *m_asyncWorker = nullptr;
96 };
void removeWatchedFolder(const QString &path)
TorrentFilesWatcher(QObject *parent=nullptr)
void watchedFolderRemoved(const QString &path)
QHash< QString, WatchedFolderOptions > folders() const
void onTorrentFound(const BitTorrent::TorrentInfo &torrentInfo, const BitTorrent::AddTorrentParams &addTorrentParams)
QHash< QString, WatchedFolderOptions > m_watchedFolders
static TorrentFilesWatcher * instance()
static QString makeCleanPath(const QString &path)
void doSetWatchedFolder(const QString &path, const WatchedFolderOptions &options)
static TorrentFilesWatcher * m_instance
void onMagnetFound(const BitTorrent::MagnetUri &magnetURI, const BitTorrent::AddTorrentParams &addTorrentParams)
void setWatchedFolder(const QString &path, const WatchedFolderOptions &options)
void watchedFolderSet(const QString &path, const WatchedFolderOptions &options)
BitTorrent::AddTorrentParams addTorrentParams