Commit Graph

309 Commits

Author SHA1 Message Date
Vladislav Grechannik
cd3982cf3c Include missing header
PR #20776.
Closes #20774.
2024-05-01 12:37:22 +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
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
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
Chocobo1
ad22237a2f Provide safe helper for converting to 'seconds since epoch' 2024-01-08 15:13:02 +08:00
Chocobo1
5b3b56c918 Improve natural sort algorithm
1. Use proper case folding function instead of `toLower()`.
2. Use locale aware comparison instead of comparing unicode code points.
   Now `a` comes before `A` which is the same as the result from QCollator. A nice side effect
   is now it properly compares locale specific characters (for example `C`, `Č`).
3. Improve testing. Now the test is runnable and stable on all platforms.

PR  #20208.
2024-01-08 14:47:00 +08:00
Chocobo1
d5bf0358cb Revise conditional for when to use QCollator
According to https://doc.qt.io/qt-6/qcollator.html#posix-fallback-implementation
The 'POSIX fallback implementation' is only used when ICU is not available. So the correct way is to detect ICU directly and not depend on the OS. The exceptions are macOS and Windows since they support the required functionalities natively.
Closes #20205.
PR #20207.
2024-01-02 16:58:12 +08:00
Chocobo1
073ca4267c Introduce helper function to join values as string
PR #20130.
2023-12-19 00:08:37 +08:00
Victor Chernyakin
0297f0f34b Allow relative profile paths
PR #19558.
2023-12-07 09:20:37 +03:00
Chocobo1
6f7f418ec1 Improve error message when daemonizing failed
PR #19959.
2023-11-21 14:05:32 +08:00
Vladimir Golovnev
0f40fad74d Drop WebUI default credentials
PR #19777.
2023-11-10 07:18:42 +03:00
Chocobo1
794cce38f3 Move some functions into Utils::OS namespace
Also remove `Utils::Misc::getUserIDString()` since there are no use of
it.
2023-11-06 14:09:34 +08:00
Chocobo1
98576dacae Add support for quarantine on macOS 2023-10-29 17:41:08 +08:00
Chocobo1
b4642ca9d3 Use proper fallback value for Mark-of-the-Web URL
References:
https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/components/services/quarantine/quarantine_win.cc#211
https://hg.mozilla.org/mozilla-central/file/bd568ad893882d37f094d43cba3f62c78982cd05/toolkit/components/downloads/DownloadIntegration.sys.mjs#l537
2023-10-29 17:41:08 +08:00
Chocobo1
347124812e Migrate away from deprecated functions 2023-10-29 17:40:02 +08:00
Vladimir Golovnev
6860c0d60d Allow to set qBittorrent as default program
Register qBittorrent as possible default program for .torrent files and
magnet links during install.

PR #19446.
2023-10-24 13:31:01 +03:00
Chocobo1
cba433823f Improve .torrent associate handling
* Use correct pointer type in NSIS scripts
* Only remove qbt specific registry keys when uninstalling or disassociating
* Set .torrent Content Type when associating .torrent format
* Move ".torrent association" functions to Utils::OS class

PR #19709.
2023-10-16 14:51:17 +08:00
Nick Korotysh
e6ec3d0c2b Display download/upload speed in dock icon
Implementation is based on Transmission sources.

Closes #2761
Closes #3671
Closes #7098
Closes #11350
Closes #18527

PR #19595
2023-10-16 14:45:24 +08:00
Chocobo1
34f7b75f12 Add support for Mark-of-the-Web
https://redcanary.com/threat-detection-report/techniques/mark-of-the-web-bypass/
https://mikehadlow.blogspot.com/2011/07/detecting-and-changing-files-internet.html
https://textslashplain.com/2016/04/04/downloads-and-the-mark-of-the-web/

Closes #19648.
PR #19675.
2023-10-07 12:28:07 +08: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
b3fda76027 Allow users to specify Python executable path
Closes #19195.
PR #19644.
2023-09-28 01:27:48 +08:00
Chocobo1
529e49aea7 Fix performance regression
Follow up #19417.
PR #19652.
2023-09-28 01:26:57 +08:00
Vladimir Golovnev
7cd2445a49 Improve tracker entries handling
PR #19496.

