Commit graph

153 commits

Author SHA1 Message Date
Thomas Piccirello
4fc36b9e99
Support fetching tracker list from URL
Trackers specified at the URL will be added to newly added public torrents.

This feature is adapted from qBittorrent-Enhanced-Edition to allow for automatically adding trackers retrieved from a URL. @ngosang's trackerlist repo is a good example, however I've opted not to include a default URL.

Partially addresses #14535.
PR #21828.
2025-01-08 14:51:09 +08:00
Chocobo1
22e156e0af
Simplify captured variable type
By capturing the specific data instead of torrent handle the lambda can become non-mutable.

PR #22102.
2025-01-06 18:22:43 +08:00
Chocobo1
efe06f133d
Revise DHT bootstrap node list
Discussion:
https://github.com/qbittorrent/qBittorrent/pull/21296#issuecomment-2562341328
https://github.com/qbittorrent/qBittorrent/pull/21296#issuecomment-2561373010

PR #22081.
2024-12-31 13:34:08 +08:00
Vladimir Golovnev
eb2eea8d34
Avoid race condition when update tracker entries
PR #21995.
2024-12-15 14:07:36 +03:00
Chocobo1
a311c259cc
Use proper data type for elapsed time
PR #21963.
2024-12-08 17:02:20 +08:00
Vladimir Golovnev
a180162405
Avoid redundant requests of announce entries from libtorrent
PR #21949.
2024-12-06 19:59:45 +03:00
Vladimir Golovnev
d90a9d15ac
Avoid using QDateTime for announce timestamps
PR #21906.
2024-11-27 21:03:54 +03:00
Vladimir Golovnev
15ea836bb9
Avoid repeatedly creating the same QDateTime values
PR #21904.
2024-11-26 09:04:59 +03:00
Chocobo1
92daca1fef
Avoid redundant string length scan
PR #21807.
2024-11-11 19:19:10 +08:00
Thomas Piccirello
f89c4c32ed
Display External IP Address in status bar
This change displays the last detected IPv4 and/or IPv6 address(es) in the GUI and WebUI's status bar. This does not yet handle systems with multiple addresses of the same type (e.g. multiple IPv6 addresses).

PR #21383.

---------

Co-authored-by: Odin Vex <44311901+OdinVex@users.noreply.github.com>
2024-11-09 15:58:13 +08:00
Vladimir Golovnev
33e3fb2f46
Correctly handle "torrent finished" events
PR #21786.
Closes #21699.
2024-11-08 11:45:57 +03:00
Vladimir Golovnev
75d1ac8889
Optimize conversion of time points from libtorrent to Qt clocks
Obtain current date time of Qt and libtorrent clocks only once
for processing entire current libtorrent alerts bunch.

PR #21764.
2024-11-05 16:43:43 +03:00
Chocobo1
051d7137ea
Use proper macro for unreachable switch cases
Those are the `default` cases which are not expected to hit (nor reachable) normally.

When the code is compiled with release mode and it reaches `Q_UNREACHABLE()`, it becomes
undefined behavior. So it rely on the developers to catch the errors in debug mode.
The upside of this is that the `switch` statement will be more optimized than not using it.
This also means the statements after `Q_UNREACHABLE()` isn't important. It allow anything to
preserve the intention of the code.

This macro is preferred over C++23 `std::unreachable` because it will automatically insert a
`Q_ASSERT(false)` with it.

PR #21752.
2024-11-05 11:55:55 +08:00
Vladimir Golovnev
b462a2bf0c
Reset tracker entries when pause the session
PR #21738.
2024-11-04 16:27:21 +03:00
Vladimir Golovnev
4805afc1a2
Correctly apply filename filter when !qB extension is enabled
PR #21628.
Closes #21624.
2024-10-19 13:36:03 +03:00
Vladimir Golovnev
8e941a06f1
Correctly handle "torrent finished after move" event
PR #21596.
Closes #21576.
2024-10-14 11:51:30 +03:00
Chocobo1
21b0367629
Avoid heavy weight function object
Also, by switching to template we can avoid the cost of converting to some specific type and
perfectly forward the parameter to the final function.

