WebUI: Provide 'Merge trackers to existing torrent' option
[qBittorrent.git] / src / base / bittorrent / session.h
blobd4b0fa6288861fc3bb22e2e73eb82712d2754f0a
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 <QtContainerFwd>
33 #include <QObject>
35 #include "base/pathfwd.h"
36 #include "base/tagset.h"
37 #include "addtorrentparams.h"
38 #include "categoryoptions.h"
39 #include "sharelimitaction.h"
40 #include "torrentcontentremoveoption.h"
41 #include "trackerentry.h"
42 #include "trackerentrystatus.h"
44 class QString;
46 namespace BitTorrent
48 class InfoHash;
49 class Torrent;
50 class TorrentDescriptor;
51 class TorrentID;
52 class TorrentInfo;
53 struct CacheStatus;
54 struct SessionStatus;
56 enum class TorrentRemoveOption
58 KeepContent,
59 RemoveContent
62 // Using `Q_ENUM_NS()` without a wrapper namespace in our case is not advised
63 // since `Q_NAMESPACE` cannot be used when the same namespace resides at different files.
64 // https://www.kdab.com/new-qt-5-8-meta-object-support-namespaces/#comment-143779
65 inline namespace SessionSettingsEnums
67 Q_NAMESPACE
69 enum class BTProtocol : int
71 Both = 0,
72 TCP = 1,
73 UTP = 2
75 Q_ENUM_NS(BTProtocol)
77 enum class ChokingAlgorithm : int
79 FixedSlots = 0,
80 RateBased = 1
82 Q_ENUM_NS(ChokingAlgorithm)
84 enum class DiskIOReadMode : int
86 DisableOSCache = 0,
87 EnableOSCache = 1
89 Q_ENUM_NS(DiskIOReadMode)
91 enum class DiskIOType : int
93 Default = 0,
94 MMap = 1,
95 Posix = 2
97 Q_ENUM_NS(DiskIOType)
99 enum class DiskIOWriteMode : int
101 DisableOSCache = 0,
102 EnableOSCache = 1,
103 #ifdef QBT_USES_LIBTORRENT2
104 WriteThrough = 2
105 #endif
107 Q_ENUM_NS(DiskIOWriteMode)
109 enum class MixedModeAlgorithm : int
111 TCP = 0,
112 Proportional = 1
114 Q_ENUM_NS(MixedModeAlgorithm)
116 enum class SeedChokingAlgorithm : int
118 RoundRobin = 0,
119 FastestUpload = 1,
120 AntiLeech = 2
122 Q_ENUM_NS(SeedChokingAlgorithm)
124 enum class ResumeDataStorageType
126 Legacy,
127 SQLite
129 Q_ENUM_NS(ResumeDataStorageType)
132 class Session : public QObject
134 Q_OBJECT
135 Q_DISABLE_COPY_MOVE(Session)
137 public:
138 static void initInstance();
139 static void freeInstance();
140 static Session *instance();
142 using QObject::QObject;
144 virtual Path savePath() const = 0;
145 virtual void setSavePath(const Path &path) = 0;
146 virtual Path downloadPath() const = 0;
147 virtual void setDownloadPath(const Path &path) = 0;
148 virtual bool isDownloadPathEnabled() const = 0;
149 virtual void setDownloadPathEnabled(bool enabled) = 0;
151 static bool isValidCategoryName(const QString &name);
152 static QString subcategoryName(const QString &category);
153 static QString parentCategoryName(const QString &category);
154 // returns category itself and all top level categories
155 static QStringList expandCategory(const QString &category);
157 virtual QStringList categories() const = 0;
158 virtual CategoryOptions categoryOptions(const QString &categoryName) const = 0;
159 virtual Path categorySavePath(const QString &categoryName) const = 0;
160 virtual Path categorySavePath(const QString &categoryName, const CategoryOptions &options) const = 0;
161 virtual Path categoryDownloadPath(const QString &categoryName) const = 0;
162 virtual Path categoryDownloadPath(const QString &categoryName, const CategoryOptions &options) const = 0;
163 virtual bool addCategory(const QString &name, const CategoryOptions &options = {}) = 0;
164 virtual bool editCategory(const QString &name, const CategoryOptions &options) = 0;
165 virtual bool removeCategory(const QString &name) = 0;
166 virtual bool isSubcategoriesEnabled() const = 0;
167 virtual void setSubcategoriesEnabled(bool value) = 0;
168 virtual bool useCategoryPathsInManualMode() const = 0;
169 virtual void setUseCategoryPathsInManualMode(bool value) = 0;
171 virtual Path suggestedSavePath(const QString &categoryName, std::optional<bool> useAutoTMM) const = 0;
172 virtual Path suggestedDownloadPath(const QString &categoryName, std::optional<bool> useAutoTMM) const = 0;
174 virtual TagSet tags() const = 0;
175 virtual bool hasTag(const Tag &tag) const = 0;
176 virtual bool addTag(const Tag &tag) = 0;
177 virtual bool removeTag(const Tag &tag) = 0;
179 // Torrent Management Mode subsystem (TMM)
181 // Each torrent can be either in Manual mode or in Automatic mode
182 // In Manual Mode various torrent properties are set explicitly(eg save path)
183 // In Automatic Mode various torrent properties are set implicitly(eg save path)
184 // based on the associated category.
185 // In Automatic Mode torrent save path can be changed in following cases:
186 // 1. Default save path changed
187 // 2. Torrent category save path changed
188 // 3. Torrent category changed
189 // (unless otherwise is specified)
190 virtual bool isAutoTMMDisabledByDefault() const = 0;
191 virtual void setAutoTMMDisabledByDefault(bool value) = 0;
192 virtual bool isDisableAutoTMMWhenCategoryChanged() const = 0;
193 virtual void setDisableAutoTMMWhenCategoryChanged(bool value) = 0;
194 virtual bool isDisableAutoTMMWhenDefaultSavePathChanged() const = 0;
195 virtual void setDisableAutoTMMWhenDefaultSavePathChanged(bool value) = 0;
196 virtual bool isDisableAutoTMMWhenCategorySavePathChanged() const = 0;
197 virtual void setDisableAutoTMMWhenCategorySavePathChanged(bool value) = 0;
199 virtual qreal globalMaxRatio() const = 0;
200 virtual void setGlobalMaxRatio(qreal ratio) = 0;
201 virtual int globalMaxSeedingMinutes() const = 0;
202 virtual void setGlobalMaxSeedingMinutes(int minutes) = 0;
203 virtual int globalMaxInactiveSeedingMinutes() const = 0;
204 virtual void setGlobalMaxInactiveSeedingMinutes(int minutes) = 0;
205 virtual ShareLimitAction shareLimitAction() const = 0;
206 virtual void setShareLimitAction(ShareLimitAction act) = 0;
208 virtual QString getDHTBootstrapNodes() const = 0;
209 virtual void setDHTBootstrapNodes(const QString &nodes) = 0;
210 virtual bool isDHTEnabled() const = 0;
211 virtual void setDHTEnabled(bool enabled) = 0;
212 virtual bool isLSDEnabled() const = 0;
213 virtual void setLSDEnabled(bool enabled) = 0;
214 virtual bool isPeXEnabled() const = 0;
215 virtual void setPeXEnabled(bool enabled) = 0;
216 virtual bool isAddTorrentToQueueTop() const = 0;
217 virtual void setAddTorrentToQueueTop(bool value) = 0;
218 virtual bool isAddTorrentStopped() const = 0;
219 virtual void setAddTorrentStopped(bool value) = 0;
220 virtual Torrent::StopCondition torrentStopCondition() const = 0;
221 virtual void setTorrentStopCondition(Torrent::StopCondition stopCondition) = 0;
222 virtual TorrentContentLayout torrentContentLayout() const = 0;
223 virtual void setTorrentContentLayout(TorrentContentLayout value) = 0;
224 virtual bool isTrackerEnabled() const = 0;
225 virtual void setTrackerEnabled(bool enabled) = 0;
226 virtual bool isAppendExtensionEnabled() const = 0;
227 virtual void setAppendExtensionEnabled(bool enabled) = 0;
228 virtual bool isUnwantedFolderEnabled() const = 0;
229 virtual void setUnwantedFolderEnabled(bool enabled) = 0;
230 virtual int refreshInterval() const = 0;
231 virtual void setRefreshInterval(int value) = 0;
232 virtual bool isPreallocationEnabled() const = 0;
233 virtual void setPreallocationEnabled(bool enabled) = 0;
234 virtual Path torrentExportDirectory() const = 0;
235 virtual void setTorrentExportDirectory(const Path &path) = 0;
236 virtual Path finishedTorrentExportDirectory() const = 0;
237 virtual void setFinishedTorrentExportDirectory(const Path &path) = 0;
239 virtual int globalDownloadSpeedLimit() const = 0;
240 virtual void setGlobalDownloadSpeedLimit(int limit) = 0;
241 virtual int globalUploadSpeedLimit() const = 0;
242 virtual void setGlobalUploadSpeedLimit(int limit) = 0;
243 virtual int altGlobalDownloadSpeedLimit() const = 0;
244 virtual void setAltGlobalDownloadSpeedLimit(int limit) = 0;
245 virtual int altGlobalUploadSpeedLimit() const = 0;
246 virtual void setAltGlobalUploadSpeedLimit(int limit) = 0;
247 virtual int downloadSpeedLimit() const = 0;
248 virtual void setDownloadSpeedLimit(int limit) = 0;
249 virtual int uploadSpeedLimit() const = 0;
250 virtual void setUploadSpeedLimit(int limit) = 0;
251 virtual bool isAltGlobalSpeedLimitEnabled() const = 0;
252 virtual void setAltGlobalSpeedLimitEnabled(bool enabled) = 0;
253 virtual bool isBandwidthSchedulerEnabled() const = 0;
254 virtual void setBandwidthSchedulerEnabled(bool enabled) = 0;
256 virtual bool isPerformanceWarningEnabled() const = 0;
257 virtual void setPerformanceWarningEnabled(bool enable) = 0;
258 virtual int saveResumeDataInterval() const = 0;
259 virtual void setSaveResumeDataInterval(int value) = 0;
260 virtual int shutdownTimeout() const = 0;
261 virtual void setShutdownTimeout(int value) = 0;
262 virtual int port() const = 0;
263 virtual void setPort(int port) = 0;
264 virtual bool isSSLEnabled() const = 0;
265 virtual void setSSLEnabled(bool enabled) = 0;
266 virtual int sslPort() const = 0;
267 virtual void setSSLPort(int port) = 0;
268 virtual QString networkInterface() const = 0;
269 virtual void setNetworkInterface(const QString &iface) = 0;
270 virtual QString networkInterfaceName() const = 0;
271 virtual void setNetworkInterfaceName(const QString &name) = 0;
272 virtual QString networkInterfaceAddress() const = 0;
273 virtual void setNetworkInterfaceAddress(const QString &address) = 0;
274 virtual int encryption() const = 0;
275 virtual void setEncryption(int state) = 0;
276 virtual int maxActiveCheckingTorrents() const = 0;
277 virtual void setMaxActiveCheckingTorrents(int val) = 0;
278 virtual bool isI2PEnabled() const = 0;
279 virtual void setI2PEnabled(bool enabled) = 0;
280 virtual QString I2PAddress() const = 0;
281 virtual void setI2PAddress(const QString &address) = 0;
282 virtual int I2PPort() const = 0;
283 virtual void setI2PPort(int port) = 0;
284 virtual bool I2PMixedMode() const = 0;
285 virtual void setI2PMixedMode(bool enabled) = 0;
286 virtual int I2PInboundQuantity() const = 0;
287 virtual void setI2PInboundQuantity(int value) = 0;
288 virtual int I2POutboundQuantity() const = 0;
289 virtual void setI2POutboundQuantity(int value) = 0;
290 virtual int I2PInboundLength() const = 0;
291 virtual void setI2PInboundLength(int value) = 0;
292 virtual int I2POutboundLength() const = 0;
293 virtual void setI2POutboundLength(int value) = 0;
294 virtual bool isProxyPeerConnectionsEnabled() const = 0;
295 virtual void setProxyPeerConnectionsEnabled(bool enabled) = 0;
296 virtual ChokingAlgorithm chokingAlgorithm() const = 0;
297 virtual void setChokingAlgorithm(ChokingAlgorithm mode) = 0;
298 virtual SeedChokingAlgorithm seedChokingAlgorithm() const = 0;
299 virtual void setSeedChokingAlgorithm(SeedChokingAlgorithm mode) = 0;
300 virtual bool isAddTrackersEnabled() const = 0;
301 virtual void setAddTrackersEnabled(bool enabled) = 0;
302 virtual QString additionalTrackers() const = 0;
303 virtual void setAdditionalTrackers(const QString &trackers) = 0;
304 virtual bool isIPFilteringEnabled() const = 0;
305 virtual void setIPFilteringEnabled(bool enabled) = 0;
306 virtual Path IPFilterFile() const = 0;
307 virtual void setIPFilterFile(const Path &path) = 0;
308 virtual bool announceToAllTrackers() const = 0;
309 virtual void setAnnounceToAllTrackers(bool val) = 0;
310 virtual bool announceToAllTiers() const = 0;
311 virtual void setAnnounceToAllTiers(bool val) = 0;
312 virtual int peerTurnover() const = 0;
313 virtual void setPeerTurnover(int val) = 0;
314 virtual int peerTurnoverCutoff() const = 0;
315 virtual void setPeerTurnoverCutoff(int val) = 0;
316 virtual int peerTurnoverInterval() const = 0;
317 virtual void setPeerTurnoverInterval(int val) = 0;
318 virtual int requestQueueSize() const = 0;
319 virtual void setRequestQueueSize(int val) = 0;
320 virtual int asyncIOThreads() const = 0;
321 virtual void setAsyncIOThreads(int num) = 0;
322 virtual int hashingThreads() const = 0;
323 virtual void setHashingThreads(int num) = 0;
324 virtual int filePoolSize() const = 0;
325 virtual void setFilePoolSize(int size) = 0;
326 virtual int checkingMemUsage() const = 0;
327 virtual void setCheckingMemUsage(int size) = 0;
328 virtual int diskCacheSize() const = 0;
329 virtual void setDiskCacheSize(int size) = 0;
330 virtual int diskCacheTTL() const = 0;
331 virtual void setDiskCacheTTL(int ttl) = 0;
332 virtual qint64 diskQueueSize() const = 0;
333 virtual void setDiskQueueSize(qint64 size) = 0;
334 virtual DiskIOType diskIOType() const = 0;
335 virtual void setDiskIOType(DiskIOType type) = 0;
336 virtual DiskIOReadMode diskIOReadMode() const = 0;
337 virtual void setDiskIOReadMode(DiskIOReadMode mode) = 0;
338 virtual DiskIOWriteMode diskIOWriteMode() const = 0;
339 virtual void setDiskIOWriteMode(DiskIOWriteMode mode) = 0;
340 virtual bool isCoalesceReadWriteEnabled() const = 0;
341 virtual void setCoalesceReadWriteEnabled(bool enabled) = 0;
342 virtual bool usePieceExtentAffinity() const = 0;
343 virtual void setPieceExtentAffinity(bool enabled) = 0;
344 virtual bool isSuggestModeEnabled() const = 0;
345 virtual void setSuggestMode(bool mode) = 0;
346 virtual int sendBufferWatermark() const = 0;
347 virtual void setSendBufferWatermark(int value) = 0;
348 virtual int sendBufferLowWatermark() const = 0;
349 virtual void setSendBufferLowWatermark(int value) = 0;
350 virtual int sendBufferWatermarkFactor() const = 0;
351 virtual void setSendBufferWatermarkFactor(int value) = 0;
352 virtual int connectionSpeed() const = 0;
353 virtual void setConnectionSpeed(int value) = 0;
354 virtual int socketSendBufferSize() const = 0;
355 virtual void setSocketSendBufferSize(int value) = 0;
356 virtual int socketReceiveBufferSize() const = 0;
357 virtual void setSocketReceiveBufferSize(int value) = 0;
358 virtual int socketBacklogSize() const = 0;
359 virtual void setSocketBacklogSize(int value) = 0;
360 virtual bool isAnonymousModeEnabled() const = 0;
361 virtual void setAnonymousModeEnabled(bool enabled) = 0;
362 virtual bool isQueueingSystemEnabled() const = 0;
363 virtual void setQueueingSystemEnabled(bool enabled) = 0;
364 virtual bool ignoreSlowTorrentsForQueueing() const = 0;
365 virtual void setIgnoreSlowTorrentsForQueueing(bool ignore) = 0;
366 virtual int downloadRateForSlowTorrents() const = 0;
367 virtual void setDownloadRateForSlowTorrents(int rateInKibiBytes) = 0;
368 virtual int uploadRateForSlowTorrents() const = 0;
369 virtual void setUploadRateForSlowTorrents(int rateInKibiBytes) = 0;
370 virtual int slowTorrentsInactivityTimer() const = 0;
371 virtual void setSlowTorrentsInactivityTimer(int timeInSeconds) = 0;
372 virtual int outgoingPortsMin() const = 0;
373 virtual void setOutgoingPortsMin(int min) = 0;
374 virtual int outgoingPortsMax() const = 0;
375 virtual void setOutgoingPortsMax(int max) = 0;
376 virtual int UPnPLeaseDuration() const = 0;
377 virtual void setUPnPLeaseDuration(int duration) = 0;
378 virtual int peerToS() const = 0;
379 virtual void setPeerToS(int value) = 0;
380 virtual bool ignoreLimitsOnLAN() const = 0;
381 virtual void setIgnoreLimitsOnLAN(bool ignore) = 0;
382 virtual bool includeOverheadInLimits() const = 0;
383 virtual void setIncludeOverheadInLimits(bool include) = 0;
384 virtual QString announceIP() const = 0;
385 virtual void setAnnounceIP(const QString &ip) = 0;
386 virtual int maxConcurrentHTTPAnnounces() const = 0;
387 virtual void setMaxConcurrentHTTPAnnounces(int value) = 0;
388 virtual bool isReannounceWhenAddressChangedEnabled() const = 0;
389 virtual void setReannounceWhenAddressChangedEnabled(bool enabled) = 0;
390 virtual void reannounceToAllTrackers() const = 0;
391 virtual int stopTrackerTimeout() const = 0;
392 virtual void setStopTrackerTimeout(int value) = 0;
393 virtual int maxConnections() const = 0;
394 virtual void setMaxConnections(int max) = 0;
395 virtual int maxConnectionsPerTorrent() const = 0;
396 virtual void setMaxConnectionsPerTorrent(int max) = 0;
397 virtual int maxUploads() const = 0;
398 virtual void setMaxUploads(int max) = 0;
399 virtual int maxUploadsPerTorrent() const = 0;
400 virtual void setMaxUploadsPerTorrent(int max) = 0;
401 virtual int maxActiveDownloads() const = 0;
402 virtual void setMaxActiveDownloads(int max) = 0;
403 virtual int maxActiveUploads() const = 0;
404 virtual void setMaxActiveUploads(int max) = 0;
405 virtual int maxActiveTorrents() const = 0;
406 virtual void setMaxActiveTorrents(int max) = 0;
407 virtual BTProtocol btProtocol() const = 0;
408 virtual void setBTProtocol(BTProtocol protocol) = 0;
409 virtual bool isUTPRateLimited() const = 0;
410 virtual void setUTPRateLimited(bool limited) = 0;
411 virtual MixedModeAlgorithm utpMixedMode() const = 0;
412 virtual void setUtpMixedMode(MixedModeAlgorithm mode) = 0;
413 virtual bool isIDNSupportEnabled() const = 0;
414 virtual void setIDNSupportEnabled(bool enabled) = 0;
415 virtual bool multiConnectionsPerIpEnabled() const = 0;
416 virtual void setMultiConnectionsPerIpEnabled(bool enabled) = 0;
417 virtual bool validateHTTPSTrackerCertificate() const = 0;
418 virtual void setValidateHTTPSTrackerCertificate(bool enabled) = 0;
419 virtual bool isSSRFMitigationEnabled() const = 0;
420 virtual void setSSRFMitigationEnabled(bool enabled) = 0;
421 virtual bool blockPeersOnPrivilegedPorts() const = 0;
422 virtual void setBlockPeersOnPrivilegedPorts(bool enabled) = 0;
423 virtual bool isTrackerFilteringEnabled() const = 0;
424 virtual void setTrackerFilteringEnabled(bool enabled) = 0;
425 virtual bool isExcludedFileNamesEnabled() const = 0;
426 virtual void setExcludedFileNamesEnabled(bool enabled) = 0;
427 virtual QStringList excludedFileNames() const = 0;
428 virtual void setExcludedFileNames(const QStringList &newList) = 0;
429 virtual void applyFilenameFilter(const PathList &files, QList<BitTorrent::DownloadPriority> &priorities) = 0;
430 virtual QStringList bannedIPs() const = 0;
431 virtual void setBannedIPs(const QStringList &newList) = 0;
432 virtual ResumeDataStorageType resumeDataStorageType() const = 0;
433 virtual void setResumeDataStorageType(ResumeDataStorageType type) = 0;
434 virtual bool isMergeTrackersEnabled() const = 0;
435 virtual void setMergeTrackersEnabled(bool enabled) = 0;
436 virtual bool isStartPaused() const = 0;
437 virtual void setStartPaused(bool value) = 0;
438 virtual TorrentContentRemoveOption torrentContentRemoveOption() const = 0;
439 virtual void setTorrentContentRemoveOption(TorrentContentRemoveOption option) = 0;
441 virtual bool isRestored() const = 0;
443 virtual bool isPaused() const = 0;
444 virtual void pause() = 0;
445 virtual void resume() = 0;
447 virtual Torrent *getTorrent(const TorrentID &id) const = 0;
448 virtual Torrent *findTorrent(const InfoHash &infoHash) const = 0;
449 virtual QList<Torrent *> torrents() const = 0;
450 virtual qsizetype torrentsCount() const = 0;
451 virtual const SessionStatus &status() const = 0;
452 virtual const CacheStatus &cacheStatus() const = 0;
453 virtual bool isListening() const = 0;
455 virtual void banIP(const QString &ip) = 0;
457 virtual bool isKnownTorrent(const InfoHash &infoHash) const = 0;
458 virtual bool addTorrent(const TorrentDescriptor &torrentDescr, const AddTorrentParams &params = {}) = 0;
459 virtual bool removeTorrent(const TorrentID &id, TorrentRemoveOption deleteOption = TorrentRemoveOption::KeepContent) = 0;
460 virtual bool downloadMetadata(const TorrentDescriptor &torrentDescr) = 0;
461 virtual bool cancelDownloadMetadata(const TorrentID &id) = 0;
463 virtual void increaseTorrentsQueuePos(const QList<TorrentID> &ids) = 0;
464 virtual void decreaseTorrentsQueuePos(const QList<TorrentID> &ids) = 0;
465 virtual void topTorrentsQueuePos(const QList<TorrentID> &ids) = 0;
466 virtual void bottomTorrentsQueuePos(const QList<TorrentID> &ids) = 0;
468 signals:
469 void startupProgressUpdated(int progress);
470 void addTorrentFailed(const InfoHash &infoHash, const QString &reason);
471 void allTorrentsFinished();
472 void categoryAdded(const QString &categoryName);
473 void categoryRemoved(const QString &categoryName);
474 void categoryOptionsChanged(const QString &categoryName);
475 void fullDiskError(Torrent *torrent, const QString &msg);
476 void IPFilterParsed(bool error, int ruleCount);
477 void loadTorrentFailed(const QString &error);
478 void metadataDownloaded(const TorrentInfo &info);
479 void restored();
480 void paused();
481 void resumed();
482 void speedLimitModeChanged(bool alternative);
483 void statsUpdated();
484 void subcategoriesSupportChanged();
485 void tagAdded(const Tag &tag);
486 void tagRemoved(const Tag &tag);
487 void torrentAboutToBeRemoved(Torrent *torrent);
488 void torrentAdded(Torrent *torrent);
489 void torrentCategoryChanged(Torrent *torrent, const QString &oldCategory);
490 void torrentFinished(Torrent *torrent);
491 void torrentFinishedChecking(Torrent *torrent);
492 void torrentMetadataReceived(Torrent *torrent);
493 void torrentStopped(Torrent *torrent);
494 void torrentStarted(Torrent *torrent);
495 void torrentSavePathChanged(Torrent *torrent);
496 void torrentSavingModeChanged(Torrent *torrent);
497 void torrentsLoaded(const QList<Torrent *> &torrents);
498 void torrentsUpdated(const QList<Torrent *> &torrents);
499 void torrentTagAdded(Torrent *torrent, const Tag &tag);
500 void torrentTagRemoved(Torrent *torrent, const Tag &tag);
501 void trackerError(Torrent *torrent, const QString &tracker);
502 void trackersAdded(Torrent *torrent, const QList<TrackerEntry> &trackers);
503 void trackersChanged(Torrent *torrent);
504 void trackersRemoved(Torrent *torrent, const QStringList &trackers);
505 void trackerSuccess(Torrent *torrent, const QString &tracker);
506 void trackerWarning(Torrent *torrent, const QString &tracker);
507 void trackerEntryStatusesUpdated(Torrent *torrent, const QHash<QString, TrackerEntryStatus> &updatedTrackers);