Commit Graph

1269 Commits

Author SHA1 Message Date
Vladimir Golovnev
dbfd830b56 Avoid repeatedly creating the same QDateTime values
PR #21904.
2024-11-26 15:11:07 +03:00
Vladimir Golovnev
ad3348b95f Fix incorrect SQL column definition
PR #21874.
2024-11-23 11:25:40 +03:00
Vladimir Golovnev
71b752baf3 Discard obsolete "state update" events after torrent is reloaded
PR #21873.
Closes #21827.
2024-11-23 11:21:17 +03:00
Chocobo1
ac9ca4f452 Don't apply Mark-of-the-Web on existing files
`TorrentImpl::isDownloading()` was excessively broad which included unexpected events for the
case here. So use the underlying state directly.

Closes #21788.
PR #21836.
2024-11-16 16:04:51 +03:00
Vladimir Golovnev
993eb25323 Preserve initial torrent progress while checking resume data
PR #21784.
2024-11-10 12:51:17 +03:00
Vladimir Golovnev
330dce6aa2 Correctly handle "torrent finished" events
PR #21786.
Closes #21699.
2024-11-08 11:47:37 +03:00
Vladimir Golovnev
5e105b0348 Optimize checking for outdated tracker endpoints
PR #21768.
2024-11-07 09:42:53 +03:00
Vladimir Golovnev
f2b2a2b034 Optimize converting TCP endpoints to strings
There may be quite a few endpoint names (one for each available network card), and they usually remain unchanged throughout the session, while previously producing such names was performed every time they were accessed. Now they are retrieved from the cache.

PR #21770.
2024-11-07 09:42:43 +03:00
Vladimir Golovnev
10499dffe9 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:46:28 +03:00
Vladimir Golovnev
eea01b94a3 Reset tracker entries when pause the session
PR #21738.
2024-11-04 16:28:04 +03:00
Hanabishi
983b7814aa Add "Simple pread/pwrite" disk IO type
PR #21300.
2024-10-21 15:47:28 +03:00
Vladimir Golovnev
fbf68a0649 Correctly apply filename filter when !qB extension is enabled
PR #21628.
Closes #21624.
2024-10-19 13:39:12 +03:00
Vladimir Golovnev
bb314e1555 Correctly handle "torrent finished after move" event
PR #21596.
Closes #21576.
2024-10-14 11:52:56 +03:00
Vladimir Golovnev
6379c33964 Disable "Move to trash" option by default
PR #21528.
2024-10-10 14:16:37 +03:00
Vladimir Golovnev
3e96048ee4 Apply "merge trackers" logic regardless of way the torrent is added
PR #21299.
2024-09-07 09:13:19 +04:00
stalkerok
63689cf763 Add a flag about the connection peers are using NAT hole punching
PR #21052.
2024-08-15 20:33:45 +03:00
Vladimir Golovnev
7dfb0110d4 Fix Incomplete Save Path cannot be changed for torrents without metadata
PR #21152.
Closes #21140.
2024-08-08 08:22:54 +03:00
Vladimir Golovnev
96607ce874 Prevent incorrect size from being used for creating array
PR #21050.
2024-07-12 08:51:08 +03:00
Vladimir Golovnev
4149609e78 Allow to move content files to Trash instead of deleting them
PR #20252.
2024-07-07 16:09:48 +03:00
Vladimir Golovnev
78c549f83e Use custom storage when reloading torrent
PR #20998.
2024-07-07 16:07:22 +03:00
Chocobo1
fe93b6d0d8 Use proper casting
Previously `m_shutdownTimeout * 1000` was calculated in `int` and now it
is `qint64`.

PR #20982.
2024-06-25 21:13:19 +03:00
Chocobo1
0f5a27ed50 Improve connection handling
1. Previously unhandled connections will stay in pending state. It won't
be closed until timeout happened. This may lead to wasting system
resources. Now the (over-limit) connection is actively rejected.

2. When out-of-memory occurs here, reject the new connection instead of
throwing exception and crash.

3. Also clean up some unused bits.

PR #20961.
2024-06-25 21:13:18 +03:00
Vladimir Golovnev
05e3130baa Apply share limits when torrent downloading is finished
PR #20917.
Closes #20874.
2024-06-25 21:13:17 +03:00
Vladimir Golovnev
683492648f Apply filename filter to subfolder names as well
PR #20902.
Closes #14480.
2024-06-25 21:13:17 +03:00
Vladimir Golovnev
e09a871ca3 Revamp alerts handling
PR #20854.
2024-05-18 10:36:08 +03:00
Hanabishi
2c47f09d7a Sanitize peer client names
PR #20788.
Closes #20010.
2024-05-11 18:46:11 +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
Vladimir Golovnev
ca71c186e0 Don't forget to resume "missing files" torrent when rechecking
PR #20747.
2024-04-24 09:15:19 +03:00
Aliaksei Urbanski
f37d0c486c Add the Popularity metric
PR #20180.
2024-04-01 21:23:08 +03: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
Vladimir Golovnev
0114610a40 Provide torrent creation feature via WebAPI
PR #20366.
Closes #5614.

Co-authored-by: Radu Carpa <radu.carpa@cern.ch>
2024-02-27 15:57:16 +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
7786e1b084 Improve received metadata handling
Avoid blocking call to libtorrent when accessing underlying torrent_info object.

PR #20424.
2024-02-21 17:25:54 +03:00
Chocobo1
f87ea1b5d3 Sort languages combobox by language code
* Avoid creating redundant file lists
* Sort languages combobox by language code

PR #20365.
2024-02-05 13:44:18 +08:00
Vladimir Golovnev
88a4990435 Don't use iterator after erase
PR #20357.
Closes #20356.
2024-02-03 08:10:14 +03:00
Chocobo1
94e80d01a8 Clean up code
* Use compiler generated comparison function
* Use designated initializers
* Convert to proper type
* Use reference
* Remove redundant text
  The `msg` already contain the text `Reason:` so it isn't needed.

PR #20312.
2024-01-25 02:56:12 +08: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
Chocobo1
cc563d9f78 Fix incorrect usage of translation functions
PR #20107.
2023-12-10 23:07:29 +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
4ba8eaf4b4 Don't forget to store Stop condition
PR #20045.
Closes #20043.
2023-11-30 08:58:41 +03:00
Vladimir Golovnev
60eaff9fcb Simplify share ratio limits processing code
PR #19971.
2023-11-21 22:14:27 +03:00