Commit Graph

2275 Commits

Author SHA1 Message Date
Vladimir Golovnev
eb2eea8d34 Avoid race condition when update tracker entries
PR #21995.
2024-12-15 14:07:36 +03:00
antanilol
27451469fa Add eXact Length parameter when creating magnet URI
Include the `xl` (eXact Length) parameter in the magnet URI string inside the function `TorrentImpl::createMagnetURI()`.

Closes #20752.
PR #21958.
2024-12-09 03:29:41 +08:00
Chocobo1
a311c259cc Use proper data type for elapsed time
PR #21963.
2024-12-08 17:02:20 +08:00
Chocobo1
cbf7c09bf4 Use built-in method for setting header
PR #21961.
2024-12-08 16:33:35 +08:00
Chocobo1
6f31a13f22 Don't follow symlink when creating torrents on Windows
Now on Windows, it won't follow/include .lnk files when creating torrents.
Note that libtorrent will throw errors if we force adding .lnk files.

Non-Windows OS will still follow symlinks.

Closes #13286.
PR #21944.
2024-12-07 20:43:16 +08:00
Vladimir Golovnev
200f7fc628 Use cached current time when parse RSS feed
PR #21959.
2024-12-07 11:10:53 +03:00
Vladimir Golovnev
a180162405 Avoid redundant requests of announce entries from libtorrent
PR #21949.
2024-12-06 19:59:45 +03:00
wavygecko
d11622e3c0 Don't add duplicate episodes to previously matched
PR #21917.
2024-11-28 11:37:05 +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
Vladimir Golovnev
0eba285ff1 Fix incorrect SQL column definition
PR #21874.
2024-11-21 13:57:37 +03:00
Vladimir Golovnev
88161a6467 Discard obsolete "state update" events after torrent is reloaded
PR #21873.
Closes #21827.
2024-11-21 13:56:22 +03:00
Chocobo1
6ddde3f4b6 Avoid redundant string length function calls
Also switch to `std::string_view` as it is more generic and can handle more types (including
view types).

PR #21861.
2024-11-19 02:53:16 +08:00
Chocobo1
f4eec75488 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 15:57:55 +08:00
Chocobo1
0f12d077c8 Avoid reapplying Mark-of-the-Web when it already exists
Also use scope guards to handle resources.

Related #21788.
PR #21806.
2024-11-14 15:06:33 +08:00
Chocobo1
92daca1fef Avoid redundant string length scan
PR #21807.
2024-11-11 19:19:10 +08:00
Vladimir Golovnev
69f19d4a0b Preserve initial torrent progress while checking resume data
PR #21784.
2024-11-10 12:01:12 +03: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
a6c7aef6c1 Optimize checking for outdated tracker endpoints
PR #21768.
2024-11-07 09:40:33 +03:00
Vladimir Golovnev
4527536858 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:39:33 +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
0f18e80154 Fix .torrent file could not be deleted when torrent is canceled
PR #21735.
Closes #21723.
2024-11-02 16:41:05 +03:00
Chocobo1
e91412ec8b Use default secure protocol list from Qt
In Qt 6.5, `QSsl::SecureProtocols` is the same as `QSsl::TlsV1_2OrLater`. And by using
`QSsl::SecureProtocols` we won't need to worry it being outdated since Qt will regularly adjust
it.
https://github.com/qt/qtbase/blob/v6.5.0/src/plugins/tls/openssl/qsslcontext_openssl.cpp#L425-L429
2024-10-22 00:27:01 +08:00
Chocobo1
337730ddef Simplify SSL parameters setup
Simplify code by utilizing QSslConfiguration object.
Also don't mess with global default value via `QSslConfiguration::setDefaultConfiguration`. It
should not be done at such local class.
2024-10-21 16:22:45 +08: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
Vladimir Golovnev
966387859a Always notify user about duplicate torrent
PR #21480.
Closes #21475.
2024-10-14 11:50:20 +03:00
sledgehammer999
3d9e9715b4 Merge pull request #21364 from sledgehammer999/dont_ignore_ssl_errors
Don't ignore SSL errors
2024-10-12 10:37:48 +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
Chocobo1
ac646f47a2 Avoid shadowing function parameter
The function already has a parameter named `result`.
Also remove a duplicate variable since it already has a pref pointer at the start of the function.

PR #21571.
2024-10-12 15:04:47 +08:00
Vladimir Golovnev
2d185dc1c7 Allow to choose Qt style
PR #21553.
2024-10-11 16:04:57 +03: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
Vladimir Golovnev
3fb5d7764c Don't try to apply Mark-of-the-Web to nonexistent files
Trying to apply it to a nonexistent file is unacceptable, as it may unexpectedly create such a file.

PR #21488.
Closes #21440.
2024-10-05 12:27:03 +03: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
sledgehammer999
6981217369 Don't ignore SSL errors 2024-10-04 22:48:46 +03:00
Hanabishi
b5b34c9ff4 Add "Simple pread/pwrite" disk IO type
PR #21300.
2024-10-01 19:58:35 +03:00
Chocobo1
7b45566efc Migrate away from deprecated functions in Qt 6.9
Closes #21412.
PR #21415.
2024-09-30 18:31:17 +08:00
Chocobo1
10eb921d70 Allow drop action only on transfer list
Now drop action is only allowed on transfer list, previously it was on main window.
Having drop action on the whole main window is not preferred because it could allow drop action
on other unrelated widgets, such as execution log or RSS widget which is unexpected behavior.

PR #21332.
2024-09-30 16:59:57 +08:00
Chocobo1
a23f45cc70 Split platform specific code to its own file
PR #21368.
2024-09-22 14:28:40 +08:00
Chocobo1
23f7275bd5 Merge pull request #21333 from Chocobo1/random
Improve PRNG functions
2024-09-16 17:56:19 +08: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
Chocobo1
3058158b69 Use modern function for getting random numbers on Windows
The previous `RtlGenRandom()` just redirects to `ProcessPrng()` according to "The Windows 10
random number generation infrastructure" whitepaper from MS.

`ProcessPrng()` is also the de facto PRNG for Rust lang:
aa13fa5882/src/windows.rs (L3C1-L22C81)
And for golang:
https://go-review.googlesource.com/c/go/+/536235
2024-09-14 23:20:07 +08:00
Chocobo1
dbef6da544 Use modern function for getting random numbers on Linux
Now we don't need a file handle anymore and there is no initialization involved in this new
implementation.
2024-09-13 22:27:42 +08:00
Chocobo1
130c0d8487 Revise cookie 'secure flag' enable condition
The localhost is 'potentially trustworthy' and RFC 6265 allows setting secure flag in this case.
Also check `X-Forwarded-Proto` header value to support reverse proxy usage.

Note: for reverse proxy users, now the `X-Forwarded-Proto` header is expected to be sent to qbt
otherwise the `secure` flag might be set erroneously.

https://datatracker.ietf.org/doc/html/rfc6265#section-4.1.2.5
https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy

Closes #21250.
PR #21260.
2024-09-07 21:38:27 +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
Chocobo1
fc82abe7f6 Remove 'loopback address detection' helper function
It is not needed since `QHostAddress::isLoopback()` can do the job.
PR #21259.
2024-08-31 15:53:39 +08:00