PR #21572.
2024-10-12 15:15:39 +08:00
Vladimir Golovnev
2d857b6200
Disable "Move to trash" option by default
PR #21528.
2024-10-10 14:13:40 +03:00
Chocobo1
9e5433bcf8
Add name to threads
This help identifying threads when debugging.
The naming scheme is using 'class/function name + variable name'.
Note that the length limitaion is 16 chars on linux. On Windows, the limit is 32767 chars.

PR #21403.
2024-10-06 15:23:50 +08:00
stalkerok
e75bcbed6d
Remove non-working DHT bootstrap nodes
router.utorrent.com has been dead for a long time. router.bittorrent.com died about a month or two ago. dht.aelitis.com doesn't work either. It is no longer possible to get DHT nodes from them.
Added router.silotis.us. Only ipv6!

PR #21296.
2024-10-05 16:45:29 +08:00
Hanabishi
b5b34c9ff4
Add "Simple pread/pwrite" disk IO type
PR #21300.
2024-10-01 19:58:35 +03:00
Burnerelu
e06b7f8f4d
Enable customizing the save statistics time interval
This change extends the Advanced section of the Preferences menu with a new field, allowing changing the time statistics save interval. A zero value will prevent recurrent saving.

This aims to provide the feature requested in issue #21285.

PR #21291.
2024-09-16 17:16:59 +08:00
Vladimir Golovnev
d9bc7935eb
Apply "merge trackers" logic regardless of way the torrent is added
PR #21299.
2024-09-06 16:28:22 +03:00
Vladimir Golovnev
5ef2a1df07
Use QList explicitly
PR #21016.
2024-07-04 08:30:39 +03:00
Vladimir Golovnev
4e27e88f6a
Allow to move content files to Trash instead of deleting them
PR #20252.
2024-06-29 08:21:35 +03:00
Chocobo1
5740238933
Use proper casting
Previously `m_shutdownTimeout * 1000` was calculated in `int` and now it
is `qint64`.

PR #20982.
2024-06-24 15:02:48 +08:00
Vladimir Golovnev
65d143d4c4
Apply share limits when torrent downloading is finished
PR #20917.
Closes #20874.
2024-06-12 09:03:07 +03:00
Vladimir Golovnev
d89f289f82
Apply filename filter to subfolder names as well
PR #20902.
Closes #14480.
2024-06-12 09:02:10 +03:00
Vladimir Golovnev
e09a871ca3
Revamp alerts handling
PR #20854.
2024-05-18 10:36:08 +03:00
Vladimir Golovnev
2b728b3bc0
Add an option to set BitTorrent session shutdown timeout
PR #20797.
2024-05-07 13:15:39 +03:00
Vladimir Golovnev
8ef7d3ec9a
Add ability to pause/resume entire BitTorrent session
PR #20757.
Closes #18993.
2024-05-03 09:02:50 +03:00
Chocobo1
321d7e5b17
Adjust tracker tier when adding additional trackers
Closes #20102.
PR #20729.
2024-04-25 12:18:30 +08:00
Chocobo1
90383567b2
Revise Tracker related classes
And also rename them.

PR #20489.
2024-04-01 19:17:35 +08:00
thalieht
5d1c249606
Use Start/Stop instead of Resume/Pause
PR #20532.

---------

Co-authored-by: Vladimir Golovnev (Glassez) <glassez@yandex.ru>
2024-03-25 19:11:04 +03:00
Vladimir Golovnev
d5e41bf679
Allow torrents to override default share limit action
PR #20528.
2024-03-12 14:08:59 +03:00
Chocobo1
cffd74b62a
Add support for SSL torrents
The 'SSL torrent' feature is not standardized. I.e. there are no BEP (BitTorrent Enhancement Proposals) associated with it, so we do not greatly encourage its usage as it will only work with libtorrent clients and derivatives. It will not work with other torrent clients that do not support the libtorrent specific implementation.
This PR aims to provide minimal support for those who need SSL torrents. Furthermore, it is intended that there will be no UI support (nor indication) of adding/creating SSL torrents.