* Add torrent entry status to represent tracker error
* Add torrent entry status to represent unreachable endpoint
* Display tracker entry next/min announce time
* Reset tracker entries when torrent is stopped
2023-09-07 08:58:13 +03:00
Chocobo1
ff80e0ce66 Use Qt built-in non-breaking space variable 2023-09-04 13:10:12 +08:00
Victor Chernyakin
65930ddf94 Use std::pair instead of QPair
PR #19548.
2023-09-03 09:39:34 +03:00
Chocobo1
4d2015cfed Support creating .torrent with larger piece size
Warning: users are at their own discretion to create .torrent with >= 64 MiB piece size as not
every torrent client supports it.
Larger piece sizes are only available when using libtorrent 2.x. libtorrent 1.x is not
efficient with memory usage and in order to avoid user complaints it is limited to 128 MiB.
Also note that, as of this writing, libtorrent 2.0.9 has an internal limitation that only
allows loading maximum 256 MiB piece size. And therefore > 256 MiB size options are forbidden
for now.

Closes #19527.
PR #19535.
2023-09-03 14:31:32 +08:00
Chocobo1
24da51ffa0 Perform type conversion properly
Closes #19521.
PR #19525.
2023-09-01 00:18:03 +08:00
Victor Chernyakin
34d30ed031 Replace Q_UNUSED with [[maybe_unused]] attribute
PR #19471.
2023-08-18 07:09:40 +03:00
Victor Chernyakin
f3f4610ba4 Convert Windows header names to lowercase
PR #19465.
2023-08-16 10:29:13 +03:00
Chocobo1
69d60b5f1c Specify interface requirements as an C++ concept
PR #19440.
2023-08-12 20:53:03 +08:00
Chocobo1
31fe327763 Move to separate headers
Hopefully this can speed up compilation times.
https://doc.qt.io/qt-6/qtglobal.html#details

PR #19430.
2023-08-11 13:47:55 +08:00
Chocobo1
5c06d0aa75 Replace template conditionals with C++20 requires clause
Related: https://clang.llvm.org/extra/clang-tidy/checks/modernize/use-constraints.html

PR #19424.
2023-08-09 20:33:19 +08:00
Vladimir Golovnev
06581636a1 Utilize QByteArrayView
PR #19417.
2023-08-07 11:21:32 +03:00
Vladimir Golovnev
a0fa1709d5 Raise minimum supported Qt version to 6.5
PR #19394.
2023-08-07 07:19:43 +03:00
Chocobo1
a5a4ea9ba0 Remove unused conditional 2023-07-31 03:03:02 +08:00
Chocobo1
7612d5d0ef Use default operators generated/synthesized by compiler 2023-07-22 02:25:44 +08:00
Vladimir Golovnev
dbe79484d2 Drop support of Qt 5
Also remove usage of some deprecated stuff.

PR #19338.
2023-07-20 11:17:27 +03:00
Chocobo1
66e533f505 Avoid redundant buffer copying
PR #19272.
2023-07-04 14:04:41 +08:00
Chocobo1
80791e328d Fix wrong behavior when reading text
Also add another 'file read error' status.

Closes #19254.
PR #19262.
2023-07-02 13:23:20 +08:00
Chocobo1
e6d85a468b Rename literal operator
Qt 6.4 introduced `QString operator""_s()` and the previous `""_qs` is
deprecated since Qt 6.8.
2023-06-18 03:32:44 +08:00
Chocobo1
79ca2e145f Don't read unlimited data from files
It now guards against reading infinite files such as `/dev/zero`.
And most readings are bound with a (lax) limit.
As a side effect, more checking are done when reading a file and
overall the reading procedure is more robust.

PR #19095.
2023-06-14 13:38:19 +08:00
Vladimir Golovnev
160af4feef Show I2P peer addresses
PR #18845.
2023-06-01 17:16:03 +03:00
Chocobo1
b406d669b3 Bump python version minimum requirement
PR #18996.
2023-05-22 12:37:02 +08:00
Chocobo1
4ef8f39f23 Use python isolate mode
This (more or less) avoids user's environment variables tampering the
search process.
And also remove usages of `eval()` and `exec()`.

PR #18995.
2023-05-21 14:04:44 +08:00
Chocobo1
5f00d42a49 Drop superfluous const 2023-05-05 14:51:02 +08:00
Chocobo1
5dcc14153f Move feature macro declaration to build scripts
PR #18825.
2023-04-10 13:38:00 +08:00
Chocobo1
a01f1014b9 Inline variable defined in header 2023-04-05 18:32:18 +08:00
Vladimir Golovnev
77aa85fbd3 Provide UI Theme editor
PR #18655.
2023-03-16 10:03:05 +03:00
brvphoenix
b33dc7d831 Unify the way to generate the language list in WebUI and GUI
PR #17994.
2022-12-25 16:44:37 +03:00