Compare commits

..

1087 Commits

Author SHA1 Message Date
sledgehammer999
7d7097b024 Bump to 4.5.5 2023-08-29 01:47:20 +03:00
sledgehammer999
ab6f344b65 Update Changelog 2023-08-29 01:44:05 +03:00
sledgehammer999
a3e08c6254 Sync translations from Transifex and run lupdate 2023-08-29 01:42:56 +03:00
MarcDrieu
4a97e1d5be NSIS: Update French translation
PR #19284.
2023-08-29 01:18:37 +03:00
rusu-afanasie
f5c52db838 NSIS: Add Romanian translation
PR #19377.
2023-08-29 01:18:37 +03:00
sledgehammer999
93b1f3a8fd Fix typos
Partial cherry-pick of 6680fdda18
2023-08-29 01:16:40 +03:00
sledgehammer999
7f2cc24f22 NSIS: Fix missing slash in Qt translations script
PR #19196.
2023-08-29 00:50:26 +03:00
sledgehammer999
b863f360a5 Bump copyright year 2023-08-29 00:46:18 +03:00
sledgehammer999
2618472e44 Pull translations from Transifex 2023-08-29 00:40:35 +03:00
Vladimir Golovnev
7376f72d34 Merge pull request #19455 from glassez/v4.5
Backport changes to v4.5.x branch
2023-08-14 17:54:51 +03:00
Omar Abdul Azeez
25d57ff807 Fix overwriting feeds.json with an incomplete load of it
PR #19444.
Closes #19439.

---------

Co-authored-by: Vladimir Golovnev <glassez@yandex.ru>
2023-08-12 21:36:37 +03:00
Vladimir Golovnev
d0f071b625 Map selected indexes to source before modify the data
Changing the data may affect the layout of the sort/filter model, which in turn may invalidate the indexes previously obtained from selection model before we process them all. Therefore, we must map all the selected indexes to source before start processing them.

PR #19372.
Closes #19359.
2023-07-26 20:25:10 +03:00
sledgehammer999
710478686e Merge pull request #19295 from sledgehammer999/noop-update
Disable update checks on versions before Windows 10
2023-07-18 14:47:27 +03:00
sledgehammer999
d1e0c7beaa Sync translations from Transifex and run lupdate 2023-07-12 01:54:25 +03:00
Vladimir Golovnev
aaf757f29e Merge pull request #19205 from glassez/v4.5
Backport changes in v4.5.x branch
2023-07-10 10:55:14 +03:00
sledgehammer999
93204a63ad Disable update checks on versions before Windows 10
On versions before Windows 10 the user is running the Qt5 build.
The next qBittorrent release will change to Qt6 as the default build.
It is counterintuitive to tell the user about available updates when they are
running an incompatible Windows version.
2023-07-10 10:14:29 +03:00
gdim47
7774020ba8 Improve performance when scrolling large torrents
PR #19255.
2023-07-07 16:07:27 +03:00
Burak Yavuz
62d87f384b NSIS: Update Turkish translation
Corrected and updated some strings

PR #19242.
2023-07-07 16:07:23 +03:00
Vladimir Golovnev
6ee6815d24 Always use the same limits when parse bencoded data
PR #19263.
2023-07-04 13:30:51 +03:00
Vladimir Golovnev
4497ca4a0e Immediately update torrent status on moving files
PR #19220.
2023-06-25 13:00:26 +03:00
Vladimir Golovnev
72028be563 Don't miss to enable Apply button
PR #19221.
Closes #19082.
2023-06-25 12:53:55 +03:00
thalieht
b5fddd5408 Fix transfer list tab hotkey
PR #19200.
2023-06-20 07:49:45 +03:00
sledgehammer999
c8763f08da Bump to 4.5.4 2023-06-18 01:49:46 +03:00
sledgehammer999
b8259969ac Update Changelog 2023-06-18 01:46:57 +03:00
sledgehammer999
d3a57e3e01 Sync translations from Transifex and run lupdate 2023-06-18 01:46:34 +03:00
Vladimir Golovnev
fbd228b360 Merge pull request #19084 from glassez/v4.5
Backport changes to v4.5.x branch
2023-06-13 21:20:13 +03:00
Chocobo1
23176b1a56 GHA CI: upload macOS bundles
Hopefully those bundles will be runnable on users machine.

PR #19023.
2023-06-12 12:43:38 +03:00
Chocobo1
46afeb0f32 GHA CI: add missing dll
Closes #18383.
PR #18792.
2023-06-12 12:39:58 +03:00
Raymond Ha
114e2ee1ab WebUI: Fix category save path
PR #19008.
2023-06-12 12:37:35 +03:00
Priit Uring
b5af0f71b9 Sync flag icons with upstream
PR #19027.
2023-06-12 12:36:48 +03:00
sledgehammer999
bd9c42e004 Update AppVeyor config
The config needs some updating to accommodate the new structure.

PR #19030.
2023-06-12 12:32:43 +03:00
Vladimir Golovnev
272ff11d65 Allow to disable confirmation of Pause/Resume All
PR #19067.
Closes #18155.
2023-06-04 16:45:40 +03:00
sledgehammer999
04bd33e5b3 Bump to 4.5.3 2023-05-28 02:01:39 +03:00
sledgehammer999
6a4c423b88 Update Changelog 2023-05-28 01:58:23 +03:00
sledgehammer999
112ab86a6b Sync translations from Transifex and run lupdate 2023-05-28 01:46:53 +03:00
Vladimir Golovnev
fcd38a497e Merge pull request #18909 from glassez/v4.5
Backport changes to v4.5.x branch
2023-05-06 14:19:56 +03:00
Vladimir Golovnev
6e75866ed7 Don't make assertion about 3rd party logic
PR #18913.
2023-05-03 08:24:30 +03:00
Vladimir Golovnev
1f9dde0c37 Make sure ResumeSessionContext is destroyed before start processing
PR #18912.
2023-05-02 10:01:24 +03:00
Vladimir Golovnev (Glassez)
8b13d8f222 Remove outdated code
PR #18908.
2023-04-30 20:27:30 +03:00
Vladimir Golovnev
8d654f9802 Completely initialize native status on torrent creation
PR #18900.
2023-04-30 20:20:26 +03:00
Vladimir Golovnev
cfc73da312 Improve logging of running external program
PR #18901.
2023-04-30 20:20:11 +03:00
sledgehammer999
9801cd0323 Create new resources for this branch for Transifex 2023-04-20 04:10:30 +03:00
sledgehammer999
c01d7a34c1 Regenerate translation files 2023-04-20 03:27:31 +03:00
Vladimir Golovnev
af41a0eece Merge pull request #18848 from glassez/v4.5
Backport changes to v4.5.x branch
2023-04-18 17:43:56 +03:00
Chocobo1
c509f57b66 WebUI: improve 'exporting torrent' behavior
Don't stop the whole operation when a torrent doesn't exists and try to export the remaining
existing ones.

PR #18858.
2023-04-18 09:10:44 +03:00
Chocobo1
8de091f4dd Work around Chrome download limit
Closes #18775.
2023-04-16 19:19:32 +03:00
DivineHawk
e246745776 WebUI: Use workaround for IOS file picker
PR #18837.
Fixes #18683.
2023-04-16 14:33:50 +03:00
Vladimir Golovnev
9d42657468 Don't miss saving "download path" in SQLite storage
PR #18844.
Closes #18842.
2023-04-13 08:22:09 +03:00
Vladimir Golovnev
2b4fcda463 Disable UPnP for web UI by default
PR #18832.
2023-04-13 08:17:47 +03:00
Vladimir Golovnev
70a2d7bd58 Merge pull request #18652 from glassez/v4.5
Backport changes to v4.5.x branch
2023-04-04 20:09:47 +03:00
thalieht
a9c85ab321 Correctly initialize group box children as disabled
PR #18710.
2023-03-17 22:14:50 +03:00
Vladimir Golovnev
e574bc1c57 Improve finished torrent handling
PR #18704.
Closes #18694.
2023-03-16 09:48:16 +03:00
Vladimir Golovnev
fc90953f91 Prevent incorrect log message about torrent content deletion
PR #18692.
Closes #18689.
2023-03-16 09:42:33 +03:00
Christian Danížek
7016aa372b NSIS: Add Slovak translation
PR #18676.
2023-03-13 12:06:28 +03:00
Vladimir Golovnev
cbe9a27a92 Correctly check for database needs to be updated
* Correctly check for database needs to be updated
* Double check whether database needs to be updated

PR #18638.
2023-03-03 12:35:29 +03:00
sledgehammer999
97853f31f2 Bump to 4.5.2 2023-02-28 00:40:57 +02:00
sledgehammer999
66ffb7328d Update Changelog 2023-02-28 00:40:15 +02:00
sledgehammer999
9d9101186d Sync translations from Transifex and run lupdate 2023-02-28 00:22:28 +02:00
sledgehammer999
621ec4e92f Migrate transifex tool config to new version 2023-02-28 00:22:28 +02:00
sledgehammer999
4b752cba4f Merge pull request #18627 from glassez/v4.5
Backport changes to v4.5.x branch
2023-02-27 23:08:07 +02:00
Vladimir Golovnev
38c0864bf2 Reject requests that contain backslash in path
PR #18626.
Closes #18618.
2023-02-27 16:52:42 +03:00
Vladimir Golovnev
c21c3d2300 WebAPI: Allow to set read-only directory as torrent location
PR #18613.
Closes #18480.
2023-02-27 10:14:28 +03:00
Vladimir Golovnev
3be5273246 Prevent RSS folder from being moved into itself
PR #18619.
Closes #18446.
2023-02-27 10:14:10 +03:00
Vladimir Golovnev
37e348ed92 Merge pull request #18567 from glassez/v4.5
Backport changes to v4.5.x branch
2023-02-19 20:47:11 +03:00
brvphoenix
36364121ba GHA CI: Add missing dependencies
PR #18596.
2023-02-19 17:04:56 +03:00
Vladimir Golovnev
df08bd331c Prevent precise timers from being used when unnecessary
The implementation of QTimer::singleShot() uses Qt::PreciseTimer if interval is less than 2 seconds. This isn't mentioned in the docs.
Qt::PreciseTimer increases the system's timer resolution which negatively affects power consumption.

PR #18555.
Closes #18350.
2023-02-19 15:06:54 +02:00
sledgehammer999
abd1ab5539 Support TLS 1.2+ only in the server
Closes #18122
2023-02-19 14:58:30 +02:00
sledgehammer999
632d33b266 Blacklist bad ciphers for TLS in the server
Prevents the ROBOT attack.
Closes #18483
2023-02-19 14:58:23 +02:00
Chocobo1
35f7e1c896 GHA CI: compress debug symbols
The result binary is smaller.
2023-02-19 10:56:01 +03:00
Chocobo1
792301dfe4 GHA CI: don't overwrite system default compile flags
System might have some default compile flags which are crucial for security hardening so we
should append our flags instead of overwriting them.
2023-02-19 10:52:08 +03:00
Chocobo1
e31cf5ac23 GHA CI: revert "[CI Ubuntu] Strip installed components"
For tester convenience, the binaries should ship with debug symbols.
This reverts commit b8aa9e5609.
2023-02-19 10:51:44 +03:00
Chocobo1
0bfe6ff64b GHA CI: use least permission level
`actions: write` is required by Chocobo1/setup-ccache-action.
`pull-requests: write` is required by actions/stale.
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
2023-02-19 10:51:10 +03:00
Chocobo1
d40c7e8833 GHA CI: speed up package installation on macOS
Setup time is shortened by cutting down unnecessary operations.

https://docs.brew.sh/Manpage#environment
2023-02-19 10:50:39 +03:00
Vladimir Golovnev
8e81d44b3c Update the cached state once recheck is started
We have to force update the cached state, otherwise someone will be able to get an incorrect one during the interval until the cached state is updated in a regular way.

PR #18579.
Closes #18559.
2023-02-17 07:23:20 +03:00
Vladimir Golovnev
97a30218bc Don't increase limits when prefetching metadata for added magnets
Adjusting limits was made based on the belief that "forced" torrents (internally used for prefetching metadata)
are still under limits, but ignore only the queue. This is not really the case. "Forced" torrents ignore the limits
like "maximum active torrents/downloads", so adjusting limits is not required, and what's more, it really causes the
problem of unexpectedly activated previously queued torrents when adding some magnet using "Add new torrent" dialog.

PR #18503.
Fixes #18490.
2023-02-16 11:31:43 +03:00
shitcod3r
e9884b9513 NSIS: Add Uzbek translation
PR #18568.
2023-02-15 12:00:31 +03:00
Chocobo1
a63269e3e1 Migrate away from unsafe function
MooTools More has CVE-2021-20088 and qbt is affected by it by using the
unsafe function call `String.parseQueryString()`, so migrate away from
it.

PR #18554.
2023-02-15 12:00:04 +03:00
Burak Yavuz
d03e715708 NSIS: Update Turkish translation
PR #18552.
2023-02-14 09:18:07 +03:00
sledgehammer999
927732f190 Bump to 4.5.1 2023-02-12 01:52:19 +02:00
sledgehammer999
88c991880f Update Changelog 2023-02-12 01:47:11 +02:00
sledgehammer999
29290fa109 Sync translations from Transifex and run lupdate 2023-02-12 01:13:26 +02:00
sledgehammer999
0a8d604ef3 Merge pull request #18452 from sledgehammer999/stage_v4_5_x
Backports for v4_5_x part 2
2023-02-12 00:54:37 +02:00
Vladimir Golovnev
532c985b50 Revert changes of conflict resolution strategy on automatic move
PR #18516.
Closes #18297.
Closes #18495.
2023-02-05 09:30:46 +03:00
sledgehammer999
a32182f794 Use previous color for pause icon for indicating status
Affects transfer list and status filters
Related to PR #18110
2023-01-28 17:05:47 +02:00
sledgehammer999
1aebcd3258 [WebUI] Use new pause icon color for toolbar/menu
This the webui part of PR #18110
2023-01-28 17:05:39 +02:00
sledgehammer999
9f743aab86 Adjust env variable for PDB discovery 2023-01-27 18:04:22 +02:00
sledgehammer999
ece839739e NSIS: Set shortcut's workind dir to install path 2023-01-27 18:04:22 +02:00
Nowshed H. Imran
2204757eca Fix Pause icon
PR #18110.
2023-01-27 18:01:40 +02:00
qbittorrentfan
bfda520ef4 properties endpoint returns name/torrentID
PR #18218.
2023-01-27 18:01:39 +02:00
sotiris-bos
af91f4ed51 WebAPI: Expose "IS PRIVATE" flag
PR #18227.
Closes #16052.
2023-01-27 18:01:39 +02:00
sledgehammer999
41c3a8af01 Migrate settings much earlier 2023-01-27 18:01:38 +02:00
sledgehammer999
cc7f8372a8 Migrate setting about Simplified Chinese locale
Related to PR #17978
2023-01-27 18:01:38 +02:00
Deividas
d20633f9cc NSIS: Update Lithuanian translation
PR #18434.
2023-01-27 18:01:37 +02:00
Midhun V Nadh
961e05e9a8 Remove suggestions while searching for torrents
Don't want torrent search history to pop up next time you try to search for torrents, right?
There are people who would search for 18+ content and what they searched would load up next time they are about to search.

PR #18285.
2023-01-27 18:01:37 +02:00
Fidel Selva
eb98a04245 WebUI: Improve hotkeys
PR #18326.
Fixes #18325.
Fixes #14033.
2023-01-27 18:01:37 +02:00
xavier2k6
5dc1c10848 GHA CI: Bump Boost version to 1.81.0 on Windows/macOS
PR #18279.
2023-01-27 18:01:36 +02:00
Jonatan
dcbff74dc0 NSIS: Update Swedish translation
PR #18240.
2023-01-27 18:01:36 +02:00
David Xuang
5e29960da2 Prevent incorrect line breaking
PR #18236.
2023-01-27 18:01:35 +02:00
sledgehammer999
aa43fc8ff4 [CI Ubuntu] Build AppImage
Upload an AppImage artifact on CI builds. This AppImage is a
simplified version of the official one. It is meant to help
with debugging PRs that fix issues.
2023-01-27 18:01:35 +02:00
sledgehammer999
2517e688d9 [CI Ubuntu] Strip installed components 2023-01-27 18:01:35 +02:00
Chocobo1
40d94fd8e9 Remove docker information
It has been moved to its own repo: https://github.com/qbittorrent/docker-qbittorrent-nox

PR #18199.
2023-01-27 18:01:34 +02:00
Torsten Schwarz
eb97e640cb WebUI: Make rename file dialog resizable
PR #18154.
2023-01-27 18:01:34 +02:00
sledgehammer999
2123c1c259 Remove dead code
Leftover from the system tray code refactoring.
2023-01-27 18:01:33 +02:00
sledgehammer999
6cf1351a77 Remove trailing newline from translation file
I also fixed it on Transifex.
2023-01-27 18:01:33 +02:00
Vladimir Golovnev
c924904308 Merge pull request #18271 from glassez/v4.5
Backport changes to v4.5.x branch
2023-01-25 09:06:23 +03:00
Vladimir Golovnev
904bcc14d5 Reload system tray icon to replace menu
PR #18250.
Closes #18074.
2023-01-22 16:58:30 +03:00
Vladimir Golovnev
c3abe4c2a6 Fix startup performance on Qt5
Use more appropriate container (QList) for resume data queue buffer.
QVector in Qt5 has poor performance of the first element taking operation,
which is used to process the resume data queue. In Qt6, QVector is just an
alias for QList, so there was no problem there.

PR #18387.
Fixes #18341.
2023-01-16 14:48:05 +03:00
Vladimir Golovnev
7144454a1f Remove confusing helpers from Session interface
Such helpers do not make practical sense, since they can be trivially implemented on top of the base interface, but at the same time they can lead to undesirable consequences when some calling code requires slightly different behavior than another.

PR #18367.
Fixes #18338.
2023-01-16 14:47:51 +03:00
Vladimir Golovnev
daaa88fa0d Use QThreadPool to invoke free disk space checking jobs
Prevent the creation of an excessive number of threads.
PR #18347.
Closes #18202.
2023-01-16 14:47:39 +03:00
Vladimir Golovnev
0b7c8497f9 Add all torrents passed via the command line
PR #18296.
Closes #18289.
2023-01-16 14:47:11 +03:00
thalieht
e3562be0d6 WebUI: Add "Resume data storage type" option
PR #18357.
2023-01-14 17:16:18 +03:00
brvphoenix
e0d0efcc20 WebUI: Add missing icons
PR #18380.
2023-01-13 11:00:20 +03:00
Jason Carr
fb22b58ce6 WebUI: change order of accepted types of file input
PR #18286.
2022-12-28 13:22:15 +03:00
brvphoenix
c78ac614f5 Unify the way to generate the language list in WebUI and GUI
PR #17994.
Closes #18090.
2022-12-26 10:02:30 +03:00
Vladimir Golovnev
de15907ea7 Re-allow to use icons from system theme
PR #18195.
2022-12-25 16:28:25 +03:00
Vladimir Golovnev
a4289a517f Apply correct tab order to Category options dialog
Also pre-select (sub)category name for editing when dialog is opened for creating new (sub)category.

PR #18270.
Closes #18265.
2022-12-25 16:16:18 +03:00
Nowshed H. Imran
967c3bb55d Fix icon colors inconsistencies
PR #18226.
Fixes #18163.
Fixes #18222.
2022-12-22 14:16:59 +03:00
Vladimir Golovnev
c57896df8f Use "additional trackers" when metadata retrieving
This can help when the DHT nodes are few.

PR #18251.
Closes #18244.
2022-12-22 08:35:54 +03:00
Vladimir Golovnev
911f0d4039 Correctly count the number of torrents in subcategories
PR #18261.
Closes #18137.
2022-12-22 08:35:13 +03:00
Vladimir Golovnev
e822d4fca7 Correctly detect whether desktop integration is active
PR #18259.
2022-12-22 08:22:36 +03:00
Vladimir Golovnev
0da132b69e Correctly detect drive letter in path
PR #18258.
Closes #18224.
2022-12-22 08:22:06 +03:00
Vladimir Golovnev
691cb4fe2b Don't drop !qB extension when rename incomplete file
PR #18186.
Closes #18181.
2022-12-22 07:15:39 +03:00
Vladimir Golovnev
97a053916b Ensure thread is stopped before deleting QThread
PR #18178.
Backports #18037.
2022-12-10 10:14:45 +03:00
Vladimir Golovnev
24bf8eef6d Use identical conversions of tracker names
PR #18146.
Closes #18070.

The problem is that conversions between std::string and QString is not mutually equivalent (i.e. QString::fromStdString(stdStr).toStdString() == stdStr isn't always true).
2022-12-08 17:02:47 +03:00
Vladimir Golovnev
4314bbdf9c Correctly load folder based UI theme
PR #18173.
2022-12-08 17:00:02 +03:00
Vladimir Golovnev
65611cd3dc WebAPI: return paths using platform-independent separator format
PR #18118.
Closes #18096.
2022-12-08 08:36:06 +03:00
Chocobo1
6a4bb1356a Fix wrong color code
Must have been a copy-paste error...
2022-12-04 12:49:37 +08:00
Chocobo1
06593e3678 Revise color for completed status
Now it uses the purple color which matches the completed status icon color.

Related: #18078.
2022-12-04 12:49:37 +08:00
sledgehammer999
18577d9cb0 Merge pull request #18119 from glassez/destruct-tray
Destroy desktop integration at correct place
2022-11-30 21:29:00 +02:00
Vladimir Golovnev
701b84dc48 Destroy desktop integration at correct place
Otherwise it is destructed in QObject destructor, i.e. after GUI application is already destructed.
This can be related to some problems with system tray icon.

PR #18108.
Closes #18093.
2022-11-30 20:11:46 +03:00
sledgehammer999
9a95237b85 Merge pull request #18101 from thalieht/backport
Backport
2022-11-29 20:16:08 +02:00
sledgehammer999
a6a99fbd36 Merge pull request #18102 from now-im/v4_5_x
Fix Speed limit icon size
2022-11-29 20:15:29 +02:00
Nowshed H. Imran
86671bee46 Fix Speed limit icon size 2022-11-29 22:19:00 +06:00
thalieht
f1432a2e3d WebUI: Fix missing "queued" icon 2022-11-29 18:09:09 +02:00
sledgehammer999
480e3f02ca Bump to 4.5.0 2022-11-26 23:16:23 +02:00
sledgehammer999
6b05c716a8 Update Changelog 2022-11-26 23:13:55 +02:00
sledgehammer999
c697829b1b Sync translations from Transifex and run lupdate 2022-11-26 23:12:44 +02:00
sledgehammer999
9a2ec6912b Merge pull request #18061 from sledgehammer999/fix_blocker
Temporarily fix blocker for v4_5_x
2022-11-26 23:09:34 +02:00
sledgehammer999
7601163d32 Revert "Destroy object within appropriate thread"
Temporary solution for #18059

This reverts commit 4f2ac34440.
2022-11-26 21:31:13 +02:00
sledgehammer999
8e2bda2b7a Update Changelog 2022-11-21 01:14:46 +02:00
sledgehammer999
1761f6c58e Update Changelog 2022-11-21 01:14:46 +02:00
sledgehammer999
419cdde4e1 Merge pull request #18043 from glassez/backport1
Prevent object from being used after destruction
2022-11-20 20:57:50 +02:00
sledgehammer999
6ec46a90d1 Merge pull request #18042 from glassez/backport
Revert "Use another workaround to update files tree view"
2022-11-20 20:57:37 +02:00
Vladimir Golovnev (Glassez)
f4051034d7 Prevent object from being used after destruction 2022-11-20 15:06:03 +03:00
Vladimir Golovnev (glassez)
1a8ba00f2c Revert "Use another workaround to update files tree view"
This reverts commit 0f82c16936.
2022-11-20 13:54:42 +03:00
Vladimir Golovnev
de4c1c9265 Don't miss to store metadata of new torrent
PR #18032.
2022-11-19 07:06:52 +03:00
sledgehammer999
bff9189e52 Merge pull request #18014 from sledgehammer999/maybe_backport
Backports to v4_5_x
2022-11-14 17:16:32 +02:00
Vladimir Golovnev
076b3628b1 Save correct resume data when added new torrent
PR #18003.
2022-11-13 21:30:39 +02:00
Vladimir Golovnev (Glassez)
75ccce705e Correctly handle model resetting 2022-11-13 21:30:38 +02:00
Vladimir Golovnev (Glassez)
964bf31775 Use another workaround to update files tree view 2022-11-13 21:30:38 +02:00
Vladimir Golovnev
507ced2fa2 Avoid blocking call when changing libtorrent session settings
We don't really need to get currently used settings pack in order to apply changes to session settings. It is enough to apply settings pack that contains only updated settings.

PR #17989.
2022-11-13 21:30:37 +02:00
Chocobo1
e62f9ef56a Move increment out of loop 2022-11-13 21:28:28 +02:00
Chocobo1
a5a242377b Clean up code 2022-11-13 21:28:28 +02:00
Chocobo1
0758109d15 Reserve space before appending elements 2022-11-13 21:28:28 +02:00
Chocobo1
3970d91d19 Fix typos 2022-11-13 21:28:27 +02:00
BallsOfSpaghetti
4e98b7f0cf Add confirmation to resume/pause all
This adds a confirmation dialog to Pause All and Resume All. First I wanted to only add it in Tray, but honestly, clicking around in the menu, using hotkeys might trigger it just as easy.

Closes #17683.
PR #17945.
2022-11-13 21:28:27 +02:00
sledgehammer999
27a69d9cca Fine tune translations loading for Chinese locales
Closes #17506
2022-11-13 21:28:26 +02:00
Chocobo1
d884ec1731 Add port forwarding option for embedded tracker
Closes #17781.
PR #17981.
2022-11-13 21:28:26 +02:00
Vladimir Golovnev
62b2959cb4 Don't use extra variable to distinguish restored torrents
PR #17984.
2022-11-13 21:28:26 +02:00
Hanabishi
2bdc91c53f Implement Peer ID Client column for Peers tab
PR #17940.
2022-11-13 21:28:25 +02:00
Chocobo1
d829df99aa Revise interface of port forwarder
This eases the usage of port forwarder as the caller code doesn't need
to store previous used port and now can rely on port forwarder doing
all the hard work.

PR #17967.
2022-11-13 21:28:19 +02:00
Vladimir Golovnev
4f2ac34440 Destroy object within appropriate thread
PR #18012.
2022-11-13 08:30:42 +03:00
Vladimir Golovnev
94e9e9fdb2 Delete database file only after it is released
PR #18011.
2022-11-13 08:29:50 +03:00
Chocobo1
3a2e73cc94 Avoid out-of-bounds access
This happens when the `index` is a negative number.
Added `Q_ASSERT()` to catch coding errors at debug run time.

PR #17953.
2022-10-31 12:34:20 +08:00
xavier2k6
3ee0457cfa Raise minimum libtorrent versions to 1.2.18/2.0.8
PR #17954.
2022-10-30 08:30:31 +03:00
Vladimir Golovnev
e19173c1f3 Prevent new torrent from saving resume data twice
PR #17951.
2022-10-30 08:28:51 +03:00
Vladimir Golovnev
4a5d2e2558 Correctly initialize torrent stop condition
PR #17950.
2022-10-30 08:28:13 +03:00
Nowshed H. Imran
027d6be48f Fix checked-completed icon visibility in dark theme
PR #17946.
2022-10-29 12:14:46 +08:00
Faisal A. F. Rahman
0f2cc92ba2 NSIS: Update Indonesian translation
PR #17890.
2022-10-28 11:55:05 +08:00
Chocobo1
07bb1df74f Merge pull request #17942 from Chocobo1/icons
Update icon guidelines
2022-10-28 11:54:26 +08:00
Vladimir Golovnev
c29a6079bf Don't forget to create stop_condition column
PR #17935.
2022-10-26 18:25:52 +03:00
Chocobo1
dfb56ce31c Update icon guidelines 2022-10-26 11:42:39 +08:00
Chocobo1
5a8027ae1f Remove unused resources 2022-10-26 11:42:39 +08:00
Vladimir Golovnev
bb2caabd61 Correctly destroy startup resume data storage
PR #17930.
2022-10-25 11:37:51 +03:00
Chocobo1
14e4bc7eea WebUI: use proper comparison for numbers
Closes #17920.
PR #17926.
2022-10-25 12:46:02 +08:00
xavier2k6
9fb8f765e8 GHA CI: Bump libtorrent version(s)
* https://github.com/arvidn/libtorrent/releases/tag/v2.0.8
* https://github.com/arvidn/libtorrent/releases/tag/v1.2.18

PR #17924.
2022-10-25 12:44:57 +08:00
Chocobo1
fe0be98fde Merge pull request #17918 from Chocobo1/portForwarding
Avoid redundant lookups in port forwarder
2022-10-25 12:44:23 +08:00
BallsOfSpaghetti
fdba525e62 Introduce a 'change listen port' cmd option
Closes #17789.
PR #17862.
2022-10-25 12:43:38 +08:00
Chocobo1
dfdaa706bd Move code around 2022-10-24 00:34:25 +08:00
Chocobo1
1a782a9362 Avoid redundant lookups in port forwarder 2022-10-24 00:34:25 +08:00
Nathan Lewis
f2dd1e6456 Add a "Use proxy for hostname lookup" option
Add a UI option for "Use proxy for hostname lookup" option and plumb
it into libtorrent's settings_pack.proxy_hostnames option.  This is
available for SOCKS5 and HTTP proxies, and defaults to true, which
is the previous functionality.  Hostname lookups can be forced to be
local by unchecking this option, which can aid compatibility with
certain non-compliant proxy servers.

Closes #17902.
PR #17904.

Co-authored-by: Nathan Lewis <saturn@saturn49.dyndns.org>
2022-10-23 15:31:02 +08:00
Chocobo1
155e73df16 WebUI: remove unused include
Closes #15761.
PR #17895.
2022-10-23 12:33:45 +08:00
Vladimir Golovnev
05b7194bf7 Correctly set "stop condition" on force recheck invoked
PR #17915.
Closes #17913.
2022-10-22 17:43:17 +03:00
Maksim Derbasov
597444c527 Make GeoIPDatabase interface safer
PR #17899.
2022-10-21 13:31:37 +08:00
Chocobo1
1c2dc79f51 Introduce color palettes for both dark, light themes
This commit introduce color palettes from Primer and make use of it in various widgets.
Primer system is chosen due to well designed and is highly rated on Github (in terms of
Github stars).
https://primer.style/

PR #17798.
2022-10-20 10:27:03 +08:00
Chocobo1
dcfd367ff8 Merge pull request #17885 from Chocobo1/shutdown
Revise "save resume data" handling on shutdown
2022-10-18 14:27:07 +08:00
Chocobo1
67ee43fac1 Merge pull request #17878 from Chocobo1/webui
WebUI: handle drag and drop events
2022-10-18 14:26:35 +08:00
Chocobo1
a325ab8d6e Delay saving session statistics
Pausing the libtorrent session should be scheduled before this.
2022-10-17 13:53:55 +08:00
Chocobo1
c94152c47c Reuse alert dispatcher
Instead of using a specific alert handler in `SessionImpl::saveResumeData()`, reuse the generic
one.
2022-10-17 13:53:54 +08:00
Chocobo1
a44bca3f07 Revise "save resume data" handling on shutdown
When shutting down, instead of waiting for all types of alert from
libtorrent, now it only waits for specific alert types. This potentially
help shorten the shutdown waiting time.
2022-10-17 13:53:27 +08:00
thalieht
698284f00e Allow to set torrent stop condition in WebUI
PR #17876.
2022-10-15 11:06:56 +08:00
Chocobo1
3b9d68f344 WebUI: handle drag and drop events
This allows user to drag and drop .torrent files and URL links onto the
main window and will open the respective dialog.
Dropping folders are not supported due to technical reasons.

Closes #6038.
2022-10-14 14:30:26 +08:00
tristanleboss
e028d8085b Add a "Moving" status filter
Because sometime (when your save and download path are on different drives, when your disk drive is super busy, ...) move operations can stack up, I add this "Moving" status filter so you can see in a blink of the eye which torrents are in a move state.

PR #17810.
2022-10-14 13:12:51 +08:00
Chocobo1
af1c97e2ea WebUI: filter file selection to bittorrent files
Note that the user can still overwrite the selection filter and select
other files.
2022-10-13 14:32:00 +08:00
Chocobo1
b95d97d07b WebUI: simplify attribute usage
The `multiple` attribute is a boolean value and its presence equals to
`true`.
2022-10-13 14:31:58 +08:00
schnurlos
17a5bd03c5 NSIS: update German translation
Adding Windows 10 requirement.
PR #17860.
2022-10-12 13:49:19 +08:00
Ícaro
ada594faf3 NSIS: update Portuguese BR translation
PR #17857.
2022-10-12 13:48:27 +08:00
Vladimir Golovnev
4f0990dc29 Use 'fail if exist' strategy on automatic move
Prevent existing files overwriting when torrent is moved automatically (e.g. when moved from incomplete to final save path).

PR #17855.
2022-10-11 10:05:21 +03:00
Chocobo1
f66ec4430d Merge pull request #17858 from Chocobo1/infohash
Show N/A when there is no hash
2022-10-10 14:35:40 +08:00
Vladimir Golovnev
67357e9964 Allow to set torrent stop condition
PR #17814.

Closes #17792.
Closes #929.

(Actually it should close all issues about lack of ability to stop torrent after metadata downloaded or after files are initially checked.)

Also makes explicit the temporary start of the torrent in the case when recheck of the stopped torrent is performed.
2022-10-09 16:07:16 +03:00
Chocobo1
7eb97348de GHA CI: add missing Qt module 2022-10-09 15:24:30 +08:00
Chocobo1
0279b80b46 Don't use hardcoded URL scheme list
This is to avoid the list being outdated.
2022-10-09 14:12:02 +08:00
Chocobo1
d3936c07c7 Capitalize header title
This is the only one not properly capitalized.
2022-10-09 14:12:02 +08:00
Chocobo1
aa022400f7 Use Path internal representation for internal value in model
The internal value is used for sorting comparisons and not displayed
to the user, so make a shortcut.
2022-10-09 14:12:01 +08:00
Chocobo1
66795d533a Show 'N/A' when there is no hash
This is to follow 'General' tab which show 'N/A' when there is no hash.
2022-10-09 14:12:01 +08:00
Chocobo1
ce7d8dee28 Merge pull request #17829 from Chocobo1/focus
Set proper focus on widget
2022-10-09 13:48:13 +08:00
Chocobo1
1f799689ed Support 'file exists' situation
The lt::status_t::file_exist is returned when lt::move_flags_t::fail_if_exist is used, which means the whole move operation failed. So hanlde this condition correctly (even if the fail_if_exist isn't used in the code base currently).

PR #17853.
2022-10-09 13:47:52 +08:00
sledgehammer999
3463442631 Merge pull request #17835 from RockyTDR/patch-1
NSIS: Update Dutch translation
2022-10-08 20:06:02 +03:00
sledgehammer999
c35ca52b00 Merge pull request #17834 from maboroshin/master
NSIS: Update Japanese translation
2022-10-08 20:05:25 +03:00
sledgehammer999
6d501c2e6e Merge pull request #17828 from PriitUring/NSIS-Estonian
NSIS: Update Estonian translation
2022-10-08 20:04:27 +03:00
tristanleboss
a71d7e6557 Add infohash and download path columns
PR #17799.
2022-10-08 11:43:52 +08:00
Chocobo1
30c2f9d9f3 Merge pull request #17830 from Chocobo1/trackers
Fix wrong 'tracker error' count
2022-10-06 12:32:16 +08:00
Andrei Stepanov
544f9675c6 NSIS: Update Russian translation
PR #17827.
2022-10-06 06:36:55 +03:00
Thomas De Rocker
0c76321a6a Update dutch.nsi
Translate new strings and polish existing strings
2022-10-05 19:40:40 +02:00
maboroshin
10349b84d6 Update japanese.nsi 2022-10-06 01:45:07 +09:00
Chocobo1
6fa4305aba Fix wrong 'tracker error' count
This happens when a torrent contains some tracker URLs that share the same domain.
Closes #17808.
2022-10-05 14:43:52 +08:00
Chocobo1
d9af207a11 GHA CI: add missing cmake flag for Qt6 2022-10-05 13:17:54 +08:00
vlakoff
ad59eb4dfc Revert "Consider brackets within wildcard as regular characters"
The implementation appeared to be broken.

This reverts #16965.
PR #17820.
2022-10-05 12:43:43 +08:00
Priit Uring
874b015b20 NSIS: Update Estonian translation 2022-10-05 00:16:26 +03:00
Chocobo1
21aabfdcb5 Clean up code 2022-10-05 00:58:57 +08:00
Vladimir Golovnev
e7370d1a0f Don't pollute move queue by torrents w/o metadata
There's really nothing to move if the torrent still doesn't have metadata.
Additionally, such torrents in the queue can lead to unexpected behavior
when reloading the torrent after metadata is received.

PR #17823.
2022-10-04 19:41:36 +03:00
Chocobo1
855f727451 Set proper focus on widget
And also allow keyboard tabbing to the Browse button.
Fix up 6ab35512da.
2022-10-04 16:54:20 +08:00
Chocobo1
3b0ac0962e Merge pull request #17817 from Chocobo1/modules
GHA CI: only install required Qt components
2022-10-04 13:08:03 +08:00
sledgehammer999
617dedc464 Merge pull request #17812 from sledgehammer999/nsis_refactor
NSIS refactoring
2022-10-03 14:39:44 +03:00
Chocobo1
8b4a0da235 GHA CI: bump Qt version to 6.4.0 2022-10-03 13:04:28 +08:00
Chocobo1
dcc5206e3d GHA CI: only install required Qt components
So it won't waste time download/install unused Qt components.
2022-10-03 13:04:24 +08:00
Chocobo1
9a81cbf4c0 Improve column updates granularity
PR #17806.
2022-10-03 11:56:48 +08:00
xavier2k6
d96ed5f4a4 GHA CI: Bump Windows/macOS Qt6 version to 6.4.0
Suppressed gnu-zero-variadic-macro-arguments warning on macOS (Qt6 only).
PR #17801.
2022-10-03 11:56:08 +08:00
sledgehammer999
102b6c32eb NSIS: Refactor configuration to ease installer creation via scripting 2022-10-02 12:59:40 +03:00
sledgehammer999
2af1e1874e NSIS: Require Windows 10 1809 for Qt6 builds
Also refactor the config.nsi with more defines that control the build.
Closes #17783
2022-10-02 12:54:36 +03:00
sledgehammer999
680455a21b NSIS: Drop hardcoded qt's translation filenames 2022-10-02 12:54:35 +03:00
Vladimir Golovnev
b568cdb1aa Correctly load state of use download folder
PR #17807.
Closes #17793.
2022-10-02 08:46:27 +03:00
Chocobo1
bc0d906adc Merge pull request #17786 from Chocobo1/selection
Fix torrent content checkboxes not updated properly
2022-10-01 14:00:49 +08:00
Chocobo1
2b385e5f92 WebUI: don't disable combobox for file priority
Closes #17794.
PR #17797.
2022-10-01 12:49:02 +08:00
Vladimir Golovnev
616057a433 Improve session statistics handling
PR #17779.
2022-09-29 06:49:34 +03:00
Chocobo1
9a20aa51de Fix torrent content checkboxes not updated properly
And reduce emitting redundant 'data updated' signals.

Closes #17144, #17764.
2022-09-29 00:00:48 +08:00
Chocobo1
6c8b31420c Remove unused functions 2022-09-27 14:52:52 +08:00
Chocobo1
0514cb304d Fix coding style 2022-09-27 14:52:52 +08:00
Vladimir Golovnev
0a4ee60ea0 Avoid blocking call when save resume data
PR #17755.
2022-09-25 16:40:16 +03:00
Chocobo1
caa30e41d8 Merge pull request #17765 from Chocobo1/filterbar
Fix 'Filter Sidebar' size restored incorrectly
2022-09-25 12:37:50 +08:00
Chocobo1
dc76a175ad WebUI: allow string to be translated
Closes #17759.
2022-09-24 15:29:14 +08:00
Chocobo1
92768c36aa Fix 'Filter Sidebar' size restored incorrectly
And with a bit of code clean up.
Closes #17756.
2022-09-24 15:29:12 +08:00
Chocobo1
2a3a4bff70 Merge pull request #17737 from Chocobo1/logview
Use proper color for highlighted text in log widget
2022-09-23 13:31:04 +08:00
Andrew
cacfe4f3ca Fix "Open destination folder" delay on Windows
Replaced QDesktopServices by native Windows function
to open destination folder due to QDesktopServices issues on Windows.
The issues are described in #17482 and even more detailed in #17025.

Closes #17482.
PR #17723.
2022-09-23 13:30:31 +08:00
Chocobo1
37150520e1 Use proper color for highlighted text in log widget
The color is either from qbt theme pack or desktop environment.

Note that Windows default theme do not use highlighted text color.
Other themes (either OS default or qbt themes) are closer to native
look when highlighted text color is in action.
2022-09-21 01:04:11 +08:00
Chocobo1
3aadb63d80 Simplify code
Don't use replacement placeholder and use string append which is faster.
2022-09-21 00:42:15 +08:00
Chocobo1
0e0b8d1027 Revive dark theme detection
The code was removed in 199d770e15 and now revived.
2022-09-21 00:42:15 +08:00
sledgehammer999
5e4a94e6b6 Bump to 4.5.0beta1 2022-09-18 20:13:29 +03:00
sledgehammer999
db7850e218 Sync translations from Transifex and run lupdate 2022-09-18 20:13:29 +03:00
Chocobo1
1dcfd7bb59 Improve docker documentation
Clarify that some paths should be full paths.

Related #17729.
PR #17736.
2022-09-18 13:10:24 +08:00
Chocobo1
b28704a6ec Merge pull request #17725 from Chocobo1/downloadsDone
Clean up 'recursive download' related code
2022-09-16 12:07:36 +08:00
Chocobo1
0c6e56a150 Merge pull request #17713 from Chocobo1/trackers
Revise 'Add trackers' dialog
2022-09-16 12:06:22 +08:00
sledgehammer999
d71ff734a9 Merge pull request #17705 from sledgehammer999/gplv2_vs_gplv3
Copyright and license updates
2022-09-15 11:19:23 +03:00
Chocobo1
90652d3555 WebAPI: fix wrong behavior for shutdown action
Qt6 has changed implementation for `QCoreApplication::quit` and therefore it is not suitable
anymore.

Closes #17709.
PR #17720.
2022-09-15 11:56:00 +08:00
Chocobo1
f8a2fbc4c5 Clean up 'recursive download' related code
Don't load .torrent files too early, otherwise qbt might emit a dubious error log message if the
.torrent file is invalid.
2022-09-15 00:15:53 +08:00
Chocobo1
80759f9e69 Reorder operations in 'torrent finished' handler
Avoid redundant data fetch.
Remove debug messages.
2022-09-15 00:12:11 +08:00
Chocobo1
e692a191ed Revise 'Add trackers' dialog
* Now it allow user to add tracker to different tier.
* The downloaded trackers are now displayed as is (without modifying).
* Now the dialog remember dialog size and last used URL.

Closes #17692.
2022-09-14 01:20:30 +08:00
Chocobo1
4e06a9629a WebUI: alert when HTTPS settings are incomplete
Closes #17696.
PR #17701.
2022-09-13 13:00:11 +08:00
sledgehammer999
b3334e5fac Binary distributions are GPLv3+ licensed 2022-09-13 01:33:08 +03:00
Chocobo1
4e326229da Rename action 2022-09-12 23:25:36 +08:00
sledgehammer999
021222b407 Merge pull request #17654 from hugok79/patch-1
Update org.qbittorrent.qBittorrent.desktop
2022-09-12 16:39:46 +03:00
Chocobo1
6c60fa5161 Don't reorder URLs when copied from the clipboard
Also process URLs in the same order as from the text edit widget.
Closes #17693.
PR  #17700.
2022-09-12 12:22:45 +08:00
sledgehammer999
cd405ffc32 Remove duplicate information
This information exists in git's commit history and in the AUTHORS file.
2022-09-12 02:26:35 +03:00
sledgehammer999
537b1c1ea9 Update AUTHORS file 2022-09-12 02:26:34 +03:00
Chocobo1
257914b0d5 Merge pull request #17684 from Chocobo1/subnet
Allow to use subnet notation in reverse proxy list
2022-09-10 13:05:06 +08:00
Chocobo1
5cfaaa5d1a Add tooltips 2022-09-08 14:44:18 +08:00
Chocobo1
109c45bb95 Allow to use subnet notation in reverse proxy list
Closes #17475.
2022-09-08 14:44:18 +08:00
Chocobo1
851374e517 Rename function 2022-09-07 14:11:23 +08:00
Chocobo1
4094a4c448 Simplify functions 2022-09-07 14:11:02 +08:00
Tyler Dunn
987e1b544a Don't autofill background color on macOS
PR #17669.
2022-09-06 09:44:18 +08:00
Vladimir Golovnev
5cf6b1cbde Handle more torrent conflicts
PR #17668.
This is a continuation of #17576.
Handles the case when you add hybrid torrent by v1-only magnet link and this torrent is already known by its full hybrid info hash (i.e. by both v1 and v2 info hashes).
2022-09-05 06:22:42 +03:00
Vladimir Golovnev
4318de6dc5 Add ability to run external program on torrent added
PR #17646.
2022-09-04 07:51:50 +03:00
summer
459d1cf82c Allow to pause a checking torrent from context menu
PR #17611.
2022-09-04 12:03:10 +08:00
Chocobo1
48d52d9ab7 Merge pull request #17670 from Chocobo1/i18n
Make strings translatable
2022-09-04 12:00:36 +08:00
Hugo Carvalho
16a99e687f Update org.qbittorrent.qBittorrent.desktop 2022-09-03 14:47:22 +01:00
Chocobo1
fb37b0c147 Suppress warning
Seems `lupdate` tool cannot correctly recognize the class/context of `tr()` here, so specify the
class/context manually.
2022-09-03 15:26:40 +08:00
Chocobo1
9877ff330e Make strings translatable 2022-09-03 15:23:00 +08:00
Tyler Dunn
6f88609d60 Avoid string lookup when setting row color
PR #17665.
2022-09-03 14:58:53 +08:00
Tyler Dunn
6263c4786b Allow 'Export .torrent' tooltip to be translatable
Closes #17660.
PR #17664.
2022-09-03 14:58:23 +08:00
Chocobo1
3061f6cf5b GHA CI: treat compile warnings as errors
PR #17651.
2022-09-02 13:09:43 +08:00
Hugo Carvalho
cc8c1a5748 Update org.qbittorrent.qBittorrent.desktop
Sort language codes alphabetically
2022-09-01 13:31:48 +01:00
Vladimir Golovnev
ca897a8a35 Cache download/upload limit values
PR #17640.
2022-09-01 06:54:51 +03:00
Vladimir Golovnev
77dd8bd27b Parse torrent info separately from resume data
PR #17639.
2022-09-01 06:54:12 +03:00
Vladimir Golovnev
fe34749cfe Proactively append extension to incomplete files
PR #17631.
2022-09-01 06:53:29 +03:00
Vladimir Golovnev
646322b2a2 Let Qt handle system tray icon availability
PR #17519.
2022-08-31 08:02:44 +03:00
Chocobo1
670b381df7 Merge pull request #17616 from Chocobo1/webui
Make WebUI images self-contained
2022-08-29 13:09:21 +08:00
sledgehammer999
ddf4b94bc6 Sync translations from Transifex and run lupdate 2022-08-29 00:48:24 +03:00
Vladimir Golovnev
794a92f911 Make qBittorrent compatible with libtorrent master
PR #17604.
2022-08-28 11:38:28 +03:00
Chocobo1
f6e2715f4a Apply forward declaration
Follow up 525692759d.
PR #17621.
2022-08-28 13:25:38 +08:00
Chocobo1
082e6f8830 Apply i18n translation only to built-in WebUI 2022-08-27 13:55:05 +08:00
Chocobo1
ee38124db7 Optimize symbolic links checking 2022-08-27 13:55:04 +08:00
Chocobo1
e06e1d9911 Throw error exception properly 2022-08-27 13:55:04 +08:00
Chocobo1
3851e76179 Remove special handling of icons 2022-08-27 13:55:04 +08:00
Chocobo1
d693f97a46 Use natural sort in WebUI 2022-08-27 13:55:04 +08:00
Chocobo1
ca274635d5 Make WebUI images self-contained 2022-08-27 13:55:04 +08:00
Vladimir Golovnev
525692759d Split Session class into interface/implementation parts
PR #17579.
2022-08-27 08:01:24 +03:00
Chocobo1
e5491645e4 Merge pull request #17593 from Chocobo1/remove
Use proper verb when referring to torrent removal
2022-08-26 12:06:10 +08:00
Chocobo1
9f511a47e8 Adjust Edit menu of WebUI to follow GUI 2022-08-25 13:32:07 +08:00
Chocobo1
7b0644cdcd Use proper verb when referring to torrent removal 2022-08-25 13:32:07 +08:00
Vladimir Golovnev
7527343629 Handle some torrent conflicts
PR #17576.
2022-08-23 07:47:20 +03:00
Chocobo1
d173216941 Merge pull request #17578 from Chocobo1/webui
Fix icon in WebUI being trimmed
2022-08-23 10:54:02 +08:00
Chocobo1
d28b5f7834 Rephrase confirm deletion dialog
Closes #14309.
PR  #17586.

Co-authored-by: xavier2k6 <42386382+xavier2k6@users.noreply.github.com>
2022-08-22 11:36:13 +08:00
Chocobo1
04f6ee79c3 Improve icon readability at small size
https://github.com/qbittorrent/qBittorrent/pull/17578#pullrequestreview-1079562121

Co-authored-by: Nowshed H. Imran <nowshed.imran@gmail.com>
2022-08-21 20:47:07 +08:00
Chocobo1
b046b40668 Fix icon in WebUI being trimmed 2022-08-20 13:27:48 +08:00
Chocobo1
0a289e15b4 Merge pull request #17544 from Chocobo1/test
Add unit testing for Path class
2022-08-19 14:44:44 +08:00
Chocobo1
ce8b51e7ef Merge pull request #17568 from Chocobo1/ci
GHA CI: bump "Install Qt" action version
2022-08-19 14:42:29 +08:00
Chocobo1
df5ea9b675 GHA CI: bump setup-python to v4 2022-08-19 12:59:13 +08:00
Chocobo1
ff7fe7c107 GHA CI: bump "Install Qt" action version 2022-08-18 12:26:26 +08:00
Coool
ac6af55335 NSIS: update Latvian
PR 17529.
2022-08-18 11:39:53 +08:00
Chocobo1
001c3906b5 Merge pull request #17563 from Chocobo1/webapi
Restrict more WebAPI endpoints to POST method only
2022-08-18 11:37:59 +08:00
Minseo Lee
0d5d6db0ee NSIS: update Korean
PR #17547.
2022-08-17 12:48:22 +08:00
Chocobo1
72941b10bb Use proper request method 2022-08-16 11:26:47 +08:00
Chocobo1
d6c92704a1 Restrict more WebAPI endpoints to POST method only 2022-08-16 11:26:05 +08:00
Jesse Smick
ba511e07b4 WebUI: Improve pieces bar drawing algorithm
PR #17336.
2022-08-15 12:05:35 +08:00
Chocobo1
aa6b29fe7e Set HTTP method restriction on WebAPI actions
PR #17548.
2022-08-15 11:56:59 +08:00
Chocobo1
f5836c9fc9 Add unit testing for Path class 2022-08-14 13:31:22 +08:00
Chocobo1
d7d1a90de6 Fix wrong parent path 2022-08-14 13:31:21 +08:00
Chocobo1
16482c507b Fix drive letter validness check 2022-08-14 13:31:21 +08:00
Chocobo1
5abd72d42a Add comments about "UNC path" support 2022-08-12 12:56:58 +08:00
Chocobo1
2fa5ad982d Improve absolute/relative path detection 2022-08-12 12:56:57 +08:00
Chocobo1
43df7d0cd4 Improve path validness test 2022-08-12 12:56:56 +08:00
Chocobo1
17d40855d2 Merge pull request #17535 from Chocobo1/ci
GHA CI: switch to Ubuntu latest stable version
2022-08-12 12:27:57 +08:00
Chocobo1
c924fe7950 GHA CI: update boost to 1.80 2022-08-11 15:20:25 +08:00
Chocobo1
908f345e22 GHA CI: switch to Ubuntu latest stable version 2022-08-11 12:11:20 +08:00
bovirus
858eea1e9e NSIS: Update Italian language
PR #17098.
2022-08-11 12:03:05 +08:00
Chocobo1
06c704c740 Revise quote behavior
Now the behavior of double quotes aligns more as with issuing commands from shell/command line.
Related: https://github.com/qbittorrent/qBittorrent/pull/17453#issuecomment-1203372027

PR #17515.
2022-08-10 13:19:34 +08:00
Vladimir Golovnev
916e53c260 Show progress dialog on second instance run
PR #17516.
2022-08-09 19:12:12 +03:00
xavier2k6
3f94a68e62 Sync nonstd/expected with upstream
* Used commit: `95b9cb015fa17baa749c2b396b335906e1596a9e` (Release v0.6.2)
* Source: https://github.com/martinmoene/expected-lite/releases
PR #17508.
2022-08-09 11:22:45 +08:00
Vladimir Golovnev
5c96f16e3d Merge pull request #17498 from glassez/fix-windows-race 2022-08-07 13:23:03 +03:00
xavier2k6
8e33d99901 Update ax_boost_base.m4 to latest version
Upstream: https://github.com/autoconf-archive/autoconf-archive/blob/master/m4/ax_boost_base.m4
PR #17196.
2022-08-07 14:38:55 +08:00
Vladimir Golovnev (Glassez)
d27dd85dfd Correctly replace desktop integration menu 2022-08-06 19:40:04 +03:00
Vladimir Golovnev (Glassez)
15515200ee Avoid race conditions between dialogs on startup 2022-08-06 15:01:35 +03:00
Vladimir Golovnev
7f40602da9 Fill in initial data in add_torrent_alert handler
libtorrent < 2.0.7 has a bug that add_torrent_alert is posted too early
(before torrent is fully initialized and torrent extensions are created)
so we have to fill initial torrent data in add_torrent_alert handler.

PR #17491.
2022-08-06 06:09:35 +03:00
Chocobo1
33e6ca6778 Redesign Version class
PR #17484.
2022-08-06 11:06:16 +08:00
summer
54b50c3a8a Do not inhibit system sleep/auto shutdown for torrents stuck at downloading metadata
PR #17481.
2022-08-04 13:10:58 +08:00
Chocobo1
fa3d98aa37 Add keyboard shortcut to Download URL dialog
Closes #17436.
PR #17490.
2022-08-04 13:03:38 +08:00
Vladimir Golovnev
e24aaa4ce1 Show startup progress dialog
PR #17389.
2022-08-03 07:14:26 +03:00
Chocobo1
aed492b881 Merge pull request #17471 from Chocobo1/cmake
Improve constructor of Version class
2022-08-02 13:50:56 +08:00
Chocobo1
a4c2363f43 Improve constructor of Version class
Now we can write `Version<int, 3, 1>(1)` and provide only 1 parameter
instead of all 3 parameters at once at the constructor. Note that for
this instance of `Version` 3 numbers were specified but only 1 is truly
mandatory.

The added code are required to specify conditions of the template
instantiation for the compiler.
2022-08-01 14:53:55 +08:00
Vladimir Golovnev
0056a61db3 Clear RSS parsing error after use
PR #17465.
2022-08-01 08:15:16 +03:00
Vladimir Golovnev
6d1573f901 Prevent multiple session refreshes from being enqueued 2022-08-01 08:14:09 +03:00
清靈語
ef297dd8e6 Revise Docker document
Currently Docker Inc. recommends installing Docker Desktop instead of the CLI.
docker-compose has been deprecated, replaced by docker compose.

PR #17448.
2022-08-01 13:10:47 +08:00
Chocobo1
958929aa77 Improve command for running test
It enables `make check` command to build tests and run it
altogether.
2022-07-31 15:20:34 +08:00
Vladimir Golovnev
1c0479a795 When duplicate torrent is added set metadata to existing one
PR #17454. 
Closes #907.
2022-07-31 08:53:26 +03:00
Nowshed H. Imran
748226be29 Rename Icons according to the actions
Fixes #17357.
PR #17366.
2022-07-31 13:31:38 +08:00
Chocobo1
27e1a8ad80 Merge pull request #17453 from Chocobo1/i18n
Fix empty string parameter was omitted
2022-07-30 14:30:12 +08:00
Chocobo1
0802b6d506 Fix empty string parameter was omitted
`QProcess::splitCommand()` will omit empty strings like `""` so provide
our own replacement.

Closes #13124.
2022-07-30 00:17:31 +08:00
Vladimir Golovnev
29f8b4b786 Don't merge trackers by default
PR #17446.
2022-07-29 15:40:40 +03:00
Chocobo1
2ebdf6060d Translate app help text 2022-07-29 11:13:59 +08:00
brvphoenix
b98e7cb69f Fix reply data can't be decompressed correctly
If the "Accept-Encoding" is not manually specified, it will be
automatically set to the supported encodings by QT and the reply data
will also be automatically decompressed in this case. Setting
"Accept-Encoding" manually will disable the "autodecompress" feature
before QT 6.3.0. Although QT 6.3.x has different behaviors, let QT
specify the "Accept-Encoding" and we will always obtain the decompressed
data.

The macro "QT_NO_COMPRESS" defined when QT is compiled will disable
the zlib support. We can manually address this exceptions.

PR #17438.
2022-07-29 11:03:21 +08:00
summer
2071ec0c96 Fix peer count issue when tracker responds with zero figure
Sometimes tracker may respond with 0 for num_complete and num_incomplete and we should display that instead of deducing the peer count from peer list. We should only fallback to peer list if tracker does not respond with any information. In such cases num_incomplete and num_complete is set to -1 by libtorrent.

PR #17432.
2022-07-27 13:09:06 +08:00
Chocobo1
36bc77e2e2 Merge pull request #17416 from Chocobo1/icon
Split code to smaller functions
2022-07-26 12:47:21 +08:00
Chocobo1
88556078be Merge pull request #17412 from Chocobo1/stat
Improve free disk space reporting
2022-07-26 12:45:10 +08:00
Chocobo1
27a07e20f5 Split code to smaller functions 2022-07-25 01:22:33 +08:00
Chocobo1
5d1115f591 Remove compile-time conditional
This checking should be universally applied and not limited to certain OS.
2022-07-25 01:18:42 +08:00
Chocobo1
88d9e82fc9 Improve free disk space reporting
For non-existent directories (which will be created on demand) `Utils::Fs::freeDiskSpaceOnPath`
will return invalid value so instead query its parent path.
2022-07-25 01:18:42 +08:00
Chocobo1
50b01ed45d Revise function for checking "same file" 2022-07-25 01:18:37 +08:00
Chocobo1
243d130667 Clean up code 2022-07-24 18:07:52 +08:00
Chocobo1
e33f73d08e Avoid performance impact over network or removable drives 2022-07-24 12:58:24 +08:00
Chocobo1
f505d742d8 Merge pull request #17392 from Chocobo1/validatePath
Fix path validator
2022-07-24 09:54:30 +08:00
Chocobo1
727d20cc92 Simplify implementation
This also enable each platform to provide its own optimal implementation of it.
2022-07-23 22:41:26 +08:00
Chocobo1
3567ae3529 Merge pull request #17407 from Chocobo1/addtorrent
Fix "Add torrent dialog" spill-over on smaller screens
2022-07-23 12:20:55 +08:00
Chocobo1
a9906e5d2a Fix validation text doesn't update on mouse click selection 2022-07-22 21:27:00 +08:00
Chocobo1
6ab35512da Fix browse icon cannot be selected/focused via keyboard 2022-07-22 21:27:00 +08:00
Chocobo1
cfcbe3d6e1 Use less intimidating icon for intermediate state 2022-07-22 21:27:00 +08:00
Chocobo1
39c0c1a088 Simplify operations 2022-07-22 21:27:00 +08:00
Chocobo1
f7ae010274 Rename interface 2022-07-22 21:27:00 +08:00
Chocobo1
4fd5037c10 Avoid redundant operation
The default is the same as the one specified here.
2022-07-22 21:27:00 +08:00
Chocobo1
3fe09aa673 Fix path validator
And revise tooltip message.

Closes #11152.
2022-07-22 21:26:57 +08:00
Chocobo1
3a6858a277 Adjust height to hide scrollbar by default 2022-07-22 13:23:19 +08:00
Chocobo1
c287c7bb01 Revise action capitalization 2022-07-22 13:23:19 +08:00
Chocobo1
99061d92c1 Fix "Add torrent dialog" spill-over on smaller screens
Done by adding an QScrollArea to the layout.

Closes #17387.
2022-07-22 13:23:19 +08:00
Vladimir Golovnev
5b269a782a Prevent tray menu from being accessed after destruction
PR #17400.
2022-07-21 09:30:05 +03:00
xavier2k6
71e53a4628 Raise minimum libtorrent version to 2.0.7
PR #17396.
2022-07-21 12:21:48 +08:00
Chocobo1
275387a972 Don't show validation result dialog on every key input
Instead of showing dialog, now it relies on icon to show the validation
result.

PR #17391.
2022-07-21 12:19:58 +08:00
Chocobo1
e68e3b516e Improve performance of "filesystem line edit" widgets
Also prevent unnecessary querying on the filesystem by omitting
calling setRootPath().
2022-07-21 02:27:48 +08:00
summer
3f7376f26b Add transfer list refresh interval settings to WebUI
Specially useful for qbt-nox users
PR #16713.

Co-authored-by: An0n <79678786+an0n666@users.noreply.github.com>
2022-07-19 11:14:45 +08:00
summer
0e3ce019e4 Update libtorrent to 2.0.7 & 1.2.17 in GHA CI
PR #17385.
2022-07-19 11:13:47 +08:00
Dmitry Vodopyanov
f20f479a4b Improve sender field in mail notifications
Problem statement: user sees its email address in email notification,
while it is better to have sender field app-personalized, like it did
in Nextcloud: they send notifications from user's email address and
add alias 'Nextcloud' to it.

This patch adds alias 'qBittorrent' to qBittorrent email notifications,
so user sees more user-friendly email notification.

PR #17374.
2022-07-18 13:22:30 +08:00
Chocobo1
e95066a37c Merge pull request #17367 from Chocobo1/pr_17005
Split the OS cache settings into Disk IO read/write modes
2022-07-17 16:14:58 +08:00
Chocobo1
e281b667c6 Properly release settings class before further operations
Fix up d3e7e8a630.

PR #17376.
2022-07-17 12:41:18 +08:00
Chocobo1
ce0e92e12a Merge pull request #17363 from Chocobo1/pause
Add workaround for payload upload/download rate
2022-07-16 11:52:28 +08:00
Chocobo1
56bb379024 Add workaround for payload upload/download rate
The graphs are showing 0 for both payload upload & download rate but
torrent statistics aren't, so suppress it manually.
The workaround only applies to paused state for now.

Closes #17294.
2022-07-15 12:20:09 +08:00
Chocobo1
bafe4e909c Use switch() statement 2022-07-15 12:20:09 +08:00
Chocobo1
b6b0b54cdb Rename variable 2022-07-15 12:17:39 +08:00
xavier2k6
a9a45b9569 Sync flag icons with upstream
* Contains numerous flag fixes.
* Upstream commit: `494ace54e3c413dcebcb071f583b441b267c984f` - (Release v6.6.3)
* Update `AUTHORS` file with upstream `copyright/repo url change`

PR #17199.
2022-07-15 12:08:37 +08:00
Chocobo1
864d806ee8 Merge pull request #17359 from Chocobo1/testnaturalcmp
Add testing for various classes
2022-07-15 12:07:36 +08:00
summer
4cda5d89fb Clean up WebUI preferences
PR #17319.
2022-07-15 12:07:09 +08:00
summer
5b730ffb72 Split the OS cache settings into Disk IO read/write modes
Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
2022-07-14 18:37:38 +08:00
nmariusp
e2b140b8dd Remove meaningless checking for nullptr
Fix PVS-Studio issue "rss_autodownloader.cpp:111: warning: V668
There is no sense in testing the 'm_fileStorage' pointer against null,
as the memory was allocated using the 'new' operator.
The exception will be generated in the case of memory allocation error".

PR #17347.
2022-07-14 13:19:38 +08:00
Chocobo1
d2a29c2f87 Correctly remove incomplete settings file
PR #17362.
2022-07-14 13:05:08 +08:00
Chocobo1
60e62dc5ab Add testing for various classes 2022-07-13 18:05:14 +08:00
Chocobo1
4f1684c714 Bump libtorrent requirements to 2.0.6 2022-07-13 17:16:18 +08:00
Vladimir Golovnev
d3e7e8a630 Refactor SettingsStorage implementation
Remove redundant fragmentation of logic.

PR #17354.
2022-07-13 07:09:15 +03:00
Pino Toscano
437ddd3f76 Stop installing app icon in pixmaps location
Since the application icons are already installed in
the global XDG hicolor theme, simply stop installing the 128px one
in the pixmaps location.

PR #17342.
2022-07-12 13:14:55 +08:00
Chocobo1
0d715d879d Specify test files manually
So that cmake will detect file changes automatically and therefore we
don't need to re-invoke cmake manually.
2022-07-11 13:58:55 +08:00
Vladimir Golovnev
cfdf5cffac Show remote access info after it is available
PR #17329.
2022-07-11 08:38:45 +03:00
Chocobo1
d6314b30a2 Merge pull request #17341 from Chocobo1/tray
Revise behavior of initializing checkboxes
2022-07-11 12:39:05 +08:00
Chocobo1
03da68b1cf Add support for unit testing
* Downgraded macOS CI to Qt 6.2.0 due to a bug in Qt Test module
* Revised cmake build scripts
* For now, only building via cmake is supported

PR #17338.
2022-07-10 13:20:27 +08:00
Vladimir Golovnev
890630944d Extract desktop integration stuff into separate class
PR #17313.
2022-07-09 08:06:22 +03:00
Chocobo1
8d73ab65b2 Don't needlessly hide Options dialog
The dialog should only close after all operations are done, not before.
2022-07-09 11:34:47 +08:00
Chocobo1
e54124fdb8 Add tooltip message when system tray icon isn't available
Also don't hide the sub-options as they are already in disabled state.
2022-07-09 11:34:47 +08:00
Chocobo1
e4fafb911a Revise behavior of initializing checkboxes
The checkboxes initial value should not depend on parent state and
should be restored anyway.
2022-07-09 11:34:43 +08:00
Chocobo1
2ef059807a Merge pull request #17333 from Chocobo1/logger
Revise classes startup sequence
2022-07-08 12:50:02 +08:00
Chocobo1
dba711d099 Use helper function for logging messages 2022-07-07 12:17:52 +08:00
Chocobo1
ec13bba4da Revise classes startup sequence
1. Initialize Logger class earlier so that it can record messages from other classes (for
   debugging purpose).
2. Deprioritize WebUI port adjustment. It is not a high priority in here.
3. Slightly deprioritize file logger initialization.
2022-07-07 12:16:48 +08:00
luzpaz
8736c9ec4c Fix various typos
Found via `codespell -q 3 -S *.ts,*.desktop,./src/base/3rdparty,./dist/windows/installer-translations -L ba,doas,ist,ro,ths`

PR #17317.
2022-07-06 13:11:11 +08:00
Chocobo1
286df8f560 Merge pull request #17311 from Chocobo1/memPrio
Work around application stuttering on Windows
2022-07-05 14:18:02 +08:00
Nowshed H. Imran
92afbd45e8 Remove option of using icons from system theme
PR #17292.
Closes #17150.
2022-07-05 12:32:35 +08:00
Chocobo1
d293c22a52 Try to recover missing tags
Tags can go missing from config/resume data. Try to recover them to avoid inconsistent behavior.

PR #17290.
2022-07-05 12:29:01 +08:00
summer
c660c9df8e Try to recover missing tags
Tags can go missing from config/resume data. Try to recover them to avoid inconsistent behavior.
2022-07-04 18:18:56 +06:00
Chocobo1
ed2eadaf56 Work around application stuttering on Windows
This is observed by unusual high page faults when the stuttering occurs.
With this workaround, the high page faults still occurs but the GUI remains responsive.
2022-07-04 18:38:23 +08:00
Chocobo1
fa26333a5b Move "memory priority" settings to Application class 2022-07-04 18:38:20 +08:00
Vladimir Golovnev
be7cfb78de Restore BitTorrent session asynchronously
Reduce the total startup time of the application and maintain sufficient responsiveness of the UI during startup due to the following:
1. Load resume data from disk asynchronously in separate thread;
2. Split handling of loaded resume data in chunks;
3. Reduce the number of emitting signals.

PR #16840.
2022-07-04 12:48:21 +03:00
Chocobo1
ec1d2cba40 Merge pull request #17305 from Kolcha/fix/open-dest-dir
Fix "Open destination folder" on macOS
2022-07-04 08:38:10 +08:00
Nick Korotysh
a93cd20e4d Open destination folders on macOS in separate thread
In some unknown way, the one line in Objective-C affects Qt's main
loop causing the crash in QApplication::exec() on processing next
event after that call.

Even crash doesn't happen exactly after this call, it will happen
on application exit. Call stack and disassembly are the same in
all cases.

But running that code in another thread solves the issue.
2022-07-02 09:16:22 +02:00
Chocobo1
25b3f2d1a6 Raise priority of the main "event loop" thread
The goal is to improve responsiveness of qbt when CPU resources are scarce.

Instead of lowering libtorrent threads priority, it is chosen to raise main event loop thread
priority to avoid getting messy with libtorrent internals.

Also on Windows, threads doesn't inherit thread priority from the parent thread and it always
use the default (normal) priority.

PR #17278.
2022-07-02 14:57:47 +08:00
Chocobo1
b44bdd21cb Merge pull request #17281 from Chocobo1/creator
Fix filename not populated correctly
2022-07-02 14:41:50 +08:00
Nick Korotysh
53ea1843ab Pass Torrent::contentPath() to MacUtils::openFiles()
it already provides absolute path, no additional manipulations
are required.
2022-07-01 23:23:26 +02:00
Chocobo1
34091176d5 Fix wrong root path generated on Windows
Fix cannot create torrent when the source file is at the root of a
drive.
Fix created torrent cannot be seeded when the source file is at the root
of a drive.

Fix up dd1bd8ad10.
Closes #17279.
2022-07-01 13:34:14 +08:00
Vladimir Golovnev
ac8a6887b6 Improve D-Bus notifications handling
Make notifications clickable on Linux by assigning "default" action.
Don't react to unrelated notifications clicked by keeping track of qBittorrent notifications IDs and filter out unrelated ones.
Make D-Bus Notifications interface proxy class to be maintained manually and fix coding style in it.
Closes #9084.
PR #17282.
2022-06-30 08:01:17 +03:00
summer
cc0a0b56ed Make working set limit available only on libtorrent 2.0.x builds
You can already control the cache size in libtorrent 1.2.x so it doesn't make sense to implement this limit for all use cases. Also there are some downsides to using working set size to limit memory usage such as unresponsive GUI when limit gets hit.

PR #17275.
2022-06-30 11:23:48 +08:00
sledgehammer999
0e989185ce Merge pull request #15769 from now-im/flow
Implement new icon/color theme
2022-06-28 23:23:25 +03:00
Chocobo1
aadf961184 Fix filename not populated correctly
Fix up dd1bd8ad10.
Related #17279.
2022-06-26 19:30:17 +08:00
summer
1abeac8811 Remove unnecessary force reannounce on interface alerts
This isn't necessary since it can cause issues by doing unnecessary reannounce during startup and network address refresh. This impact of this can be great if it happens on a regular basis and if someone has a lot of torrents.

PR #17261.
2022-06-26 07:26:21 +03:00
Vladimir Golovnev
f8a304abdc Implement base classes for application components
PR #17219.
2022-06-25 15:46:55 +03:00
Chocobo1
41a38428fc Merge pull request #17259 from Chocobo1/cleanup
Make use of chrono literals from std library
2022-06-25 13:23:27 +08:00
Mike Lei
d3850cf98f Improve WebUI progress bar rendering
PR #17258.
2022-06-24 13:18:33 +08:00
Chocobo1
02d906d3ae Initialize pointer to a default value 2022-06-23 21:31:16 +08:00
Chocobo1
6de72ecc77 Make use of chrono literals from std library 2022-06-23 21:31:16 +08:00
Chocobo1
2a5dbe840c Clean up coding style 2022-06-23 13:40:42 +08:00
Li Z
86b6bcc1d9 Fix incorrect "max outgoing port" setting
PR #17252.
2022-06-23 11:49:45 +08:00
Blackspirits
3023cff2b5 NSIS: Update Portuguese translations
PR #17222.
2022-06-20 13:09:17 +08:00
Chocobo1
f3a4764a1d Merge pull request #17233 from Chocobo1/log
Add shutdown logging
2022-06-20 13:08:46 +08:00
Chocobo1
0d46a108b8 Revise Statistics class 2022-06-19 15:51:19 +08:00
Chocobo1
8114c11d58 Add shutdown logging 2022-06-18 17:14:54 +08:00
Chocobo1
e3425cfa9e Defer closing logger instance
So that logger can still be used in shutdown stage.
2022-06-18 17:14:54 +08:00
Chocobo1
af78344e5d Use coarse timestamp format
Since format in milliseconds doesn't add additional value and is
slower than just seconds.
2022-06-18 17:14:42 +08:00
Vladimir Golovnev
a2121f2483 Improve RSS subsystem initialization
PR #17227.
2022-06-18 09:56:49 +03:00
Vladimir Golovnev
7d97905716 WebAPI: Add endpoint to set speed limit mode 2022-06-18 06:12:43 +03:00
Chocobo1
61adfea196 Fix garbage text appeared in log file
Fix up fed969ed64.
2022-06-18 04:18:27 +08:00
Chocobo1
3dd616f6ff Use proper method for manipulating text
`innerText` is too powerful for the job here, use a more
restricted/secure way to manipulate text.

Related: #17211.
PR #17212.
2022-06-17 13:00:32 +08:00
Prince Gupta
d5e6d161f2 Cache last traverse result while parsing file tree
PR #16376.
2022-06-15 20:14:53 +03:00
thalieht
d1515456bc Add checkbox for "Excluded file names"
PR #17206.
2022-06-15 13:16:01 +08:00
brvphoenix
7faa8b7a02 Don't use QCollator when it works on posix mode
PR #17204.
2022-06-14 13:22:30 +08:00
Chocobo1
5b0cbf9eb1 Merge pull request #17187 from Chocobo1/names
Fix wrong file names displayed in tooltip
2022-06-11 12:27:41 +08:00
xavier2k6
74db0576af Sync nonstd/expected with upstream
* Used  `commit: b78dd92cc92b0cfe4eedad823cfd411c13afeb66` (Release v0.6.0)
* Source https://github.com/martinmoene/expected-lite/releases/tag/v0.6.0

PR #17192.
2022-06-11 12:27:13 +08:00
xavier2k6
d0b13f0eb0 GHA CI: "file health" update pre-commit action to v3.0.0
* Update `pre-commit` action to `v3.0.0`
  https://github.com/pre-commit/action/releases
* Bump pre-commit-hooks to `v4.3.0`
  https://github.com/pre-commit/pre-commit-hooks.git

PR #17195.
2022-06-11 12:25:12 +08:00
Emil M George
29a964d5b7 Add support for custom SMTP ports
The port can be optionally specified by appending `:<port>` to the existing SMTP Server field in settings. If no port is specified, then the default port (25 for insecure or 465 for SSL) is used.

Closes #12212.
PR #17157.
2022-06-10 14:02:51 +08:00
mxtsdev
5e6174c087 Add file name filter/blacklist
Blacklist filtered file names from being downloaded from torrent(s).
Files matching any of the filters in this list will have their priority automatically set to "Do not download".
See Options > Downloads >Do not download.

Closes #3369.
PR #17106.
2022-06-10 13:37:46 +08:00
Nowshed H. Imran
199d770e15 Implement new icon/color theme
Co-authored-by: xavier2k6 <42386382+xavier2k6@users.noreply.github.com>
2022-06-09 18:18:14 +06:00
Prince Gupta
c47e29c7c8 Do RSS serializing on worker thread
PR #16357.
2022-06-09 15:16:37 +03:00
Chocobo1
fed969ed64 Avoid string encoding conversion
Use UTF-16 string literals to match QTextStream internal buffer
encoding.
2022-06-09 12:24:31 +08:00
Chocobo1
9cb686a6b7 Fix wrong file names displayed in tooltip
Also rename variable.
Closes #17179.
2022-06-09 12:24:31 +08:00
Chocobo1
eddeda7bab Remove usage of QTextStream
Other classes already provide rich methods so avoid another
layer of QTextStream which slow things down (slightly).

PR #17180.
2022-06-09 11:18:41 +08:00
Vladimir Golovnev
ca07540675 Fix rate calculation when interval is too low
PR #17155.
2022-06-08 08:51:48 +03:00
Chocobo1
fb5f563537 Merge pull request #17148 from Chocobo1/gui
Fix wrong dialog sizes on first start up
2022-06-05 13:36:41 +08:00
thalieht
2f9c5cdb22 Add "Filter files" field in new torrent dialog
PR #16344.
2022-06-04 12:57:50 +08:00
Chocobo1
fcf50820e8 Don't resize dialog with invalid sizes
This fixes wrong dialog sizes on first startup.
2022-06-03 16:07:36 +08:00
Chocobo1
3fd0241abb Set dialog properties at the caller site
Redundant `setModal(true)` are removed since the dialog is already opened via `open()`.
2022-06-02 23:53:30 +08:00
Vladimir Golovnev
ab0c82965c Avoid redundant checks of category names
PR #17130.
2022-05-31 10:42:40 +03:00
Kacper Michajłow
5173a56ebd Fix DHT/PeX/LSD status when it is globally disabled
Global status takes precedence over specific torrent private status.

PR #17126.
2022-05-31 12:45:28 +08:00
Chocobo1
9cd993d1da Merge pull request #17116 from Chocobo1/cleanup
Clean up usage of `static` keyword
2022-05-31 12:39:30 +08:00
Chocobo1
73faf67084 Clean up usage of static keyword
They are either misused or redundant, so remove it.
2022-05-30 13:25:34 +08:00
brvphoenix
fd51362545 Don't decompress the reply data for Qt 6.3
PR #17120.
2022-05-30 13:10:29 +08:00
sledgehammer999
56b99f4e19 Merge pull request #17125 from sledgehammer999/cmake_lupdate
Use CMake to update translation files
2022-05-29 20:46:15 +03:00
sledgehammer999
63cdfa2d85 Update CIs to correctly regenerate translations files 2022-05-29 02:49:57 +03:00
sledgehammer999
242874e705 Use CMake to update translation files
It uses lupdate directly.
Qt's `qt_add_lupdate()` cmake function doesn't help much.
First of all it is Qt6 only.
Secondly, our project is split into multiple targets but we need all
strings into a single .ts file per language.
Thirdly, it looks like it will skip source files that are added conditionally into the build
via cmake condition checking (eg DBUS source files). We need to gather all strings present
in the source files regardless of the build configuration.

On another note, this is a step towards reducing dependency on qmake/autoconf.
2022-05-29 02:49:57 +03:00
Vladimir Golovnev
a5caa807f5 Initialize torrent status using libtorrent extension
PR #17096.
2022-05-28 09:30:50 +03:00
Chocobo1
c2c17fd053 Revise icon cache look up
Find in `m_iconCache` first because it is cheaper than calling
`QIcon::fromTheme()`.
2022-05-27 16:23:19 +08:00
Chocobo1
f54cc5796e Move function into anonymous namespace 2022-05-27 16:23:19 +08:00
Chocobo1
a9f99aed48 Revise code 2022-05-27 16:23:18 +08:00
Chocobo1
7eaaa8f92a Turn static variable into class member 2022-05-27 04:01:37 +08:00
Chocobo1
ca9f5a18d4 Suppress type narrowing warnings 2022-05-27 04:01:34 +08:00
Vladimir Golovnev
4f62900cd3 Update torrent status filter counters consistently
PR #17097.
Closes #15981.
Closes #16490.
2022-05-26 19:55:00 +03:00
sledgehammer999
2c9e1d942b Merge pull request #17091 from sledgehammer999/ts_newlines_fix
Sync translations from Transifex and run lupdate
2022-05-25 20:44:11 +03:00
Vladimir Golovnev
4032393c0e Pause torrent in all "fastresume rejected" cases
PR #17087.
Addition to #17064.
2022-05-25 08:24:53 +03:00
xavier2k6
8e854062e8 Sync flag icons with upstream
Upstream commit 1f861ac27d8a3b46e78eaa8ac30d7de35279ab01
Upstream release v6.4.2

PR #17077.
2022-05-25 12:41:16 +08:00
sledgehammer999
cbf9c8ec1a Sync translations from Transifex and run lupdate 2022-05-25 00:16:57 +03:00
Priit Uring
494593c745 Update clipboard.js to v2.0.11
https://github.com/zenorocha/clipboard.js/releases

PR #17073.
2022-05-24 12:55:30 +08:00
sledgehammer999
3af832ec18 Sync translations from Transifex and run lupdate 2022-05-22 19:14:00 +03:00
Vladimir Golovnev
7e0cd223fd Revamp tracker entries handling
PR #17017.
2022-05-22 09:09:11 +03:00
Vladimir Golovnev
8c0cd09823 Handle all "fastresume rejected" cases consistently
PR #17064.
2022-05-22 07:23:52 +03:00
Chocobo1
f931fc5a85 Merge pull request #17057 from Chocobo1/build
Disable copy, move constructors when inheriting from QObject
2022-05-21 13:12:30 +08:00
Chocobo1
c8b4611d8d Disable copy, move constructors when inheriting from QObject 2022-05-19 19:07:23 +08:00
Chocobo1
7764169aa3 Disallow narrowing conversions in signal connection 2022-05-19 12:55:07 +08:00
Chocobo1
567dd3fabb Disable compiler specific extensions
The property is set to ON by default, now turn it off.
2022-05-19 12:55:05 +08:00
Chocobo1
8d3c19c599 Merge pull request #17031 from Chocobo1/net
Fix wrong GUI behavior in "Optional IP address to bind to" setting
2022-05-19 12:52:35 +08:00
vlakoff
b84333f8a1 Consider brackets within wildcard as regular characters
In glob patterns, square brackets have a special meaning, that may be unexpected by the users.

Thus we escape these brackets, so that the only remaining special characters are the * and ? wildcards.

PR #16965.
2022-05-18 08:33:14 +03:00
thalieht
acdd08e9a2 Consistently emit signal when file "ignored" state is changed
PR #17042.
Closes #17037.
2022-05-18 07:47:48 +03:00
Chocobo1
dbfd6a2368 WebUI: enforce coding style
Actually, not all of them but some that can be enforced by eslint.
The changes are made by eslint with minor manual tweaking.

PR #17046.
2022-05-18 11:37:05 +08:00
Chocobo1
5af96943e3 Merge pull request #17045 from Chocobo1/cleanup
Fix compilation with qmake
2022-05-17 13:14:29 +08:00
Hampton Ford
05325b135d Fix and improve the docs
Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>

PR #17034.
2022-05-16 08:40:06 +03:00
Chocobo1
9d858d5cd7 Fix compilation with qmake
Fix up 7c35904062.
2022-05-16 01:15:19 +08:00
Chocobo1
e82c50ed73 Clean up code 2022-05-16 01:15:08 +08:00
Chocobo1
4ce98d57dd Fix wrong GUI behavior in "Optional IP address to bind to" setting
Previously the address field got erroneously reset to "All addresses"
when the network interface is down.
2022-05-14 18:42:13 +08:00
Chocobo1
114c6d36d1 Clean up code
Add const.
Move template implementation to .cpp file.
2022-05-14 18:30:10 +08:00
Chocobo1
538c88ced4 Improve logic when interfacing settings with combobox
PR #17023.
2022-05-13 12:13:04 +08:00
Chocobo1
7c35904062 Use stacktrace dialog when GUI is enabled
PR #17022.
2022-05-13 12:12:36 +08:00
Chocobo1
5c3c6b63ba Migrate to Boost.Stacktrace
PR #17014.
2022-05-12 11:06:05 +08:00
Coda
e698c09298 Allow to use POSIX-compliant disk IO type
This patch allows user to switch disk IO type between memory mapped files based type (default in libtorrent 2, and seems causing memory issues) and POSIX-compliant type which is more conservative on memory usage.

Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
Co-authored-by: Vladimir Golovnev (Glassez) <glassez@yandex.ru>

PR #16895.
2022-05-11 21:28:06 +03:00
Vladimir Golovnev
a048ea668f Use uniform way to export .torrent files
PR #17013.
2022-05-10 15:36:05 +03:00
Vladimir Golovnev
5af78ad2cd Preserve "skip hash check" when there is no metadata
When torrent is added without metadata libtorrent doesn't honor "seed mode" and doesn't save it in resume data so when metadata is available torrent will still check file hashes. This patch will add a logic that preserves originally enabled "seed mode" until the metadata is received.
PR #17009.
2022-05-10 15:34:38 +03:00
Vladimir Golovnev
338e89176d Mark all files as complete if torrent is in "seed mode"
Fixes regression of bcfa486.
Closes #16999.
PR #17008.
2022-05-10 15:29:46 +03:00
itlezy
a266599118 Add keyboard navigation keys
* Added keyboard navigation keys for context menu with `&`
* Added `CTRL+M` for force resume.

PR #16988.

Co-authored-by: itLezy <itLezy@users.noreply.github.com>
Co-authored-by: Vladimir Golovnev <glassez@yandex.ru>
2022-05-10 11:34:43 +08:00
Chocobo1
80f624e4cc Merge pull request #17004 from Chocobo1/fixes
Improve compatiability with various platforms
2022-05-09 12:14:09 +08:00
Chocobo1
002d56d8b3 Fix type mismatch
msys2 was reporting the following error:
```
D:/a/qbittorent_msys2/qbittorent_msys2/src/qBittorrent/src/app/application.cpp: In member function 'void Application::applyMemoryWorkingSetLimit()':
D:/a/qbittorent_msys2/qbittorent_msys2/src/qBittorrent/src/app/application.cpp:777:36: error: no matching function for call to 'min(unsigned int, long unsigned int)'
  777 |     const SIZE_T minSize = std::min((64 * MiB), (maxSize / 2));
      |                            ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
```
2022-05-08 16:48:29 +08:00
Chocobo1
be4a1e7fd7 Suppress wrong print specifier
By removing unimportant debug message.
2022-05-08 16:46:36 +08:00
Chocobo1
a0a45333f1 Don't use old style casts 2022-05-08 14:53:27 +08:00
Chocobo1
dba998fea0 Don't use hardcoded path for temp folder 2022-05-08 14:00:59 +08:00
Chocobo1
fe2b49cf81 Merge pull request #16992 from Chocobo1/compose
Add script for docker-compose
2022-05-07 11:26:03 +08:00
Chocobo1
c90f1511dc Merge pull request #16987 from Chocobo1/hardening
Improve docker script
2022-05-06 11:23:15 +08:00
Chocobo1
763d17281f Bump boost requirement to 1.71
This is a prerequisite for using boost stacktrace.
Note that this is not the first version that introduces boost stacktrace but the version that
should be stable enough.

PR #16986.
2022-05-06 11:20:34 +08:00
Chocobo1
1ae5339c33 Add script for docker-compose 2022-05-05 22:01:49 +08:00
Chocobo1
7562e0e870 Add support for search engine
Also mount /tmp as writable, this is required by qbt and not just for
the search engine functionality.
2022-05-05 19:52:10 +08:00
Chocobo1
0e456f33c1 Run qbt-nox as non-root
This is mainly to avoid downloaded files being owned by root which
requires another one or two commands to change the file ownership.
2022-05-05 13:39:52 +08:00
Chocobo1
6778d36454 Make the container filesystem read-only
It is not expected to modify the filesystem of the container.
Mounted volumes (-v) are not affected.
2022-05-05 13:39:27 +08:00
Chocobo1
bc54860ad6 Avoid using valid path for illustrative purpose
Otherwise docker will really create this example path on host machine
which is bad.
2022-05-05 11:51:21 +08:00
Chocobo1
4894578b72 Improve Docker build
* Improves code readability.
* Improve documentation.
* Fix "docker stop" doesn't terminate qbt gracefully which could lead to
  data corruption.
* Provide correct/working bittorrent listening port by default.
* Make use of qbt profile option instead of hacking environment
  variables.
* Simplify build steps.

PR #16976.
2022-05-05 11:02:57 +08:00
Tom Piccirello
fb7f7d0c75 Add support for exporting .torrent from WebUI
PR #16968.
2022-05-04 12:13:24 +08:00
Tom Piccirello
48fa4e116c Fix Docker legal notice when using existing config
If the user is using a pre-existing config, don't update the legal notice.

PR #16974.
2022-05-04 12:12:15 +08:00
Chocobo1
e9d3928fe0 Store WebUI port setting in human readable number
Previously it was wrapped in QVariant type.

PR #16977.
2022-05-04 12:11:17 +08:00
Chocobo1
2a6f02fa29 Fix empty selection in WebUI language combobox
This mostly happens with a clean install.

PR #16978.
2022-05-04 12:10:06 +08:00
summer
ce0e5be7ce Increase limit of maximum number of articles per feed
Closes #16690.
PR #16698.

Co-authored-by: An0n <79678786+an0n666@users.noreply.github.com>
2022-05-03 10:59:47 +08:00
Tom Piccirello
a8b6a40f13 Separate docker image data and config dirs
PR #16972.
2022-05-03 10:58:37 +08:00
Chocobo1
88a91e0769 Merge pull request #16971 from Chocobo1/dialog
Move stacktrace dialog to gui folder
2022-05-03 10:56:41 +08:00
Chocobo1
21f4676b16 Rename method 2022-05-02 12:35:53 +08:00
Chocobo1
bb2a874fd5 Reset widget property to default
This property wasn't been customized.
2022-05-02 12:35:38 +08:00
summer
56667e717b Prevent the new update box from blocking input on other dialogues
PR #16678.
2022-05-01 16:18:22 +03:00
Chocobo1
caaaa05710 Move conditionals to the bottom 2022-05-01 14:24:56 +08:00
Chocobo1
d69e6bb7aa Move stacktrace dialog to gui folder 2022-05-01 14:24:39 +08:00
Chocobo1
a1903e5d67 Delete unreachable code 2022-05-01 13:55:26 +08:00
Chocobo1
64d8db0c93 Move system signal related functions to its own file
And revise "signal safe print" function.
PR #16953.
2022-05-01 12:32:51 +08:00
summer
7b608fd0c9 Reduce the number of hashing threads by default
This seems to be the culprit responsible for slower hash rate in RC2_0 releases.
https://github.com/qbittorrent/qBittorrent/issues/16043#issuecomment-1113774868

PR #16951.
2022-05-01 12:30:25 +08:00
Chocobo1
19cbffb5e2 Remove artificial max limits from "Torrent Queueing" related options
Closes #16936.

PR #16942.
2022-04-30 12:26:18 +08:00
Chocobo1
c5ea6b0502 Merge pull request #16941 from Chocobo1/msvc
Fix nogui compilation for Windows
2022-04-30 12:25:24 +08:00
Chocobo1
639ed40314 Disable Linux-specific function when compiling for Windows 2022-04-29 13:49:31 +08:00
Chocobo1
c5cbda0bbe Avoid splitting code over ifdef boundary
By removing unimportant debug message.
2022-04-29 13:49:31 +08:00
Chocobo1
59e37210f3 Use correct type for comparisons
`_write()` actually returns `int` type.

And fix wrong function parameters.

Closes #16938.
Closes #16944.
2022-04-29 13:49:31 +08:00
Chocobo1
9351f66c26 Add support for exporting .torrent data to buffer
Related: https://github.com/qbittorrent/qBittorrent/pull/16886#discussion_r855882018
PR #16931.
2022-04-27 12:29:00 +08:00
Vladimir Golovnev
7432c4dbfe Merge pull request #16922 from glassez/avoid-blocking
Avoid some blocking calls to libtorrent
2022-04-27 07:06:23 +03:00
Vladimir Golovnev (Glassez)
1069bea273 Cache native torrent info to avoid extra blocking calls 2022-04-25 09:25:45 +03:00
Vladimir Golovnev (Glassez)
c740d105c9 Don't force update torrent status 2022-04-25 08:32:49 +03:00
Vladimir Golovnev (Glassez)
66a5a9863f Fill torrent status with initial values when reload 2022-04-25 08:32:44 +03:00
Vladimir Golovnev (Glassez)
7ca47b8916 Delay event processing until status updated 2022-04-25 08:31:50 +03:00
Vladimir Golovnev (Glassez)
bcfa4866fe Cache indexes of completed files
This avoids extra blocking calls to libtorrent.
2022-04-25 08:31:39 +03:00
Amanuense-del-diavolo
de8377ab53 added Dockefile and entrypoint.sh
It uses the latest available version for libtorrent and builds both libtorrent and qBittorrent with Cmake + ninja

The legal notice must be accepted trought an environment variable called LEGAL and passed to docker when the container is run, to set it true one must set "LEGAL=accept"

PR #16828.
2022-04-25 11:39:25 +08:00
xavier2k6
b85b1e8834 Update grunt dependency
Use `*` so we don't need to care about its version anymore.
PR #16917.
2022-04-25 11:38:12 +08:00
Chocobo1
eba5a48abd Merge pull request #16886 from Chocobo1/export
Add "Export .torrent" action
2022-04-24 12:43:13 +08:00
Chocobo1
a90ade0446 Add "Export .torrent" action 2022-04-23 15:11:09 +08:00
xavier2k6
0b86eb9b4c Update clipboard.js to v2.0.10
PR #16918.
2022-04-23 12:39:06 +08:00
Vladimir Golovnev
359c4fef9d Avoid dereferencing null pointers
PR #16896.
Closes #16884 and similar issues.
2022-04-19 13:52:56 +03:00
Chocobo1
71b1cb3b9c Remove unused header 2022-04-19 11:35:51 +08:00
xavier2k6
b740cc23d3 GHA CI: Update dependencies
Update `libtorrent` version(s) to `2.0.6` & `1.2.16` in `GHA CI`
- https://github.com/arvidn/libtorrent/releases/tag/v2.0.6
- https://github.com/arvidn/libtorrent/releases/tag/v1.2.16

Update `Boost` version to `1.79.0`
- https://www.boost.org/users/history/version_1_79_0.html

Bump `pre-commit-hooks` version to `4.2.0`
- https://github.com/pre-commit/pre-commit-hooks/releases/tag/v4.2.0

Update `Qt6` version to `6.3.0`
- https://www.qt.io/blog/qt-6.3-released
- https://code.qt.io/cgit/qt/qtreleasenotes.git/about/qt/6.3.0/release-note.md

Note: used `aqtinstall 2.1.0` with `jurplel/install-qt-action` for support of `Qt 6.2.1+`
(this requirement can be removed on official release of `jurplel/install-qt-action v3`)

PR #16888.
2022-04-19 10:32:56 +08:00
Vladimir Golovnev
613e9866aa Merge pull request #16876 from glassez/blocking
Avoid some blocking calls to libtorrent

Under some conditions (when libtorrent is doing heavy work), blocking calls can wait quite a long time, thereby suspending the main application thread. In some cases, we can avoid this, since we have enough data to make the job without call to libtorrent. Although in some cases it may require a little more work to be done in the main thread, but overall responsiveness still benefits greatly in the end, especially when the libtorrent working thread is heavily loaded.
2022-04-16 19:27:41 +03:00
Chocobo1
bc937d38a2 Allow to set "working set limit" on non-Windows OS
PR #16874.
2022-04-16 11:36:58 +08:00
Vladimir Golovnev (Glassez)
35fcf39fc8 Add additional trackers without extra blocking call 2022-04-15 11:45:10 +03:00
Vladimir Golovnev (Glassez)
bd45dc5d0f Avoid some blocking calls to libtorrent 2022-04-14 15:22:32 +03:00
Vladimir Golovnev
7377974731 Improve path extension handling
PR #16867.
2022-04-14 09:43:07 +03:00
Requi
669b67e666 WebAPI: return correct status
Fix web API returning Not Found instead of Forbidden.

When not having a session the API would return "Not Found" instead of "Forbidden" when trying to access a non-public endpoint.

PR #16866.
2022-04-14 08:26:19 +03:00
Chocobo1
a2b85ba1fd Provide interface for Application class
PR #16864.
2022-04-14 12:04:58 +08:00
Chocobo1
dc22109fa7 Merge pull request #16863 from Chocobo1/run
Remove redundant function
2022-04-13 12:05:58 +08:00
Vladimir Golovnev
4471a6377e Have separate API controller instances per session
PR #16848.
2022-04-12 13:39:35 +03:00
Chocobo1
3f762a416d Use proper method for deferred calls 2022-04-12 16:23:39 +08:00
Chocobo1
a59a6ce8e4 Remove redundant function
This helper function is useless after using `Path` class.
2022-04-11 13:07:53 +08:00
Chocobo1
189514c6de Fix wrong v2 hash string displayed in WebUI
Previously `0000...` was erroneously displayed when v2 hash is absent,
now it correctly shows the `N/A`.

PR #16846.
2022-04-10 12:46:24 +08:00
Vladimir Golovnev
dded874350 Correctly apply content layout when "Skip hash check" is enabled
PR #16825.
2022-04-06 14:01:41 +03:00
Chocobo1
e42fa0e027 Merge pull request #16820 from Chocobo1/comparisons
Move comparison operator out of class
2022-04-06 13:35:34 +08:00
Vladimir Golovnev
33ffe95294 Correctly populate trackers filter list
PR #16814.
2022-04-05 07:28:00 +03:00
Vladimir Golovnev
0657238ad1 Don't forget to create 'download_path' field
PR #16468.
2022-04-05 07:27:11 +03:00
Vladimir Golovnev
4efece4ab8 Use an appropriate method to show modal dialog
PR #16809.
2022-04-05 07:26:17 +03:00
Chocobo1
b9b2ed64f9 Assign temporary data to a variable
This is mainly to avoid dangerous code pattern: getting an iterator on a
temporary object. Previously `data()` returns a const reference so the
code wasn't doing any harm.
2022-04-05 11:49:32 +08:00
Chocobo1
16bc0531f4 Simplify code 2022-04-05 10:39:23 +08:00
Chocobo1
39c34078d6 Move comparison operator out of class 2022-04-04 16:32:14 +08:00
Chocobo1
9318f05e2b Merge pull request #16801 from Chocobo1/int
Migrate away from unsigned integer types
2022-04-04 13:13:36 +08:00
sledgehammer999
95f3073e6f Merge pull request #16745 from sledgehammer999/drop_qt_translations_folder
Drop qt translations folder
2022-04-04 01:56:56 +03:00
Chocobo1
6f4a9390ba Fix wrong conversion to QVariant
It was converted to bool-like type which is wrong.
2022-04-03 13:34:29 +08:00
Chocobo1
0eb6967bb2 Migrate away from unsigned integer types
Signed integers should be preferred in these cases.
2022-04-03 13:34:29 +08:00
Chocobo1
2854630b1c Use signed integer type for counters 2022-04-03 13:33:55 +08:00
Chocobo1
bbd781c420 Omit redundant cast 2022-04-03 13:01:44 +08:00
Chocobo1
f7cfdfcf63 Merge pull request #16784 from Chocobo1/webui
WebUI: show correct location path
2022-04-03 12:54:38 +08:00
Chocobo1
af7c32d3aa WebUI: remove temporary element 2022-04-02 17:26:26 +08:00
Chocobo1
0d334369f0 WebUI: show correct location path
The `path` might contains '&' (delimit character) so it must be
encoded.
Closes #15976.
2022-04-02 17:26:26 +08:00
Chocobo1
08f3630f01 WebUI: make various dialog resizable
And enlarge dialog default width.
2022-04-02 17:26:24 +08:00
Yurii Kolesnykov
2b17838820 Remove outdated info about nightly builds
Closes #16790.
PR #16791.
2022-04-02 13:59:35 +08:00
Chocobo1
0b0338a9cb Merge pull request #16794 from Chocobo1/qmake
Use qmake built-in variable to specify C++ version
2022-04-02 12:33:29 +08:00
Chocobo1
a24f2ae884 GHA CI: bump "setup vcpkg" action version 2022-04-01 15:49:21 +08:00
Chocobo1
ec5b0b5403 Use qmake built-in variable to specify C++ version 2022-04-01 15:35:22 +08:00
Vladimir Golovnev
df2d449f9b Revamp content layout handling
Apply content layout only if desired file names aren't provided.
Remove helpers with confusing signatures.
Don't remove root folder twice.

PR #16724.
Closes #16259.
2022-04-01 09:35:45 +03:00
Chocobo1
eecd221d40 Merge pull request #16767 from Chocobo1/ci
GHA CI: work around error when installing Qt
2022-03-30 12:21:34 +08:00
Chocobo1
3951b891c1 GHA CI: work around error when installing Qt
This is to (temporarily) work around CI errors at jurplel/install-qt-action.
Upstream issue: https://github.com/jurplel/install-qt-action/issues/130
2022-03-29 11:26:57 +08:00
Chocobo1
eab455422f Add missing header
Fix up 75c93d72be.
2022-03-29 11:19:37 +08:00
Chocobo1
75c93d72be Revise string literal usage
This commit covers src/gui folder.
PR #16757.
2022-03-29 10:41:17 +08:00
sledgehammer999
6842e8263d qmake: Bump MACOSX deployment target to 10.15 2022-03-29 01:52:26 +03:00
sledgehammer999
f35d94d98e Update instructions about NSIS packaging
Include a helper a script to gather valid Qt translations for packaging.
2022-03-29 01:52:25 +03:00
sledgehammer999
01206a0e2e Delete Qt translations files 2022-03-29 01:52:24 +03:00
sledgehammer999
cf9e3193bc qmake: Use installed Qt's translations for packaging 2022-03-29 01:52:24 +03:00
sledgehammer999
f5239ffb0b CMake: Use installed Qt's translations for packaging 2022-03-29 01:52:23 +03:00
Chocobo1
746fe7ba09 Merge pull request #16738 from Chocobo1/qstring
Improve function interface
2022-03-28 12:28:28 +08:00
Chocobo1
7c1a986e61 Implement stringable interface for Version type 2022-03-26 13:58:25 +08:00
Chocobo1
c6b772da11 Improve function interface
`SettingsStorage` methods require `QString` so make `SettingValue` follow it.
`Path::operator+` can use `QStringView` to accept wider audience.
2022-03-26 12:41:02 +08:00
An0n
11cfe38d1c Fix WebUI crash due to missing tags from config
Tags can be missing from config but set inside .fastresume. May happen due to corrupted/deleted config.
Closes #11906.
PR #16711.
2022-03-26 11:56:18 +08:00
Chocobo1
4ca6de2b54 Revise string literal usage
PR #16703.
2022-03-26 11:53:50 +08:00
Chocobo1
e1abcc684a Merge pull request #16705 from Chocobo1/path
Use proper type to represent a path
2022-03-25 13:00:11 +08:00
Chocobo1
bbd936fdfa Don't use explicit memory management
And avoid dangling pointers.
2022-03-24 14:44:38 +08:00
Chocobo1
f58eed13d0 GHA CI: use Qt6 for Windows builds
PR #16696.
2022-03-24 12:19:07 +08:00
Chocobo1
8a708fd97e Use proper type to represent a path 2022-03-23 22:04:05 +08:00
An0n
bf8d993743 Change Downloaded to Times Downloaded in trackers tab
PR #16677.
2022-03-23 12:57:45 +08:00
Vladimir Golovnev
c029122a8e Avoid integer overflow when calculating working set size 2022-03-23 07:56:59 +03:00
Sam James
54327d579b CMake: fix systemd directory help text
The option is case sensitive.
PR #16695.

Signed-off-by: Sam James <sam@gentoo.org>
2022-03-23 12:56:14 +08:00
Chocobo1
6c10aa33e1 Provide interface for serialization to string type
PR #16685.
2022-03-23 12:55:41 +08:00
sledgehammer999
b7c098c5e6 Sync translations from Transifex and run lupdate 2022-03-22 15:47:05 +02:00
Vladimir Golovnev
c18c42e866 Merge pull request #16686 from glassez/set-location
Fix "Set location" to be really applied
2022-03-22 13:12:43 +03:00
Vladimir Golovnev (Glassez)
386f99cb1d Fix "Set location" to be really applied 2022-03-21 11:58:37 +03:00
Vladimir Golovnev (Glassez)
a4b606c6e9 Fix compilation issues due to inappropriate QString usage 2022-03-21 11:50:32 +03:00
AbeniMatteo
baa8d2c326 Add option to toggle filters sidebar
PR #15409.
2022-03-21 12:41:06 +08:00
Chocobo1
e1ca0f3ff9 Merge pull request #16669 from Chocobo1/literal
Use QString literals
2022-03-21 12:09:43 +08:00
Vladimir Golovnev
ca2be2f499 Prevent Digest32 shared data from being detached
Delayed hash string generation should not cause detaching of shared data.

PR #16664.
2022-03-20 12:26:13 +03:00
Vladimir Golovnev
5960e7dda6 Prevent crash when open torrent destination folder
Uses the same workaround as Qt does to call ShellExecute() when you use QDesktopServices::openUrl().
PR #16670.
Closes #16423.
2022-03-20 11:08:27 +03:00
Chocobo1
efc04645b7 Use QString literals
It covers src/webui and enables `QT_NO_CAST_FROM_ASCII`.
2022-03-20 13:33:40 +08:00
Chocobo1
f888fb4ac7 Remove unused code 2022-03-19 15:57:37 +08:00
Chocobo1
e71e97cb68 Merge pull request #16652 from Chocobo1/literal
Use QString literals
2022-03-18 14:09:29 +08:00
Chocobo1
1b4c5fd34d Remove unused variable 2022-03-18 12:48:37 +08:00
Chocobo1
802ec5a14e Use QString literals
This patch covers src/gui and some leftovers from previous commit.
2022-03-18 12:46:01 +08:00
Chocobo1
5341478036 Merge pull request #16647 from NotTsunami/hscroll
Add horizontal scrolling for tracker list and torrent content
2022-03-18 12:43:32 +08:00
Chocobo1
7694b21dff Enlarge "speed limits" icons
And make use of QStyle pixelMetric().
PR #16630.
2022-03-18 12:27:45 +08:00
Tyler Dunn
cf061b7d30 Allow buttons to be focusable
This improves accessibility.
PR #16648.
2022-03-17 12:51:47 +08:00
Chocobo1
7fffb6526c Remove redundant properties
And revise tooltip messages.
PR #16651.
2022-03-17 12:50:08 +08:00
NotTsunami
dd5b16831c Unify coding style 2022-03-16 21:45:24 -04:00
Vladimir Golovnev
b3ca2ea179 Merge pull request #16573 from glassez/resume-data
Prevent loading resume data with inconsistent ID
2022-03-16 20:30:04 +03:00
NotTsunami
b5d67f90e4 Add horizontal scrolling for tracker list and torrent content 2022-03-15 15:05:47 -04:00
Vladimir Golovnev (Glassez)
ce42f7c9f1 Properly handle metadata download for an existing torrent 2022-03-15 18:17:24 +03:00
Chocobo1
02869d7428 Avoid unnecessary lookups
Fix up 30319e51e5.
PR #16629.
2022-03-15 12:33:12 +08:00
Aleksandr Cupacenko
67b35b76ac Fix C++ word breaking
Fixes #13805.
PR #16636.
2022-03-14 12:27:44 +08:00
Chocobo1
baebabbfd8 Merge pull request #16639 from Chocobo1/hash
Avoid redundant hashing
2022-03-14 12:26:55 +08:00
Chocobo1
154ee1a73e Use hashing helpers provided by Qt6 2022-03-13 17:37:54 +08:00
Chocobo1
b3fb6bd990 Avoid redundant hashing
The return type of `std::hash()` is larger (or equal) than what
`qHash()` requires so we can omit hashing it again.
2022-03-13 17:37:54 +08:00
Chocobo1
926d51839f Update function signature for Qt6 qHash()
Since the `qhash()` signature has changed in Qt6.
2022-03-13 16:05:11 +08:00
Chocobo1
8de966ea88 Merge pull request #16585 from Chocobo1/qstring
Use QString literals
2022-03-12 12:49:08 +08:00
Chocobo1
85b0a40a0e Merge pull request #16587 from jagannatharjun/tracker-filter
Optimize torrent filters in GUI
2022-03-12 12:48:49 +08:00
Chocobo1
88fe94bd6a Remove obsoleted functions from Utils::Gui namespace
`widget` parameter is kept for now to avoid major disruption for other PR.
Also add comments for loading svg images.

PR #16613.
2022-03-11 13:40:58 +08:00
Aleksandr Cupacenko
1b53c590f2 Allow blank lines in multipart form-data input
Fixes #11298.
PR #16579.
2022-03-11 13:40:22 +08:00
Chocobo1
2ee5b35f48 Use proper image loading path for SVG icons 2022-03-11 00:11:30 +08:00
Chocobo1
f0dd7b7dae Use QString literals
This patch covers src/app and src/base folders.
Follow up of ab64ee872b.
2022-03-11 00:11:30 +08:00
Chocobo1
f08c0afbea Update NSIS French translation
PR #16562.

Co-authored-by: RqndomHax <paul.codepro@gmail.com>
2022-03-10 12:32:53 +08:00
Chocobo1
5a417c6a29 Merge pull request #16584 from Chocobo1/pr_16548
Allow setting the number of maximum active checking torrents
2022-03-09 10:10:15 +08:00
Chocobo1
9f32e6e50d Fix wrong parentheses
Fix up 294ea17222.
2022-03-08 13:58:02 +08:00
An0n
801cfdbc24 Allow setting the number of maximum active checking torrents
This is to allow re-checking of multiple torrents simultaneously. This will benefit users who
have multiple disks or SSD.
Closes #15296.

Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
2022-03-08 13:24:12 +08:00
xavier2k6
889d994dbc Remove unnecessary UI properties from "IP Filter Refresh" button
PR #16575.
2022-03-08 13:22:23 +08:00
Chocobo1
97c28e1e51 Merge pull request #16594 from Chocobo1/alert
Add option for enable/disable performance warnings from libtorrent
2022-03-08 13:19:54 +08:00
Prince Gupta
ad6e2b4b94 Create hash string of Digest on demand
most of the time hash string is not needed and InfoHash is often used as
temporaries for torrent searching in handling of torrent alerts. This
improves the creation time of Infohash
2022-03-08 01:14:36 +05:30
Prince Gupta
da12daffee Cache tracker item in TrackerFilterList 2022-03-08 01:12:06 +05:30
Prince Gupta
30319e51e5 Improve Status Filter
replaces quadratic update operation with linear
2022-03-08 01:12:06 +05:30
Chocobo1
294ea17222 Provide upstream documentation link for performance warning 2022-03-07 13:26:37 +08:00
Chocobo1
fad954df18 Add option for enable/disable performance warnings from libtorrent 2022-03-06 21:05:17 +08:00
Prince Gupta
25be00931a Optimize tracker insertion in TrackerFiltersList 2022-03-06 12:04:01 +05:30
Prince Gupta
cd9ed1706d Improve torrent event handling in TrackerFiltersList 2022-03-06 12:04:01 +05:30
Chocobo1
b034b86be8 Merge pull request #16574 from xavier2k6/update_actions
GHA CI: Update multiple workflow `actions`
2022-03-06 13:00:09 +08:00
An0n
aa189a7fc6 Disable force reannounce when it is not possible
Closes #12080.
PR #16551.
2022-03-06 12:59:31 +08:00
xavier2k6
074cbdad28 GHA CI: Update upload-artifact action to v3 2022-03-04 23:13:36 +00:00
Vladimir Golovnev (Glassez)
cbc0ef860b Prevent loading resume data with inconsistent ID 2022-03-04 09:22:56 +03:00
Chocobo1
ab64ee872b Use QString literals
The plan is to define `QT_NO_CAST_FROM_ASCII` eventually.
PR #16561.
2022-03-04 13:25:22 +08:00
xavier2k6
a63515b8f4 GHA CI: Update stale action to v5 2022-03-02 19:44:46 +00:00
xavier2k6
4dcd6df136 GHA CI: Update setup-python action to v3 2022-03-02 19:41:43 +00:00
xavier2k6
cea1bbde23 GHA CI: Update checkout action to v3 2022-03-02 19:39:35 +00:00
Aleksandr Cupacenko
2c8447853b Focus save path when Manual mode is selected initially
Closes #15972.
PR #16536.
2022-03-02 13:27:22 +08:00
Chocobo1
116664285d GHA CI: Don't cancel CI builds on non-pull-request branches
Fix up 2652c73a4f.
PR #16558.
2022-03-02 13:26:13 +08:00
Vladimir Golovnev
213b18e33b Merge pull request #16531 from glassez/save-path
Correctly handle changing of global save path
2022-03-01 19:59:35 +03:00
Vladimir Golovnev
299f981441 Allow to limit max memory working set size
PR #16485.
2022-03-01 16:42:25 +03:00
An0n
7ea827f8d3 Add right click menu for status filters
This will allow users to perform action on all torrents with a single click instead of having to select all with ctrl+A or other cumbersome ways. Basically it copies the function found in tracker/category filters.

Closes #13398.
PR #16547.
2022-03-01 13:18:48 +08:00
An0n
c2af5c6a3f Allow setting priority for partially downloaded multi-file torrent
Currently you can't directly change the priority of a partially completed multi file torrent. You'll have to start downloading those files and then change their priority.

Closes #10994.
Closes #8673.
PR #16546.
2022-03-01 12:53:39 +08:00
thalieht
63812ca951 Don't use hack to make the first column movable
PR #16545.
2022-03-01 12:50:10 +08:00
Aleksandr Cupacenko
98bdfcef65 Fix scrolling to the lowermost visible torrent
Fixes #3221.
PR #16543.
2022-03-01 12:49:40 +08:00
Chocobo1
ac97ed685f Add tuning options related to performance warnings
Related: #16462.
PR #16538.
2022-03-01 12:44:48 +08:00
Vladimir Golovnev (Glassez)
c5ff9b353c Allow to disable Automatic mode when "temp" path changed 2022-02-28 09:41:44 +03:00
Vladimir Golovnev (Glassez)
04c1988665 Correctly handle changing of global save path 2022-02-28 09:04:37 +03:00
Chocobo1
36c14ca587 Merge pull request #16539 from Chocobo1/ci
GHA CI: install boost library manually
2022-02-28 12:43:58 +08:00
Chocobo1
0c118bed61 GHA CI: disable uploading built artifacts for macOS
The binary aren't usable universally because users are required to
install related libraries.
2022-02-27 15:45:27 +08:00
Chocobo1
6c6474291e GHA CI: install boost library manually
libtorrent 2.0.5 has build issues with boost >= 1.78.
2022-02-27 15:45:26 +08:00
xavier2k6
7fa89c9ba4 GHA CI: Update "WebUI" setup-node action to v3
PR #16532.
2022-02-27 12:49:38 +08:00
Aleksandr Cupacenko
d2aad3a3ca Rename content tab "Size" column to "Total Size"
Closes #7348.
PR #16526.
2022-02-27 12:48:11 +08:00
Aleksandr Cupacenko
ca09b0491e Enable shortcut folders for the Open and Save directory dialogs
PR #16527.
2022-02-26 22:24:50 +03:00
Aleksandr Cupacenko
2e08ae82b1 Enable Combobox editor for the "Mixed" file download priority
Fixes #1544.
PR #16522.
2022-02-26 12:53:41 +08:00
Chocobo1
2652c73a4f GHA CI: cancel outdated in-progress workflow runs
This will only cancel outdated workflow runs on PR branches and won't affect other normal repo
branches.
PR #16511.
2022-02-25 13:34:28 +08:00
Chocobo1
a21bff1dbd Merge pull request #16483 from Chocobo1/preference1
Convert to QString literals
2022-02-22 14:15:49 +08:00
Chocobo1
14fc3dc9b3 Suppress conversion warning 2022-02-21 13:58:51 +08:00
Chocobo1
5cb295341c Convert to QString literals 2022-02-21 13:58:51 +08:00
Chocobo1
b854c3b00e Unify log messages format
This improves readability and may allow users to match log message with
better accuracy.
Now log message is consisted of 2 parts:
The first part is a short sentence describing the event. It should avoid
writing out the specifics of the event as it will be described in the
next part of the message. The sentence should use correct tense of the
event.
The second part consist of `Name: Value` pairs which will provide
sufficient info for the event.

Note that none of the message parts is mandatory, one of them can be
omitted when the resulting log message is clear enough.

PR #16437.
2022-02-21 13:07:04 +08:00
Vladimir Golovnev
2d3ff6a97c Use std::optional to represent "any value" filters
PR #16460.
2022-02-20 13:17:34 +03:00
Chocobo1
c627ed4b6f GHA CI: exclude checking for GUI i18n files
And bump hooks version along the way.
PR #16484.
2022-02-20 13:43:57 +08:00
Vladimir Golovnev
70ec183fca Merge pull request #16444 from glassez/path-has-ext
Improve performance of checking path extension
2022-02-19 07:08:54 +03:00
Vladimir Golovnev (Glassez)
1e45b7f50b Add fast way of removing suggested extension 2022-02-18 11:37:51 +03:00
Vladimir Golovnev (Glassez)
293479a1f2 Improve performance of checking path extension 2022-02-18 11:37:51 +03:00
Juanjo Jiménez
7b8962a796 Update NSIS translations for "Spanish" and "Spanish International"
PR #16455.
2022-02-18 11:28:43 +08:00
Chocobo1
852a14992c Add literal operator to efficiently construct QString in Qt5
PR #16448.
2022-02-18 11:28:04 +08:00
Kevin Cox
37e6a9ebc2 Fix UI crash when torrent is in non-existent category.
This checks that `category_list[categoryHash].torrents` is truthy before dereferencing it. In some cases the API response will have a torrent in a category that doesn't exist resulting in the check to return `undefined` which is not `null`. This broadens the check so that it will create the category even if null.
PR #16432.
2022-02-17 12:20:54 +08:00
Vladimir Golovnev
b3f5bf1583 Try to recover missing categories
PR #16430.
2022-02-16 10:27:36 +03:00
sledgehammer999
a3a8c19dc2 Sync translations from Transifex and run lupdate 2022-02-14 19:28:07 +02:00
Chocobo1
bc94de5626 Merge pull request #16428 from Chocobo1/path
Improve Path constructor
2022-02-14 14:02:50 +08:00
Vladimir Golovnev
c3a64b3d6c Cache file priorities
Speedup access to file priorities by avoiding extra blocking call to libtorrent thread.
Improve the Torrent interface by hiding the asynchrony of file priority changes behind the scenes.

PR #16425.
2022-02-13 08:07:30 +03:00
Chocobo1
70eed10a34 Fix wrong size
Fix up cf96e6c642.
2022-02-12 16:54:38 +08:00
Chocobo1
56c3983885 Improve Path constructor performance 2022-02-12 16:54:38 +08:00
Vladimir Golovnev
78eaa49cd6 Correctly register PathList alias
PR #16411.
2022-02-10 08:12:33 +03:00
Chocobo1
2668a42f0c Merge pull request #16408 from Chocobo1/vararray
Use QVarLengthArray whenever applicable
2022-02-10 12:44:41 +08:00
Vladimir Golovnev
4a7f1116ac Improve tracker status handling
PR #16383.
2022-02-09 18:23:41 +03:00
Chocobo1
f12ce78b5c Remove hack for outdated IE 6 browser
The `mask()` isn't valid in CSS.
2022-02-09 19:00:28 +08:00
Chocobo1
610009fb7f Make Path::operator== a free function 2022-02-09 19:00:27 +08:00
Chocobo1
4cb075b168 Use "table look-up" method for reversing byte
This method takes constant time and is less prone to (CPU) pipeline stalling due to less
computation. Also it is slightly faster than the previous method.
2022-02-09 19:00:27 +08:00
Chocobo1
cf96e6c642 Use QVarLengthArray whenever applicable 2022-02-09 19:00:24 +08:00
Vladimir Golovnev
dd1bd8ad10 Implement class for handling filesystem paths
PR #15915.
2022-02-08 06:03:48 +03:00
Vladimir Golovnev
facfa26eed Allow to use Category paths in "Manual" mode
If the option is enabled any relative save path will be resolved against an appropriate Category path instead of Global default one.

PR #16330.
2022-02-02 09:24:09 +03:00
Prince Gupta
0012a3ede7 Optimize completed files handling
PR #16329.

Co-authored-by: Vladimir Golovnev (Glassez) <glassez@yandex.ru>
2022-02-01 08:29:54 +03:00
Vladimir Golovnev
b61a818a3f Merge pull request #16333 from thalieht/newdlg
Add Select All/None buttons in new torrent dialog
2022-01-31 15:38:33 +03:00
Chocobo1
a2c44dedce Fix crash when shutting down and clicked on system tray icon
Disconnect all signals of system tray icon when shutting down.

Closes #16324.
PR #16328.
2022-01-31 11:54:44 +08:00
thalieht
a8ad4f784a Fix "Free space on disk" in new torrent dialog
Always initialize it.
2022-01-30 18:52:18 +02:00
thalieht
78d69bcbf0 Add Select All/None buttons in new torrent dialog 2022-01-30 18:52:18 +02:00
Prince Gupta
414361a3db Improve tracker error handling
* Improve tracker error handling
* Fix typo in function name

PR  #16298.
2022-01-30 08:56:31 +03:00
Prince Gupta
1d4071d6d8 Don't rename file because of difference in path separator
PR #16317.
2022-01-30 08:54:37 +03:00
Vladimir Golovnev
47daf1b358 Allow to open incomplete files from content view
Fixes regression from f44341a8e2.

PR #16318.
2022-01-30 08:52:16 +03:00
Chocobo1
7a910a8cc1 Merge pull request #16256 from Chocobo1/bitarray
Speed up bitfields conversion
2022-01-28 11:59:57 +08:00
Vladimir Golovnev
9818c7b6a4 Open correct directory when clicked on Browse button
PR #16252.
2022-01-27 07:41:30 +03:00
Vladimir Golovnev
ca9e5e8531 Change torrent moving state when it is cancelled
PR #16267.
2022-01-27 07:40:17 +03:00
Chocobo1
aafee60033 Allocate memory on stack whenever feasible
The fast path gives another 20% speed up than the slower path.
2022-01-27 03:36:06 +08:00
Vladimir Golovnev
adf7c4ffb6 Merge pull request #16268 from glassez/fix-15955
Store hybrid torrents using "torrent ID" as basename
2022-01-26 15:17:31 +03:00
Prince Gupta
96965ae347 CMake: Call UIC on the .ui files manually
Fixes unnecessary recompilation when editing GUI files.

PR #16151.
2022-01-26 14:44:44 +03:00
Vladimir Golovnev
bc2ef5d726 Add confirmation for enabling Auto TMM from context menu
* Add confirmation for enabling Auto TMM from context 
* Add tooltip to Automatic Torrent Management context menu action

PR #16241.
2022-01-26 06:56:46 +03:00
Vladimir Golovnev (Glassez)
7a539d9890 Store hybrid torrents using "torrent ID" as basename 2022-01-25 11:39:32 +03:00
Vladimir Golovnev (Glassez)
c40408b337 Make Digest32 implicitly shared class 2022-01-25 10:18:23 +03:00
Chocobo1
4e2daf117b Speed up bitfields conversion
The old code took 3~5 times longer than the newer version.
2022-01-25 12:19:50 +08:00
Chocobo1
9553afc3c2 Merge pull request #16247 from Chocobo1/count_bits
Speed up piece relevance calculation
2022-01-25 12:11:36 +08:00
Vladimir Golovnev
26352c9eb4 Cache pieces info
PR #16238.
2022-01-25 06:05:16 +03:00
thalieht
62c167fc77 Add tooltip to Automatic Torrent Management context menu action 2022-01-24 18:32:43 +02:00
thalieht
03c774eae7 Add confirmation for enabling Auto TMM from context menu
Closes #16046
2022-01-24 18:32:43 +02:00
Chocobo1
53992bf0d5 Initialize class variable in initializer list 2022-01-24 13:47:34 +08:00
Chocobo1
ff99e5ac9a Speed up piece relevance calculation
For ~800 pieces, this roughly cuts the run time (of this function) in
half.
2022-01-24 12:04:26 +08:00
Prince Gupta
0cc318664d Improve Torrent content tree structure creation
Use QHash to cache folder items.
PR #16183.
2022-01-24 10:55:06 +08:00
Chocobo1
43c427b253 Merge pull request #16167 from Chocobo1/auto-resize
Add "Auto resize columns" functionality
2022-01-24 10:54:26 +08:00
Chocobo1
44c8d60a70 Remove unused parameter 2022-01-23 15:03:26 +08:00
Chocobo1
54252184ab Make use of std algorithms
Since the result code is shorter.
2022-01-23 15:03:26 +08:00
Chocobo1
7ae68b20e7 Add "Auto resize columns" functionality 2022-01-23 15:03:05 +08:00
Chocobo1
208234b934 Clean up code related to show/hide columns 2022-01-21 22:59:21 +08:00
thalieht
1729b9f29c Fix wrong closing brace position
Regression from 0086bf8958.
PR #16172.
2022-01-20 12:30:46 +08:00
Vladimir Golovnev
5d69334287 Don't start separate event loop for QFileDialog
It conflicts with QMenu on Qt6 that causes the crash.

PR #16158.
2022-01-20 07:22:16 +03:00
Vladimir Golovnev
4d54fb675f Correctly handle received metadata
It did not work correctly, since it assumed that 'lt::torrent_plugin' is created at an earlier stage and is able to track all changes in the torrent state, but in reality it turned out that it was created after the torrent moved to the `downloading_metadata` state, so we had to additionally handle it in the constructor.

PR #16121.
2022-01-16 16:06:15 +03:00
Chocobo1
e93de54eb5 Merge pull request #16099 from Chocobo1/errormsg
Revise error message
2022-01-15 12:01:55 +08:00
Vladimir Golovnev
43441d8291 Handle missing torrent alerts
PR #16085.
2022-01-14 15:18:18 +03:00
Chocobo1
d6dce1efe9 Add comment for new libtorrent build flag
Upstream change:
66def89089
2022-01-14 14:48:47 +08:00
Chocobo1
dca69f053a Remove outdated build configuration 2022-01-14 14:48:47 +08:00
Chocobo1
5ebbed8160 Revise error message
Remove the period mark at the end of error message since
`errc.message()` already contains one.
2022-01-14 14:48:41 +08:00
thalieht
3fdb330bd9 Restore all settings to the torrent list's context menu
Set location
Category
Sequential download
Download first/Last pieces first
Automatic Torrent Management

PR #16016.
2022-01-14 14:45:03 +08:00
Chocobo1
c05dbc451a GHA CI: build libtorrent with /guard:cf flag
qbt cmake script enables that flag already, so it make sense to build
dependencies with it too.
PR #16083.
2022-01-14 14:43:22 +08:00
Vladimir Golovnev
5f623e32c4 Correctly handle XML parsing errors
PR #16071.
2022-01-13 09:36:08 +03:00
thalieht
7c37c5c06f Update the torrent's download path field when changing category
In torrent options dialog while in Automatic Management Mode.
PR #16026.
2022-01-13 12:44:50 +08:00
Chocobo1
4d541ca969 Add Qt6 version to INSTALL file
PR #16054.
2022-01-13 12:39:15 +08:00
Chocobo1
e4a67183bd Update default value of "Type of service for peers"
Upstream change:
3d701c7380
PR #16036.
2022-01-12 11:53:07 +08:00
sledgehammer999
d25be686ee Merge pull request #16030 from sledgehammer999/migrate_proxy_enum
Migrate proxy settings
2022-01-12 02:51:57 +02:00
Vladimir Golovnev
a3be239a60 Keep "torrent info" alive while generating .torrent file
PR #16018.
2022-01-11 07:29:42 +03:00
Vladimir Golovnev
709a053c7c Merge pull request #16009 from glassez/dont-move-into-itself
Don't try to move storage into its current location
2022-01-11 07:26:22 +03:00
Vladimir Golovnev
d39c6bef4b Correctly handle Auto TMM in Torrent Files Watcher
PR #13690.
2022-01-11 07:25:30 +03:00
Vladimir Golovnev
84a8158aa2 Correctly track the root folder name change
PR #16004.
2022-01-11 07:24:24 +03:00
sledgehammer999
a7c5826e05 Migrate proxy settings
Q_ENUM_NS(ProxyType) was introduced in 4.4.0.
Before that wrapping QMetaEnum used the int value itself for loading/storing.

Closes #15994
2022-01-11 02:50:03 +02:00
Nicolas Fella
2da39e2fbb Mark as single window app in .desktop file
qBittorrent is a single-window application.
By marking it as such desktop environments know to not offer to open
a new window for it.
This is a new standard key intruduced in
3ea3bc26e2
PR #15996.
2022-01-10 13:31:53 +08:00
Chocobo1
d6e0164766 WebAPI: fix wrong key used for categories
Regression from 1c0f8b4289.
Closes #15969.
PR #15988.
2022-01-10 13:31:15 +08:00
Vladimir Golovnev (Glassez)
fbc85bed64 Move torrent immediately when "save path" is changed 2022-01-10 08:18:34 +03:00
Vladimir Golovnev (Glassez)
52b54fe154 Don't try to move storage into its current location 2022-01-09 21:14:49 +03:00
Vladimir Golovnev
f44341a8e2 Handle .!qB extension behind the scenes
PR #15920.
2022-01-08 08:45:50 +03:00
Chocobo1
9f6130cbaa Move new line character out of translation string
PR #15948.
2022-01-08 12:24:49 +08:00
Chocobo1
24d73f5822 Merge pull request #15947 from Chocobo1/remove
Remove TODO and NEWS files
2022-01-08 12:24:10 +08:00
thalieht
d3bdeaab3f Replace "seeding_duration" with "finished_duration" everywhere
Closes #10223.
PR #13601.
2022-01-07 15:22:51 +08:00
Chocobo1
b66f4b9322 Remove TODO and NEWS files
The contents are outdated and the files are not in use.
`configure.ac` is adjusted to suppress automake errors.
https://www.gnu.org/software/automake/manual/html_node/Strictness.html#index-Strictness_002c-foreign
2022-01-07 12:19:01 +08:00
Chocobo1
9dfe5f5f07 Sort entires 2022-01-07 12:18:03 +08:00
sledgehammer999
d6fc020ba7 Bump to 4.5.0alpha1 2022-01-06 20:47:06 +02:00
sledgehammer999
8397b118b7 Update Changelog 2022-01-06 20:37:49 +02:00
sledgehammer999
74dc000ac1 Sync translations from Transifex and run lupdate 2022-01-06 20:35:45 +02:00
sledgehammer999
9b61991523 Merge pull request #15926 from sledgehammer999/fix_migration
Correct the order of the migrated settings' mappings
2022-01-06 14:46:48 +02:00
sledgehammer999
702c79a92f Don't delete old config keys yet
It will allow users to go back to previous versions without
losing their settings.
2022-01-05 01:01:10 +02:00
sledgehammer999
a27822b557 Correct the order of the migrated settings' mappings 2022-01-04 16:48:17 +02:00
sledgehammer999
bdcb00a3b2 Merge pull request #15923 from sledgehammer999/misc_fixes
Misc fixes before v4.4.0
2022-01-04 16:40:37 +02:00
sledgehammer999
ac5a485651 Disambiguate the data type 2022-01-04 01:39:01 +02:00
sledgehammer999
e8c65388eb Bump copyright year 2022-01-04 01:39:00 +02:00
sledgehammer999
f2cbb61d49 Sync translations from Transifex and run lupdate 2022-01-04 00:39:43 +02:00
sledgehammer999
0a1c61d9d3 Merge pull request #15922 from glassez/fix-paths
Correctly concatenate path components
2022-01-04 00:17:54 +02:00
Chocobo1
01a0fff4c2 Add missing field initial value
Suppresses the following warning:
qBittorrent/src/base/bittorrent/categoryoptions.cpp: In static member function ‘static BitTorrent::CategoryOptions BitTorrent::CategoryOptions::fromJSON(const QJsonObject&)’:
qBittorrent/src/base/bittorrent/categoryoptions.cpp:44:59: warning: missing initializer for member ‘BitTorrent::CategoryOptions::DownloadPathOption::path’ [-Wmissing-field-initializers]
   44 |         options.downloadPath = {downloadPathValue.toBool()};
2022-01-03 23:42:48 +02:00
Chocobo1
bf9516d164 Simplify code
This version saves an `if` conditional.
2022-01-03 23:42:48 +02:00
Vladimir Golovnev (Glassez)
fdbf8cb0ee Correctly concatenate path components 2022-01-03 19:44:47 +03:00
Prince Gupta
7e8a176751 Support folder based UI Themes
Support folder based Themes in UIThemeManager.
Add option to select config.json as them file.

PR #15888.
2022-01-03 09:11:12 +03:00
Vladimir Golovnev
61504ae3b1 Merge pull request #15793 from glassez/save-path
Redesign "Incomplete folder" feature
2022-01-02 22:25:00 +03:00
Chocobo1
dd76525372 Merge pull request #15911 from Chocobo1/pair
Replace Qt functions with std counterparts
2022-01-02 13:34:31 +08:00
Vladimir Golovnev (Glassez)
1c0f8b4289 Redesign "Incomplete folder" feature
Change "Incomplete/temp folder" term with "download folder".
Allow to set "download folder" per torrent (in manual mode) and per category (in automatic mode).
2022-01-01 20:58:49 +03:00
Chocobo1
63043b4927 Replace min, max, clamp functions with std counterparts 2022-01-01 15:22:07 +08:00
Chocobo1
3ea4c66d41 Replace QPair with std::pair 2022-01-01 15:22:07 +08:00
Chocobo1
781d7fbf1a Merge pull request #15884 from Chocobo1/migrate
Migrate "setting key mappings" to upgrade code
2021-12-25 14:05:52 +08:00
Chocobo1
e7ebbffbfd Set appropriate migration version number for new installations 2021-12-24 14:50:06 +08:00
Chocobo1
39f054eef6 Migrate "setting key mappings" to upgrade code 2021-12-24 14:50:06 +08:00
Chocobo1
7a620c794d Fix garbage message when reporting error
PR #15883.
2021-12-24 12:28:22 +08:00
Chocobo1
cc13f3e10d GHA CI: Don't upload built artifacts for dynamic linking builds
As those won't work on testers system unless they install *all* and
same version of the dependent libraries too.

PR #15870.
2021-12-21 12:26:50 +08:00
Vladimir Golovnev (Glassez)
b0e41abf5a Allow to set placeholder for FileSystemPathEdit 2021-12-20 08:56:33 +03:00
Vladimir Golovnev
5347897b7d Merge pull request #15852 from glassez/torrent-info
Improve torrent content handling
2021-12-20 08:54:46 +03:00
Vladimir Golovnev (Glassez)
6f8fae9a7b Apply selected layout to displayed torrent content 2021-12-19 16:16:16 +03:00
Vladimir Golovnev (Glassez)
62b50d1475 Make TorrentInfo immutable 2021-12-19 16:16:16 +03:00
Vladimir Golovnev
2fb0c86f1e Add "Show torrent options" double-click action
PR #15853.
Closes #15837.
2021-12-19 09:01:20 +03:00
Chocobo1
aedd997604 Don't expire connection when there are data in buffer
For writing, this ensures expire handler won't be executed in a small
time window, that is after `m_socket->write()` and before
`QIODevice::bytesWritten()` signal.
For reading, this let the socket to have the chance to process the
received data instead of dropping it.

PR #15849.
2021-12-18 12:28:30 +08:00
Chocobo1
aa3da942cb Use correct URL scheme when https is enabled
Closes #15844.
PR #15847.
2021-12-17 11:49:11 +08:00
Chocobo1
87e1a14a4b Merge pull request #15831 from Chocobo1/server
Improvements for WebAPI server
2021-12-16 13:38:05 +08:00
Chocobo1
00f6bb7c82 Merge pull request #15829 from Chocobo1/trayIcon
Simplify tray icon related code
2021-12-15 12:51:37 +08:00
Chocobo1
cca93c2be2 Show GUI lock icon after system tray icon is initialized 2021-12-14 14:41:17 +08:00
Chocobo1
ad9d0608d4 Avoid needless string-bytes conversion
This saves a few microseconds.
2021-12-14 13:52:34 +08:00
Chocobo1
3c5688c6f6 Reserve enough buffer space according to response content size 2021-12-14 13:52:34 +08:00
Chocobo1
ece92a886a Restart idle timer on sending network response 2021-12-14 13:52:33 +08:00
Chocobo1
85777ea491 Simplify tray icon related code 2021-12-13 15:56:20 +08:00
Chocobo1
b8a84dbd83 Disable system tray icon menu when app is exiting 2021-12-13 15:56:16 +08:00
Chocobo1
35c31906b7 GHA CI: don't let lupdate scan boost library
As it produces superflous warnings.
2021-12-13 15:08:36 +08:00
Chocobo1
1fa940876f Remove redundant UI cleanups
Just exiting the application will handle all of them automatically.
2021-12-13 15:08:25 +08:00
Chocobo1
c652123145 Merge pull request #15811 from Chocobo1/configVersioning
Introduce versioning on main configuration file
2021-12-12 12:53:28 +08:00
Chocobo1
1c52fff1cc Unify value loading paths
The idea is to try load every intermediate value from the base case and
then convert them to their respective type.
2021-12-11 01:45:49 +08:00
Chocobo1
261f08b90e Sort WebUI language selection values 2021-12-11 01:45:49 +08:00
Chocobo1
2d48581570 Move main window setting to its own section 2021-12-11 01:45:49 +08:00
Chocobo1
b8a7ecfe69 Introduce versioning on main configuration file 2021-12-11 01:45:49 +08:00
Chocobo1
cbc2de6b85 Use proper method for checking value existence 2021-12-09 15:57:01 +08:00
xavier2k6
9d2bb67834 GHA CI: Update libtorrent version(s)
PR #15819.
2021-12-09 12:32:52 +08:00
Vladimir Golovnev
3d7ff9765a Make meaning of "torrent root path" consistent
PR #15816.
2021-12-09 06:12:47 +03:00
Chocobo1
28f2def21f Remove redundant layer of QVariant in Preferences class
PR #15812.
2021-12-07 12:17:37 +08:00
Chocobo1
0ee303789a GHA CI: include translation file generation in test
PR #15814.
2021-12-07 12:17:15 +08:00
Chocobo1
6ccc92020c Disable "add peers" menu items instead of hiding it
Menu item in disabled state can show tool tip to help user understand
why it is unavailable.
Related issue: #15785.
PR #15787.
2021-12-06 13:54:38 +08:00
Chocobo1
e3fe66d3ec Store enum type in settings directly
Affected settings will be migrated to new keys so nothing should break.

PR #15800.
2021-12-06 13:53:52 +08:00
OctopusET
ab5605d54b Use proper string for Korean language
PR #15799.
2021-12-01 12:06:05 +08:00
Chocobo1
a7a90613c2 Merge pull request #15796 from Chocobo1/clazy
Fix defects found by clazy
2021-11-30 12:02:33 +08:00
Chocobo1
19d95ebd10 Add comment for qHash implementation requirements
As clazy report false-positive on this.
2021-11-29 01:28:49 +08:00
Chocobo1
0e1849346b Avoid iterating over a temporary variable 2021-11-29 00:31:03 +08:00
Chocobo1
0f34e3bed9 Don't use deprecated Q_ENUMS
See: https://doc.qt.io/qt-5/qobject-obsolete.html#Q_ENUMS
2021-11-29 00:31:03 +08:00
Chocobo1
c8b66b25e8 Avoid potential container detachment
Suppress clazy warning:
warning: Don't call QList::operator[]() on temporary [-Wclazy-detaching-temporary]
2021-11-29 00:31:03 +08:00
Chocobo1
e6f07a6fe4 Use implicit copy-constructor generated by compiler
This also suppresses the following clang warning:
warning: definition of implicit copy assignment operator for 'Version<unsigned short, 2>' is deprecated because it has a user-declared copy constructor [-Wdeprecated-copy]
2021-11-29 00:30:17 +08:00
Chocobo1
51469f8fa2 Store Qt6 table header states under a different key
Follow up 22abbc1d41.
PR #15774.
2021-11-23 11:02:07 +08:00
Chocobo1
d78b2a569f Fix handling when Content-Length field is absent
Closes #15754.
PR #15757.
2021-11-21 11:48:49 +08:00
Chocobo1
ec6c970775 Merge pull request #15762 from Chocobo1/artifact
GHA CI: Use prebuilt Qt library
2021-11-21 11:47:50 +08:00
Chocobo1
67c45efff7 GHA CI: Use prebuilt Qt library 2021-11-20 14:33:12 +08:00
Chocobo1
a54772bf35 Appveyor CI: Upload built artifacts 2021-11-20 14:33:12 +08:00
Chocobo1
166be2a94d Merge pull request #15749 from Chocobo1/ci
GHA CI: Simplify commands
2021-11-19 12:31:16 +08:00
Chocobo1
7150d05399 GHA CI: Simplify commands 2021-11-18 00:20:58 +08:00
Chocobo1
36a6e22f27 Appveyor CI: Setup build environment directly
vcvars64.bat is just a link to vcvarsall.bat with parameter `x64`.
2021-11-18 00:20:26 +08:00
Chocobo1
dc13eaed1f Revert "Use percentage notation for alpha-values in CSS"
This reverts commit 864dca1b67.
Upstream change: https://github.com/stylelint/stylelint-config-standard/pull/212
PR #15745.
2021-11-18 00:19:27 +08:00
xavier2k6
001bd60d36 CI: Update AppVeyor image to Visual Studio 2022
PR #15727.
2021-11-16 19:02:07 +03:00
Chocobo1
b063042988 Apply download priority immediately in torrent content view
Apply the new priority after picking it via drop-down menu.

Fixes #14667, #15238.
PR #15739.

Co-authored-by: a-sum-duma <68896601+a-sum-duma@users.noreply.github.com>
Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
2021-11-16 13:50:53 +08:00
a-sum-duma
fa1d49add5 Properly check if file priority changes
Current item priority is compared against new checkbox state. I believe the intention was to check if the priority changes before performing further actions. This PR fixes the issue - compare priority against new value that is about to be set rather then the checkbox state.

PR #15740.
2021-11-16 13:50:11 +08:00
Chocobo1
b45248bf99 Merge pull request #15452 from thalieht/autoTMM
Move some options from transfer list's context menu into "Torrent options" dialog
2021-11-10 12:39:59 +08:00
Chocobo1
dfe862dcd5 Merge pull request #15717 from Chocobo1/irc
WebUI: Remove IRC in about page
2021-11-10 12:28:53 +08:00
sledgehammer999
d4ddeaa917 Sync Changelog entries between branches 2021-11-09 19:07:23 +02:00
Chocobo1
13a49866a7 WebUI: Revise about page
Follow GUI more closely.
2021-11-09 13:17:55 +08:00
Chocobo1
7e2aea92b0 WebUI: Remove IRC in about page
This follows the GUI change in 65a30bab3f.
2021-11-09 13:17:41 +08:00
Chocobo1
7db51b2f8d Add IRC link
https://en.wikipedia.org/wiki/Internet_Relay_Chat#URI_scheme

And also show the angle brackets in rendered markdown.
2021-11-09 12:12:49 +08:00
Chocobo1
ae1b963e0f Merge pull request #15682 from Chocobo1/qt6
Store Qt6 table header states under a different key
2021-11-09 11:23:04 +08:00
a-sum-duma
b29b7e0185 Add more download options to torrent search result right-click menu
PR #15654.
2021-11-09 06:11:47 +03:00
Chocobo1
71270260bf Reformat code 2021-11-08 13:34:21 +08:00
Chocobo1
22abbc1d41 Store Qt6 table header states under a different key 2021-11-08 13:34:21 +08:00
Chocobo1
32698fe0be Migrate away from low-level SettingsStorage class
Also add `QFlags<T>` support to `SettingsStorage`.
PR #15693.
2021-11-08 13:23:33 +08:00
thalieht
16f8d6a936 Allow deselecting radio buttons in "Torrent options" for mixed torrents 2021-11-06 12:47:53 +02:00
thalieht
046d6f3bc1 Move a few torrent context menu actions into "Torrent options" dialog
Automatic torrent management
Save path
Category
Download in sequential order
Download first and last pieces first

closes #15447, closes #14064
2021-11-06 12:47:53 +02:00
Chocobo1
e33c4086b9 GHA CI: Revise artifact folder layout
Now qbittorrent binaries will be placed in its own folder and cmake
related artifacts will be in another.

PR #15683.
2021-11-06 11:11:47 +08:00
Andrei Stepanov
51d754a53e Optimize PNG images losslessly with FileOptimizer
PR #15662.
2021-11-05 12:59:25 +08:00
Chocobo1
49976bcd83 Merge pull request #15648 from Chocobo1/lockfile
Create lock file in config folder instead of temp folder
2021-11-03 12:15:22 +08:00
Losiki
f991d2bdb4 Update Update Simplified Chinese translation
PR #15653.
2021-11-02 17:54:18 +03:00
xavier2k6
e6ff23885e Sync flag icons with upstream
Upstream commit e0577caf317aa721b62c5a4788b13572cc163252 (Release v4.1.4)
PR #15657.
2021-11-02 11:10:50 +08:00
Chocobo1
7aa859a442 Don't use deprecated statfs64() on macOS (#15661)
Co-authored-by: Nick Korotysh <kolchaprogrammer@list.ru>
Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
2021-11-02 10:41:09 +08:00
Chocobo1
180deb867a Use char array directly
This eliminates the possibility of reassigning the pointer to another
address.
2021-11-01 14:08:49 +08:00
Chocobo1
a5c531f0a4 Create lock file in config folder instead of temp folder
Some linux distros seem to alter TMPDIR environment variable and
therefore hamper qbt ability to find the lock files. So use config
folder instead of TMPDIR folder to create/locate the lock files.
Note that this change will also make qbt become one instance per-user
instead of one instance per-system.

Closes #15646.
2021-11-01 14:08:49 +08:00
a-sum-duma
5dd70b88d3 Fix torrent content sorting
Fix improper sorting of the list of files contained by a torrent.
Always load all torrent content data so that the files list can be sorted properly.
Load torrent content only when needed. Don't load the list of files contained by a torrent if the list widget is not visible.

PR #15604.
2021-11-01 11:45:48 +08:00
sledgehammer999
40f2718265 Sync translations from Transifex and run lupdate 2021-10-31 12:29:34 +02:00
sledgehammer999
ddd106655d Merge pull request #15622 from sledgehammer999/revert_nsis_bengali
Revert "NSIS: Add Bengali translation"
2021-10-31 12:07:49 +02:00
Vladimir Golovnev
cc61ad01b6 Explicitly set "added time" when adding new torrent
Don't overwrite "added time" with possibly incorrect value.
Explicitly set "added time" when adding new torrent.

PR #15644.
2021-10-31 12:08:19 +03:00
sledgehammer999
8a44c1f6d5 Bump to 4.4.0rc1 2021-10-31 02:56:25 +03:00
sledgehammer999
e370cbb06b Sync translations from Transifex and run lupdate 2021-10-31 02:52:52 +03:00
Likol Tung
cb0c2e3b9c Fix WebUI reverse proxy section doesn't work
As title. because load with incorrect key.
Also moving proxy list label to left, screenshot: https://imgur.com/Rz038uW
PR #15634.
2021-10-29 11:50:09 +08:00
sledgehammer999
80360cc79a Revert "NSIS: Add Bengali translation"
This reverts commit 8085db6ba9.
2021-10-25 00:46:34 +03:00
Chocobo1
559a979536 GHA CI: Add Qt6 builds
PR #15610.
2021-10-24 00:57:50 +08:00
Chocobo1
5e88537809 Merge pull request #15611 from Chocobo1/webui
Suppress WebUI CSS warnings
2021-10-24 00:57:20 +08:00
Chocobo1
8b60baea99 Remove unused CSS properties 2021-10-22 14:45:37 +08:00
Chocobo1
ac61c33d1c Use modern color notation in CSS 2021-10-22 14:43:13 +08:00
Chocobo1
3088f04e6f Use standard CSS properties instead of vendor specifics 2021-10-22 14:43:13 +08:00
Chocobo1
864dca1b67 Use percentage notation for alpha-values in CSS 2021-10-22 14:43:12 +08:00
Chocobo1
15320018f0 Use shorthand for CSS properties 2021-10-22 14:43:05 +08:00
Chocobo1
6226dd5b80 Add quotes to URL in CSS files
Better add quotes: https://stackoverflow.com/a/34383157
2021-10-22 14:43:05 +08:00
Chocobo1
aafc1064d9 Disable CSS selector naming rule 2021-10-22 14:42:12 +08:00
xavier2k6
fb2fbc875d GHA CI: Use macOS-latest VM image
PR #15589.
2021-10-22 12:16:11 +08:00
Nowshed H. Imran
8085db6ba9 NSIS: Add Bengali translation
PR #15602.
2021-10-22 05:52:11 +03:00
Vladimir Golovnev
4f20769a6c Use respective subcategory for "watched" torrents
Assign respective Subcategory of configured Category to torrents
if Automatic Torrent Management Mode is set for Watched folder.

PR #15603.
2021-10-22 05:51:11 +03:00
SiderealArt
090199f9de NSIS: Update Traditional Chinese translation
PR #15595.
2021-10-20 07:15:09 +03:00
Chocobo1
cd3635985e Merge pull request #15567 from Chocobo1/qt6
Fix Qt6 compiling issues
2021-10-15 11:55:13 +08:00
Chocobo1
8a7179195f Suppress remove null widget warning
And improve text format for translation work.
2021-10-14 00:25:30 +08:00
Chocobo1
e45e29b431 Avoid type specifier mismatch
Qt5 uses `int` and Qt6 uses `qsizetype`, so use the stream version of
`qDebug()` to avoid specifying types.
2021-10-14 00:24:41 +08:00
Chocobo1
ca28fc27dc Disable deprecated Qt functions
Also Qt6 by default set these attributes to our preferred value.
2021-10-13 12:00:21 +08:00
Chocobo1
08b2cde8e8 Let infohash v2 text be mouse selectable
And drop unused property.
2021-10-13 11:59:44 +08:00
Chocobo1
489d88e02a Suppress conversion warning
This fixes MSVC warning C4305: 'argument': truncation from 'double' to 'float'.
`QColor::setAlphaF()` parameter has been changed to `float` in Qt6.
2021-10-12 15:37:45 +08:00
Chocobo1
dff39ffd20 Fix typo
https://doc.qt.io/qt-6/qmake-variable-reference.html#qt-major-version
2021-10-12 14:16:53 +08:00
Chocobo1
3c948ef063 Merge pull request #15562 from Chocobo1/precommit
GHA CI: Switch to pre-commit framework for checking file health
2021-10-12 11:33:16 +08:00
Chocobo1
7087565d92 Fix typo 2021-10-11 22:17:17 +08:00
Chocobo1
3467358663 GHA CI: Switch to pre-commit framework for checking file health
Now users are able to run the same checks on their local development
environment.
https://pre-commit.com/
2021-10-11 22:17:10 +08:00
Chocobo1
45a1c25a29 Merge pull request #15467 from xavier2k6/Python_URL
Update python installer URL for Windows
2021-10-11 12:47:00 +08:00
Chocobo1
70a11a12b3 Merge pull request #15549 from Chocobo1/api
WebAPI: Use specific number to represent non-existing values
2021-10-11 12:38:38 +08:00
Vladimir Golovnev
5d5b0d572e Merge pull request #15536 from glassez/expected
Don't use output parameters for error handling
2021-10-10 15:04:55 +03:00
Chocobo1
7c8eadfddf Revert "WebUI: group trackers by hostname"
This functionality wasn't ever correctly implemented and couldn't be
done without considerable effort, so revert it for now.
This reverts commit 4ac25a50ed.
PR #15542.
2021-10-10 11:00:21 +08:00
Chocobo1
89ca0c537d Fix filename extension 2021-10-10 02:55:59 +08:00
xavier2k6
a92a6404cb Make Python minimum version requirement an argument 2021-10-09 10:45:26 +01:00
Vladimir Golovnev (Glassez)
78459fcb31 Don't throw exception in TorrentInfo::saveToFile() 2021-10-09 08:54:20 +03:00
Vladimir Golovnev (Glassez)
41fc0fd084 Don't use output parameters for error handling 2021-10-09 08:54:03 +03:00
Chocobo1
5c9655abc3 WebAPI: Use specific number to represent non-existing values
Closes #15545.
2021-10-09 12:31:15 +08:00
Chocobo1
3301797491 Merge pull request #15530 from Chocobo1/errmsg
Log error message in DownloadHandlerImpl class
2021-10-09 12:09:56 +08:00
Daniel Aleksandersen
eb5e1d34df WebUI: Add meta application name
Used for installable/pinned app installs.
PR #15539.
2021-10-09 12:06:44 +08:00
Daniel Aleksandersen
9e92e5995f WebUI: Set icon sizes attribute
Gives browsers more information to pick the best icon.
PR #15540.
2021-10-09 11:59:37 +08:00
Chocobo1
e96f2d7be0 Simplify comparison
From https://doc.qt.io/qt-5/qdatetime.html#operator-eq-eq:
>Since 5.14, all invalid datetimes are equal to one another and differ from all other datetimes.
2021-10-09 02:20:22 +08:00
Chocobo1
03cb51844b Remove redundant define
NOMINMAX is already defined in build scripts.
2021-10-08 11:11:02 +08:00
Chocobo1
6b06cc9216 Log error message in DownloadHandlerImpl class 2021-10-08 11:07:35 +08:00
Chocobo1
6b49323f05 Improve error message reporting 2021-10-08 11:01:48 +08:00
Chocobo1
4a11fab2b1 Add constexpr to Sample class functions 2021-10-08 01:04:58 +08:00
Vladimir Golovnev
c382191e75 Correctly iterate through the files of torrent
PR #15535.
2021-10-07 10:48:00 +03:00
luzpaz
4d480b8761 Fix various typos
Found via `codespell -q 3 -S *.ts`.
PR #15520.
2021-10-05 12:58:25 +08:00
Chocobo1
cd25562fd2 Merge pull request #15516 from Chocobo1/win_ci
GHA CI: build dependencies manually
2021-10-05 12:41:09 +08:00
Chocobo1
9a3d560d9e GHA CI: use larger cache for compiling
Previous default was 500MB and it couldn't fit all compile results in
it, enlarge it to 2GB. Note that 2GB isn't the actual size stored on the
server, it will be compressed again by zstd and will be a lot smaller.
2021-10-03 16:38:34 +08:00
Chocobo1
4924fb95f8 GHA CI: build dependencies manually
Now it builds boost, libtorrent manually and we have control over its
version.
Enable build matrix for libtorrent versions.
Reorganized the folder/file layout in built artifact.
2021-10-03 16:07:03 +08:00
Chocobo1
6de67fe81f Merge pull request #15511 from Chocobo1/pr
Put PR template into action
2021-10-03 12:53:19 +08:00
Vladimir Golovnev
bc71827c01 Improve torrent content handling
Hide .pad files.

PR #15468.
2021-10-02 21:42:58 +03:00
Vladimir Golovnev
a8ade3a04b Merge pull request #14465 from glassez/qt6
Allow to build with Qt6
2021-10-02 21:29:10 +03:00
Chocobo1
eca04e2e92 Revise "Opening PR" section in contributing guide 2021-10-02 23:38:38 +08:00
Chocobo1
763b9fc1da Put PR template into action 2021-10-02 15:04:23 +08:00
Vladimir Golovnev (glassez)
add75fbc77 Make complete type declarations available where needed 2021-10-02 09:23:50 +03:00
Vladimir Golovnev (Glassez)
86b1ac5d7c CMake: Allow to build with Qt6 2021-10-02 09:23:49 +03:00
Vladimir Golovnev (glassez)
b51197936b QMake: Don't use WinExtras module with Qt6 2021-10-02 09:23:15 +03:00
Jose M. Abuin
64609ce5cf Add missing double-click action
Closes #15422.
PR #15509.
2021-10-01 12:16:58 +08:00
Chocobo1
b81cbf9062 Merge pull request #15505 from Chocobo1/freebsd
Add detection for various OS
2021-10-01 11:52:48 +08:00
Chocobo1
e7e881e5d7 Merge pull request #15500 from Chocobo1/networkfs
Add remote filesystem magic numbers
2021-09-30 10:27:57 +08:00
Chocobo1
e236a76d5a Use case statement for host OS detection 2021-09-29 16:32:29 +08:00
Chocobo1
ad8a827c1f Add detection for Haiku in configure script
Patch taken from downstream:
https://github.com/haikuports/haikuports/blob/master/net-p2p/qbittorrent/patches/qbittorrent-4.3.1.patchset
2021-09-29 16:22:20 +08:00
Chocobo1
08ac33bc5c Add detection for OpenBSD in configure script
Patch taken from downstream:
http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/net/qbittorrent/qbittorrent/patches/patch-configure_ac
2021-09-29 16:22:15 +08:00
Chocobo1
5cf39a2970 Reuse code path
`buf.f_type` should be compatible across platforms.
https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/statfs.2.html
2021-09-27 22:40:25 +08:00
Chocobo1
1c9321d5a1 Add remote filesystem magic numbers 2021-09-27 22:22:36 +08:00
Chocobo1
97a8d865dc WebUI: revise hash function
In benchmark, using `Math.imul()` is about ~20% faster than floating
point multiplication.

PR #15475.
2021-09-27 13:54:28 +08:00
Chocobo1
982133d9b6 CI: Clean up scripts
* Remove redundant dependencies
* Replace ccache action provider
* Let coverity-scan script build with libtorrent v2.0.4.

PR #15483.
2021-09-23 12:38:52 +08:00
Chocobo1
d23935a269 Merge pull request #15484 from Chocobo1/perference
Clean up Preferences class
2021-09-23 12:38:12 +08:00
Chocobo1
1c343a444b Remove redundant const specifier 2021-09-21 17:19:38 +08:00
Chocobo1
1c9696b68e Suppress function unused warning 2021-09-21 17:18:50 +08:00
Chocobo1
ecd23d0abd Merge pull request #15459 from Chocobo1/i18n
Revise description wordings
2021-09-19 13:29:08 +08:00
Chocobo1
010d1b5ff8 Merge pull request #15419 from Chocobo1/file
Improve error detection when saving files
2021-09-19 13:28:47 +08:00
Chocobo1
46394a7c0f Combine stream statements 2021-09-18 12:59:08 +08:00
Chocobo1
fc86034fab WebUI: update authors page 2021-09-18 12:59:07 +08:00
Chocobo1
03012cc175 Revise description wordings 2021-09-18 12:59:07 +08:00
xavier2k6
8518333406 Replace GitHub markdown templates with GitHub forms
PR #15330.
2021-09-17 12:51:33 +08:00
Vladimir Golovnev
b2e0e25f1c Merge pull request #15451 from glassez/profile
Improve Profile handling
2021-09-15 19:11:22 +03:00
Chocobo1
9673be17cb Improve handling when writing to temporary files
Let QTemporaryFile remove incomplete written file when error occurs.
"XXXXXX" template is not strictly required according to Qt doc.
2021-09-15 23:25:27 +08:00
Chocobo1
fa8786e230 Flush manually when saving a file
This is to work around https://bugreports.qt.io/browse/QTBUG-75077
2021-09-15 23:15:33 +08:00
Chocobo1
21f72baae2 Use QSaveFile wherever applicable
expected.hpp was fetched from:
b803e3c07b/include/nonstd/expected.hpp
2021-09-15 21:54:44 +08:00
xavier2k6
4b78af268f Update python installer URL for Windows 2021-09-12 17:17:06 +01:00
jagannatharjun
a734199383 Fix startup with different profiles 2021-09-12 10:59:20 +03:00
Vladimir Golovnev (Glassez)
046b741700 Improve Profile handling
Add Profile::rootPath and Profile::configurationName properties.
2021-09-12 10:58:48 +03:00
Chocobo1
ce0b6f0d56 Merge pull request #15450 from Chocobo1/pr_15303
Fix code defects
2021-09-12 12:56:33 +08:00
Chocobo1
6de0622c1a Merge pull request #15444 from Chocobo1/guard
Prevent self-assignment in assignment operator
2021-09-12 12:56:17 +08:00
Jesse Smick
6229b81730 WebUI: Add pieces progress bar to General tab
Closes #15292.
PR #15418.
2021-09-12 12:55:41 +08:00
Chocobo1
c701379a2e Fix typo 2021-09-11 12:07:52 +08:00
Chocobo1
0783968121 Guard for null pointer 2021-09-11 11:54:01 +08:00
gxcreator
307f5e6e56 Initialize member fields 2021-09-11 11:53:41 +08:00
Chocobo1
cb29685a24 Use Qt macro to disable various constructors 2021-09-10 19:51:27 +08:00
Faisal Al-Munawar Fathur Rahman
dabba89682 Update Indonesian translation
PR #15436.
2021-09-10 09:05:40 +08:00
Chocobo1
2efd4f2a77 Prevent self-assignment in assignment operator 2021-09-09 21:42:46 +08:00
Vladimir Golovnev
90296b3ef0 Add "Skip hash check" option for watched folders
Closes #15388.
PR #15433.
2021-09-09 07:00:51 +03:00
smigii
8f02fe0cc6 Elide text from the right for all columns' header
Minimizing columns no longer truncates text from the left, now elides
text from the right for better readability. Done by setting header's
textElideMode to Qt::TextElideRight.

Fix issue #14419.
PR #15366.
2021-09-08 11:47:55 +08:00
Chocobo1
7a6edcdddb Fix broken behavior of "priority by shown file order"
Closes #15421.
PR #15423.
2021-09-07 11:47:13 +08:00
Chocobo1
81139c0098 Improve error detection when saving files 2021-09-05 12:20:22 +08:00
Chocobo1
6a6268c068 Merge pull request #15396 from jagannatharjun/downloadrequest
Fix invalid RSS feed icons
2021-09-05 12:11:57 +08:00
jagannatharjun
68133ec8e3 Correctly use fallback icons for RSS feed in GUI 2021-09-04 12:11:44 +05:30
jagannatharjun
314f92f2d8 Use DownloadRequest::destFileName for downloading RSS feed icons 2021-09-04 12:02:38 +05:30
jagannatharjun
8b5db328ec Add DownloadRequest::destFileName 2021-09-04 12:02:38 +05:30
Chocobo1
615b76f78c Prolong wait time for shutdown
The default was 90s[1], prolong to 30 mins.
From the discussion in [2], ~2k torrents took 5 mins to completely
shutdown. Here we wait at most 30 mins which scales to about 12k
torrents which should cover most use case (also note that 4.3.x series
is mentioned to have even shorter shutdown time).

[1] https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#DefaultTimeoutStartSec=
[2] https://github.com/qbittorrent/qBittorrent/issues/15381#issuecomment-912080617

PR #15414.
2021-09-04 13:20:35 +08:00
Prince Gupta
f2912c14ea Stick Unread row to top in RSS feed list
PR #15397.
2021-09-04 12:55:58 +08:00
Chocobo1
08f33d7e9e Fix WebUI crash when tracker URL is invalid
Closes #15391.
PR #15395.
2021-08-31 11:53:42 +08:00
xavier2k6
c034cb5985 Remove Windows Vista support from manifest
PR #15394.
2021-08-30 08:07:15 +03:00
Chocobo1
e3cd15dced Remove unnecessary UI properties in "Add new torrent" dialog (#15387)
Closes #15383.
2021-08-29 11:29:01 +08:00
JungHee Lee
8439d4e827 Update Korean NSIS translation (#15380) 2021-08-29 11:27:09 +08:00
sledgehammer999
2b501904cf Bump to 4.4.0beta3 2021-08-29 01:53:02 +03:00
sledgehammer999
ea986a1f1b Sync translations from Transifex and run lupdate 2021-08-29 01:51:47 +03:00
Chocobo1
b924357ea9 Specify Unicode for resource block (#15370)
The StringFileInfo block was using "1252 Multilingual", change it to
"1200 Unicode" for consistency.
https://docs.microsoft.com/en-us/windows/win32/menurc/stringfileinfo-block

Closes #15364.
2021-08-26 11:30:53 +08:00
Vladimir Golovnev
b823d74ac3 Use "old file path" provided by libtorrent
Until libtorrent provided an "old_name" field in `file_renamed_alert` we relied
on a workaround with storing old file names to remove empty leftover folders.
PR #15356.
2021-08-23 07:29:50 +03:00
Chocobo1
d1e2019cd7 Merge pull request #15357 from a1346054/master
Fix minor licensing issue
2021-08-23 11:23:02 +08:00
Chocobo1
70573eba2c GHA CI: Use preinstalled vcpkg (#15355)
This will save maintenance work on the vcpkg version.

Also a few other improvements:
* Add quotes to path
* Sort command flags
* Avoid switching shell, always use powershell (the default shell)
2021-08-22 12:29:17 +08:00
a1346054
cf46653333 Fix typo 2021-08-21 16:02:05 +00:00
a1346054
8d3fcbd897 Use license file verbatim
The GPL part of COPYING file was distributed incomplete, it must be
distributed verbatim.

The file was obtained from:
https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
2021-08-21 16:00:19 +00:00
Chocobo1
1900538315 Merge pull request #15342 from Chocobo1/macos
GHA CI: Split "main CI" to multiple workflows
2021-08-20 03:43:24 +08:00
Chocobo1
a9feae6110 GHA CI: Split "main CI" to multiple workflows 2021-08-19 11:54:58 +08:00
Chocobo1
8d822f2cb4 Improve "last activity" calculation in WebAPI (#15339)
Co-authored-by: 秦风 <mayli.he@gmail.com>

Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
2021-08-19 11:16:34 +08:00
Chocobo1
c12e486f59 GHA CI: Use prebuilt library packages on macOS 2021-08-19 11:08:19 +08:00
Chocobo1
d0d0bed333 Merge pull request #15340 from Chocobo1/libt2
Support libtorrent v2.0.4 in CI
2021-08-19 10:54:01 +08:00
Chocobo1
8799321312 GHA CI: Use ccache 2021-08-18 23:06:02 +08:00
Chocobo1
00d2997971 GHA CI: Move global environment variables out 2021-08-18 23:06:02 +08:00
Chocobo1
69f7f233fd GHA CI: Remove OS variable from build matrix
It is meaningless to build on multiple linux versions as we only depend
on library versions, not OS versions.
Also remove redundant "shell default" section.
2021-08-18 23:06:02 +08:00
Chocobo1
793e8643bf GHA CI: Support libtorrent v2.0.4 2021-08-18 23:05:23 +08:00
Chocobo1
521ef8e28f Merge pull request #15321 from Chocobo1/ci
Clean up workflow files coding style
2021-08-15 12:24:21 +08:00
Chocobo1
7433d85418 Revise workflow steps name/description 2021-08-14 15:08:31 +08:00
Chocobo1
ba1cf12817 Capitalize workflow step names 2021-08-14 14:58:16 +08:00
Chocobo1
7dc7b95bfd Merge pull request #15306 from Chocobo1/icon
Minor UI revise
2021-08-14 12:12:49 +08:00
Chocobo1
59352e4ca7 Use nodejs lts version for CI
The exact nodejs version isn't critical here, just make sure it isn't
too outdated.
2021-08-13 12:23:16 +08:00
Chocobo1
011d026d76 Rename jobs 2021-08-13 12:23:16 +08:00
Chocobo1
89a8184ad2 Avoid using legacy backticks
https://github.com/koalaman/shellcheck/wiki/SC2006
2021-08-13 12:23:16 +08:00
Chocobo1
a23e10dff5 Split commands to multiple lines properly 2021-08-13 12:23:16 +08:00
Chocobo1
535603fac4 Use latest Ubuntu images
Jobs in those workflows has little to do with specific OS version, so
just use the latest.
2021-08-13 12:23:16 +08:00
Chocobo1
fb6282da57 Add proper indention to steps section
Following the style from the examples in https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idsteps
2021-08-13 12:23:15 +08:00
Chocobo1
23766cd01d Clean up Github workflows' name 2021-08-13 12:23:04 +08:00
sledgehammer999
44b2afb218 Merge pull request #15310 from Chocobo1/stale
Stale bot: Handle more PR per run
2021-08-11 17:29:45 +03:00
sledgehammer999
9e82e59fc8 Merge pull request #15315 from sledgehammer999/readme_chat
Change IRC channel to Libera.Chat
2021-08-11 17:27:50 +03:00
Chocobo1
e006538514 Fix cmake script (#15309)
Fix up 138c911ef4.
2021-08-11 13:26:15 +08:00
sledgehammer999
fad5dfa4f4 Change IRC channel to Libera.Chat
Unfortunately Freenode, after a takeover, decided to purge all their databases, thus
deleting all channel and user registrations, without a warning.
So if we're forced to re-register our stuff why not go where the cool kids are at?
2021-08-11 01:13:55 +03:00
a-raccoon
b737ee0240 Update README.md
Removed these two lines because they haven't been true in a very long time, and is no longer even possible.
```
You can also meet me (sledgehammer_999) on IRC:
`#qbittorrent on irc.freenode.net`
```
2021-08-11 00:37:03 +03:00
Chocobo1
9d9f774dad Handle more PR per run
Previously only about ~27 PR are scanned per run, this commit attempt
to handle all open PR at once.
2021-08-10 13:14:25 +08:00
Chocobo1
526ee9c9db Add tooltip to listening port spinbox 2021-08-10 12:24:50 +08:00
sledgehammer999
671eff324d Merge pull request #15298 from sledgehammer999/coverity_workflow
Run Coverity once per month
2021-08-09 21:18:12 +03:00
Chocobo1
a93cf04aca Use default values for inconsequential fields
Or when the default value is actually what we want.
2021-08-09 13:37:48 +08:00
Chocobo1
e93a67e644 Use default upper limits for ddns entries
The default is 32767 which is larger than the previous artificial limit.
2021-08-09 13:14:51 +08:00
Chocobo1
b29a52dfa8 Use the same icon for selecting folders/files
As stated in Qt doc, the `QStyle::SP_DialogOpenButton` is only for a
button within QDialogButtonBox which means it isn't suitable elsewhere.
2021-08-09 13:14:14 +08:00
Chocobo1
4ed99ba851 Introduce stale bot for PR (#15211)
Stale bot will mark stale PR with a tag and close them after a specified
interval of time.

* Draft PRs are not subject to this marking.
* PR with an assignee or milestone is not subject to this marking.
2021-08-09 11:26:04 +08:00
sledgehammer999
3e92e716b2 Merge pull request #15294 from sledgehammer999/accept_v2_infohash
Accept v2 infohashes for download
2021-08-08 12:29:04 +03:00
sledgehammer999
c6c8f6563d Run Coverity once per month 2021-08-08 12:24:19 +03:00
Chocobo1
138c911ef4 Add compile definition to indicate using of libtorrent 2.0 (#15297)
The compile definition is temporary which will be removed when qbt
ditches libtorrent 1.x.
2021-08-08 13:27:22 +08:00
sledgehammer999
e5fe6401a0 Accept v2 infohashes for download
Partially fixes #15287
2021-08-07 17:25:13 +03:00
Vladimir Golovnev
bed643e627 Delay processing of watched folders (#15282)
Fixes regression of #14882.
Closes #15272.
2021-08-07 12:33:29 +03:00
Mengyang Li
4ac25a50ed WebUI: group trackers by hostname (#15264)
Closes #13608.
2021-08-07 12:25:07 +08:00
Chocobo1
d9cf189ef6 Merge pull request #15281 from Chocobo1/lib
Update js libraries
2021-08-06 16:56:02 +08:00
Matthaiks
6e19878973 NSIS: Add Polish translation (#15262) 2021-08-06 12:16:46 +08:00
Chocobo1
9f9c4d6ed0 Ignore file heath for 3rd party libraries 2021-08-05 16:03:19 +08:00
Chocobo1
567848e94f Work around missing function error
The fix comes from older version of MochaUI.
2021-08-05 16:03:18 +08:00
Chocobo1
221cbcc1ac Update MochaUI to v0.9.7
Upstream: https://github.com/cdotyone/mochaui/blob/develop-0.9.8/Build/mocha.js
2021-08-05 16:03:07 +08:00
Chocobo1
dc2086dab4 Update clipboard.js to v2.0.8 2021-08-05 15:24:03 +08:00
Chocobo1
7be2a03c86 Update mootools to v1.6.0 2021-08-05 15:24:01 +08:00
Sylvain Finot
e87f8f5b93 Expose SSRF mitigation (#15247) 2021-08-04 11:28:36 +08:00
Chocobo1
11a063ea66 Merge pull request #15242 from Chocobo1/libt_version
Detect incompatible libtorrent v2 versions in build systems
2021-08-04 11:28:07 +08:00
sledgehammer999
1d26f4c5f7 Bump to 4.4.0beta2 2021-08-03 23:15:27 +03:00
sledgehammer999
8a09558ed8 Sync translations from Transifex and run lupdate 2021-08-03 23:14:08 +03:00
Daniel Aleksandersen
60b1e692b9 Disconnect comment links fom the WebUI (#15251) 2021-08-03 16:26:04 +08:00
Chocobo1
0a1865d0dd Don't use old style cast 2021-08-01 13:48:46 +08:00
Chocobo1
3d94c70c48 Adopt a subset of semantic versioning notation
https://github.com/npm/node-semver#ranges
https://semver.npmjs.com/
2021-08-01 13:48:22 +08:00
Chocobo1
7d7f967d5e Detect incompatible libtorrent v2 versions in build systems
Although the detection is working, the error message in autotools is not
perfect, i.e. it would only mention valid range for libtorrent v1 and it
shouldn't be a problem since v2 support isn't fully ready yet.
2021-07-31 16:59:37 +08:00
Chocobo1
ce554e6c77 Merge pull request #15229 from Chocobo1/port
Use spinbox special value to represent "Use any available port"
2021-07-30 15:19:08 +08:00
xavier2k6
5d151cca9d GitHub Actions CI: update workflow (#15245)
- update vcpkg to latest commit (includes updated BOOST)
2021-07-30 15:18:38 +08:00
Chocobo1
e47d90b5a6 Update pkg.m4 to latest version
Upstream: https://gitlab.freedesktop.org/pkg-config/pkg-config/-/blob/master/pkg.m4.in
2021-07-29 14:15:51 +08:00
AbeniMatteo
e4730191db Set default file priorities when not specified (#15190) 2021-07-29 12:20:03 +08:00
Chocobo1
49aab492e0 Use spinbox special value to represent "Use any available port"
WebAPI functionality is preserved (deprecated) for now and should be
removed in the future.
2021-07-29 11:50:52 +08:00
Chocobo1
2d4d246268 Remember last viewed page in Options dialog (#15230) 2021-07-28 11:11:00 +08:00
Chocobo1
09e558ae0b Revise checkbox label for "Use any available ports" functionality
Also reorder the checkboxes a bit.
2021-07-27 13:35:18 +08:00
Chocobo1
a3fd6633c4 Use default property for widgets 2021-07-26 12:20:46 +08:00
Vladimir Golovnev
1eb246c98b Merge pull request #15181 from glassez/qt5
Raise minimum Qt version to 5.15.2
2021-07-23 06:22:57 +03:00
Chocobo1
96e0c0df20 Improve handling for magnet URI (#15209)
This add support for magnets URI in v2 hash format.
2021-07-22 13:05:59 +08:00
thalieht
aa8f420681 Recognise v2 info-hashes in clipboard for "Add torrent link" dialog (#15206) 2021-07-20 14:30:37 +03:00
Tom Piccirello
7974b5a95c Support sorting Web UI tables via touch (#15205) 2021-07-19 14:28:04 +08:00
Vladimir Golovnev
ed4570cb4d Store minimal metadata for "restore torrent" purposes (#15191)
We can no longer save valid torrent files in the general case, because
for torrents of version 2, we need a full merkle tree to do it, but if
a torrent is added from magnet link, full merkle tree may not be available
even before the end of downloading all the data. Actually, we don't need
the full torrent file for the purposes of resuming the torrent, so we can
allow libtorrent to produce only a minimal part of the metadata as part
complete resume data, but we still want to store it in a separate file,
so we extract the resulting metadata from the complete resume data before
saving and merge it together before loading.
2021-07-19 07:59:06 +03:00
AbeniMatteo
01d851440b Add "Forced metadata downloading" state (#15185) 2021-07-17 21:33:14 +03:00
AbeniMatteo
e5943b64c1 Add filter "Checking" to side panel (#15166) 2021-07-16 14:08:10 +03:00
scootergrisen
933e56494c Update Danish translation (#15192) 2021-07-16 12:55:05 +08:00
Kristof Mattei
140e73be4e Use the URI's setData to set query data (#15187)
This allows the system to properly encode the '|', instead of passing
the '|' on in the URL, which is not allowed and breaks proxies such as
Authelia.

Then, for the purpose of generalization, I pushed this pattern through
to all places where we join items with a '|'.

This comes with the caveat that when we have individual components which
contain a '|' or any other character that is not allowed per the
HTTP standard, we still like to encode the individual components,
for example in the case of 3 strings, separated by a '|'.
If we don't do this we run into the risk that upon decoding URI finds
'|' in our original strings, which is something we don't want.

For example:
Sender:
````javascript
const arr = ["foo|1", "bar|2"];
const uri = new URI("test.html").setData(arr.join("|"));
````
Then on the receiving window, when it receives the uri and splits it, it
looks like this:
````javascript
const arr = new URI().getData('hashes').split('|');
// arr is now ["foo", "1", "bar", "2"]
````

This is why when we want to send a literal "|" we need to do
`encodeURIComponent` and `decodeURIComponent` manually on each item,
and THEN we join.

For example:
Sender:
````javascript
const arr = ["foo|1", "bar|2"];
const uri = new URI("test.html").setData(arr.map(encodeURIComponent).join("|"));
````

Receiver:
````javascript
const arr = new URI().getData('hashes').split('|').map(decodeURIComponent);
// arr is now ["foo|1", "bar|2"]
````

We don't need to with hashes as they are HEX, so no risk of any weird
characters in there.
2021-07-16 12:53:47 +08:00
Vladimir Golovnev (glassez)
960b9b855f CI: Use Qt-5.15.2 on AppVeyor 2021-07-15 10:56:50 +03:00
FranciscoPombal
1e1d55b26d CI: Use Qt 5.15.2 from third-party PPA on Linux 2021-07-15 10:56:50 +03:00
Vladimir Golovnev (glassez)
925bf7715c Disable functions deprecated in Qt 5.15.2 and earlier 2021-07-15 10:56:49 +03:00
Vladimir Golovnev (Glassez)
399d3ad85a Replace QStringRef with QStringView 2021-07-15 10:56:49 +03:00
Chocobo1
d923c03d52 Merge pull request #15186 from Piccirello/webui-table-keyboard-nav
Support navigating Web UI tables with arrow keys
2021-07-13 11:26:50 +08:00
Vladimir Golovnev
699b91ab8d Properly create "clean path" for watched folder (#15179) 2021-07-12 11:44:52 +03:00
AbeniMatteo
abd6eb2ff3 Add context menu to toggle content tab columns (#15164) 2021-07-12 13:57:17 +08:00
Thomas Piccirello
32f29e72c6 Support expanding/collapsing Web UI folders with arrow keys 2021-07-11 03:01:31 -07:00
Thomas Piccirello
e76bac4131 Support navigating Web UI tables with arrow keys
This allows navigating rows via up/down arrow keys.
2021-07-11 03:01:31 -07:00
Thomas Piccirello
8b94642ab1 Always set Web UI row id as a string
This helps ensure consistent behavior when performing rowId comparisons against strings.
2021-07-10 11:50:48 -07:00
Chocobo1
d3497148c5 Merge pull request #15176 from Chocobo1/tooltip
Add tooltip for more widgets
2021-07-09 16:48:58 +08:00
Vladimir Golovnev (glassez)
27baa55443 Raise minimum Qt version to 5.15.2 2021-07-09 07:41:13 +03:00
Chocobo1
fd3d4d479a Suppress type narrowing warning on MSVC
Fix up 45e31a153c.
2021-07-08 14:25:39 +08:00
Chocobo1
4b0a2d050a Display tooltip for all columns in torrent content widget
It is primary useful for showing long file names.
2021-07-08 14:23:30 +08:00
Chocobo1
d85c14864b Add tooltip for "client ID" column
Sometimes the client ID could be quite long and this patch helps showing
it.
2021-07-08 14:22:59 +08:00
Chocobo1
ee696e6f36 Merge pull request #15170 from Chocobo1/tooltip
Add tooltip for various columns
2021-07-08 13:01:59 +08:00
Chocobo1
6ccbd8472c Merge pull request #15161 from Chocobo1/helper
Use `underlying_type` member directly
2021-07-08 13:01:46 +08:00
Chocobo1
8ec26e9ea9 Don't use old style casts
Ref: https://github.com/qbittorrent/qBittorrent/runs/2996702005?check_suite_focus=true#step:8:298
2021-07-07 14:44:39 +08:00
Chocobo1
45e31a153c Reserve space for vector 2021-07-07 14:20:27 +08:00
Chocobo1
7c23d800e6 Use underlying_type member directly
`LTUnderlyingType` served as a intermediate type for libtorrent 1.1 and
1.2 and is obsoleted now.
Also add helper to convert to underlying type.
2021-07-07 14:19:17 +08:00
Chocobo1
4dbf6af733 Simplify initialization statement 2021-07-07 13:20:13 +08:00
Chocobo1
bdc03b1c75 Add tooltip for various columns
Those strings sometimes are quite long and having a tooltip would
save the action of resizing the column width to see the full message.
The WebUI already has it done for all columns.
2021-07-07 13:19:29 +08:00
AbeniMatteo
9bfc74a1bc Filter torrent info endpoint by tag (#15152) 2021-07-05 13:55:49 +08:00
Vladimir Golovnev
5d03917877 Use torrent info with hashes for creating .torrent file (#15138) 2021-07-04 09:29:34 +03:00
Vladimir Golovnev (Glassez)
d2f975a0f3 Don't forget to start "watch timer" 2021-07-02 08:34:31 +03:00
Chocobo1
eedd47860a Merge pull request #15142 from Chocobo1/warning
Use proper signed number type
2021-07-01 11:35:04 +08:00
sledgehammer999
6e59248ea6 Merge pull request #15093 from FranciscoPombal/bump_libtorrent
Raise minimum libtorrent version to 1.2.14 (2.0.4)
2021-06-30 22:39:53 +03:00
Chocobo1
365554d064 Use proper signed number type
This also suppress the compiler warning:
src/base/bittorrent/torrentimpl.cpp:228:36: warning: comparison of integer expressions of different signedness: ‘int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]
2021-06-29 18:04:33 +08:00
Chocobo1
70d1cb86fd Disable move constructor where it is sensible 2021-06-29 14:49:45 +08:00
FranciscoPombal
ccb7c0d579 Raise minimum libtorrent version to 1.2.14 (2.0.4)
- Also update vcpkg to latest commit: includes libtorrent 1.2.14,
Qt 5.15.2, and Qt 6.1.1
2021-06-28 23:04:47 +01:00
sledgehammer999
fd9941e2d8 Merge pull request #15131 from FranciscoPombal/goodbye_travis
Remove TravisCI config
2021-06-28 21:48:30 +03:00
FranciscoPombal
2f89563fca Remove TravisCI config 2021-06-28 10:41:16 +01:00
sledgehammer999
261f601bd5 Merge pull request #15129 from adem4ik/patch-5
Remove excess space in torrentfileswatcher.cpp
2021-06-27 15:32:50 +03:00
Andrei Stepanov
5157e4965a Remove excess space 2021-06-27 13:01:03 +04:00
1517 changed files with 298482 additions and 207383 deletions

View File

@@ -3,7 +3,7 @@ version: '{branch}-{build}'
# Do not build on tags (GitHub only) # Do not build on tags (GitHub only)
skip_tags: true skip_tags: true
image: Visual Studio 2019 image: Visual Studio 2022
branches: branches:
except: # blacklist except: # blacklist
@@ -37,23 +37,65 @@ install:
RMDIR /S /Q "%CACHE_DIR%" & MKDIR "%CACHE_DIR%" && RMDIR /S /Q "%CACHE_DIR%" & MKDIR "%CACHE_DIR%" &&
appveyor DownloadFile "%QBT_LIB_URL%" -FileName "c:\qbt_lib.7z" && 7z x "c:\qbt_lib.7z" -o"%CACHE_DIR%" > nul && appveyor DownloadFile "%QBT_LIB_URL%" -FileName "c:\qbt_lib.7z" && 7z x "c:\qbt_lib.7z" -o"%CACHE_DIR%" > nul &&
COPY "c:\version_new" "%CACHE_DIR%\version") COPY "c:\version_new" "%CACHE_DIR%\version")
# Qt stay compressed in cache
- 7z x "%CACHE_DIR%\qt5_64.7z" -o"c:\qbt" > nul
before_build: before_build:
# setup env # setup env
- CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" - CALL "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- SET PATH=%PATH%;c:\qbt\qt5_64\bin;%CACHE_DIR%\jom; - SET PATH=%PATH%;C:\Qt\5.15.2\msvc2019_64\bin;%CACHE_DIR%\jom
# setup project # setup project
- COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%" - COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%"
# workarounds # workarounds
- MKDIR "c:\qbt"
- MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base" - MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base"
build_script: build_script:
- cd "%REPO_DIR%" - cd "%REPO_DIR%"
# scan only as lupdate is prone to hang # lupdate chokes when it parses headers from system inludes, especially Boost
- lupdate -extensions c,cpp,h,hpp,ui . # it also chokes with the sources from src/app/qtlocalpeer (formerly qtsingleapplication)
# Workaround: temporarily rename them to run lupdate with the .pro file
- RENAME conf.pri conf.pri.temp
- RENAME src\app\qtlocalpeer qtlocalpeer.temp
- lupdate qbittorrent.pro
- RENAME conf.pri.temp conf.pri
- RENAME src\app\qtlocalpeer.temp qtlocalpeer
- qmake qbittorrent.pro && cd src && qmake src.pro - qmake qbittorrent.pro && cd src && qmake src.pro
- jom -j2 -f Makefile.Release - jom -j2 -f Makefile.Release
after_build:
- cd "%REPO_DIR%"
- MKDIR upload
- COPY dist\windows\qt.conf upload
- COPY src\release\qbittorrent.exe upload
- COPY src\release\qbittorrent.pdb upload
- COPY "%CACHE_DIR%\base\bin\libcrypto-1_1-x64.dll" upload
- COPY "%CACHE_DIR%\base\bin\libcrypto-1_1-x64.pdb" upload
- COPY "%CACHE_DIR%\base\bin\libssl-1_1-x64.dll" upload
- COPY "%CACHE_DIR%\base\bin\libssl-1_1-x64.pdb" upload
- COPY "%CACHE_DIR%\base\bin\torrent-rasterbar.dll" upload
- COPY "%CACHE_DIR%\base\bin\torrent-rasterbar.pdb" upload
- COPY "%CACHE_DIR%\base\lib\zlib1.dll" upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Core.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Gui.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Network.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Sql.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Svg.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Widgets.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5WinExtras.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Xml.dll upload
- MKDIR upload\plugins\iconengines
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\iconengines\qsvgicon.dll upload\plugins\iconengines
- MKDIR upload\plugins\imageformats
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\imageformats\qico.dll upload\plugins\imageformats
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\imageformats\qsvg.dll upload\plugins\imageformats
- MKDIR upload\plugins\platforms
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\platforms\qwindows.dll upload\plugins\platforms
- MKDIR upload\plugins\sqldrivers
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers\qsqlite.dll upload\plugins\sqldrivers
- MKDIR upload\plugins\styles
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\styles\qwindowsvistastyle.dll upload\plugins\styles
test: off test: off
artifacts:
- path: upload
name: qBittorrent-Appveyor_Windows-x64

8
.gitattributes vendored
View File

@@ -1,7 +1,7 @@
core.eol=lf core.eol=lf
* text eol=lf * text eol=lf
*.zip binary
*.png binary
*.ico binary
*.qm binary
*.icns binary *.icns binary
*.ico binary
*.png binary
*.qm binary
*.zip binary

View File

@@ -1,89 +0,0 @@
---
name: Bug Report
about: Report a problem with qBittorrent to help us resolve it.
title: ''
labels: ''
assignees: ''
---
# Bug report
<!--
###############################################################################
WARNING!
IGNORING THE INSTRUCTIONS IN THIS TEMPLATE WILL RESULT IN THE ISSUE BEING
CLOSED AS INCOMPLETE/INVALID
###############################################################################
-->
## Checklist
<!--
################################## IMPORTANT ##################################
As you read and fulfill each of the following requirements below,
put an "x" between the square brackets to mark each task as done, like so: [x]
-->
- [ ] I have read the **issue reporting section** in the [contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md), so I know how to submit a good bug report with the required information
- [ ] I have verified that the **issue is not fixed and is reproducible** in the **[latest version](https://www.qbittorrent.org/download.php)**
- [ ] (optional but recommended) I have verified that the **issue is not fixed and is reproducible** in the **[latest CI build](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci.yaml?query=branch%3Amaster+event%3Apush)**
- [ ] I have **checked the [frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and **searched** the issue tracker for similar bug reports (including closed ones) **to avoid posting a duplicate**
- [ ] This report is **not a support request or question**, both of which are better suited for either the [discussions section](https://github.com/qbittorrent/qBittorrent/discussions), [forum](https://qbforums.shiki.hu/), or [subreddit](https://www.reddit.com/r/qBittorrent/). The [wiki](https://github.com/qbittorrent/qBittorrent/wiki) did not contain a suitable solution either
- [ ] I have **pasted/attached the settings file and relevant log(s)** in the **Attachments** section at the bottom of the report. Mandatory: the settings file and at least the most recent log. See [this wiki page](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings) if you're not sure where to find them.
## Description
<!--
################################## IMPORTANT ##################################
Delete each "(type here)" indicator and type your text in their place in the subsections below.
You MUST fill in ALL subsections marked with "(type here)" with the appropriate information.
Please make sure the description is worded well enough to be understood.
Provide steps to reproduce the issue, any additional relevant information, suggested solution (if applicable) and as much context and examples as possible.
For more information consult the Contributing Guidelines at https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md.
Do not forget about the mandatory attachments!
Use the Preview tab before posting to make sure your report looks like it is formatted properly.
You don't need to delete these comments, they won't show up in the final post.
-->
### qBittorrent info and operating system(s)
<!--
IMPORTANT:
if you did not get the qBittorrent installer from the links in the official website
or if you did not install it from the PPA, please mention that after the version
-->
- qBittorrent version: (type here)
- Operating system(s) where the issue occurs: (type here)
### If on Linux, `libtorrent-rasterbar` and `Qt` versions
- Qt: (type here)
- libtorrent-rasterbar: (type here)
### What is the problem
(type here)
### Detailed steps to reproduce the problem
1. (type here)
2. (type here)
3. (etc.)
### What is the expected behavior
(type here)
### Extra info (if any)
(type here)
## Attachments
<!-- paste file contents here (or attach the files if they are big), do NOT link to external sites -->

76
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,76 @@
name: Bug Report
description: File a bug report to help improve qBittorrent user experience.
body:
- type: markdown
attributes:
value: |
#### ADVISORY
"We do not support any versions older than the current release series"
"We do not support any 3rd party/forked versions e.g. `portableapps`/`Enhanced Edition`etc."
"Please post all details in **English**."
#### Prerequisites before submitting an issue!
- Read the issue reporting section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good bug report with the required information.
- Verify that the issue is not fixed and is reproducible in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).**
- (Optional, but recommended) Verify that the issue is not fixed and is reproducible in the latest CI (currently only on **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds.
- Check the **[frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and perform a **[search of the issue tracker (including closed ones)](https://github.com/qbittorrent/qBittorrent/issues)** to avoid posting a duplicate.
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**.
- Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either.
- If relevant to issue/when asked, the qBittorrent preferences file, qBittorrent.log & watched_folders.json (if using "Watched Folders" feature) must be provided.
See **[Where does qBittorrent save its settings?](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings)**
- type: textarea
attributes:
label: qBittorrent & operating system versions
description: |
Qt and libtorrent-rasterbar versions are required when: 1. You are using linux. 2. You are not using an official build downloaded from our website.
Example of preferred formatting:
qBittorrent: 4.3.7 x64
Operating system: Windows 10 Pro 21H1/2009 x64
Qt: 5.15.2
libtorrent-rasterbar: 1.2.14
placeholder: |
qBittorrent:
Operating system:
Qt:
libtorrent-rasterbar:
validations:
required: true
- type: textarea
attributes:
label: What is the problem?
description: Please add the "crash report" (if encountered) or give a clear and concise description of problem.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Please provide reliable steps to reproduce the problem.
placeholder: |
1. First step
2. Second step
3. and so on...
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add screenshots etc. (Anything that will provide more context about the problem)
validations:
required: false
- type: textarea
attributes:
label: Log(s) & preferences file(s)
description: |
Add these files: qBittorrent preferences file, qBittorrent.log & watched_folders.json (if using "Watched Folders" feature).
See **[Where does qBittorrent save its settings?](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings)**
#### Note: It's the user's responsibility to redact any sensitive information
validations:
required: false

View File

@@ -1,20 +1,17 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- - name: Wiki
about: "Consult the wiki first (especially the FAQ), it might already contain the information you are looking for"
name: Wiki
url: "https://github.com/qbittorrent/qBittorrent/wiki/" url: "https://github.com/qbittorrent/qBittorrent/wiki/"
about: "Consult the wiki first (especially the FAQ), it might already contain the information you are looking for"
- - name: Question
about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section"
name: Question
url: "https://github.com/qbittorrent/qBittorrent/discussions" url: "https://github.com/qbittorrent/qBittorrent/discussions"
about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section"
- - name: Question
about: "Alternatively, ask on the official forum"
name: Question
url: "http://forum.qbittorrent.org/" url: "http://forum.qbittorrent.org/"
- about: "Alternatively, ask on the official forum"
about: "Alternatively, use the subreddit"
name: Question - name: Question
url: "https://www.reddit.com/r/qBittorrent/" url: "https://www.reddit.com/r/qBittorrent/"
about: "Alternatively, use the subreddit"

View File

@@ -1,61 +0,0 @@
---
name: Feature Request
about: Suggest a new feature or enhancement for qBittorrent.
title: ''
labels: 'Feature request'
assignees: ''
---
# Feature request
<!--
###############################################################################
WARNING!
IGNORING THE INSTRUCTIONS IN THIS TEMPLATE WILL RESULT IN THE ISSUE BEING
CLOSED AS INCOMPLETE/INVALID
###############################################################################
-->
## Checklist
<!--
################################## IMPORTANT ##################################
As you read and fulfill each of the following requirements below,
put an "x" between the square brackets to mark each task as done, like so: [x]
-->
- [ ] I have read the **feature request section** in the [contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md), so I know how to submit a good feature request with the required information
- [ ] I have verified that the **feature** I am requesting is **not available** in the **[latest version](https://www.qbittorrent.org/download.php)**
- [ ] (optional but recommended) I have verified that the **feature** I am requesting is **not available** in the **[latest CI build](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci.yaml?query=branch%3Amaster+event%3Apush)**
- [ ] I have **checked the [frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and **searched** the issue tracker for similar feature requests (including closed ones) **to avoid posting a duplicate**
- [ ] This request is **not a support request or question**, both of which are better suited for either the [discussions section](https://github.com/qbittorrent/qBittorrent/discussions), [forum](https://qbforums.shiki.hu/), or [subreddit](https://www.reddit.com/r/qBittorrent/). The [wiki](https://github.com/qbittorrent/qBittorrent/wiki) did not contain a suitable solution either
## Description
<!--
################################## IMPORTANT ##################################
Delete each "(type here)" indicator and type your text in their place in the subsections below.
You MUST fill in ALL subsections marked with "(type here)" with the appropriate information.
Please make sure the description is worded well enough to be understood.
Provide a detailed description of the feature and as much context and examples as necessary.
If the feature request has to do with visual elements and the GUI, images/screenshots are always helpful.
For more information consult the Contributing Guidelines at https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md.
Use the Preview tab before posting to make sure your report looks like it is formatted properly.
You don't need to delete these comments, they won't show up in the final post.
-->
### Suggestion
(type here)
### Use case
(type here)
### Extra info/examples/attachments
<!-- optional -->

View File

@@ -0,0 +1,37 @@
name: Feature Request
description: Suggest a new feature or enhancement for qBittorrent.
labels: ["Feature request"]
body:
- type: markdown
attributes:
value: |
#### ADVISORY
"Please post all details in **English**."
#### Prerequisites before submitting a feature request!
- Read the feature request section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good feature request with the required information.
- Verify that the feature being requested is not available in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).**
- (Optional but recommended) Verify that the feature being requested is not available in the latest CI (**[macOS](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_macos.yaml?query=branch%3Amaster+event%3Apush)** / **[Ubuntu](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_ubuntu.yaml?query=branch%3Amaster+event%3Apush)** / **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds.
- Search the issue tracker with the **[feature request filter](https://github.com/qbittorrent/qBittorrent/issues?q=is%3Aopen+is%3Aissue+label%3A%22Feature+request%22)** for similar feature requests (including closed ones) to avoid posting a duplicate.
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**.
- Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either.
- type: textarea
attributes:
label: Suggestion
validations:
required: false
- type: textarea
attributes:
label: Use case
validations:
required: false
- type: textarea
attributes:
label: Extra info/examples/attachments
description: Add screenshots etc. (Anything that will give us more context about what is being requested!)
validations:
required: false

5
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,5 @@
<!--
MANDATORY Before submitting your work, make sure you have:
1. Read https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md#opening-a-pull-request
2. Delete this comment block
-->

View File

@@ -1,16 +0,0 @@
# Changes proposed in this pull request
<!--
IMPORTANT: an image is worth a thousand words.
It is often a good idea to post screenshots showing the "before" and "after" your PR's changes,
especially with changes related to the GUI, along with the textual description.
Images makes it immediately clearer for others what your proposed changes are all about.
-->
(type here)
<!--
OPTIONAL: if this PR directly addresses an issue, make sure to include a "Closes #XXXXX" statement at the end.
-->
<!-- You don't need to delete these comments before posting, they won't show up in the post :) -->

68
.github/workflows/check_translation_tag.py vendored Executable file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/env python3
# A pre-commit hook for detecting problematic <translation> tags
# Copyright (C) 2021 Mike Tzou (Chocobo1)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give permission to
# link this program with the OpenSSL project's "OpenSSL" library (or with
# modified versions of it that use the same license as the "OpenSSL" library),
# and distribute the linked executables. You must obey the GNU General Public
# License in all respects for all of the code used other than "OpenSSL". If you
# modify file(s), you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete this
# exception statement from your version.
from typing import Optional, Sequence
import argparse
import re
def main(argv: Optional[Sequence[str]] = None) -> int:
parser = argparse.ArgumentParser()
parser.add_argument('filenames', nargs='*', help='Filenames to check')
args = parser.parse_args(argv)
error_msg = ""
regex = re.compile(r"\s*</translation>")
for filename in args.filenames:
line_counter = 1
error_buffer = ""
with open(filename) as file:
try:
for line in file:
if (match := regex.match(line)) is not None:
error_buffer += str(f"Defect file: \"{filename}\"\n"
f"Line: {line_counter}\n"
f"Column span: {match.span()}\n"
f"Part: \"{match.group()}\"\n\n")
line_counter += 1
except UnicodeDecodeError as error:
# not a text file, skip
continue
error_msg += error_buffer
if len(error_msg) > 0:
print(error_msg)
return 1
return 0
if __name__ == '__main__':
exit(main())

View File

@@ -1,254 +0,0 @@
name: GitHub Actions CI
# Cache is used for all Windows and macOS dependencies (size approx. 1230 * 2 + 1850 = 4310 MiB)
# Cache is not used for Ubuntu builds, because it already has all dependencies except
# the appropriate libtorrent version, which only takes 3-5 minutes to build from source anyway
on: [pull_request, push]
env:
VCPKG_COMMIT: 8f03e2264da6b95fa5b01dd89cdd5b499458d428
VCPKG_DEST_MACOS: /Users/runner/qbt_tools/vcpkg
VCPKG_DEST_WIN: C:\qbt_tools\vcpkg
LIBTORRENT_VERSION_TAG: v1.2.13
jobs:
ci_ubuntu:
name: Ubuntu
strategy:
matrix:
os: [ubuntu-20.04]
qbt_gui: ["GUI=ON", "GUI=OFF"]
fail-fast: false
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- name: checkout repository
uses: actions/checkout@v2
- name: install all build dependencies except libtorrent from Ubuntu repos
run: |
sudo apt update
sudo apt install \
build-essential cmake git ninja-build pkg-config \
libssl-dev libgeoip-dev zlib1g-dev \
libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev
# sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old...
# this will be installed under /opt/qt514. CMake will still find it automatically without additional hints
# to speed up the process, only the required components are installed rather than the full qt514-meta-full metapackage
- name: install Qt 5.14.2 from an external PPA
run: |
sudo add-apt-repository ppa:beineri/opt-qt-5.14.2-focal
sudo apt install qt514base qt514svg qt514tools
- name: install libtorrent from source
run: |
git clone https://github.com/arvidn/libtorrent && cd libtorrent
git checkout ${{ env.LIBTORRENT_VERSION_TAG }}
cmake -B cmake-build-dir -G "Ninja" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-Ddeprecated-functions=OFF \
--graphviz=cmake-build-dir/target_graph.dot
cmake --build cmake-build-dir
sudo cmake --install cmake-build-dir --prefix /usr/local
- name: build qBittorrent
run: |
cmake -B build -G "Ninja" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-D${{ matrix.qbt_gui }} \
-DVERBOSE_CONFIGURE=ON \
--graphviz=build/target_graph.dot
cmake --build build
- name: install qBittorrent
run: sudo cmake --install build --prefix /usr/local
- name: upload artifact as zip
uses: actions/upload-artifact@v2
with:
name: qBittorrent-CI_${{ matrix.os }}-x64_${{ matrix.qbt_gui }}
path: |
build/compile_commands.json
build/install_manifest.txt
build/target_graph.dot
build/qbittorrent
build/qbittorrent-nox
libtorrent/cmake-build-dir/compile_commands.json
libtorrent/cmake-build-dir/target_graph.dot
ci_windows:
name: Windows + vcpkg
runs-on: windows-2019
defaults:
run:
shell: pwsh
steps:
- name: checkout repository
uses: actions/checkout@v2
# - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement)
- name: install additional required packages with chocolatey
run: |
choco install ninja
- name: setup vcpkg (cached, if possible)
uses: lukka/run-vcpkg@v7
with:
vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }}
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
setupOnly: true
# Tell vcpkg to only build Release variants of the dependencies
- name: configure vcpkg triplet overlay for release builds only
run: |
New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory
Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake `
${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake
Add-Content ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake `
-Value "set(VCPKG_BUILD_TYPE release)"
# clear buildtrees after each package installation to reduce disk space requirements
- name: install dependencies via vcpkg
run: |
$packages = `
"boost-circular-buffer:x64-windows-static-release",
"libtorrent:x64-windows-static-release",
"qt5-base:x64-windows-static-release",
"qt5-svg:x64-windows-static-release",
"qt5-tools:x64-windows-static-release",
"qt5-winextras:x64-windows-static-release"
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade `
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
--no-dry-run
foreach($package in $packages)
{
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package `
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
--clean-after-build
}
# NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now
- name: setup devcmd
uses: ilammy/msvc-dev-cmd@v1
- name: build qBittorrent
shell: cmd
run: |
cmake -B build -G "Ninja" ^
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ^
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^
-DVERBOSE_CONFIGURE=ON ^
-DMSVC_RUNTIME_DYNAMIC=OFF ^
--graphviz=build\target_graph.dot
cmake --build build
- name: upload artifact as zip
uses: actions/upload-artifact@v2
with:
name: qBittorrent-CI_Windows-x64
path: |
build/compile_commands.json
build/target_graph.dot
build/qbittorrent.exe
build/qbittorrent.pdb
dist/windows/qt.conf
ci_macos:
name: macOS + vcpkg
strategy:
matrix:
qbt_gui: ["GUI=ON", "GUI=OFF"]
fail-fast: false
runs-on: macos-10.15
defaults:
run:
shell: pwsh
steps:
- name: checkout repository
uses: actions/checkout@v2
# - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement)
# - automake is needed for the installation the vcpkg installation of fontconfig, a dependency of qt5-base
- name: install additional required packages with homebrew
shell: bash
run: |
brew install automake ninja
- name: setup vcpkg (cached, if possible)
uses: lukka/run-vcpkg@v7
with:
vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }}
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
setupOnly: true
- name: configure vcpkg triplet overlay for release builds only
run: |
New-Item -Path ${{ github.workspace }} -Name "triplets_overlay" -ItemType Directory
Copy-Item ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-osx.cmake `
${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake
Add-Content ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake `
-Value "set(VCPKG_BUILD_TYPE release)","set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15)"
# NOTE: Avoids a libtorrent ABI issue. See https://github.com/arvidn/libtorrent/issues/4965
- name: force AppleClang to compile libtorrent with the same C++ standard as qBittorrent
run: |
(Get-Content -path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake).Replace( `
'${FEATURE_OPTIONS}', '${FEATURE_OPTIONS} -DCMAKE_CXX_STANDARD=17') `
| Set-Content -Path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake
- name: install dependencies via vcpkg
run: |
$packages = `
"boost-circular-buffer:x64-osx-release",
"libtorrent:x64-osx-release",
"qt5-base:x64-osx-release",
"qt5-svg:x64-osx-release",
"qt5-tools:x64-osx-release",
"qt5-macextras:x64-osx-release"
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg upgrade `
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
--no-dry-run
foreach($package in $packages)
{
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package `
--overlay-triplets=${{ github.workspace }}/triplets_overlay `
--clean-after-build
}
- name: build qBittorrent
shell: bash
run: |
cmake -B build -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_MACOS }}/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-osx-release \
-D${{ matrix.qbt_gui }} \
-DVERBOSE_CONFIGURE=ON \
--graphviz=build/target_graph.dot
cmake --build build
- name: upload artifact as zip
uses: actions/upload-artifact@v2
with:
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}
path: |
build/compile_commands.json
build/target_graph.dot
build/qbittorrent.app
build/qbittorrent-nox.app

25
.github/workflows/ci_file_health.yaml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: CI - File health
on: [pull_request, push]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
jobs:
ci:
name: Check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install tools
uses: actions/setup-python@v4
with:
python-version: "*"
- name: Check files
uses: pre-commit/action@v3.0.0

148
.github/workflows/ci_macos.yaml vendored Normal file
View File

@@ -0,0 +1,148 @@
name: CI - macOS
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
jobs:
ci:
name: Build
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
libt_version: ["2.0.8", "1.2.18"]
qbt_gui: ["GUI=ON", "GUI=OFF"]
qt_version: ["5.15.2", "6.4.0"]
exclude:
- libt_version: "1.2.18"
qt_version: "6.4.0"
env:
boost_path: "${{ github.workspace }}/../boost"
openssl_root: /usr/local/opt/openssl@1.1
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
export \
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 \
HOMEBREW_NO_INSTALL_CLEANUP=1
brew update > /dev/null
brew install \
cmake ninja \
openssl@1.1 zlib
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
with:
update_packager_index: false
- name: Install boost
run: |
curl \
-L \
-o "${{ runner.temp }}/boost.tar.bz2" \
"https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.bz2"
tar -xf "${{ runner.temp }}/boost.tar.bz2" -C "${{ github.workspace }}/.."
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{ matrix.qt_version }}
archives: qtbase qtdeclarative qtsvg qttools
# Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0
- name: Install libtorrent
run: |
git clone \
--branch v${{ matrix.libt_version }} \
--depth 1 \
--recurse-submodules \
https://github.com/arvidn/libtorrent.git
cd libtorrent
cmake \
-B build \
-G "Ninja" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBOOST_ROOT="${{ env.boost_path }}" \
-Ddeprecated-functions=OFF \
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}"
cmake --build build
sudo cmake --install build
- name: Build qBittorrent (Qt5)
if: ${{ startsWith(matrix.qt_version, 5) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBOOST_ROOT="${{ env.boost_path }}" \
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \
-DTESTING=ON \
-DVERBOSE_CONFIGURE=ON \
-D${{ matrix.qbt_gui }}
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
- name: Build qBittorrent (Qt6)
if: ${{ startsWith(matrix.qt_version, 6) }}
run: |
CXXFLAGS="$CXXFLAGS -Wno-gnu-zero-variadic-macro-arguments -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBOOST_ROOT="${{ env.boost_path }}" \
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \
-DQT6=ON \
-DTESTING=ON \
-DVERBOSE_CONFIGURE=ON \
-D${{ matrix.qbt_gui }}
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
- name: Prepare build artifacts
run: |
# create .dmg
appName="qbittorrent"
if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then
appName="qbittorrent-nox"
fi
pushd build
macdeployqt "$appName.app" -dmg -no-strip
popd
# prepare upload folder
mkdir upload
cp "build/$appName.dmg" upload
mkdir upload/cmake
cp build/compile_commands.json upload/cmake
mkdir upload/cmake/libtorrent
cp libtorrent/build/compile_commands.json upload/cmake/libtorrent
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
path: upload

146
.github/workflows/ci_ubuntu.yaml vendored Normal file
View File

@@ -0,0 +1,146 @@
name: CI - Ubuntu
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
jobs:
ci:
name: Build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
libt_version: ["2.0.8", "1.2.18"]
qbt_gui: ["GUI=ON", "GUI=OFF"]
qt_version: ["5.15.2", "6.2.0"]
exclude:
- libt_version: "1.2.18"
qt_version: "6.2.0"
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update
sudo apt install \
build-essential cmake ninja-build pkg-config \
libboost-dev libssl-dev libxkbcommon-x11-dev zlib1g-dev
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
with:
update_packager_index: false
ccache_options: |
max_size=2G
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{ matrix.qt_version }}
archives: icu qtbase qtsvg qttools
- name: Install libtorrent
run: |
git clone \
--branch v${{ matrix.libt_version }} \
--depth 1 \
--recurse-submodules \
https://github.com/arvidn/libtorrent.git
cd libtorrent
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-Ddeprecated-functions=OFF
cmake --build build
sudo cmake --install build
- name: Build qBittorrent (Qt5)
if: ${{ startsWith(matrix.qt_version, 5) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DTESTING=ON \
-DVERBOSE_CONFIGURE=ON \
-D${{ matrix.qbt_gui }}
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
DESTDIR="qbittorrent" cmake --install build
- name: Build qBittorrent (Qt6)
if: ${{ startsWith(matrix.qt_version, 6) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DQT6=ON \
-DTESTING=ON \
-DVERBOSE_CONFIGURE=ON \
-D${{ matrix.qbt_gui }}
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
DESTDIR="qbittorrent" cmake --install build
- name: Prepare build artifacts
run: |
mkdir upload
mkdir upload/cmake
cp build/compile_commands.json upload/cmake
mkdir upload/cmake/libtorrent
cp libtorrent/build/compile_commands.json upload/cmake/libtorrent
- name: 'AppImage: Prepare env'
run: |
sudo apt install libfuse2
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage
chmod +x linuxdeploy-x86_64.AppImage
chmod +x linuxdeploy-plugin-qt-x86_64.AppImage
chmod +x linuxdeploy-plugin-appimage-x86_64.AppImage
- name: 'AppImage: Prepare nox'
if: matrix.qbt_gui == 'GUI=OFF'
run: |
mkdir -p qbittorrent/usr/share/icons/hicolor/scalable/apps/
mkdir -p qbittorrent/usr/share/applications/
cp dist/unix/menuicons/scalable/apps/qbittorrent.svg qbittorrent/usr/share/icons/hicolor/scalable/apps/qbittorrent.svg
cp .github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop qbittorrent/usr/share/applications/org.qbittorrent.qBittorrent.desktop
- name: 'AppImage: Package'
run: |
./linuxdeploy-x86_64.AppImage --appdir=qbittorrent --plugin qt
rm qbittorrent/apprun-hooks/*
cp .github/workflows/helper/appimage/export_vars.sh qbittorrent/apprun-hooks/export_vars.sh
NO_APPSTREAM=1 \
OUTPUT=upload/qbittorrent-CI_Ubuntu_x86_64.AppImage \
./linuxdeploy-x86_64.AppImage --appdir=qbittorrent --output appimage
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
path: upload

38
.github/workflows/ci_webui.yaml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: CI - WebUI
on: [pull_request, push]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
jobs:
ci:
name: Check
runs-on: ubuntu-latest
defaults:
run:
working-directory: src/webui/www
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup nodejs
uses: actions/setup-node@v3
with:
node-version: 'lts/*'
- name: Install tools
run: npm install
- name: Lint code
run: npm run lint
- name: Format code
run: |
npm run format
git diff --exit-code

168
.github/workflows/ci_windows.yaml vendored Normal file
View File

@@ -0,0 +1,168 @@
name: CI - Windows
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
jobs:
ci:
name: Build
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
libt_version: ["2.0.8", "1.2.18"]
env:
boost_path: "${{ github.workspace }}/../boost"
libtorrent_path: "${{ github.workspace }}/libtorrent"
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup devcmd
uses: ilammy/msvc-dev-cmd@v1
- name: Install build tools
run: |
choco install ninja
# use the preinstalled vcpkg from image
# https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#package-management
- name: Setup vcpkg
uses: lukka/run-vcpkg@v10
with:
vcpkgDirectory: C:/vcpkg
doNotUpdateVcpkg: true # the preinstalled vcpkg is updated regularly
- name: Install dependencies from vcpkg
run: |
# tell vcpkg to only build Release variants of the dependencies
New-Item `
-Path "${{ github.workspace }}" `
-Name "triplets_overlay" `
-ItemType Directory
Copy-Item `
"${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake" `
"${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake"
Add-Content `
"${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake" `
-Value "set(VCPKG_BUILD_TYPE release)"
# clear buildtrees after each package installation to reduce disk space requirements
$packages = `
"openssl:x64-windows-static-release",
"zlib:x64-windows-static-release"
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade `
--overlay-triplets="${{ github.workspace }}/triplets_overlay" `
--no-dry-run
${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install `
--overlay-triplets="${{ github.workspace }}/triplets_overlay" `
--clean-after-build `
$packages
- name: Install boost
run: |
aria2c `
"https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.7z" `
-d "${{ runner.temp }}" `
-o "boost.7z"
7z x "${{ runner.temp }}/boost.7z" -o"${{ github.workspace }}/.."
move "${{ github.workspace }}/../boost_*" "${{ env.boost_path }}"
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: "6.4.0"
archives: qtbase qtsvg qttools
- name: Install libtorrent
run: |
git clone `
--branch v${{ matrix.libt_version }} `
--depth 1 `
--recurse-submodules `
https://github.com/arvidn/libtorrent.git
cd libtorrent
cmake `
-B build `
-G "Ninja" `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_CXX_FLAGS=/guard:cf `
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
-DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}" `
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
-DBOOST_ROOT="${{ env.boost_path }}" `
-DBUILD_SHARED_LIBS=OFF `
-Ddeprecated-functions=OFF `
-Dstatic_runtime=ON `
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release
cmake --build build
cmake --install build
- name: Build qBittorrent
run: |
cmake `
-B build `
-G "Ninja" `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_CXX_FLAGS="/WX" `
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
-DBOOST_ROOT="${{ env.boost_path }}" `
-DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/lib/cmake/LibtorrentRasterbar" `
-DMSVC_RUNTIME_DYNAMIC=OFF `
-DQT6=ON `
-DTESTING=ON `
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release `
-DVERBOSE_CONFIGURE=ON `
--graphviz=build/target_graph.dot
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
- name: Prepare build artifacts
run: |
mkdir upload
copy build/qbittorrent.exe upload
copy build/qbittorrent.pdb upload
copy dist/windows/qt.conf upload
# runtimes
copy "${{ env.Qt6_DIR }}/bin/Qt6Core.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Gui.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Network.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Sql.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Svg.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Widgets.dll" upload
copy "${{ env.Qt6_DIR }}/bin/Qt6Xml.dll" upload
mkdir upload/plugins/iconengines
copy "${{ env.Qt6_DIR }}/plugins/iconengines/qsvgicon.dll" upload/plugins/iconengines
mkdir upload/plugins/imageformats
copy "${{ env.Qt6_DIR }}/plugins/imageformats/qico.dll" upload/plugins/imageformats
copy "${{ env.Qt6_DIR }}/plugins/imageformats/qsvg.dll" upload/plugins/imageformats
mkdir upload/plugins/platforms
copy "${{ env.Qt6_DIR }}/plugins/platforms/qwindows.dll" upload/plugins/platforms
mkdir upload/plugins/sqldrivers
copy "${{ env.Qt6_DIR }}/plugins/sqldrivers/qsqlite.dll" upload/plugins/sqldrivers
mkdir upload/plugins/styles
copy "${{ env.Qt6_DIR }}/plugins/styles/qwindowsvistastyle.dll" upload/plugins/styles
mkdir upload/plugins/tls
copy "${{ env.Qt6_DIR }}/plugins/tls/qschannelbackend.dll" upload/plugins/tls
# cmake additionals
mkdir upload/cmake
copy build/compile_commands.json upload/cmake
copy build/target_graph.dot upload/cmake
mkdir upload/cmake/libtorrent
copy libtorrent/build/compile_commands.json upload/cmake/libtorrent
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}
path: upload

79
.github/workflows/coverity-scan.yml vendored Normal file
View File

@@ -0,0 +1,79 @@
name: Coverity Scan
on:
schedule:
- cron: '0 0 1 * *' # Monthly (1st day of month at midnight)
workflow_dispatch: # Mainly for testing. Don't forget the Coverity usage limits.
permissions: {}
jobs:
coverity_scan:
name: Scan
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update
sudo apt install \
build-essential cmake ninja-build pkg-config \
libboost-dev libssl-dev zlib1g-dev
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: "6.4.0"
archives: icu qtbase qtsvg qttools
- name: Install libtorrent
run: |
git clone \
--branch "v2.0.8" \
--depth 1 \
--recurse-submodules \
https://github.com/arvidn/libtorrent.git
cd libtorrent
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-Ddeprecated-functions=OFF
cmake --build build
sudo cmake --install build
- name: Download Coverity Build Tool
run: |
wget \
-q \
https://scan.coverity.com/download/linux64 \
--post-data "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=qbittorrent%2FqBittorrent" \
-O coverity_tool.tgz
mkdir coverity_tool
tar xzf coverity_tool.tgz --strip 1 -C coverity_tool
- name: Build qBittorrent
run: |
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DGUI=ON \
-DQT6=ON \
-DVERBOSE_CONFIGURE=ON
export PATH="$(pwd)/coverity_tool/bin:$PATH"
cov-build --dir cov-int cmake --build build
- name: Submit the result to Coverity Scan
run: |
tar caf qbittorrent.xz cov-int
curl \
--form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \
--form email=sledgehammer999@qbittorrent.org \
--form file=@qbittorrent.xz \
--form version="$(git rev-parse --short HEAD)" \
--form description="master" \
https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent

View File

@@ -1,85 +0,0 @@
#!/usr/bin/env zsh
set -o nounset
# Assumption: file names don't contain `:` (for the `cut` invocation).
# Safe to assume, as such a character in a filename would cause trouble on Windows, a platform we support
# any regression turn this non-zero
regressions=0
# exclusions (these are just grep extended regular expressions to match against paths relative to the root of the repository)
exclusions_nonutf8='(.*(7z|gif|ic(ns|o)|png|qm|zip))'
exclusions_bom='src/base/unicodestrings.h'
exclusions_tw='(*.ts)|src/webui/www/private/scripts/lib/mootools-1.2-more.js'
exclusions_trailing_newline='configure'
exclusions_no_lf='(*.ts)|(.*svg)|compile_commands.json|src/webui/www/private/scripts/lib/mootools-1.2-(core-yc.js|more.js)'
echo -e "\n*** Detect files not encoded in UTF-8 ***\n"
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
| grep -v -e "charset=us-ascii" -e "charset=utf-8" | cut -d ":" -f 1 \
| grep -E -v -e "${exclusions_nonutf8}" \
| tee >(echo -e "--> Files not encoded in UTF-8: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
echo -e "\n*** Detect files encoded in UTF-8 with BOM ***\n"
grep --exclude-dir={.git,build} -rIl $'\xEF\xBB\xBF' | sort \
| grep -E -v -e "${exclusions_bom}" \
| tee >(echo -e "--> Files encoded in UTF-8 with BOM: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
echo -e "\n*** Detect usage of CR byte ***\n"
grep --exclude-dir={.git,build} -rIlU $'\x0D' | sort \
| tee >(echo -e "--> Usage of CR byte: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
echo -e "\n*** Detect trailing whitespace in lines ***\n"
grep --exclude-dir={.git,build} -rIl "[[:blank:]]$" | sort \
| grep -E -v -e "${exclusions_tw}" \
| tee >(echo -e "--> Trailing whitespace in lines: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0';
regressions=$((regressions+$?))
echo -e "\n*** Detect too many trailing newlines ***\n"
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
| grep -e "charset=us-ascii" -e "charset=utf-8" | cut -d ":" -f 1 \
| grep -E -v -e "${exclusions_trailing_newline}" \
| xargs -L1 -I my_input bash -c 'test "$(tail -q -c2 "my_input" | hexdump -C | grep "0a 0a")" && echo "my_input"' \
| tee >(echo -e "--> Too many trailing newlines: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
echo -e "\n*** Detect no trailing newline ***\n"
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
| grep -e "charset=us-ascii" -e "charset=utf-8" | cut -d ":" -f 1 \
| grep -E -v -e "${exclusions_no_lf}" \
| xargs -L1 -I my_input bash -c 'test "$(tail -q -c1 "my_input" | hexdump -C | grep "0a")" || echo "my_input"' \
| tee >(echo -e "--> No trailing newline: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
echo -e "\n*** Detect translation closing tag in new line ***\n"
grep --exclude-dir={.git,build} -nri "^</translation>" | sort \
| cut -d ":" -f 1,2 \
| tee >(echo -e "--> Translation closing tag in new line: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
| xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
regressions=$((regressions+$?))
if [ "$regressions" -ne 0 ]; then
regressions=1
echo "\nFile health regressions found. Please fix them (or add them as exclusions)."
else
echo "All OK, no file health regressions found."
fi
exit $regressions;

View File

@@ -1,22 +0,0 @@
name: GitHub Actions file health check
on: [pull_request, push]
jobs:
check_file_health:
name: Check file health
runs-on: ubuntu-20.04
steps:
- name: checkout repository
uses: actions/checkout@v2
- name: install zsh
run: |
sudo apt update
sudo apt install zsh
- name: run check file health script
run: |
./.github/workflows/file_health.sh

View File

@@ -0,0 +1,11 @@
# this file is called from AppRun so 'root_dir' will point to where AppRun is
root_dir="$(readlink -f "$(dirname "$0")")"
# Insert the default values because after the test we prepend our path
# and it will create problems with DEs (eg KDE) that don't set the variable
# and rely on the default paths
if [[ -z ${XDG_DATA_DIRS} ]]; then
XDG_DATA_DIRS="/usr/local/share/:/usr/share/"
fi
export XDG_DATA_DIRS="${root_dir}/usr/share:${XDG_DATA_DIRS}"

View File

@@ -0,0 +1,6 @@
[Desktop Entry]
Name=qBittorrent
Exec=qbittorrent-nox %U
Icon=qbittorrent
Type=Application
Categories=Network

25
.github/workflows/stale_bot.yaml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Stale bot
on:
schedule:
- cron: '0 0 * * *'
permissions:
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Mark and close stale PRs
uses: actions/stale@v5
with:
stale-pr-message: "This PR is stale because it has been 60 days with no activity. This PR will be automatically closed within 7 days if there is no further activity."
close-pr-message: "This PR was closed because it has been stalled for some time with no activity."
days-before-stale: -1 # avoid marking issues
days-before-pr-stale: 60
days-before-close: -1 # avoid closing issues
days-before-pr-close: 7
exempt-all-pr-assignees: true # avoid stale for all PR with assignees
exempt-all-pr-milestones: true # avoid stale for all PR with milestones
operations-per-run: 200

View File

@@ -1,31 +0,0 @@
name: WebUI CI
on: [pull_request, push]
jobs:
check_webui:
name: Check WebUI
runs-on: ubuntu-20.04
defaults:
run:
working-directory: src/webui/www
steps:
- name: checkout repository
uses: actions/checkout@v2
- name: setup nodejs
uses: actions/setup-node@v2
with:
node-version: '14'
- name: install tools
run: npm install
- name: lint code
run: npm run lint
- name: format code
run: |
npm run format
git diff --exit-code

59
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,59 @@
repos:
- repo: local
hooks:
- id: check-translation-tag
name: Check newline characters in <translation> tag
entry: .github/workflows/check_translation_tag.py
language: script
exclude: |
(?x)^(
src/lang/.*
)$
types_or:
- ts
- repo: https://github.com/pre-commit/pre-commit-hooks.git
rev: v4.3.0
hooks:
- id: check-json
name: Check JSON files
- id: check-yaml
name: Check YAML files
- id: fix-byte-order-marker
name: Check file encoding (UTF-8 without BOM)
exclude: |
(?x)^(
src/base/unicodestrings.h
)$
- id: mixed-line-ending
name: Check line ending character (LF)
args: ["--fix=lf"]
exclude: |
(?x)^(
compile_commands.json |
src/webui/www/private/scripts/lib/.*
)$
- id: end-of-file-fixer
name: Check trailing newlines
exclude: |
(?x)^(
compile_commands.json |
configure |
src/webui/www/private/scripts/lib/.*
)$
exclude_types:
- svg
- ts
- id: trailing-whitespace
name: Check trailing whitespaces
exclude: |
(?x)^(
src/webui/www/private/scripts/lib/.*
)$
exclude_types:
- ts

View File

@@ -1,194 +0,0 @@
language: cpp
os:
- linux
- osx
dist: focal
osx_image: xcode12.2
env:
matrix:
- libt_branch=RC_1_2 gui=true build_system=qmake
- libt_branch=RC_1_2 gui=false build_system=qmake
- libt_branch=RC_1_2 gui=true build_system=cmake
- libt_branch=RC_1_2 gui=false build_system=cmake
global:
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
- coverity_branch: coverity_scan
jobs:
include:
- env: libt_branch=RC_2_0 gui=true build_system=qmake
os: linux
notifications:
email:
on_success: change
on_failure: change
cache:
ccache: true
directories:
- $HOME/travis/deb
- $HOME/travis/brew
addons:
coverity_scan:
project:
name: "qbittorrent/qBittorrent"
description: "Build submitted via Travis CI"
build_command_prepend: "./bootstrap.sh && ./configure $qmake_conf"
build_command: "make -j2"
branch_pattern: $coverity_branch
notification_email: sledgehammer999@qbittorrent.org
apt:
sources:
# sources list: https://github.com/travis-ci/apt-source-safelist/blob/master/ubuntu.json
- sourceline: 'deb https://apt.kitware.com/ubuntu/ focal main'
key_url: 'https://apt.kitware.com/keys/kitware-archive-latest.asc'
- sourceline: 'ppa:beineri/opt-qt-5.14.2-focal'
packages:
# packages list: https://github.com/travis-ci/apt-package-safelist/blob/master/ubuntu-trusty
- [autoconf, automake, cmake, colormake]
- [libboost-dev, libboost-system-dev]
- libssl-dev
- [qt514base, qt514svg, qt514tools]
- zlib1g-dev
before_install:
# only allow specific build for coverity scan, others will stop
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [ "$TRAVIS_OS_NAME" = "linux" -a "$libt_branch" = "RC_1_2" -a "$gui" = "true" -a "$build_system" = "qmake" ]; then exit ; fi
- shopt -s expand_aliases
- alias make="colormake -j2" # Using nprocs/2 sometimes may fail (gcc is killed by system)
- qbt_path="$HOME/qbt_install"
- qmake_conf="$qmake_conf --prefix=$qbt_path"
- cmake_conf="$cmake_conf -DCMAKE_INSTALL_PREFIX=$qbt_path"
# options for specific branches
- |
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
# setup virtual display for after_success target
if [ "$gui" = "true" ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
# CMake from Kitware is installed in /usr/bin
# TravisCI installs its own cmake to another location which ovverides other installations
# if they don't call the new binary directly
alias cmake="/usr/bin/cmake"
# Qt 5.14.2
PATH="/opt/qt514/bin:$PATH"
qmake_conf="$qmake_conf PKG_CONFIG_PATH=/opt/qt514/lib/pkgconfig:$PKG_CONFIG_PATH"
cmake_conf="$cmake_conf PKG_CONFIG_PATH=/opt/qt514/lib/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
fi
- |
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedefs"
openssl_root_path="/usr/local/opt/openssl"
qmake_conf="$qmake_conf PKG_CONFIG_PATH=$openssl_root_path/lib/pkgconfig:$PKG_CONFIG_PATH"
cmake_conf="$cmake_conf -DOPENSSL_ROOT_DIR=$openssl_root_path"
fi
- |
if [ "$gui" = "false" ]; then
qmake_conf="$qmake_conf --disable-gui"
cmake_conf="$cmake_conf -DGUI=OFF"
fi
# print settings
- echo $libt_branch
- echo $gui
- echo $build_system
- echo $qmake_conf
- echo $cmake_conf
install:
- |
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
# dependencies
PATH="/usr/local/opt/ccache/libexec:$PATH"
brew update > /dev/null
brew upgrade cmake
brew install ccache colormake boost openssl qt@5 zlib
brew link --force qt@5 zlib
if [ "$build_system" = "cmake" ]; then
sudo ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
sudo ln -s /usr/local/opt/qt/plugins /usr/local/plugins
fi
fi
- |
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
export use_ccache=true
ccache -M 512M
ccache -V && ccache --show-stats && ccache --zero-stats
fi
- |
if [ "$libt_branch" = "RC_1_2" ]; then
pushd "$HOME"
git clone --single-branch --branch RC_1_2 https://github.com/arvidn/libtorrent.git
cd libtorrent
git checkout tags/v1.2.13
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-Ddeprecated-functions=OFF \
-DOPENSSL_ROOT_DIR="$openssl_root_path" \
./
make
sudo make install
popd
elif [ "$libt_branch" = "RC_2_0" ]; then
pushd "$HOME"
git clone --single-branch --branch RC_2_0 https://github.com/arvidn/libtorrent.git
cd libtorrent
git checkout tags/v2.0.3
git submodule update --init --recursive
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-Ddeprecated-functions=OFF \
-DOPENSSL_ROOT_DIR="$openssl_root_path" \
./
make
sudo make install
popd
fi
script:
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # skip usual build when running coverity scan
- |
cd "$TRAVIS_BUILD_DIR"
if [ "$build_system" = "qmake" ]; then
# scan only as lupdate is prone to hang
lupdate -extensions c,cpp,h,hpp,ui ./
./bootstrap.sh
./configure $qmake_conf CXXFLAGS="$CXXFLAGS"
else
mkdir build && cd build
cmake $cmake_conf ../
fi
- make
- make install
after_success:
- if [ "$gui" = "true" ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
- |
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
if [ "$build_system" = "qmake" ]; then
macdeployqt "$TRAVIS_BUILD_DIR/src/$qbt_exe.app"
cd "$TRAVIS_BUILD_DIR/src/$qbt_exe.app/Contents/MacOS"
else
cd "$qbt_path/$qbt_exe.app/Contents/MacOS"
fi
fi
- ./$qbt_exe --version
after_script:
- if [ "$use_ccache" = true ]; then ccache --show-stats ; fi

View File

@@ -1,27 +1,24 @@
[main] [main]
host = https://www.transifex.com host = https://www.transifex.com
[qbittorrent.qbittorrent_master] [o:sledgehammer999:p:qbittorrent:r:qbittorrent_v45x]
file_filter = src/lang/qbittorrent_<lang>.ts file_filter = src/lang/qbittorrent_<lang>.ts
lang_map = pt: pt_PT source_file = src/lang/qbittorrent_en.ts
source_file = src/lang/qbittorrent_en.ts source_lang = en
source_lang = en type = QT
type = QT
minimum_perc = 23 minimum_perc = 23
mode = developer lang_map = pt: pt_PT, zh: zh_CN
[qbittorrent.qbittorrentdesktop_master] [o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v45x]
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop file_filter = src/webui/www/translations/webui_<lang>.ts
source_lang = en source_file = src/webui/www/translations/webui_en.ts
type = DESKTOP source_lang = en
type = QT
minimum_perc = 23 minimum_perc = 23
mode = developer lang_map = pt: pt_PT, zh: zh_CN
[qbittorrent.qbittorrent_webui] [o:sledgehammer999:p:qbittorrent:r:qbittorrentdesktop_master]
file_filter = src/webui/www/translations/webui_<lang>.ts source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
lang_map = pt: pt_PT source_lang = en
source_file = src/webui/www/translations/webui_en.ts type = DESKTOP
source_lang = en
type = QT
minimum_perc = 23 minimum_perc = 23
mode = developer

83
AUTHORS
View File

@@ -29,16 +29,8 @@ Code from other projects:
copyright: Dan Haim <negativeiq@users.sourceforge.net> copyright: Dan Haim <negativeiq@users.sourceforge.net>
license: BSD license: BSD
* file src/app/stacktrace.h
copyright: Timo Bingmann from http://idlebox.net/
license: WTFPL v2.0
* file src/app/stacktrace_win.h
copyright: Quassel Project
license: GPLv2/3
Images Authors: Images Authors:
* files: src/icons/skin/qbittorrent-tray.svg (and related pngs) * files: src/icons/qbittorrent-tray.svg
copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified) copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified)
license: GPLv2+ license: GPLv2+
@@ -46,56 +38,53 @@ Images Authors:
copyright: 'uknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlayed above it. copyright: 'uknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlayed above it.
license: GPLv3+ license: GPLv3+
* files: src/icons/*.png
copyright: Gnome Icon Theme
license: GPLv2
url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
* files: src/oxygen/*.png
copyright: Oxygen Icon Theme (KDE)
license: LGPL
url: http://www.oxygen-icons.org
* files: src/icons/flags/*.svg * files: src/icons/flags/*.svg
copyright: lipis/flag-icon-css copyright: lipis/flag-icons
license: MIT license: MIT
url: https://github.com/lipis/flag-icon-css/ url: https://github.com/lipis/flag-icons/
* files: src/icons/skin/*.png * file: src/webui/www/private/images/tabs.gif
files: src/menuicons/YYxYY/*.png
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
license: GPLv2
* file: src/icons/tabs.gif
copyright: Greg Houston <gregory.houston@gmail.com> copyright: Greg Houston <gregory.houston@gmail.com>
license: MIT license: MIT
* file: src/icons/skin/qbittorrent_mono* * file: src/icons/qbittorrent-tray-dark.svg src/icons/qbittorrent-tray-light.svg
copyright: Daniel Eguren <deguren@gmail.com> copyright: Daniel Eguren <deguren@gmail.com>
modified by: Nowshed H. Imran <nowshed.imran@gmail.com> (@now-im)
license: LGPL license: LGPL
* file: src/search_engine/engines/btjunkie.png * folder: src/icons/
copyright: Downloaded from btjunkie.org files: application-rss+xml.svg, application-x-mswinurl.svg, connected.svg, disconnected.svg, checked-completed.svg, configure.svg,
edit-copy.svg, edit-rename.svg, folder-documents.svg, folder-new.svg, folder-remote.svg, go-bottom.svg, go-down.svg, go-top.svg,
go-up.svg, hash.svg, inode-directory.svg, insert-link.svg, kt-magnet.svg, media-playback-pause.svg, media-playback-start.svg,
media-seek-forward.svg, network-connect.svg, object-locked.svg, queued.svg, ratio.svg, reannounce.svg, slow_off.svg, slow.svg,
speedometer.svg, system-log-out.svg, tags.svg, task-complete.svg, task-reject.svg, tracker-error.svg, tracker-warning.svg,
trackerless.svg, trackers.svg, view-categories.svg
copyright: Nowshed H. Imran <nowshed.imran@gmail.com> (@now-im) modified from La-Capitaine icon theme (https://github.com/keeferrourke/la-capitaine-icon-theme)
license: GPLv3+
* file: src/search_engine/engines/isohunt.png * folder: src/icons/
copyright: Downloaded from isohunt.com files: application-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg, filter-all.svg, firewalled.svg,
help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg, name.svg, network-server.svg,
office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg, preferences-system-network.svg, security-high.svg,
security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg, user-group-new.svg, view-preview.svg, view-refresh.svg,
view-statistics.svg, wallet-open.svg, webuiapplication-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg,
filter-all.svg, firewalled.svg, help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg,
name.svg, network-server.svg, office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg,
preferences-system-network.svg, security-high.svg, security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg,
user-group-new.svg, view-preview.svg, view-refresh.svg, view-statistics.svg, wallet-open.svg, webui.svg
copyright: Nowshed H. Imran <nowshed.imran@gmail.com> (@now-im) modified from Ionicons icon theme (https://github.com/ionic-team/ionicons)
license: MIT
* file: src/search_engine/engines/mininova.png * folder: src/icons/
copyright: Downloaded from mininova.org files: force-recheck.svg
copyright: Nowshed H. Imran <nowshed.imran@gmail.com> (@now-im) modified from Font-Awesome icon theme (https://github.com/FortAwesome/Font-Awesome)
license: CC BY 4.0 License
* file: src/search_engine/engines/piratebay.png * folder: src/icons/
copyright: Downloaded from thepiratebay.org files: downloading.svg, edit-clear.svg, error.svg, filter-active.svg, filter-inactive.svg, filter-stalled.svg, kt-set-max-download-speed.svg,
kt-set-max-upload-speed.svg, list-add.svg, preferences-web-browser-cookies.svg, stalledDL.svg, stalledUP.svg
* file: src/search_engine/engines/torrentreactor.png copyright: Nowshed H. Imran <nowshed.imran@gmail.com> (@now-im)
copyright: Downloaded from torrentreactor.net license: BSD 2-Clause License
* file: src/icons/oxygen/checked.png
copyright: Victor Buinsky <allok.victor@gmail.com>
* file: src/icons/skin/ratio.png
copyright: Fatcow Web Hosting
license: Creative Commons Attribution 3.0 License
url: http://www.fatcow.com/free-icons
Translations authors: Translations authors:
* files: src/lang/*.ts * files: src/lang/*.ts

View File

@@ -1,64 +1,65 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
project(qBittorrent project(qBittorrent
DESCRIPTION "The qBittorrent BitTorrent client" DESCRIPTION "The qBittorrent BitTorrent client"
HOMEPAGE_URL "https://www.qbittorrent.org/" HOMEPAGE_URL "https://www.qbittorrent.org/"
LANGUAGES CXX LANGUAGES CXX
) )
# use CONFIG mode first in find_package # version requirements - older versions may work, but you are on your own
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) set(minBoostVersion 1.71)
# version requirements - older vesions may work, but you are on your own set(minQt5Version 5.15.2)
set(minBoostVersion 1.65) set(minQt6Version 6.2)
set(minQtVersion 5.14)
set(minOpenSSLVersion 1.1.1) set(minOpenSSLVersion 1.1.1)
set(minLibtorrentVersion 1.2.13) set(minLibtorrent1Version 1.2.18)
set(minLibtorrentVersion 2.0.8)
set(minZlibVersion 1.2.11) set(minZlibVersion 1.2.11)
# features (some are platform-specific)
include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19 include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19
include(GNUInstallDirs)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
include(FeatureSummary) include(FeatureSummary)
include(FeatureOptionsSetup) include(FeatureOptionsSetup)
feature_option(STACKTRACE "Enable stacktraces" ON)
# features, list is loosely sorted by user's interests
feature_option(GUI "Build GUI application" ON) feature_option(GUI "Build GUI application" ON)
feature_option(WEBUI "Enables built-in HTTP server for headless use" ON) feature_option(WEBUI "Enable built-in HTTP server for remote control" ON)
feature_option(QT6 "Build with Qt 6 instead of Qt 5" OFF)
feature_option(STACKTRACE "Enable stacktrace support" ON)
feature_option(TESTING "Build internal testing suite" OFF)
feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF) feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux") if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
feature_option_dependent(DBUS feature_option_dependent(DBUS
"Enables support for notifications and power-management features on Linux via D-Bus" "Enable support for notifications and power-management features via D-Bus on Linux"
ON "GUI" OFF ON "GUI" OFF
) )
feature_option_dependent(SYSTEMD feature_option_dependent(SYSTEMD
"Install systemd service file to a directory manually overridable with Systemd_SERVICES_INSTALL_DIR" "Install systemd service file. Target directory is overridable with `SYSTEMD_SERVICES_INSTALL_DIR` variable"
OFF "NOT GUI" OFF OFF "NOT GUI" OFF
) )
if (STACKTRACE)
check_cxx_source_compiles(
"#include <execinfo.h>
int main(){return 0;}"
QBITTORRENT_HAS_EXECINFO_H
)
if (NOT QBITTORRENT_HAS_EXECINFO_H)
message(FATAL_ERROR "execinfo.h header file not found.\n"
"Please either disable the STACKTRACE feature or use a libc that has this header file, such as glibc (GNU libc)."
)
endif()
endif()
elseif (MSVC) elseif (MSVC)
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON) feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
endif() endif()
include(GNUInstallDirs)
add_subdirectory(src)
add_subdirectory(dist)
if (VERBOSE_CONFIGURE) if (VERBOSE_CONFIGURE)
feature_summary(WHAT ALL) feature_summary(WHAT ALL)
else() else()
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
endif() endif()
# go check the packages
include(CheckPackages)
# configure for specific platform
include(CommonConfig)
# Generate version header # Generate version header
configure_file("src/base/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/base/version.h" @ONLY) configure_file("src/base/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/base/version.h" @ONLY)
add_subdirectory(src)
add_subdirectory(dist)
if (TESTING)
add_subdirectory(test)
endif()

View File

@@ -1,6 +1,7 @@
# Coding Guidelines # Coding Guidelines
All new code **must** follow the following coding guidelines. \ All new code **must** follow the following coding guidelines.
If you make changes in a file that still uses another coding style, make sure that you follow these guidelines for your changes. \ If you make changes in a file that still uses another coding style, make sure that you follow these guidelines for your changes. \
For programming languages other than C++ (e.g. JavaScript) used in this repository and submodules, unless otherwise specified, coding guidelines listed here applies as much as possible. For programming languages other than C++ (e.g. JavaScript) used in this repository and submodules, unless otherwise specified, coding guidelines listed here applies as much as possible.
@@ -456,8 +457,8 @@ class ExampleWidget : public QWidget
* Prefer pre-increment, pre-decrement operators * Prefer pre-increment, pre-decrement operators
```c++ ```c++
++i, --j; // Yes ++i, --j; // yes
i++, j--; // No i++, j--; // no
``` ```
* private/public/protected must not be indented * private/public/protected must not be indented

View File

@@ -6,22 +6,14 @@ Read the respective section to find out more.
### Table Of Contents ### Table Of Contents
* **[Bug reporting etiquette](#bug-reporting-etiquette)** * **[Bug reporting etiquette](#bug-reporting-etiquette)**
* **[Submitting an issue/bug report](#submitting-an-issuebug-report)** * **[Submitting an issue/bug report](#submitting-an-issuebug-report)**
* [What is an actual bug report?](#what-is-an-actual-bug-report) * [What is an actual bug report?](#what-is-an-actual-bug-report)
* [Before submitting a bug report](#before-submitting-a-bug-report) * [Before submitting a bug report](#before-submitting-a-bug-report)
* [Steps to ensure a good bug report](#steps-to-ensure-a-good-bug-report) * [Steps to ensure a good bug report](#steps-to-ensure-a-good-bug-report)
* **[Suggesting enhancements/feature requests](#suggesting-enhancementsfeature-requests)** * **[Suggesting enhancements/feature requests](#suggesting-enhancementsfeature-requests)**
* [Before submitting an enhancement/feature request](#before-submitting-an-enhancementfeature-request) * [Before submitting an enhancement/feature request](#before-submitting-an-enhancementfeature-request)
* [Steps to ensure a good enhancement/feature suggestion](#steps-to-ensure-a-good-enhancementfeature-suggestion) * [Steps to ensure a good enhancement/feature suggestion](#steps-to-ensure-a-good-enhancementfeature-suggestion)
* **[Opening a pull request](#opening-a-pull-request)** * **[Opening a pull request](#opening-a-pull-request)**
* [Must read](#must-read)
* [Good to know](#good-to-know)
# Bug reporting etiquette # Bug reporting etiquette
@@ -31,7 +23,7 @@ Read the respective section to find out more.
* **Be patient.** The development team is small and resource limited. Developers and contributors take from their free time to analyze the problem and fix the issue. :clock3: * **Be patient.** The development team is small and resource limited. Developers and contributors take from their free time to analyze the problem and fix the issue. :clock3:
* Harsh words or threats won't help your situation. What's worse, your complain will (very likely) be **ignored.** :fearful: * Harsh words or threats won't help your situation. Your complaint will (very likely) be **ignored.** :fearful:
# Submitting an issue/bug report # Submitting an issue/bug report
@@ -47,7 +39,7 @@ Developers and contributors are not supposed to deal with issues for which littl
Positive contributions are those which are reported with efforts to find the actual cause of an issue, or at the very least efforts were made to narrow it as much as possible. Positive contributions are those which are reported with efforts to find the actual cause of an issue, or at the very least efforts were made to narrow it as much as possible.
Requiring people to investigate as much as possible before opening an issue will more than likely avoid burdening the project with invalid issues or issues unrelated to qBittorrent. Requiring people to investigate as much as possible before opening an issue avoids burdening the project with invalid issues or issues unrelated to qBittorrent.
The following are _not_ bug reports. **Check the [wiki][wiki-url], [forum][forum-url] or other places for help and support for issues like these**: The following are _not_ bug reports. **Check the [wiki][wiki-url], [forum][forum-url] or other places for help and support for issues like these**:
@@ -194,28 +186,26 @@ Following these guidelines helps maintainers and the community understand your s
# Opening a pull request # Opening a pull request
### Must read * Consult [coding guidelines][coding-guidelines-url] first. If you are working on translation/i18n, read ["How to translate qBittorrent"][how-to-translate-url].
* Read our [**coding guidelines**][coding-guidelines-url]. There are some scripts to help you: [uncrustify script][uncrustify-script-url], [astyle script][astyle-script-url], [(related thread)][coding-guidelines-thread-url]. * Keep your git commit history clean.
* Keep the title **short** and provide a **clear** description about what your pull request does. * Refer to the section about ["Git commit messages"][coding-guidelines-git-commit-message-url] in the coding guidelines.
* Provide **screenshots** for UI related changes. * When merge conflicts arise, do `git rebase <target_branch_name>` and fix the conflicts, don't do `git pull`. Here is a good explanation: [merging-vs-rebasing][merging-vs-rebasing-url].
* Keep your git commit history **clean** and **precise.** Refer to the section about "Git commit messages" in the [**coding guidelines**][coding-guidelines-url]. * Keep pull request title concise and provide motivation and "what it does" in the pull request description area. Make it easy to read and understand.
* If your commit fixes a reported issue (for example #4134), add the following message to the commit `Closes #4134.`. Example [here][commit-message-fix-issue-example-url]. * Provide screenshots for UI related changes.
* If your commit addresses a reported issue (for example issue #8454), append the following text to the commit body `Closes #8454.`. Example [commit][commit-message-fix-issue-example-url].
* Search [pull request list][pull-request-list-url] first. Others might have already implemented your idea (or got rejected already).
### Good to know
* **Search** pull request history! Others might have already implemented your idea and it is waiting to be merged (or got rejected already). Save your precious time by doing a search first.
* When resolving merge conflicts, do `git rebase <target_branch_name>`, don't do `git pull`. Then you can start fixing the conflicts. Here is a good explanation: [link][merging-vs-rebasing-url].
[astyle-script-url]: https://gist.github.com/Chocobo1/539cee860d1eef0acfa6
[attachments-howto-url]: https://help.github.com/articles/file-attachments-on-issues-and-pull-requests [attachments-howto-url]: https://help.github.com/articles/file-attachments-on-issues-and-pull-requests
[builds-url]: https://sourceforge.net/projects/qbittorrent/files/
[coding-guidelines-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md [coding-guidelines-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md
[coding-guidelines-thread-url]: https://github.com/qbittorrent/qBittorrent/issues/2192 [coding-guidelines-git-commit-message-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md#10-git-commit-message
[commit-message-fix-issue-example-url]: https://github.com/qbittorrent/qBittorrent/commit/c07cd440cd46345297debb47cb260f8688975f50 [commit-message-fix-issue-example-url]: https://github.com/qbittorrent/qBittorrent/commit/c07cd440cd46345297debb47cb260f8688975f50
[forum-url]: http://forum.qbittorrent.org/ [forum-url]: http://forum.qbittorrent.org/
[howto-report-bugs-url]: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html [howto-report-bugs-url]: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
[how-to-translate-url]: https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent
[merging-vs-rebasing-url]: https://www.atlassian.com/git/tutorials/merging-vs-rebasing [merging-vs-rebasing-url]: https://www.atlassian.com/git/tutorials/merging-vs-rebasing
[pull-request-list-url]: https://github.com/qbittorrent/qBittorrent/pulls
[python-url]: https://www.python.org/ [python-url]: https://www.python.org/
[releases-url]: https://github.com/qbittorrent/qBittorrent/releases [releases-url]: https://github.com/qbittorrent/qBittorrent/releases
[search-plugins-url]: https://github.com/qbittorrent/search-plugins [search-plugins-url]: https://github.com/qbittorrent/search-plugins
[uncrustify-script-url]: https://raw.githubusercontent.com/qbittorrent/qBittorrent/master/uncrustify.cfg
[wiki-url]: https://github.com/qbittorrent/qBittorrent/wiki [wiki-url]: https://github.com/qbittorrent/qBittorrent/wiki
[builds-url]: https://sourceforge.net/projects/qbittorrent/files/

290
COPYING
View File

@@ -1,6 +1,6 @@
qBittorrent is licensed under the GNU General Public License either version 2, The qBittorrent source code is licensed under the GNU General Public License, version 2 or (at your option) any later version (GPLv2+).
or (at your option) any later version with the addition of the following However, the binary distribution is licensed under GNU General Public License, version 3 or (at your option) any later version (GPLv3+),
special exception: because it contains GPLv3+ assets (eg images). In both cases, the following special exception is added:
In addition, as a special exception, the copyright holders give permission to In addition, as a special exception, the copyright holders give permission to
link this program with the OpenSSL project's "OpenSSL" library (or with link this program with the OpenSSL project's "OpenSSL" library (or with
@@ -13,285 +13,5 @@ exception statement from your version.
See also the AUTHORS file See also the AUTHORS file
---------- See COPYING.GPLv2 file for the GPLv2
See COPYING.GPLv3 file for the GPLv3
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

339
COPYING.GPLv2 Normal file
View File

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

674
COPYING.GPLv3 Normal file
View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

497
Changelog
View File

@@ -1,6 +1,378 @@
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.4.0 Tue Aug 29 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.5
- FEATURE: Add support for creating v2 torrents(requires libtorrent 2.0.x) (Chocobo1) - BUGFIX: Fix transfer list tab hotkey (thalieht)
- BUGFIX: Don't forget to enable the Apply button in the Options dialog (glassez)
- BUGFIX: Immediately update torrent status on moving files (glassez)
- BUGFIX: Improve performance when scrolling the file list of large torrents (gdim47)
- BUGFIX: Don't operate on random torrents when multiple are selected and a sort/filter is applied (glassez)
- RSS: Fix overwriting feeds.json with an incomplete load of it (Omar Abdul Azeez)
- WINDOWS: Software update check logic is disabled for < Win10 (sledgehammer999)
- WINDOWS: NSIS: Update Turkish and French translations (Burak Yavuz, MarcDrieu)
- WINDOWS: NSIS: Add Romanian translation (rusu-afanasie)
Sun Jun 18 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.4
- BUGFIX: Allow to disable confirmation of Pause/Resume All (glassez)
- BUGFIX: Sync flag icons with upstream (Priit Uring)
- WEBUI: Fix category save path (Raymond Ha)
Sun May 28 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.3
- BUGFIX: Correctly check if database needs to be updated (glassez)
- BUGFIX: Prevent incorrect log message about torrent content deletion (glassez)
- BUGFIX: Improve finished torrent handling (glassez)
- BUGFIX: Correctly initialize group box children as disabled in Preferences (thalieht)
- BUGFIX: Don't miss saving "download path" in SQLite storage (glassez)
- BUGFIX: Improve logging of running external program (glassez)
- WEBUI: Disable UPnP for web UI by default (glassez)
- WEBUI: Use workaround for IOS file picker (DivineHawk)
- WEBUI: Work around Chrome download limit (Chocobo1)
- WEBUI: Improve 'exporting torrent' behavior (Chocobo1)
- WINDOWS: NSIS: Add Slovak translation (Christian Danížek)
Tue Feb 28 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.2
- BUGFIX: Don't unexpectedly activate queued torrents when prefetching metadata for added magnets (glassez)
- BUGFIX: Update the cached torrent state once recheck is started (glassez)
- BUGFIX: Be more likely to allow the system to use power saving modes (glassez)
- WEBUI: Migrate away from unsafe function (Chocobo1)
- WEBUI: Blacklist bad ciphers for TLS in the server (sledgehammer999)
- WEBUI: Allow only TLS 1.2+ in the server (sledgehammer999)
- WEBUI: Allow to set read-only directory as torrent location (glassez)
- WEBUI: Reject requests that contain backslash in path (glassez)
- RSS: Prevent RSS folder from being moved into itself (glassez)
- WINDOWS: NSIS: Update Turkish, Uzbek translation (Burak Yavuz, shitcod3r)
Sun Feb 12 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.1
- FEATURE: Re-allow to use icons from system theme (glassez)
- BUGFIX: Fix Speed limit icon size (Nowshed H. Imran)
- BUGFIX: Revise and fix some text colors (Chocobo1, Nowshed H. Imran)
- BUGFIX: Correctly load folder based UI theme (glassez)
- BUGFIX: Fix crash due to invalid encoding of tracker URLs (glassez)
- BUGFIX: Don't drop !qB extension when renaming incomplete file (glassez)
- BUGFIX: Correctly count the number of torrents in subcategories (glassez)
- BUGFIX: Use "additional trackers" when metadata retrieving (glassez)
- BUGFIX: Apply correct tab order to Category options dialog (glassez)
- BUGFIX: Add all torrents passed via the command line (glassez)
- BUGFIX: Fix startup performance on Qt5 (glassez)
- BUGFIX: Automatic move will now overwrite existing files (aka previous behavior) (glassez)
- BUGFIX: Some fixes for loading Chinese locales (sledgehammer999)
- BUGFIX: New Pause icon color for toolbar/menu (Nowshed H. Imran, sledgehammer999)
- BUGFIX: Adjust env variable for PDB discovery (sledgehammer999)
- WEBUI: Fix missing "queued" icon (thalieht)
- WEBUI: Return paths using platform-independent separator format (glassez)
- WEBUI: Change order of accepted types of file input (Jason Carr)
- WEBUI: Add missing icons (brvphoenix)
- WEBUI: Add "Resume data storage type" option (thalieht)
- WEBUI: Make rename file dialog resizable (Torsten Schwarz)
- WEBUI: Prevent incorrect line breaking (David Xuang)
- WEBUI: Improve hotkeys (Fidel Selva)
- WEBUI: Remove suggestions while searching for torrents (Midhun V Nadh)
- WEBUI: Expose "IS PRIVATE" flag (sotiris-bos)
- WEBUI: Return name/hash/infohash_v1/infohash_v2 torrent properties (qbittorrentfan)
- WINDOWS: Correctly detect drive letter in path (glassez)
- WINDOWS: NSIS: Update Swedish, Lithuanian translations (Jonatan, Deividas)
- LINUX: Fix tray icon issues (glassez)
Sat Nov 26 2022 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.0
- FEATURE: Add `Auto resize columns` functionality (Chocobo1)
- FEATURE: Allow to use Category paths in `Manual` mode (glassez)
- FEATURE: Allow to disable Automatic mode when default "temp" path changed (glassez)
- FEATURE: Add tuning options related to performance warnings (Chocobo1)
- FEATURE: Add right click menu for status filters (An0n)
- FEATURE: Allow setting the number of maximum active checking torrents (An0n)
- FEATURE: Add option to toggle filters sidebar (AbeniMatteo)
- FEATURE: Allow to set `working set limit` on non-Windows OS (Chocobo1)
- FEATURE: Add `Export .torrent` action (Chocobo1)
- FEATURE: Add keyboard navigation keys (itlezy)
- FEATURE: Allow to use POSIX-compliant disk IO type (Coda)
- FEATURE: Add `Filter files` field in new torrent dialog (thalieht)
- FEATURE: Implement new icon/color theme (now-im, xavier2k6)
- FEATURE: Add file name filter/blacklist (mxtsdev, thalieht)
- FEATURE: Add support for custom SMTP ports (Emil M George)
- FEATURE: Split the OS cache settings into Disk IO read/write modes (summer)
- FEATURE: When duplicate torrent is added set metadata to existing one (glassez)
- FEATURE: Greatly improve startup time with many torrents (glassez, jagannatharjun)
- FEATURE: Add keyboard shortcut to Download URL dialog (Chocobo1)
- FEATURE: Add ability to run external program on torrent added (glassez)
- FEATURE: Add infohash and download path columns (tristanleboss)
- FEATURE: Allow to set torrent stop condition (glassez, thalieht)
- FEATURE: Add a `Moving` status filter (tristanleboss)
- FEATURE: Change color palettes for both dark, light themes (Chocobo1)
- FEATURE: Add a `Use proxy for hostname lookup` option (Nathan Lewis)
- FEATURE: Introduce a `change listen port` cmd option (BallsOfSpaghetti)
- FEATURE: Implement `Peer ID Client` column for `Peers` tab (Hanabishi)
- FEATURE: Add port forwarding option for embedded tracker (Chocobo1)
- BUGFIX: Store hybrid torrents using `torrent ID` as basename (glassez)
- BUGFIX: Enable Combobox editor for the `Mixed` file download priority (Aleksandr Cupacenko)
- BUGFIX: Allow shortcut folders for the Open and Save directory dialogs (Aleksandr Cupacenko)
- BUGFIX: Rename content tab `Size` column to `Total Size` (Aleksandr Cupacenko)
- BUGFIX: Fix scrolling to the lowermost visible torrent (Aleksandr Cupacenko)
- BUGFIX: Allow changing file priorities for finished torrents (An0n)
- BUGFIX: Focus save path when Manual mode is selected initially (Aleksandr Cupacenko)
- BUGFIX: Disable force reannounce when it is not possible (An0n)
- BUGFIX: Add horizontal scrolling for tracker list and torrent content (NotTsunami)
- BUGFIX: Enlarge "speed limits" icons (Chocobo1)
- BUGFIX: Change Downloaded to Times Downloaded in trackers tab (An0n)
- BUGFIX: Remove artificial max limits from `Torrent Queueing` related options (Chocobo1)
- BUGFIX: Preserve `skip hash check` when there is no metadata (glassez)
- BUGFIX: Fix DHT/PeX/LSD status when it is globally disabled (Kacper Michajłow)
- BUGFIX: Fix rate calculation when interval is too low (glassez)
- BUGFIX: Add tooltip message when system tray icon isn't available (Chocobo1)
- BUGFIX: Improve sender field in mail notifications (Dmitry Vodopyanov)
- BUGFIX: Fix "Add torrent dialog" spill-over on smaller screens (Chocobo1)
- BUGFIX: Fix peer count issue when tracker responds with zero figure (summer)
- BUGFIX: Don't merge trackers by default (glassez)
- BUGFIX: Don't inhibit system sleep/auto shutdown for torrents stuck at downloading metadata (summer)
- BUGFIX: Allow to pause a checking torrent from context menu (summer)
- BUGFIX: Allow to use subnet notation in reverse proxy list (Chocobo1)
- BUGFIX: Fine tune translations loading for Chinese locales (sledgehammer999)
- BUGFIX: Fix torrent content checkboxes not updated properly (Chocobo1)
- BUGFIX: Correctly load state of `Use another path for incomplete torrents` in Watched folders (glassez)
- BUGFIX: Add confirmation to resume/pause all (BallsOfSpaghetti)
- BUGFIX: Fix wrong count of errored trackers (Chocobo1)
- WEBUI: Allow blank lines in multipart form-data input (Aleksandr Cupacenko)
- WEBUI: Make various dialogs resizable (Chocobo1)
- WEBUI: Fix wrong v2 hash string displayed (Chocobo1)
- WEBUI: WebAPI: return correct status (Requi)
- WEBUI: Fix empty selection in language combobox (Chocobo1)
- WEBUI: Store WebUI port setting in human readable number (Chocobo1)
- WEBUI: Add support for exporting .torrent (Tom Piccirello)
- WEBUI: WebAPI: Add endpoint to set speed limit mode (glassez)
- WEBUI: Improve progress bar rendering (Mike Lei)
- WEBUI: Add transfer list refresh interval settings (summer)
- WEBUI: Use natural sort (Chocobo1)
- WEBUI: Apply i18n translation only to built-in WebUI (Chocobo1)
- WEBUI: Alert when HTTPS settings are incomplete (Chocobo1)
- WEBUI: Handle drag and drop events (Chocobo1)
- WEBUI: Fix wrong behavior for shutdown action (Chocobo1)
- WEBUI: Don't disable combobox for file priority (Chocobo1)
- RSS: Increase limit of maximum number of articles per feed (summer)
- WINDOWS: Fix `Open destination folder` delay on Windows (Andrew)
- WINDOWS: NSIS: Update Russian, Estonian, Japanese, Dutch, Portuguese BR, German and Indonesian translations (Andrei Stepanov, Priit Uring, maboroshin, Thomas De Rocker, Ícaro, schnurlos, Faisal A. F. Rahman)
- LINUX: Mark as single window app in .desktop file (Nicolas Fella)
- LINUX: Add Dockerfile (Amanuense-del-diavolo, Tom Piccirello, Chocobo1)
- LINUX: Remove option of using icons from system theme (now-im)
- MACOS: Fix wrong background color in properties widget (NotTsunami)
- OTHER: Binary distributions of qbittorrent are GPLv3+ licensed (sledgehammer999)
Thu Jan 06 2022 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.4.0
- FEATURE: Support for v2 torrents along with libtorrent 2.0.x support (glassez, Chocobo1)
- FEATURE: Support for Qt6 (glassez)
- FEATURE: Expose libtorrent hashing_threads settings (Anton Bershanskiy) - FEATURE: Expose libtorrent hashing_threads settings (Anton Bershanskiy)
- FEATURE: Add "Notification timeout" option (kevtechxx)
- FEATURE: Add `connection_speed` to advanced settings (Chocobo1)
- FEATURE: Announce to all trackers if IP changed (#15001) (zhuangzi926)
- FEATURE: Add tooltip for various columns (Chocobo1)
- FEATURE: Add context menu to toggle content tab columns (#15164) (AbeniMatteo)
- FEATURE: Add filter "Checking" to side panel (#15166) (AbeniMatteo)
- FEATURE: Add "Forced metadata downloading" state (#15185) (AbeniMatteo)
- FEATURE: Remember last viewed page in Options dialog (#15230) (Chocobo1)
- FEATURE: Add tooltip to listening port spinbox (Chocobo1)
- FEATURE: Add "Skip hash check" option for watched folders (glassez)
- FEATURE: Add "Show torrent options" double-click action (glassez)
- FEATURE: Allow setting temp folder per torrent/catergory (glassez)
- FEATURE: Support folder based UI Themes (Prince Gupta)
- BUGFIX: Save "resume data" once file priority is changed (glassez)
- BUGFIX: Show priority menu at top level if there is no other in Add New Torrent dialog (FozzeY)
- BUGFIX: Capitalize "peer flags" descriptions (Chocobo1)
- BUGFIX: Reorder peer flags (Chocobo1)
- BUGFIX: Show "last activity" value under all circumstances (Chocobo1)
- BUGFIX: Elide text from the right for all columns' header (smigii)
- BUGFIX: Fix startup with different profiles (jagannatharjun)
- BUGFIX: Move a few torrent context menu actions into "Torrent options" dialog (thalieht)
- BUGFIX: Allow deselecting radio buttons in "Torrent options" for mixed torrents (thalieht)
- BUGFIX: Apply file priority changes correctly (a-sum-duma, Chocobo1)
- BUGFIX: Use proper string for Korean language (OctopusET)
- BUGFIX: Disable "add peers" menu items instead of hiding it (Chocobo1)
- BUGFIX: Disable system tray icon menu when app is exiting (Chocobo1)
- BUGFIX: Show GUI lock icon after system tray icon is initialized (Chocobo1)
- BUGFIX: Apply selected layout to displayed torrent content in "Add New Torrent" dialog (glassez)
- WEBUI: Add reverse proxy source IP resolution (#15047) (HiFiPhile)
- WEBUI: Support navigating UI tables with arrow keys (Thomas Piccirello)
- WEBUI: Support expanding/collapsing UI folders with arrow keys (Thomas Piccirello)
- WEBUI: Support sorting UI tables via touch (#15205) (Tom Piccirello)
- WEBUI: Add pieces progress bar to General tab (Jesse Smick)
- WEBUI: Update authors page (Chocobo1)
- WEBUI: Set icon sizes attribute (Daniel Aleksandersen)
- WEBUI: Add meta application name (Daniel Aleksandersen)
- WEBUI: Sort WebUI language selection values (Chocobo1)
- WEBUI: Use correct URL scheme in user prompt when HTTPS is enabled (Chocobo1)
- RSS: Stick Unread row to top in RSS feed list (Prince Gupta)
- RSS: Correctly use fallback icons for RSS feed in GUI (jagannatharjun)
- SEARCH: Add context menu for tabs in search widget (#14926) (Anton)
- SEARCH: Add more download options to torrent search result right-click menu (a-sum-duma)
- WINDOWS: Add windows-clang support (#15115) (Biswapriyo Nath)
- WINDOWS: Update python installer URL for Windows (xavier2k6)
- WINDOWS: NSIS: Update Simplified Chinese translation (Losiki)
- LINUX: Prolong wait time for shutdown for qbittorrent-nox (Chocobo1)
- LINUX: Install vector program icon (Chocobo1)
- LINUX: Add detection for OpenBSD, Haiku in configure script (Chocobo1)
- MACOS: Update Mac icons for Big Sur (17jiangz1)
- EXPERIMENTAL: Setting to store/load fastresume/torrent files in an SQLite database (glassez)
- OTHER: Many internal code refactorings and bug fixing by many people
Sun Oct 31 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.9
- BUGFIX: Fix "no action" option on torrent double click (Jose M. Abuin)
- BUGFIX: Fix broken behavior of "priority by shown file order" (Chocobo1)
- WEBUI: Fix WebUI crash when tracker URL is invalid (Chocobo1)
- WEBUI: Revert "WebUI: group trackers by hostname" (Chocobo1)
- WINDOWS: Remove Windows Vista support from manifest (xavier2k6)
- WINDOWS: NSIS: Update Korean, Indonesian and Traditional Chinese translation (JungHee Lee, Faisal Al-Munawar Fathur Rahman, SiderealArt)
Sun Aug 29 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.8
- BUGFIX: Delay processing of watched folders (#15282) (glassez)
- BUGFIX: Use the same icon for selecting folders/files (Chocobo1)
- BUGFIX: Use default upper limits for ddns entries (Chocobo1)
- WEBUI: Expose SSRF mitigation (#15247) (Sylvain Finot)
- WEBUI: Update webui libraries (Chocobo1)
- WEBUI: Group trackers by hostname (#15264) (Mengyang Li)
- WEBUI: Improve "last activity" calculation in WebAPI (#15339) (Chocobo1)
- WINDOWS: NSIS: Add Polish translation (#15262) (Matthaiks)
Tue Aug 03 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.7
- BUGFIX: Don't forget to start Watched folders timer (glassez)
- BUGFIX: Don't close tags menu when toggling items (tgregerson)
- BUGFIX: Don't overwrite tracker message (glassez)
- BUGFIX: Bump file pool size (#14966) (An0n)
- BUGFIX: Properly create "clean path" for watched folder (glassez)
- WEBUI: Disconnect comment links (Daniel Aleksandersen)
- WINDOWS: NSIS: Update Danish translation (scootergrisen)
Sat Jun 26 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.6
- FEATURE: New languages: Mongolian, Persian, Thai
- BUGFIX: Provide correct error description in "upload mode" (glassez)
- BUGFIX: Allow adding torrents with relative save path (glassez)
- BUGFIX: Fix main window turns blank after restoring from tray (#15031) (Chocobo1)
- BUGFIX: Remove the lockfile on exit (#14997) (brvphoenix)
- BUGFIX: Improve "Watched folders" feature (glassez)
- BUGFIX: Keep sub-sorting order (#15074) (Dmitry Khlestkov)
- BUGFIX: Properly add torrent with new tags (glassez)
- WINDOWS: NSIS: Update Japanese, Turkish, Hungarian, Swedish translation (maboroshin, Burak Yavuz, xkrstudio, nonew-star)
Sun May 02 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.5
- BUGFIX: Move cursor to the end when autofilling URL/hash in "Download from URLs" dialog (Chocobo1)
- BUGFIX: Sort invalid QDateTime values after valid values (Chocobo1)
- BUGFIX: Fix tabChangesFocus attribute in "Edit trackers" dialog (Christoph Rackwitz)
- BUGFIX: Update DynDNS register url (zhuangzi926)
- BUGFIX: Handle "not enough disk space" error more graciously (glassez)
- BUGFIX: Correctly draw progress background with stylesheet (jagannatharjun)
- WEBUI: Fix magnet url from the search facility (Chocobo1)
- WEBUI: Revise folder monitoring functions (Chocobo1)
- WEBUI: Fix magnet url from the browser (brvphoenix)
- WEBUI: Allow to specify file indexes in torrents/files API (glassez)
- WINDOWS: NSIS: Allow more strings to translated (bovirus, Chocobo1)
- WINDOWS: NSIS: Update Italian, German, Estonian, Russian, PortugueseBR translations (bovirus, Henry Water, PriitUring, Долматов Алексей, Felipe)
- LINUX: Fix D-Bus Notification `desktop-entry` field (Chocobo1)
- MACOS: Don't use executable name as CFBundleName value (Nick Korotysh)
- OTHER: Lower Qt requirement to 5.11 (sledgehammer999)
- OTHER: Clarify that the license is GPLv2+ (sledgehammer999)
Wed Mar 24 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.4.1
- BUGFIX: Correctly draw progress bar (glassez)
- WEBUI: Fix javascript code which broke the UI (Chocobo1)
Tue Mar 23 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.4
- FEATURE: Add ability to prioritize selected items by shown file order (Chocobo1)
- FEATURE: Allow tab to escape the text box in "Edit trackers" dialog (Christoph Rackwitz)
- FEATURE: Support sub-sorting in Transferlist (jagannatharjun)
- FEATURE: Expose ToS setting from libtorrent (Chocobo1)
- FEATURE: Improve tracker entries handling (glassez)
- BUGFIX: Drop extension from generated content folder name (glassez)
- BUGFIX: Change qBittorrent Updater window title (xavier2k6)
- BUGFIX: Validate HTTPS Tracker Certificate by default (an0n666)
- BUGFIX: Don't let "program update" dialog steal focus (Chocobo1)
- BUGFIX: Disable expand on double click in TorrentContentTreeView (jagannatharjun)
- BUGFIX: Add hyperlink to Transifex on translator list (Si Yong Kim)
- BUGFIX: Enlarge "speed limit" icon slightly (Chocobo1)
- BUGFIX: Don't prevent system sleep due to errored torrents (dyumin)
- BUGFIX: Use stable sorting in transfer list (Chocobo1)
- BUGFIX: Allow "missing files" torrents to save more resume data (glassez)
- BUGFIX: Restart "missing files" torrents after changing location (glassez)
- BUGFIX: Show proper string when torrent availability is not available (Chocobo1)
- BUGFIX: Apply "Hide zero/infinity values" to "Time Active", "Down/Up Limit" and ETA columns (Chocobo1)
- BUGFIX: Fix potential out-of-bounds access (Chocobo1)
- BUGFIX: Make SpeedPlotView averager time aware (jagannatharjun)
- BUGFIX: Add a 3-Hour graph (jagannatharjun)
- BUGFIX: Add an option to disable icons in menus (always disabled on MacOS) (Michał Kopeć)
- BUGFIX: Improve detection of filename extension of audio/video files (Chocobo1)
- BUGFIX: Various drawing improvements of progress bar (Chocobo1)
- BUGFIX: Properly stop torrent creation if aborted (Chocobo1)
- BUGFIX: Replace external program parameters in one step (Chocobo1)
- BUGFIX: Improve "save resume data" handling (glassez)
- BUGFIX: Fix bad IPv6 address format for outgoingInterfaces (treysis)
- WEBUI: Properly decode strings (brvphoenix)
- WEBUI: Accept "share limits" when adding torrent using WebAPI (glassez)
- WEBUI: Add seeding time to the active time column (thalieht)
- WEBUI: Fix incorrect seeding time string in General tab (thalieht)
- WEBUI: Allow >100 days in WebUI function "friendlyDuration" (thalieht)
- WEBUI: Avoid decoding strings repeatedly (brvphoenix)
- RSS: Add category button on AutomatedRSSDownloader on GUI (Si Yong Kim)
- WINDOWS: NSIS: Update Czech translation (slrslr)
- WINDOWS: NSIS: Update Portuguese BR translation (Alex)
- WINDOWS: NSIS: Add Estonian translation (PriitUring)
- WINDOWS: Allow change-case-only file renaming (glassez)
- LINUX: Systemd: wait for mounting of local filesystems (Juraj Oršulić)
- OTHER: Raise minimum libtorrent version to 1.2.12 (glassez)
- OTHER: Raise minimum Qt version to 5.12 (glassez)
Tue Jan 19 2021 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.3
- FEATURE: New languages: Azerbaijani, Estonian
- BUGFIX: Unify global speed dialogs for normal/alternative speeds (thalieht)
- BUGFIX: Increase maximum global speed limits ~2 GiB/s (thalieht)
- BUGFIX: Save fastresume when setting torrent speed limits (thalieht)
- BUGFIX: Group several torrent options into one dialog (thalieht)
- BUGFIX: Capitalize locale names (Chocobo1)
- BUGFIX: Improve content file/folder names handling (glassez)
- BUGFIX: Drop notification about move storage finished or failed (glassez)
- BUGFIX: Reload "missing files" torrent instead of re-checking (glassez)
- BUGFIX: Remember dialog sizes (Chocobo1)
- BUGFIX: Improve detection of file extension string (Chocobo1)
- WEBUI: Don't call non-existent elements (glassez)
- WEBUI: Update "Keep top-level folder" in WebUI options (thalieht)
- MACOS: QMake: Raise minimal macOS target version to 10.14 (glassez)
- LINUX: Use legacy 'data' directory only as a fallback (lbilli)
- OTHER: Bump project requirement to C++17 (Chocobo1)
Sun Dec 27 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.2
- FEATURE: Allow to add root folder to torrent content (glassez)
- FEATURE: "HTTPS tracker validation" option is available on all platforms with latest libtorrent (Chocobo1)
- FEATURE: Option for supporting internationalized domain names (IDNs) (Chocobo1)
- BUGFIX: Fix broken sorting on some columns (Chocobo1)
- BUGFIX: Fix availability per file value (Chocobo1)
- BUGFIX: Fix status of torrents without metadata (sledgehammer999)
- BUGFIX: Don't try to remove folders for a torrent without metadata (sledgehammer999)
- BUGFIX: Lift upper limit of "Max concurrent HTTP announces" option (Chocobo1)
- BUGFIX: Add links to libtorrent documentation (Chocobo1)
- BUGFIX: Move "embedded tracker" options to qbt section (Chocobo1)
- BUGFIX: Properly handle "Append extension" option changing (glassez)
- BUGFIX: Correctly save paused torrent state (glassez)
- BUGFIX: Fix bug of "move storage job" can be performed multiple times (glassez)
- WEBUI: Add ability to use 'shift+delete' to delete torrents (Chocobo1)
- WEBUI: Allow to attach tags while adding torrents (Jesse Chan)
- WEBUI: Bump version to 2.6.2 (Jesse Chan)
- WEBUI: Remove unnecessary restriction on input length (Chocobo1)
- WINDOWS: NSIS: Update Russian translation (Andrei Stepanov)
- WINDOWS: NSIS: Update Italian translation (Alessandro Simonelli)
- OTHER: Drop support for building with libtorrent < 1.2.11 (Vladimir Golovnev)
Wed Nov 25 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.1
- FEATURE: Allow progress bar styling from custom themes (jagannatharjun)
- FEATURE: Allow adding torrents using "Paste" key sequence (Chocobo1)
- FEATURE: Add Latgalian translation (sledgehammer999)
- BUGFIX: Prevent resume data to be saved for removed torrent (glassez)
- BUGFIX: Clarify connection protocol choice label (FranciscoPombal)
- BUGFIX: Fix crash when clicked outside the table of torrent content view (jagannatharjun)
- BUGFIX: Don't resume "paused" torrents when put into "checking" state by libtorrent (glassez)
- BUGFIX: Fix torrent state calculation (glassez)
- BUGFIX: Align integer data to right in torrent content view (jagannatharjun)
- WEBUI: Place WebUI RSS description in sandboxed iframe (Sepro)
- WEBUI: Avoid settings being reset via WebAPI (Chocobo1)
- WEBUI: Fix toggling advanced option in WebUI (thalieht)
- WEBUI: Expose contentPath in WebAPI torrents/info (FranciscoPombal)
- WEBUI: Fix the issue that IPv6 address can't be banned (brvphoenix)
- RSS: Fix confusion in date format description (Thomas De Rocker)
- WINDOWS: Update dutch.nsi (Thomas De Rocker)
- LINUX: Update .desktop file translations (sledgehammer999)
Thu Oct 22 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0.1
- WINDOWS: NSIS: Update Italian translation (bovirus)
Sun Oct 18 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0 Sun Oct 18 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0
- FEATURE: Many UI elements colors are themeable now (jagannatharjun) - FEATURE: Many UI elements colors are themeable now (jagannatharjun)
@@ -55,6 +427,127 @@ Sun Oct 18 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0
- OTHER: Support for libtorrent 1.1.x is dropped (Chocobo1) - OTHER: Support for libtorrent 1.1.x is dropped (Chocobo1)
- OTHER: Many code cleanups and improvements (FranciscoPombal, Chocobo1, glassez) - OTHER: Many code cleanups and improvements (FranciscoPombal, Chocobo1, glassez)
Sat Apr 25 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.5
- BUGFIX: Fix crash when torrent is deleted on limit reached (glassez)
- BUGFIX: Register datatype properly (Chocobo1)
- WEBUI: Add ability to send custom HTTP headers (Chocobo1)
- WEBUI: Expand RSS related API (Sepro)
- WINDOWS: Installer: Update german translation (schnurlos)
Wed Apr 22 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.4
- BUGFIX: Fix sub-sorting of Transfer list (glassez)
- BUGFIX: Fix wrong logic that disables "prevent sleeping" timer (Chocobo1)
- BUGFIX: Set disk cache size for older libtorrent versions (NotTsunami)
- BUGFIX: Sort locale language list (Chocobo1)
- BUGFIX: Remove white outline around mascot.png (adem)
- BUGFIX: Various fixes in configuring the chosen network interface and not leaking the IP (Raif Atef, an0n666)
- BUGFIX: Save "resume data" when torrent storage is moved (glassez)
- BUGFIX: Avoid holding encoded resume data in memory (Chocobo1)
- BUGFIX: Fix date format for "Last seen complete" (Chocobo1)
- BUGFIX: Remove deprecated strict super seeding mode from advanced settings (an0n666)
- BUGFIX: Change default stop_tracker_timeout settings (an0n666)
- BUGFIX: Convert the Log widget to use custom View/Model (jagannatharjun)
- BUGFIX: Change default upload slot choking limits (an0n666)
- BUGFIX: Don't uncheck Authentication checkbox when changing proxy type (thalieht)
- BUGFIX: Reduce ambiguity for selecting tray icons (Chocobo1)
- WEBUI: Fix unable to add multiple peers in WebUI (Sepro)
- WEBUI: Fix UPnP lease duration get/set (NotTsunami)
- SEARCH: Detect python3 executable on Windows (József Sallai)
Wed Apr 01 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.3
- FEATURE: Add logging for SOCKS5 proxy errors (Chocobo1)
- FEATURE: Add UPnP lease duration advanced option (NotTsunami)
- BUGFIX: Allow to translate error messages (Chocobo1)
- BUGFIX: Don't round scaling factor (Nick Korotysh)
- BUGFIX: Save log file in UTF-8 encoding (Chocobo1)
- BUGFIX: Avoid log file excessive flushing (Chocobo1)
- BUGFIX: Fix regression when fastresume contains network path (Tester798)
- BUGFIX: Fix broken UNC paths in fastresumes on Windows (sledgehammer999)
- BUGFIX: Prevent multiple instances for the same app config (glassez)
- BUGFIX: Fix unexpected torrent resume after app restart with libtorrent 1.1.x (glassez)
- WEBUI: Add alt and title tags for WebUI footer (LameLemon)
- WINDOWS: Installer: Update Finnish translation (Roope Jukkara)
- WINDOWS: Installer: Update Japanese translation (maboroshin)
- WINDOWS: Installer: Update Turkish translation (Burak Yavuz)
- WINDOWS: Installer: Update Russian translation (Andrei Stepanov)
Tue Mar 24 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.2
- FEATURE: Allow transfer list text color changes through QSS (Prince Gupta)
- FEATURE: Option to show console when external program is run (sledgehammer999)
- FEATURE: Rename Country column to "Country / Region" (Thomas Piccirello)
- FEATURE: Change the defaults of some settings (FranciscoPombal)
- FEATURE: Refactored Transfer List code to allow theming. As a sideffect the row height has more padding. (glassez)
- FEATURE: Allow double-click in preview dialog (thalieht)
- FEATURE: Expose stop_tracker_timeout in advanced settings (an0n666)
- FEATURE: Add piece_extent_affinity to AdvancedSettings (FranciscoPombal)
- FEATURE: Reorganize UI theme selection (Prince Gupta)
- FEATURE: Show any multiple connections from the same IP in peer list (thalieht)
- FEATURE: Add stalled filters to GUI and Web API/UI (FranciscoPombal)
- FEATURE: Use IP geolocation database by DB-IP instead of MaxMind (sledgehammer999)
- FEATURE: Allow to save downloaded metadata as torrent file (glassez)
- FEATURE: Allow single app instance per configuration (glassez)
- PERFORMANCE: Move multiple torrents one by one (glassez)
- BUGFIX: Disable Torrent Queue by default for new users (an0n666)
- BUGFIX: Update free disk space label on Category change in Auto Mode (Medvedishce)
- BUGFIX: Save resume data after recheck (glassez)
- BUGFIX: Tracker is errored only if all local endpoints fail (sledgehammer999)
- BUGFIX: Change placement of stop tracker timeout setting (An0n)
- BUGFIX: Redesign torrent startup handling (glassez)
- BUGFIX: Show "∞" instead of " -1" in Preferences (Sakib-Abrar)
- BUGFIX: Improve code efficiency for reverse resolution of peers (Chocobo1)
- BUGFIX: Handle HTTP redirection to magnet URI (glassez)
- BUGFIX: Various fixes for portable mode (Tester798)
- BUGFIX: Include resume folder path in exception message (Chocobo1)
- BUGFIX: Change placeholder text in torrent list's filter (djt3)
- BUGFIX: Improvements in the embedded tracker to be more spec compliant (FranciscoPombal)
- BUGFIX: Improve the options tooltips (NotTsunami)
- BUGFIX: Check if file exists in seed mode (an0n666)
- BUGFIX: Delegate GUI scaling work to Qt (Nick Korotysh)
- BUGFIX: Fix crash when renaming torrent contents (Chocobo1)
- BUGFIX: Fix total connected peers count calculation (FranciscoPombal)
- BUGFIX: Allow other keypresses in LogListWidget (NotTsunami)
- BUGFIX: Disable Auto TMM when not using default savepath from monitored folder (thalieht)
- WEBUI: Fix first row renaming in files tab (Denis)
- WEBUI: Use SVG image for WebUI favicon (Nick Korotysh)
- WEBUI: Inherit text color for filter list elements (Nick Korotysh)
- WEBUI: Expose WebUI ban counter to users (Chocobo1)
- WEBUI: Expose WebUI ban duration to users (Chocobo1)
- WEBUI: Implement "Secure" flag for session cookie (FranciscoPombal)
- WEBUI: Remove unused/deprecated option (FranciscoPombal)
- WEBUI: Prevent excessive sync requests (FranciscoPombal)
- WEBUI: Fix populating statistics window (FranciscoPombal)
- WEBUI: Fix matching uncategorized torrents (FranciscoPombal)
- WEBUI: Always allow whitespace in category names (FranciscoPombal)
- SEARCH: Bump python version for new installation (Chocobo1)
- SEARCH: Fix missing string (Chocobo1)
- SEARCH: Drop python2 support (Chocobo1)
- WINDOWS: Installer: Option to start qBittorrent on Windows start up (An0n)
- WINDOWS: Installer: Improve Czech translation (slrslr)
- WINDOWS: Installer: Update French translation (zywo)
- WINDOWS: Installer: Update German translation (schnurlos)
- WINDOWS: Installer: Update Japanese translation (maboroshin)
- WINDOWS: Path length limitation is removed on Windows 10 1607 onwards (an0n666)
Wed Dec 18 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.1
- FEATURE: Enable portable mode if "profile" directory exists (Tester798)
- FEATURE: Enable "Apply rate limit to peers on LAN" option by default (Chocobo1)
- BUGFIX: Sync translations from Transifex and run lupdate (sledgehammer999)
- BUGFIX: Don't unnecessarily delete OS files in folders (sledgehammer999)
- BUGFIX: Use the incomplete folder where appropriate (sledgehammer999)
- BUGFIX: Align Properties tab bar correctly on window resize (Prince Gupta)
- BUGFIX: Rework the listening IP/interface selection code (sledgehammer999)
- BUGFIX: Fix inconsistent icon for deleting torrent (Chocobo1)
- BUGFIX: Show torrent error message in transfer list (Chocobo1)
- BUGFIX: Fix stuck in wrong torrent state (Chocobo1)
- BUGFIX: Expand single-item folders in torrent content (warren)
- WEBUI: Bump Web API version (sledgehammer999)
- WEBUI: Add ability to rename torrent files from the WebUI (Thomas Piccirello)
- WEBUI: Mention lack of HTTPS in WebUI magnet link warning (nl6720)
- WEBUI: Fix HTML elements size in search tab (Chocobo1)
- SEARCH: Fix incorrect translation displayed after language change (Chocobo1)
- SEARCH: Fix missing translations in search plugins dialog (Chocobo1)
- WINDOWS: Update russian translation of the installer (Andrei Stepanov)
Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0 Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
- FEATURE: Libtorrent 1.2.x series are supported now (glassez) - FEATURE: Libtorrent 1.2.x series are supported now (glassez)
- FEATURE: Add OpenSSL version to GUI and stackdump (Chocobo1) - FEATURE: Add OpenSSL version to GUI and stackdump (Chocobo1)

16
INSTALL
View File

@@ -3,22 +3,24 @@ qBittorrent - A BitTorrent client in C++ / Qt
1) Install these dependencies: 1) Install these dependencies:
- Boost >= 1.65 - Boost >= 1.71
- libtorrent-rasterbar >= 1.2.13 (by Arvid Norberg) - libtorrent-rasterbar 1.2.18 - 1.2.x || 2.0.8 - 2.0.x
* https://www.libtorrent.org/ * By Arvid Norberg, https://www.libtorrent.org/
* Be careful: another library (the one used by rTorrent) uses a similar name * Be careful: another library (the one used by rTorrent) uses a similar name
- OpenSSL >= 1.1.1 - OpenSSL >= 1.1.1
- Qt >= 5.14 - Qt 5.15.2 - 5.x || 6.2.0 - 6.x
- zlib >= 1.2.11 - zlib >= 1.2.11
- pkg-config (compile-time only on *nix systems) - pkg-config *
* Compile-time only on *nix systems
- Python >= 3.5.0 (optional, runtime only) - Python >= 3.5.0
* Required by the internal search engine * Optional, run-time only
* Used by the bundled search engine
Dependency version numbers are bumped every once in a while to keep the range of properly tested configurations manageable, even if not strictly required to build. Dependency version numbers are bumped every once in a while to keep the range of properly tested configurations manageable, even if not strictly required to build.
You may be able to build with older versions of (some of) the dependencies other than the minimum versions specified in the build scripts, but support for such builds is not provided - you are on your own. You may be able to build with older versions of (some of) the dependencies other than the minimum versions specified in the build scripts, but support for such builds is not provided - you are on your own.

4
NEWS
View File

@@ -1,4 +0,0 @@
See Changelog
*******************************************
Christophe dumez - chris@qbittorrent.org

View File

@@ -1,7 +1,6 @@
qBittorrent - A BitTorrent client in Qt qBittorrent - A BitTorrent client in Qt
------------------------------------------ ------------------------------------------
[![TravisCI Status](https://travis-ci.org/qbittorrent/qBittorrent.svg?branch=master)](https://travis-ci.org/qbittorrent/qBittorrent)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/qbittorrent/qBittorrent?branch=master&svg=true)](https://ci.appveyor.com/project/qbittorrent/qBittorrent) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/qbittorrent/qBittorrent?branch=master&svg=true)](https://ci.appveyor.com/project/qbittorrent/qBittorrent)
[![GitHub Actions CI Status](https://github.com/qbittorrent/qBittorrent/workflows/GitHub%20Actions%20CI/badge.svg)](https://github.com/qbittorrent/qBittorrent/actions) [![GitHub Actions CI Status](https://github.com/qbittorrent/qBittorrent/workflows/GitHub%20Actions%20CI/badge.svg)](https://github.com/qbittorrent/qBittorrent/actions)
[![Coverity Status](https://scan.coverity.com/projects/5494/badge.svg)](https://scan.coverity.com/projects/5494) [![Coverity Status](https://scan.coverity.com/projects/5494/badge.svg)](https://scan.coverity.com/projects/5494)
@@ -46,8 +45,8 @@ http://forum.qbittorrent.org
Please report any bug (or feature request) to: Please report any bug (or feature request) to:
http://bugs.qbittorrent.org http://bugs.qbittorrent.org
You can also meet me (sledgehammer_999) on IRC: Official IRC channel:
`#qbittorrent on irc.freenode.net` [#qbittorrent on irc.libera.chat](ircs://irc.libera.chat:6697/qbittorrent)
------------------------------------------ ------------------------------------------
sledgehammer999 <sledgehammer999@qbittorrent.org> sledgehammer999 \<sledgehammer999@qbittorrent.org\>

1
TODO
View File

@@ -1 +0,0 @@
See https://blueprints.launchpad.net/qbittorrent/

View File

@@ -0,0 +1,67 @@
# use CONFIG mode first in find_package
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
macro(find_libtorrent version)
if (UNIX AND (NOT APPLE) AND (NOT CYGWIN))
find_package(LibtorrentRasterbar QUIET ${version} COMPONENTS torrent-rasterbar)
if (NOT LibtorrentRasterbar_FOUND)
include(FindPkgConfig)
pkg_check_modules(LibtorrentRasterbar IMPORTED_TARGET GLOBAL "libtorrent-rasterbar>=${version}")
if (NOT LibtorrentRasterbar_FOUND)
message(
FATAL_ERROR
"Package LibtorrentRasterbar >= ${version} not found"
" with CMake or pkg-config.\n- Set LibtorrentRasterbar_DIR to a directory containing"
" a LibtorrentRasterbarConfig.cmake file or add the installation prefix of LibtorrentRasterbar"
" to CMAKE_PREFIX_PATH.\n- Alternatively, make sure there is a valid libtorrent-rasterbar.pc"
" file in your system's pkg-config search paths (use the system environment variable PKG_CONFIG_PATH"
" to specify additional search paths if needed)."
)
endif()
add_library(LibtorrentRasterbar::torrent-rasterbar ALIAS PkgConfig::LibtorrentRasterbar)
# force a fake package to show up in the feature summary
set_property(GLOBAL APPEND PROPERTY
PACKAGES_FOUND
"LibtorrentRasterbar via pkg-config (version >= ${version})"
)
set_package_properties("LibtorrentRasterbar via pkg-config (version >= ${version})"
PROPERTIES
TYPE REQUIRED
)
else()
set_package_properties(LibtorrentRasterbar PROPERTIES TYPE REQUIRED)
endif()
else()
find_package(LibtorrentRasterbar ${version} REQUIRED COMPONENTS torrent-rasterbar)
endif()
endmacro()
find_libtorrent(${minLibtorrent1Version})
if (LibtorrentRasterbar_FOUND AND (LibtorrentRasterbar_VERSION VERSION_GREATER_EQUAL 2.0))
find_libtorrent(${minLibtorrentVersion})
endif()
# force variable type so that it always shows up in ccmake/cmake-gui frontends
set_property(CACHE LibtorrentRasterbar_DIR PROPERTY TYPE PATH)
find_package(Boost ${minBoostVersion} REQUIRED)
find_package(OpenSSL ${minOpenSSLVersion} REQUIRED)
find_package(ZLIB ${minZlibVersion} REQUIRED)
if (QT6)
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS Core Network Sql Xml LinguistTools)
if (DBUS)
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS DBus)
set_package_properties(Qt6DBus PROPERTIES
DESCRIPTION "Qt6 module for inter-process communication over the D-Bus protocol"
PURPOSE "Required by the DBUS feature"
)
endif()
else()
find_package(Qt5 ${minQt5Version} REQUIRED COMPONENTS Core Network Sql Xml LinguistTools)
if (DBUS)
find_package(Qt5 ${minQt5Version} REQUIRED COMPONENTS DBus)
set_package_properties(Qt5DBus PROPERTIES
DESCRIPTION "Qt5 module for inter-process communication over the D-Bus protocol"
PURPOSE "Required by the DBUS feature"
)
endif()
endif()

View File

@@ -0,0 +1,106 @@
# Set platform variables and create some interface-only library targets
# that some or all other targets will link to, either directly or transitively,
# to consume common compile options/definitions
# treat value specified by the CXX_STANDARD target property as a requirement by default
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTORCC_OPTIONS --compress 9 --threshold 5)
add_library(qbt_common_cfg INTERFACE)
# Full C++ 17 support is required
# See also https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html
# for a breakdown of the features that CMake recognizes for each C++ standard
target_compile_features(qbt_common_cfg INTERFACE
cxx_std_17
)
target_compile_definitions(qbt_common_cfg INTERFACE
QT_DISABLE_DEPRECATED_BEFORE=0x050f02
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
QT_NO_CAST_FROM_BYTEARRAY
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
QT_USE_QSTRINGBUILDER
QT_STRICT_ITERATORS
$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG_OUTPUT>
)
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_compile_definitions(qbt_common_cfg INTERFACE
_DARWIN_FEATURE_64_BIT_INODE
)
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_compile_definitions(qbt_common_cfg INTERFACE
NTDDI_VERSION=0x06010000
_WIN32_WINNT=0x0601
_WIN32_IE=0x0601
WIN32_LEAN_AND_MEAN
NOMINMAX
UNICODE
_UNICODE
)
endif()
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
target_compile_options(qbt_common_cfg INTERFACE
-Wall
-Wextra
-Wcast-qual
-Wcast-align
-Winvalid-pch
-Woverloaded-virtual
-Wold-style-cast
-Wnon-virtual-dtor
-pedantic
-pedantic-errors
)
# Clang 11 still doesn't support -Wstrict-null-sentinel
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-Wstrict-null-sentinel SNS_SUPPORT)
if (SNS_SUPPORT)
target_compile_options(qbt_common_cfg INTERFACE -Wstrict-null-sentinel)
endif()
endif()
if ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
target_compile_options(qbt_common_cfg INTERFACE
-Wno-range-loop-analysis
)
endif()
if (MINGW)
target_link_options(qbt_common_cfg INTERFACE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:LINKER:--dynamicbase>)
endif()
if (MSVC)
target_compile_options(qbt_common_cfg INTERFACE
/guard:cf
/utf-8
# https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
/Zc:__cplusplus
)
target_link_options(qbt_common_cfg INTERFACE
/guard:cf
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF>
# suppress linking warning due to /INCREMENTAL and /OPT:ICF being both ON
$<$<CONFIG:RelWithDebInfo>:/INCREMENTAL:NO>
)
if (MSVC_RUNTIME_DYNAMIC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
else()
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
endif()
if (LibtorrentRasterbar_VERSION VERSION_GREATER_EQUAL ${minLibtorrentVersion})
target_compile_definitions(qbt_common_cfg INTERFACE QBT_USES_LIBTORRENT2)
endif()

View File

@@ -0,0 +1,25 @@
# Return Qt translations files as list of paths
# It will return .qm files of qt/qtbase that aren't stub files.
# Requires that Qt has been found first because it depends on qmake being available
function(qbt_get_qt_translations qt_translations)
get_target_property(QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
execute_process(COMMAND "${QT_QMAKE_EXECUTABLE}" -query QT_INSTALL_TRANSLATIONS
OUTPUT_VARIABLE QT_TRANSLATIONS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
FILE(GLOB QT_TEMP_TRANSLATIONS CONFIGURE_DEPENDS
"${QT_TRANSLATIONS_DIR}/qt_??.qm"
"${QT_TRANSLATIONS_DIR}/qt_??_??.qm"
"${QT_TRANSLATIONS_DIR}/qtbase_??.qm"
"${QT_TRANSLATIONS_DIR}/qtbase_??_??.qm")
foreach(TRANSLATION ${QT_TEMP_TRANSLATIONS})
FILE(SIZE "${TRANSLATION}" translation_size)
# Consider files less than 10KB as stub translations
if (translation_size GREATER_EQUAL 10240)
list(APPEND QT_FINAL_TRANSLATIONS "${TRANSLATION}")
endif()
endforeach()
SET(${qt_translations} ${QT_FINAL_TRANSLATIONS} PARENT_SCOPE)
endfunction()

View File

@@ -1,93 +0,0 @@
# Set common variables and create some interface-only library targets
# that some or all other targets will link to, either directly or transitively,
# to consume common compile options/definitions
macro(qbt_common_config)
# treat value specified by the CXX_STANDARD target property as a requirement by default
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_library(qbt_common_cfg INTERFACE)
# Full C++ 17 support is required
# See also https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html
# for a breakdown of the features that CMake recognizes for each C++ standard
target_compile_features(qbt_common_cfg INTERFACE
cxx_std_17
)
target_compile_definitions(qbt_common_cfg INTERFACE
QT_DISABLE_DEPRECATED_BEFORE=0x050e00
QT_NO_CAST_TO_ASCII
QT_NO_CAST_FROM_BYTEARRAY
QT_USE_QSTRINGBUILDER
QT_STRICT_ITERATORS
$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG_OUTPUT>
)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_compile_definitions(qbt_common_cfg INTERFACE
NTDDI_VERSION=0x06010000
_WIN32_WINNT=0x0601
_WIN32_IE=0x0601
WIN32_LEAN_AND_MEAN
NOMINMAX
UNICODE
_UNICODE
)
endif()
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
target_compile_options(qbt_common_cfg INTERFACE
-Wall
-Wextra
-Wcast-qual
-Wcast-align
-Winvalid-pch
-Woverloaded-virtual
-Wold-style-cast
-Wnon-virtual-dtor
-pedantic
-pedantic-errors
)
# Clang 11 still doesn't support -Wstrict-null-sentinel
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-Wstrict-null-sentinel SNS_SUPPORT)
if (SNS_SUPPORT)
target_compile_options(qbt_common_cfg INTERFACE -Wstrict-null-sentinel)
endif()
endif()
if ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
target_compile_options(qbt_common_cfg INTERFACE
-Wno-range-loop-analysis
)
endif()
if (MINGW)
target_link_options(qbt_common_cfg INTERFACE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:LINKER:--dynamicbase>)
endif()
if (MSVC_RUNTIME_DYNAMIC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
else()
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
if (MSVC)
target_compile_options(qbt_common_cfg INTERFACE
/guard:cf
/utf-8
# https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
/Zc:__cplusplus
)
target_link_options(qbt_common_cfg INTERFACE
/guard:cf
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF>
# suppress linking warning due to /INCREMENTAL and /OPT:ICF being both ON
$<$<CONFIG:RelWithDebInfo>:/INCREMENTAL:NO>
)
endif()
endmacro(qbt_common_config)

View File

@@ -37,14 +37,17 @@ DEFINES += BOOST_ALL_NO_LIB
# Use one of the following options # Use one of the following options
DEFINES += BOOST_SYSTEM_STATIC_LINK DEFINES += BOOST_SYSTEM_STATIC_LINK
#DEFINES += BOOST_SYSTEM_DYN_LINK #DEFINES += BOOST_SYSTEM_DYN_LINK
# Enable if encountered build error with boost version <= 1.59 # Enable it if compiling with libtorrent 3.x
#DEFINES += BOOST_NO_CXX11_RVALUE_REFERENCES #DEFINES += BOOST_SYSTEM_USE_UTF8
# Enable if libtorrent was built with this flag defined # Enable if libtorrent was built with this flag defined
#DEFINES += TORRENT_NO_DEPRECATE #DEFINES += TORRENT_NO_DEPRECATE
# Enable if linking dynamically against libtorrent # Enable if linking dynamically against libtorrent
#DEFINES += TORRENT_LINKING_SHARED #DEFINES += TORRENT_LINKING_SHARED
# Enable this if compiling with libtorrent 2.x
#DEFINES += QBT_USES_LIBTORRENT2
# Enable stack trace support # Enable stack trace support
CONFIG += stacktrace CONFIG += stacktrace

365
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for qbittorrent v4.4.0alpha. # Generated by GNU Autoconf 2.71 for qbittorrent v4.5.5.
# #
# Report bugs to <bugs.qbittorrent.org>. # Report bugs to <bugs.qbittorrent.org>.
# #
@@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='qbittorrent' PACKAGE_NAME='qbittorrent'
PACKAGE_TARNAME='qbittorrent' PACKAGE_TARNAME='qbittorrent'
PACKAGE_VERSION='v4.4.0alpha' PACKAGE_VERSION='v4.5.5'
PACKAGE_STRING='qbittorrent v4.4.0alpha' PACKAGE_STRING='qbittorrent v4.5.5'
PACKAGE_BUGREPORT='bugs.qbittorrent.org' PACKAGE_BUGREPORT='bugs.qbittorrent.org'
PACKAGE_URL='https://www.qbittorrent.org/' PACKAGE_URL='https://www.qbittorrent.org/'
@@ -1329,7 +1329,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures qbittorrent v4.4.0alpha to adapt to many kinds of systems. \`configure' configures qbittorrent v4.5.5 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1400,7 +1400,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of qbittorrent v4.4.0alpha:";; short | recursive ) echo "Configuration of qbittorrent v4.5.5:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1450,7 +1450,7 @@ Some influential environment variables:
directories to add to pkg-config's search path directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path path overriding pkg-config's built-in search path
QT_QMAKE value of host_bins for Qt5Core >= 5.14, overriding pkg-config QT_QMAKE value of host_bins for Qt5Core >= 5.15.2, overriding pkg-config
Qt5Svg_CFLAGS Qt5Svg_CFLAGS
C compiler flags for Qt5Svg, overriding pkg-config C compiler flags for Qt5Svg, overriding pkg-config
Qt5Svg_LIBS linker flags for Qt5Svg, overriding pkg-config Qt5Svg_LIBS linker flags for Qt5Svg, overriding pkg-config
@@ -1533,7 +1533,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
qbittorrent configure v4.4.0alpha qbittorrent configure v4.5.5
generated by GNU Autoconf 2.71 generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc. Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1648,7 +1648,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by qbittorrent $as_me v4.4.0alpha, which was It was created by qbittorrent $as_me v4.5.5, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw $ $0$ac_configure_args_raw
@@ -4779,7 +4779,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='qbittorrent' PACKAGE='qbittorrent'
VERSION='v4.4.0alpha' VERSION='v4.5.5'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5188,29 +5188,38 @@ fi
# Detect OS # Detect OS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether OS is FreeBSD" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable specific tweaks for current host \"$host_os\"" >&5
printf %s "checking whether OS is FreeBSD... " >&6; } printf %s "checking whether to enable specific tweaks for current host \"$host_os\"... " >&6; }
if expr "$host_os" : ".*freebsd.*" > /dev/null case "$host_os" in
then : *darwin*)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
LIBS="-lexecinfo $LIBS" enable_qt_dbus=no
else $as_nop ;;
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether OS is macOS" >&5 *freebsd*)
printf %s "checking whether OS is macOS... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
if expr "$host_os" : ".*darwin.*" > /dev/null
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
enable_qt_dbus=no LIBS="-lexecinfo $LIBS"
else $as_nop ;;
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
*haiku*)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
LIBS="-lnetwork $LIBS"
;;
*openbsd*)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
LIBS="-lexecinfo $LIBS"
;;
*)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
fi ;;
esac
# Require 0.23 pkg-config # Require 0.23 pkg-config
@@ -5456,8 +5465,8 @@ printf "%s\n" "$enable_webui" >&6; }
esac esac
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.14\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.15.2\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.14") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.15.2") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
@@ -5466,12 +5475,12 @@ if test -n "$QT_QMAKE"; then
pkg_cv_QT_QMAKE="$QT_QMAKE" pkg_cv_QT_QMAKE="$QT_QMAKE"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.14\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.15.2\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.14") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.15.2") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_QT_QMAKE=`$PKG_CONFIG --variable="host_bins" "Qt5Core >= 5.14" 2>/dev/null` pkg_cv_QT_QMAKE=`$PKG_CONFIG --variable="host_bins" "Qt5Core >= 5.15.2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5501,8 +5510,8 @@ fi
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.14" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.15.2" >&5
printf %s "checking for Qt5 qmake >= 5.14... " >&6; } printf %s "checking for Qt5 qmake >= 5.15.2... " >&6; }
if test "x$QT_QMAKE" != "x" if test "x$QT_QMAKE" != "x"
then : then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $QT_QMAKE" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $QT_QMAKE" >&5
@@ -5522,19 +5531,19 @@ if test "x$enable_gui" = "xyes"
then : then :
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5Svg" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5Svg >= 5.15.2" >&5
printf %s "checking for Qt5Svg... " >&6; } printf %s "checking for Qt5Svg >= 5.15.2... " >&6; }
if test -n "$Qt5Svg_CFLAGS"; then if test -n "$Qt5Svg_CFLAGS"; then
pkg_cv_Qt5Svg_CFLAGS="$Qt5Svg_CFLAGS" pkg_cv_Qt5Svg_CFLAGS="$Qt5Svg_CFLAGS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.14\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.15.2\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.14") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.15.2") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_Qt5Svg_CFLAGS=`$PKG_CONFIG --cflags "Qt5Svg >= 5.14" 2>/dev/null` pkg_cv_Qt5Svg_CFLAGS=`$PKG_CONFIG --cflags "Qt5Svg >= 5.15.2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5546,12 +5555,12 @@ if test -n "$Qt5Svg_LIBS"; then
pkg_cv_Qt5Svg_LIBS="$Qt5Svg_LIBS" pkg_cv_Qt5Svg_LIBS="$Qt5Svg_LIBS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.14\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.15.2\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.14") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.15.2") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_Qt5Svg_LIBS=`$PKG_CONFIG --libs "Qt5Svg >= 5.14" 2>/dev/null` pkg_cv_Qt5Svg_LIBS=`$PKG_CONFIG --libs "Qt5Svg >= 5.15.2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5563,7 +5572,7 @@ fi
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -5572,14 +5581,14 @@ else
_pkg_short_errors_supported=no _pkg_short_errors_supported=no
fi fi
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5Svg >= 5.14" 2>&1` Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5Svg >= 5.15.2" 2>&1`
else else
Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5Svg >= 5.14" 2>&1` Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5Svg >= 5.15.2" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$Qt5Svg_PKG_ERRORS" >&5 echo "$Qt5Svg_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (Qt5Svg >= 5.14) were not met: as_fn_error $? "Package requirements (Qt5Svg >= 5.15.2) were not met:
$Qt5Svg_PKG_ERRORS $Qt5Svg_PKG_ERRORS
@@ -5590,7 +5599,7 @@ Alternatively, you may set the environment variables Qt5Svg_CFLAGS
and Qt5Svg_LIBS to avoid the need to call pkg-config. and Qt5Svg_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5 See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -5619,11 +5628,11 @@ case "x$enable_qt_dbus" in #(
"xyes") : "xyes") :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5DBus >= 5.14" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5DBus >= 5.15.2" >&5
printf %s "checking for Qt5DBus >= 5.14... " >&6; } printf %s "checking for Qt5DBus >= 5.15.2... " >&6; }
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5DBus >= 5.14\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5DBus >= 5.15.2\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5DBus >= 5.14") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5DBus >= 5.15.2") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
@@ -5698,11 +5707,11 @@ if test "x$want_boost" = "xyes"
then : then :
if test "x1.65" = "x" if test "x1.71" = "x"
then : then :
_AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0" _AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0"
else $as_nop else $as_nop
_AX_BOOST_BASE_TONUMERICVERSION_req="1.65" _AX_BOOST_BASE_TONUMERICVERSION_req="1.71"
fi fi
_AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\.[0-9]*\)'` _AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\.[0-9]*\)'`
_AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\)'` _AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\)'`
@@ -5732,7 +5741,7 @@ fi
libsubdirs="lib64 libx32 lib lib64" ;; #( libsubdirs="lib64 libx32 lib lib64" ;; #(
mips*64*) : mips*64*) :
libsubdirs="lib64 lib32 lib lib64" ;; #( libsubdirs="lib64 lib32 lib lib64" ;; #(
ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64) : ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64|e2k) :
libsubdirs="lib64 lib lib64" ;; #( libsubdirs="lib64 lib lib64" ;; #(
*) : *) :
libsubdirs="lib" libsubdirs="lib"
@@ -5742,6 +5751,8 @@ esac
case ${host_cpu} in #( case ${host_cpu} in #(
i?86) : i?86) :
multiarch_libsubdir="lib/i386-${host_os}" ;; #( multiarch_libsubdir="lib/i386-${host_os}" ;; #(
armv7l) :
multiarch_libsubdir="lib/arm-${host_os}" ;; #(
*) : *) :
multiarch_libsubdir="lib/${host_cpu}-${host_os}" multiarch_libsubdir="lib/${host_cpu}-${host_os}"
;; ;;
@@ -5750,8 +5761,8 @@ esac
if test "x$_AX_BOOST_BASE_boost_path" != "x" if test "x$_AX_BOOST_BASE_boost_path" != "x"
then : then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.65 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.71 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"" >&5
printf %s "checking for boostlib >= 1.65 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"... " >&6; } printf %s "checking for boostlib >= 1.71 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"... " >&6; }
if test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include" if test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"
then : then :
@@ -5759,8 +5770,8 @@ then :
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include" BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include"
for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.65 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.71 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"" >&5
printf %s "checking for boostlib >= 1.65 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"... " >&6; } printf %s "checking for boostlib >= 1.71 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"... " >&6; }
if test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" if test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"
then : then :
@@ -5805,8 +5816,8 @@ then :
BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path" BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.65 ($WANT_BOOST_VERSION)" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.71 ($WANT_BOOST_VERSION)" >&5
printf %s "checking for boostlib >= 1.65 ($WANT_BOOST_VERSION)... " >&6; } printf %s "checking for boostlib >= 1.71 ($WANT_BOOST_VERSION)... " >&6; }
CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS export CPPFLAGS
@@ -5977,8 +5988,8 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
if test "x$succeeded" != "xyes" ; then if test "x$succeeded" != "xyes" ; then
if test "x$_version" = "x0" ; then if test "x$_version" = "x0" ; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version 1.65 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version 1.71 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&5
printf "%s\n" "$as_me: We could not detect the boost libraries (version 1.65 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&6;} printf "%s\n" "$as_me: We could not detect the boost libraries (version 1.71 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&6;}
else else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5
printf "%s\n" "$as_me: Your boost libraries seems to old (version $_version)." >&6;} printf "%s\n" "$as_me: Your boost libraries seems to old (version $_version)." >&6;}
@@ -6011,40 +6022,21 @@ LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
# taken from ax_boost_base.m4 # taken from ax_boost_base.m4
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <boost/version.hpp>
int
main (void)
{
(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < (106000))]));
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"
then :
else $as_nop
QBT_ADD_DEFINES="$QBT_ADD_DEFINES BOOST_NO_CXX11_RVALUE_REFERENCES"
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 2.0.8" >&5
printf %s "checking for libtorrent... " >&6; } printf %s "checking for libtorrent-rasterbar >= 2.0.8... " >&6; }
if test -n "$libtorrent_CFLAGS"; then if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS" pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.13\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 2.0.8\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.13") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 2.0.8") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.13" 2>/dev/null` pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 2.0.8" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6056,12 +6048,12 @@ if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS" pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.13\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 2.0.8\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.13") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 2.0.8") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.13" 2>/dev/null` pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 2.0.8" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6073,7 +6065,7 @@ fi
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -6082,14 +6074,73 @@ else
_pkg_short_errors_supported=no _pkg_short_errors_supported=no
fi fi
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.13" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 2.0.8" 2>&1`
else else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.13" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 2.0.8" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$libtorrent_PKG_ERRORS" >&5 echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.13) were not met:
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" >&5
printf %s "checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2... " >&6; }
if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2) were not met:
$libtorrent_PKG_ERRORS $libtorrent_PKG_ERRORS
@@ -6100,7 +6151,7 @@ Alternatively, you may set the environment variables libtorrent_CFLAGS
and libtorrent_LIBS to avoid the need to call pkg-config. and libtorrent_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5 See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -6119,14 +6170,114 @@ else
libtorrent_LIBS=$pkg_cv_libtorrent_LIBS libtorrent_LIBS=$pkg_cv_libtorrent_LIBS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS"
LIBS="$libtorrent_LIBS $LIBS" fi
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" >&5
printf %s "checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2... " >&6; }
if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2) were not met:
$libtorrent_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables libtorrent_CFLAGS
and libtorrent_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
Alternatively, you may set the environment variables libtorrent_CFLAGS
and libtorrent_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details" "$LINENO" 5; }
else
libtorrent_CFLAGS=$pkg_cv_libtorrent_CFLAGS
libtorrent_LIBS=$pkg_cv_libtorrent_LIBS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS"
fi
else
libtorrent_CFLAGS=$pkg_cv_libtorrent_CFLAGS
libtorrent_LIBS=$pkg_cv_libtorrent_LIBS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_LIBTORRENT2"
fi fi
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl >= 1.1.1" >&5
printf %s "checking for openssl... " >&6; } printf %s "checking for openssl >= 1.1.1... " >&6; }
if test -n "$openssl_CFLAGS"; then if test -n "$openssl_CFLAGS"; then
pkg_cv_openssl_CFLAGS="$openssl_CFLAGS" pkg_cv_openssl_CFLAGS="$openssl_CFLAGS"
@@ -6166,7 +6317,7 @@ fi
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -6193,7 +6344,7 @@ Alternatively, you may set the environment variables openssl_CFLAGS
and openssl_LIBS to avoid the need to call pkg-config. and openssl_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5 See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -6218,8 +6369,8 @@ fi
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib >= 1.2.11" >&5
printf %s "checking for zlib... " >&6; } printf %s "checking for zlib >= 1.2.11... " >&6; }
if test -n "$zlib_CFLAGS"; then if test -n "$zlib_CFLAGS"; then
pkg_cv_zlib_CFLAGS="$zlib_CFLAGS" pkg_cv_zlib_CFLAGS="$zlib_CFLAGS"
@@ -6259,7 +6410,7 @@ fi
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -6286,7 +6437,7 @@ Alternatively, you may set the environment variables zlib_CFLAGS
and zlib_LIBS to avoid the need to call pkg-config. and zlib_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5 See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -7086,7 +7237,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by qbittorrent $as_me v4.4.0alpha, which was This file was extended by qbittorrent $as_me v4.5.5, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -7146,7 +7297,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped' ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\ ac_cs_version="\\
qbittorrent config.status v4.4.0alpha qbittorrent config.status v4.5.5
configured by $0, generated by GNU Autoconf 2.71, configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT([qbittorrent], [v4.4.0alpha], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/]) AC_INIT([qbittorrent], [v4.5.5], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
: ${CFLAGS=""} : ${CFLAGS=""}
@@ -8,7 +8,7 @@ AC_PROG_CXX
AC_PROG_SED AC_PROG_SED
AC_LANG(C++) AC_LANG(C++)
AC_CANONICAL_HOST AC_CANONICAL_HOST
AM_INIT_AUTOMAKE AM_INIT_AUTOMAKE([foreign])
# use compiler from env variables if available # use compiler from env variables if available
QBT_CC="$CC" QBT_CC="$CC"
@@ -53,17 +53,32 @@ AC_ARG_ENABLE(qt-dbus,
[enable_qt_dbus=yes]) [enable_qt_dbus=yes])
# Detect OS # Detect OS
AC_MSG_CHECKING([whether OS is FreeBSD]) AC_MSG_CHECKING([whether to enable specific tweaks for current host "$host_os"])
AS_IF([expr "$host_os" : ".*freebsd.*" > /dev/null], case "$host_os" in
[AC_MSG_RESULT([yes]) *darwin*)
LIBS="-lexecinfo $LIBS"], AC_MSG_RESULT([yes])
[AC_MSG_RESULT([no])]) enable_qt_dbus=no
;;
AC_MSG_CHECKING([whether OS is macOS]) *freebsd*)
AS_IF([expr "$host_os" : ".*darwin.*" > /dev/null], AC_MSG_RESULT([yes])
[AC_MSG_RESULT([yes]) LIBS="-lexecinfo $LIBS"
enable_qt_dbus=no], ;;
[AC_MSG_RESULT([no])])
*haiku*)
AC_MSG_RESULT([yes])
LIBS="-lnetwork $LIBS"
;;
*openbsd*)
AC_MSG_RESULT([yes])
LIBS="-lexecinfo $LIBS"
;;
*)
AC_MSG_RESULT([no])
;;
esac
# Require 0.23 pkg-config # Require 0.23 pkg-config
PKG_PROG_PKG_CONFIG([0.23]) PKG_PROG_PKG_CONFIG([0.23])
@@ -141,7 +156,7 @@ AS_IF([test "x$QT_QMAKE" = "x"],
[AC_MSG_ERROR([Could not find qmake]) [AC_MSG_ERROR([Could not find qmake])
]) ])
AS_IF([test "x$enable_gui" = "xyes"], AS_IF([test "x$enable_gui" = "xyes"],
[PKG_CHECK_MODULES(Qt5Svg, [Qt5Svg >= 5.14]) [PKG_CHECK_MODULES(Qt5Svg, [Qt5Svg >= 5.15.2])
]) ])
AC_MSG_CHECKING([whether QtDBus should be enabled]) AC_MSG_CHECKING([whether QtDBus should be enabled])
AS_CASE(["x$enable_qt_dbus"], AS_CASE(["x$enable_qt_dbus"],
@@ -159,7 +174,7 @@ AS_CASE(["x$enable_qt_dbus"],
AC_MSG_ERROR([Unknown option "$enable_qt_dbus". Use either "yes" or "no".])]) AC_MSG_ERROR([Unknown option "$enable_qt_dbus". Use either "yes" or "no".])])
AX_BOOST_BASE([1.65], AX_BOOST_BASE([1.71],
[AC_MSG_NOTICE([Boost CXXFLAGS: "$BOOST_CPPFLAGS"]) [AC_MSG_NOTICE([Boost CXXFLAGS: "$BOOST_CPPFLAGS"])
AC_MSG_NOTICE([Boost LDFLAGS: "$BOOST_LDFLAGS"])], AC_MSG_NOTICE([Boost LDFLAGS: "$BOOST_LDFLAGS"])],
[AC_MSG_ERROR([Could not find Boost])]) [AC_MSG_ERROR([Could not find Boost])])
@@ -172,13 +187,12 @@ m4_define([DETECT_BOOST_VERSION_PROGRAM],
[AC_LANG_PROGRAM([[#include <boost/version.hpp>]], [AC_LANG_PROGRAM([[#include <boost/version.hpp>]],
[[(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));]])]) [[(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));]])])
AC_COMPILE_IFELSE([DETECT_BOOST_VERSION_PROGRAM(106000)], [],
[QBT_ADD_DEFINES="$QBT_ADD_DEFINES BOOST_NO_CXX11_RVALUE_REFERENCES"])
PKG_CHECK_MODULES(libtorrent, PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 1.2.13], [libtorrent-rasterbar >= 2.0.8],
[CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" [CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_LIBTORRENT2"],
LIBS="$libtorrent_LIBS $LIBS"]) [PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2],
[CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS"])])
PKG_CHECK_MODULES(openssl, PKG_CHECK_MODULES(openssl,
[openssl >= 1.1.1], [openssl >= 1.1.1],

4
dist/mac/Info.plist vendored
View File

@@ -55,7 +55,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>4.4.0</string> <string>4.5.5</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
@@ -67,7 +67,7 @@
<key>NSAppleScriptEnabled</key> <key>NSAppleScriptEnabled</key>
<string>YES</string> <string>YES</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>Copyright © 2006-2021 The qBittorrent project</string> <string>Copyright © 2006-2023 The qBittorrent project</string>
<key>UTExportedTypeDeclarations</key> <key>UTExportedTypeDeclarations</key>
<array> <array>
<dict> <dict>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 775 B

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 775 B

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -3,7 +3,7 @@
<component type="desktop"> <component type="desktop">
<id>org.qbittorrent.qBittorrent</id> <id>org.qbittorrent.qBittorrent</id>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0 and OpenSSL</project_license> <project_license>GPL-3.0-or-later and OpenSSL</project_license>
<name>qBittorrent</name> <name>qBittorrent</name>
<summary>An open-source Bittorrent client</summary> <summary>An open-source Bittorrent client</summary>
<description> <description>
@@ -74,6 +74,6 @@
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url> <url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
<content_rating type="oars-1.1"/> <content_rating type="oars-1.1"/>
<releases> <releases>
<release version="4.4.0" date="2020-10-18"/> <release version="4.5.5" date="2023-08-29"/>
</releases> </releases>
</component> </component>

View File

@@ -11,20 +11,15 @@ Type=Application
StartupNotify=false StartupNotify=false
StartupWMClass=qbittorrent StartupWMClass=qbittorrent
Keywords=bittorrent;torrent;magnet;download;p2p; Keywords=bittorrent;torrent;magnet;download;p2p;
SingleMainWindow=true
# Translations # Translations
# Translations
Comment[oc]=Telecargar e partejar de fichièrs amb BitTorrent
GenericName[oc]=Client BitTorrent
Name[oc]=qBittorrent
Comment[af]=Aflaai en deel lêers oor BitTorrent Comment[af]=Aflaai en deel lêers oor BitTorrent
GenericName[af]=BitTorrent kliënt GenericName[af]=BitTorrent kliënt
Name[af]=qBittorrent Name[af]=qBittorrent
Comment[ar]=نزّل وشارك الملفات عبر كيوبت‎تورنت Comment[ar]=نزّل وشارك الملفات عبر كيوبت‎تورنت
GenericName[ar]=عميل بت‎تورنت GenericName[ar]=عميل بت‎تورنت
Name[ar]=كيوبت‎تورنت Name[ar]=qBittorrent
Comment[be]=Спампоўванне і раздача файлаў праз пратакол BitTorrent Comment[be]=Спампоўванне і раздача файлаў праз пратакол BitTorrent
GenericName[be]=Кліент BitTorrent GenericName[be]=Кліент BitTorrent
Name[be]=qBittorrent Name[be]=qBittorrent
@@ -33,7 +28,10 @@ GenericName[bg]=BitTorrent клиент
Name[bg]=qBittorrent Name[bg]=qBittorrent
Comment[bn]=বিটটরেন্টে ফাইল ডাউনলোড এবং শেয়ার করুন Comment[bn]=বিটটরেন্টে ফাইল ডাউনলোড এবং শেয়ার করুন
GenericName[bn]=বিটটরেন্ট ক্লায়েন্ট GenericName[bn]=বিটটরেন্ট ক্লায়েন্ট
Name[bn]=কিউবি্টটরেন্ট Name[bn]=qBittorrent
Comment[zh]=通过 BitTorrent 下载和分享文件
GenericName[zh]=BitTorrent 客户端
Name[zh]=qBittorrent
Comment[bs]=Preuzmi i dijeli datoteke preko BitTorrent-a Comment[bs]=Preuzmi i dijeli datoteke preko BitTorrent-a
GenericName[bs]=BitTorrent klijent GenericName[bs]=BitTorrent klijent
Name[bs]=qBittorrent Name[bs]=qBittorrent
@@ -49,8 +47,8 @@ Name[da]=qBittorrent
Comment[de]=Über BitTorrent Dateien herunterladen und teilen Comment[de]=Über BitTorrent Dateien herunterladen und teilen
GenericName[de]=BitTorrent Client GenericName[de]=BitTorrent Client
Name[de]=qBittorrent Name[de]=qBittorrent
Comment[el]=Κάντε λήψη και ανταλλάξτε αρχεία μέσω BitTorrent Comment[el]=Κάντε λήψη και μοιραστείτε αρχεία μέσω BitTorrent
GenericName[el]=Πελάτης BitTorrent GenericName[el]=BitTorrent client
Name[el]=qBittorrent Name[el]=qBittorrent
Comment[en_GB]=Download and share files over BitTorrent Comment[en_GB]=Download and share files over BitTorrent
GenericName[en_GB]=BitTorrent client GenericName[en_GB]=BitTorrent client
@@ -66,11 +64,11 @@ GenericName[eu]=BitTorrent bezeroa
Name[eu]=qBittorrent Name[eu]=qBittorrent
Comment[fa]=دانلود و به اشتراک گذاری فایل های بوسیله بیت تورنت Comment[fa]=دانلود و به اشتراک گذاری فایل های بوسیله بیت تورنت
GenericName[fa]=بیت تورنت نسخه کلاینت GenericName[fa]=بیت تورنت نسخه کلاینت
Name[fa]=کیو بیت تورنت Name[fa]=qBittorrent
Comment[fi]=Lataa ja jaa tiedostoja BitTorrentia käyttäen Comment[fi]=Lataa ja jaa tiedostoja BitTorrentia käyttäen
GenericName[fi]=BitTorrent-asiakasohjelma GenericName[fi]=BitTorrent-asiakasohjelma
Name[fi]=qBittorrent Name[fi]=qBittorrent
Comment[fr]=Télécharger et partager des fichiers avec BitTorrent Comment[fr]=Télécharger et partager des fichiers sur BitTorrent
GenericName[fr]=Client BitTorrent GenericName[fr]=Client BitTorrent
Name[fr]=qBittorrent Name[fr]=qBittorrent
Comment[gl]=Descargar e compartir ficheiros co protocolo BitTorrent Comment[gl]=Descargar e compartir ficheiros co protocolo BitTorrent
@@ -78,7 +76,7 @@ GenericName[gl]=Cliente BitTorrent
Name[gl]=qBittorrent Name[gl]=qBittorrent
Comment[gu]=બિટ્ટોરેંટ પર ફાઈલો ડાઉનલોડ અને શેર કરો Comment[gu]=બિટ્ટોરેંટ પર ફાઈલો ડાઉનલોડ અને શેર કરો
GenericName[gu]=બિટ્ટોરેંટ ક્લાયન્ટ GenericName[gu]=બિટ્ટોરેંટ ક્લાયન્ટ
Name[gu]=ક્યૂ-બિટ્ટોરેંટ Name[gu]=qBittorrent
Comment[he]=הורד ושתף קבצים על גבי ביטורנט Comment[he]=הורד ושתף קבצים על גבי ביטורנט
GenericName[he]=לקוח ביטורנט GenericName[he]=לקוח ביטורנט
Name[he]=qBittorrent Name[he]=qBittorrent
@@ -100,33 +98,27 @@ Name[is]=qBittorrent
Comment[it]=Scarica e condividi file tramite BitTorrent Comment[it]=Scarica e condividi file tramite BitTorrent
GenericName[it]=Client BitTorrent GenericName[it]=Client BitTorrent
Name[it]=qBittorrent Name[it]=qBittorrent
Comment[ja]=BitTorrent でファイルダウンロードおよび共有します Comment[ja]=BitTorrentでファイルダウンロードと共有
GenericName[ja]=BitTorrent クライアント GenericName[ja]=BitTorrentクライアント
Name[ja]=qBittorrent Name[ja]=qBittorrent
Comment[ka]=ჩამოტვირთე და გააზიარე ფაილები Bittorrent-ის საშუალებით Comment[ka]=გადმოტვირთე და გააზიარე ფაილები BitTorrent-ის საშუალებით
GenericName[ka]=BitTorrent კლიენტი GenericName[ka]=BitTorrent კლიენტი
Name[ka]=qBittorrent Name[ka]=qBittorrent
Comment[ko]=비트토렌트를 통 파일을 받고 공유합니다 Comment[ko]=BitTorrent를 통 파일 내려받기 및 공유
GenericName[ko]=비트토렌트 클라이언트 GenericName[ko]=BitTorrent 클라이언트
Name[ko]=qBittorrent Name[ko]=qBittorrent
Comment[zh]=通过 BitTorrent 下载和分享文件
GenericName[zh]=BitTorrent 客户端
Name[zh]=qBittorrent
Comment[lt]=Atsisiųskite bei dalinkitės failais BitTorrent tinkle Comment[lt]=Atsisiųskite bei dalinkitės failais BitTorrent tinkle
GenericName[lt]=BitTorrent klientas GenericName[lt]=BitTorrent klientas
Name[lt]=qBittorrent Name[lt]=qBittorrent
Comment[mk]=Превземајте и споделувајте фајлови преку BitTorrent Comment[mk]=Превземајте и споделувајте фајлови преку BitTorrent
GenericName[mk]=BitTorrent клиент GenericName[mk]=BitTorrent клиент
Name[mk]=qBittorrent Name[mk]=qBittorrent
Comment[en_AU]=Download and share files over BitTorrent Comment[my]=တောရန့်ဖြင့်ဖိုင်များဒေါင်းလုဒ်ဆွဲရန်နှင့်မျှဝေရန်
GenericName[en_AU]=BitTorrent client GenericName[my]=တောရန့်စီမံခန့်ခွဲသည့်အရာ
Name[en_AU]=qBittorrent Name[my]=qBittorrent
Comment[nb]=Last ned og del filer over BitTorrent Comment[nb]=Last ned og del filer over BitTorrent
GenericName[nb]=BitTorrent-klient GenericName[nb]=BitTorrent-klient
Name[nb]=qBittorrent Name[nb]=qBittorrent
Comment[nqo]=ߞߐߕߐ߯ߘߐ ߟߎ߬ ߟߊߖߌ߰ ߞߊ߬ ߓߊ߲߫ ߞߵߊ߬ߟߎ߬ ߘߐߕߟߊ߫ ߓߌߙߏߙߍ߲ߕ ߞߊ߲߬
GenericName[nqo]=ߓߌߙߏߙߍ߲ߕ ߕߣߐ߬ߓߐ߬ߟߊ
Name[nqo]=ߞߎ߳ߓߌߕߏߙߍ߲ߕ
Comment[nl]=Bestanden downloaden en delen via BitTorrent Comment[nl]=Bestanden downloaden en delen via BitTorrent
GenericName[nl]=BitTorrent-client GenericName[nl]=BitTorrent-client
Name[nl]=qBittorrent Name[nl]=qBittorrent
@@ -151,14 +143,62 @@ Name[sk]=qBittorrent
Comment[sl]=Prenesite in delite datoteke preko BitTorrenta Comment[sl]=Prenesite in delite datoteke preko BitTorrenta
GenericName[sl]=BitTorrent odjemalec GenericName[sl]=BitTorrent odjemalec
Name[sl]=qBittorrent Name[sl]=qBittorrent
Name[sq]=qBittorrent
Comment[sr]=Преузимајте и делите фајлове преко BitTorrent протокола Comment[sr]=Преузимајте и делите фајлове преко BitTorrent протокола
GenericName[sr]=BitTorrent-клијент GenericName[sr]=BitTorrent-клијент
Name[sr]=qBittorrent
Comment[sr@latin]=Preuzimanje i deljenje fajlova preko BitTorrent-a Comment[sr@latin]=Preuzimanje i deljenje fajlova preko BitTorrent-a
GenericName[sr@latin]=BitTorrent klijent GenericName[sr@latin]=BitTorrent klijent
Name[sr@latin]=qBittorrent Name[sr@latin]=qBittorrent
Comment[sv]=Hämta och dela filer över BitTorrent Comment[sv]=Hämta och dela filer över BitTorrent
GenericName[sv]=BitTorrent-klient GenericName[sv]=BitTorrent-klient
Name[sv]=qBittorrent Name[sv]=qBittorrent
Comment[ta]=BitTorrent வழியாக கோப்புகளை பதிவிறக்க மற்றும் பகிர
GenericName[ta]=BitTorrent வாடிக்கையாளர்
Name[ta]=qBittorrent
Comment[te]=క్యు బిట్ టొరెంట్ తో ఫైల్స్ దిగుమతి చేసుకోండి , పంచుకోండి
GenericName[te]=క్యు బిట్ టొరెంట్ క్లయింట్
Name[te]=qBittorrent
Comment[th]=ดาวน์โหลดและแชร์ไฟล์ผ่าน BitTorrent
GenericName[th]=โปรแกรมบิททอเร้นท์
Name[th]=qBittorrent
Comment[tr]=Dosyaları BitTorrent üzerinden indirin ve paylaşın
GenericName[tr]=BitTorrent istemcisi
Name[tr]=qBittorrent
Comment[ur]=BitTorrent پر فائلوں کو ڈاؤن لوڈ کریں اور اشتراک کریں
GenericName[ur]=قیو بٹ ٹورنٹ کلائنٹ
Name[ur]=qBittorrent
Comment[uk]=Завантажуйте та поширюйте файли через BitTorrent
GenericName[uk]=BitTorrent-клієнт
Name[uk]=qBittorrent
Comment[vi]=Tải xuống và chia sẻ tệp qua BitTorrent
GenericName[vi]=Máy khách BitTorrent
Name[vi]=qBittorrent
Comment[zh_HK]=經由BitTorrent下載並分享檔案
GenericName[zh_HK]=BitTorrent用戶端
Name[zh_HK]=qBittorrent
Comment[zh_TW]=經由 BitTorrent 下載並分享檔案
GenericName[zh_TW]=BitTorrent 用戶端
Name[zh_TW]=qBittorrent
Comment[eo]=Elŝutu kaj kunhavigu dosierojn per BitTorrent
GenericName[eo]=BitTorrent-kliento
Name[eo]=qBittorrent
Comment[kk]=BitTorrent арқылы файл жүктеу және бөлісу
GenericName[kk]=BitTorrent клиенті
Name[kk]=qBittorrent
Comment[en_AU]=Download and share files over BitTorrent
GenericName[en_AU]=BitTorrent client
Name[en_AU]=qBittorrent
Name[rm]=qBittorrent
Name[jv]=qBittorrent
Comment[oc]=Telecargar e partejar de fichièrs amb BitTorrent
GenericName[oc]=Client BitTorrent
Name[oc]=qBittorrent
Name[ug]=qBittorrent
Name[yi]=qBittorrent
Comment[nqo]=ߞߐߕߐ߯ߘߐ ߟߎ߬ ߟߊߖߌ߰ ߞߊ߬ ߓߊ߲߫ ߞߵߊ߬ߟߎ߬ ߘߐߕߟߊ߫ ߓߌߙߏߙߍ߲ߕ ߞߊ߲߬
GenericName[nqo]=ߓߌߙߏߙߍ߲ߕ ߕߣߐ߬ߓߐ߬ߟߊ
Name[nqo]=qBittorrent
Comment[uz@Latn]=BitTorrent orqali fayllarni yuklab olish va baham korish Comment[uz@Latn]=BitTorrent orqali fayllarni yuklab olish va baham korish
GenericName[uz@Latn]=BitTorrent mijozi GenericName[uz@Latn]=BitTorrent mijozi
Name[uz@Latn]=qBittorrent Name[uz@Latn]=qBittorrent
@@ -167,52 +207,23 @@ GenericName[ltg]=BitTorrent klients
Name[ltg]=qBittorrent Name[ltg]=qBittorrent
Comment[hi_IN]=BitTorrent द्वारा फाइल डाउनलोड व सहभाजन Comment[hi_IN]=BitTorrent द्वारा फाइल डाउनलोड व सहभाजन
GenericName[hi_IN]=Bittorrent साधन GenericName[hi_IN]=Bittorrent साधन
Name[hi_IN]=क्यूबिटटाॅरेंट Name[hi_IN]=qBittorrent
Comment[tr]=Dosyaları BitTorrent üzerinden indirin ve paylaşın Comment[az@latin]=Faylları BitTorrent vasitəsilə endirin və paylaşın
GenericName[tr]=BitTorrent istemcisi
Name[tr]=qBittorrent
Comment[ur]=BitTorrent پر فائلوں کو ڈاؤن لوڈ کریں اور اشتراک کریں
GenericName[ur]=قیو بٹ ٹورنٹ کلائنٹ
Name[ur]=قیو بٹ ٹورنٹ
Comment[uk]=Завантажуйте та поширюйте файли через BitTorrent
GenericName[uk]=BitTorrent-клієнт
Name[uk]=qBittorrent
Comment[vi]=Tải xuống và chia sẻ tệp qua BitTorrent
GenericName[vi]=Client BitTorrent
Name[vi]=qBittorrent
Comment[az@latin]=Faylları BitTorrent vasitəsilə göndərin və paylaşın
GenericName[az@latin]=BitTorrent client GenericName[az@latin]=BitTorrent client
Name[az@latin]=qBittorrent Name[az@latin]=qBittorrent
Comment[zh_HK]=經由BitTorrent下載並分享檔案
GenericName[zh_HK]=BitTorrent用戶端
Name[zh_HK]=qBittorrent
Comment[zh_TW]=經由 BitTorrent 下載並分享檔案
GenericName[zh_TW]=BitTorrent 客戶端
Name[zh_TW]=qBittorrent
Comment[lv_LV]=Lejupielādēt un koplietot failus ar BitTorrent Comment[lv_LV]=Lejupielādēt un koplietot failus ar BitTorrent
GenericName[lv_LV]=BitTorrent klients GenericName[lv_LV]=BitTorrent klients
Name[lv_LV]=qBittorrent Name[lv_LV]=qBittorrent
Comment[ms_MY]=Muat turun dan kongsi fail melalui BitTorrent Comment[ms_MY]=Muat turun dan kongsi fail melalui BitTorrent
GenericName[ms_MY]=Klien BitTorrent GenericName[ms_MY]=Klien BitTorrent
Name[ms_MY]=qBittorrent Name[ms_MY]=qBittorrent
Comment[eo]=Elŝutu kaj kunhavigu dosierojn per BitTorrent
GenericName[eo]=BitTorrent-kliento
Name[eo]=qBittorrent
Comment[mn_MN]=BitTorrent-оор файлуудаа тат, түгээ Comment[mn_MN]=BitTorrent-оор файлуудаа тат, түгээ
GenericName[mn_MN]=BitTorrent татагч GenericName[mn_MN]=BitTorrent татагч
Name[mn_MN]=qBittorrent Name[mn_MN]=qBittorrent
Comment[ta]=BitTorrent வழியாக கோப்புகளை பதிவிறக்க மற்றும் பகிர
GenericName[ta]=BitTorrent வாடிக்கையாளர்
Name[ta]=qBittorrent
Comment[ne_NP]=फाइलहरू डाउनलोड गर्नुहोस् र BitTorrent मा साझा गर्नुहोस् Comment[ne_NP]=फाइलहरू डाउनलोड गर्नुहोस् र BitTorrent मा साझा गर्नुहोस्
GenericName[ne_NP]=BitTorrent क्लाइन्ट GenericName[ne_NP]=BitTorrent क्लाइन्ट
Name[ne_NP]=qBittorrent Name[ne_NP]=qBittorrent
Comment[te]=క్యు బిట్ టొరెంట్ తో ఫైల్స్ దిగుమతి చేసుకోండి , పంచుకోండి
GenericName[te]=క్యు బిట్ టొరెంట్ క్లయింట్
Name[te]=క్యు బిట్ టొరెంట్
Comment[pt_PT]=Transferir e partilhar ficheiros por BitTorrent Comment[pt_PT]=Transferir e partilhar ficheiros por BitTorrent
GenericName[pt_PT]=Cliente BitTorrent GenericName[pt_PT]=Cliente BitTorrent
Name[pt_PT]=qBittorrent Name[pt_PT]=qBittorrent
Comment[th]=ดาวน์โหลดและแชร์ไฟล์ด้วยบิททอเร้น Name[si_LK]=qBittorrent
GenericName[th]=โปรแกรมบิททอเร้น
Name[th]=qBittorrent

View File

@@ -9,6 +9,7 @@ Type=simple
PrivateTmp=false PrivateTmp=false
User=%i User=%i
ExecStart=@EXPAND_BINDIR@/qbittorrent-nox ExecStart=@EXPAND_BINDIR@/qbittorrent-nox
TimeoutStopSec=1800
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

Some files were not shown because too many files have changed in this diff Show More