* Prerequisites:
  I omit the instructions of creating those files as the intended audience (experts & advanced users) should have no problem with it. All files are as follow:
  1. Root (torrent publisher) certificate
  2. Root private key
  3. A .torrent file created with root certificate 
  5. Peer certificate (signed by the root certificate)
  6. Peer private key
  7. Diffie-Hellman parameters file
  
  All files are stored in .pem format.

* Enable SSL torrent protocol in qbt
  There are 2 hidden keys to put in qbt config file, under `[BitTorrent]` section:
  1. `Session\SSL\Enabled`: set it to `true`.
  2. `Session\SSL\Port`: set it to some unused port or omit the key entirely to let qbt pick one for you.
* Add an SSL torrent to qbt
  The only way of adding an SSL torrent is via WebAPI. The `/api/v2/torrents/add` endpoint will support 3 additional parameters. You must provide them for an SSL torrent.
  1. `ssl_certificate`: Contents of the peer certificate file (in PEM format).
  2. `ssl_private_key`: Contents of the peer private key file.
  3. `ssl_dh_params`: Contents of the Diffie-Hellman parameters file.

* Change the SSL parameters to a torrent
  In case you provided wrong SSL parameters when adding a torrent, there is a new endpoint `/api/v2/torrents/setSSLParameters` that you can update the SSL parameters. The parameters (`ssl_*`) are the same as `/api/v2/torrents/add` endpoint.

* Query the SSL parameters of a torrent
  There is a new endpoint `/api/v2/torrents/SSLParameters` that you can query the SSL parameters of a torrent.

References:
* https://www.libtorrent.org/manual-ref.html#ssl-torrents
* https://blog.libtorrent.org/2012/01/bittorrent-over-ssl/

PR #20338.
---------

Co-authored-by: Radu Carpa <radu.carpa@cern.ch>
2024-02-25 19:58:58 +08:00
Vladimir Golovnev
88a4990435
Don't use iterator after erase
PR #20357.
Closes #20356.
2024-02-03 08:10:14 +03:00
Vladimir Golovnev
bab9c15913
Revamp handling of getting resume data from libtorrent
PR #20310.
2024-01-24 15:40:08 +03:00
Vladimir Golovnev
8ec3db1807
Change "metadata received" stop condition behavior
PR #20283.
Closes #20122.
2024-01-19 20:34:40 +03:00
Vladimir Golovnev
14513d051d
Don't stuck loading on mismatching info-hashes in resume data
PR #20262.
Closes #20251.
2024-01-13 18:08:16 +03:00
Vladimir Golovnev
f3d45327e1
Apply inactive seeding time limit set on new torrents
PR #20231.
Closes #20224.
2024-01-05 18:25:29 +03:00
Vladimir Golovnev
9bf7f3b181
Show correctly decoded filename in log
PR #20214.
Closes #20186.
2024-01-02 16:03:12 +03:00
Chocobo1
073ca4267c
Introduce helper function to join values as string
PR #20130.
2023-12-19 00:08:37 +08:00
Vladimir Golovnev
7a41192597
Add a class to represent a tag
PR #20028.
Closes #19744.
2023-12-05 17:01:09 +03:00
Vladimir Golovnev
60eaff9fcb
Simplify share ratio limits processing code
PR #19971.
2023-11-21 22:14:27 +03:00
Vladimir Golovnev
a1c78a0455
Follow the parent category options
PR #19957.
Closes #19941.
2023-11-20 20:37:17 +03:00
Vladimir Golovnev
2a20764d39
Add option to enable ".unwanted" folder
PR #19926.
2023-11-13 14:25:27 +03:00
Vladimir Golovnev
12674d2990
Prevent crash due to race condition when adding magnet link
PR #19792.
2023-10-28 10:41:53 +03:00
Vladimir Golovnev
c051ee9409
Revamp tracker list widget
Internally redesign tracker list widget using Qt Model/View architecture.
Make tracker list sortable by any column.

PR #19633.
Closes #261.
2023-10-03 08:42:05 +03:00
Chocobo1
bda18ad29b
Add logging for some alerts
Specifically these alerts:
* i2p_alert
* session_error_alert

PR #19662.
2023-09-30 11:43:44 +08:00