Compare commits

..

131 Commits

Author SHA1 Message Date
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
618 changed files with 178746 additions and 219804 deletions

View File

@@ -37,6 +37,8 @@ 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
@@ -45,12 +47,11 @@ before_build:
# 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%"
# lupdate chokes when it parses headers from system includes, especially Boost # lupdate chokes when it parses headers from system inludes, especially Boost
# it also chokes with the sources from src/app/qtlocalpeer (formerly qtsingleapplication) # it also chokes with the sources from src/app/qtlocalpeer (formerly qtsingleapplication)
# Workaround: temporarily rename them to run lupdate with the .pro file # Workaround: temporarily rename them to run lupdate with the .pro file
- RENAME conf.pri conf.pri.temp - RENAME conf.pri conf.pri.temp
@@ -68,11 +69,8 @@ after_build:
- COPY src\release\qbittorrent.exe upload - COPY src\release\qbittorrent.exe upload
- COPY src\release\qbittorrent.pdb 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.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.dll" upload
- COPY "%CACHE_DIR%\base\bin\libssl-1_1-x64.pdb" upload - COPY "%CACHE_DIR%\base\lib\torrent-rasterbar.dll" 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 "%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\Qt5Core.dll upload
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Gui.dll upload - COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Gui.dll upload

View File

@@ -1,82 +0,0 @@
Checks: >
bugprone-*,
cert-*,
concurrency-*,
cppcoreguidelines-*,
misc-*,
modernize-*,
performance-*,
portability-*,
readability-*,
-# not applicable at all,
-bugprone-easily-swappable-parameters,
-bugprone-implicit-widening-of-multiplication-result,
-bugprone-macro-parentheses,
-cppcoreguidelines-avoid-c-arrays,
-cppcoreguidelines-avoid-magic-numbers,
-cppcoreguidelines-avoid-non-const-global-variables,
-cppcoreguidelines-macro-usage,
-cppcoreguidelines-non-private-member-variables-in-classes,
-cppcoreguidelines-owning-memory,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-cppcoreguidelines-pro-bounds-constant-array-index,
-cppcoreguidelines-pro-bounds-pointer-arithmetic,
-cppcoreguidelines-pro-type-const-cast,
-cppcoreguidelines-pro-type-reinterpret-cast,
-cppcoreguidelines-pro-type-union-access,
-cppcoreguidelines-pro-type-vararg,
-cppcoreguidelines-special-member-functions,
-cppcoreguidelines-virtual-class-destructor,
-misc-no-recursion,
-misc-non-private-member-variables-in-classes,
-misc-unused-parameters,
-modernize-avoid-c-arrays,
-modernize-pass-by-value,
-modernize-use-auto,
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
-modernize-use-using,
-readability-function-cognitive-complexity,
-readability-function-size,
-readability-identifier-length,
-readability-implicit-bool-conversion,
-readability-isolate-declaration,
-readability-magic-numbers,
-readability-named-parameter,
-readability-redundant-access-specifiers,
-readability-simplify-boolean-expr,
-readability-uppercase-literal-suffix,
-# only sometimes useful,
-bugprone-narrowing-conversions,
-cert-dcl58-cpp,
-cert-err33-c,
-cert-err58-cpp,
-clang-analyzer-core.CallAndMessage,
-clang-analyzer-cplusplus.NewDelete,
-clang-analyzer-cplusplus.NewDeleteLeaks,
-concurrency-mt-unsafe,
-cppcoreguidelines-init-variables,
-cppcoreguidelines-narrowing-conversions,
-cppcoreguidelines-prefer-member-initializer,
-cppcoreguidelines-pro-type-static-cast-downcast,
-misc-definitions-in-headers,
-modernize-concat-nested-namespaces,
-modernize-loop-convert,
-modernize-raw-string-literal,
-modernize-unary-static-assert,
-performance-no-automatic-move,
-readability-convert-member-functions-to-static,
-readability-else-after-return,
-readability-redundant-declaration,
-# obsoleted,
-cert-dcl21-cpp
CheckOptions:
- { key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors, value: true }
- { key: modernize-use-override.IgnoreDestructors, value: true }
- { key: performance-for-range-copy.AllowedTypes, value: "QJsonValue" }
- { key: performance-for-range-copy.WarnOnAllAutoCopies, value: true }
- { key: readability-braces-around-statements.ShortStatementLines, value: 3 }
HeaderFilterRegex: ".+/src/.*\\.h"
WarningsAsErrors: "*"

2
.gitattributes vendored
View File

@@ -5,5 +5,3 @@ core.eol=lf
*.png binary *.png binary
*.qm binary *.qm binary
*.zip binary *.zip binary
test/testdata/crlf.txt text eol=crlf

View File

@@ -17,12 +17,12 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
libt_version: ["2.0.9", "1.2.19"] libt_version: ["2.0.8", "1.2.18"]
qbt_gui: ["GUI=ON", "GUI=OFF"] qbt_gui: ["GUI=ON", "GUI=OFF"]
qt_version: ["5.15.2", "6.5.0"] qt_version: ["5.15.2", "6.4.0"]
exclude: exclude:
- libt_version: "1.2.19" - libt_version: "1.2.18"
qt_version: "6.5.0" qt_version: "6.4.0"
env: env:
boost_path: "${{ github.workspace }}/../boost" boost_path: "${{ github.workspace }}/../boost"
@@ -33,18 +33,14 @@ jobs:
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Install dependencies - name: Install dependencies
uses: Wandalen/wretry.action@v1 run: |
env: export \
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 \
HOMEBREW_NO_INSTALL_CLEANUP: 1 HOMEBREW_NO_INSTALL_CLEANUP=1
with: brew update > /dev/null
attempt_delay: 20000 brew install \
attempt_limit: 6 cmake ninja \
command: | openssl@1.1 zlib
brew update > /dev/null
brew install \
cmake ninja \
openssl@1.1 zlib
- name: Setup ccache - name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1 uses: Chocobo1/setup-ccache-action@v1
@@ -56,7 +52,7 @@ jobs:
curl \ curl \
-L \ -L \
-o "${{ runner.temp }}/boost.tar.bz2" \ -o "${{ runner.temp }}/boost.tar.bz2" \
"https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.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 }}/.." tar -xf "${{ runner.temp }}/boost.tar.bz2" -C "${{ github.workspace }}/.."
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}" mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
@@ -78,7 +74,6 @@ jobs:
cmake \ cmake \
-B build \ -B build \
-G "Ninja" \ -G "Ninja" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_STANDARD=17 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
@@ -89,7 +84,7 @@ jobs:
sudo cmake --install build sudo cmake --install build
- name: Build qBittorrent (Qt5) - name: Build qBittorrent (Qt5)
if: startsWith(matrix.qt_version, 5) if: ${{ startsWith(matrix.qt_version, 5) }}
run: | run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \ CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \ LDFLAGS="$LDFLAGS -gz" \
@@ -108,7 +103,7 @@ jobs:
cmake --build build --target check cmake --build build --target check
- name: Build qBittorrent (Qt6) - name: Build qBittorrent (Qt6)
if: startsWith(matrix.qt_version, 6) if: ${{ startsWith(matrix.qt_version, 6) }}
run: | run: |
CXXFLAGS="$CXXFLAGS -Wno-gnu-zero-variadic-macro-arguments -Werror -Wno-error=deprecated-declarations" \ CXXFLAGS="$CXXFLAGS -Wno-gnu-zero-variadic-macro-arguments -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \ LDFLAGS="$LDFLAGS -gz" \
@@ -129,17 +124,7 @@ jobs:
- name: Prepare build artifacts - name: Prepare build artifacts
run: | 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 mkdir upload
cp "build/$appName.dmg" upload
mkdir upload/cmake mkdir upload/cmake
cp build/compile_commands.json upload/cmake cp build/compile_commands.json upload/cmake
mkdir upload/cmake/libtorrent mkdir upload/cmake/libtorrent
@@ -148,5 +133,5 @@ jobs:
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }} name: build-info_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
path: upload path: upload

View File

@@ -4,7 +4,6 @@ on: [pull_request, push]
permissions: permissions:
actions: write actions: write
security-events: write
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -18,11 +17,11 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
libt_version: ["2.0.9", "1.2.19"] libt_version: ["2.0.8", "1.2.18"]
qbt_gui: ["GUI=ON", "GUI=OFF"] qbt_gui: ["GUI=ON", "GUI=OFF"]
qt_version: ["5.15.2", "6.2.0"] qt_version: ["5.15.2", "6.2.0"]
exclude: exclude:
- libt_version: "1.2.19" - libt_version: "1.2.18"
qt_version: "6.2.0" qt_version: "6.2.0"
steps: steps:
@@ -60,23 +59,14 @@ jobs:
cmake \ cmake \
-B build \ -B build \
-G "Ninja" \ -G "Ninja" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-Ddeprecated-functions=OFF -Ddeprecated-functions=OFF
cmake --build build cmake --build build
sudo cmake --install build sudo cmake --install build
# to avoid scanning 3rdparty codebases, initialize it just before building qbt
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') && startsWith(matrix.qt_version, 6)
with:
config-file: ./.github/workflows/helper/codeql/cpp.yaml
languages: cpp
- name: Build qBittorrent (Qt5) - name: Build qBittorrent (Qt5)
if: startsWith(matrix.qt_version, 5) if: ${{ startsWith(matrix.qt_version, 5) }}
run: | run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \ CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \ LDFLAGS="$LDFLAGS -gz" \
@@ -95,7 +85,7 @@ jobs:
DESTDIR="qbittorrent" cmake --install build DESTDIR="qbittorrent" cmake --install build
- name: Build qBittorrent (Qt6) - name: Build qBittorrent (Qt6)
if: startsWith(matrix.qt_version, 6) if: ${{ startsWith(matrix.qt_version, 6) }}
run: | run: |
CXXFLAGS="$CXXFLAGS -Werror" \ CXXFLAGS="$CXXFLAGS -Werror" \
LDFLAGS="$LDFLAGS -gz" \ LDFLAGS="$LDFLAGS -gz" \
@@ -114,12 +104,6 @@ jobs:
cmake --build build --target check cmake --build build --target check
DESTDIR="qbittorrent" cmake --install build DESTDIR="qbittorrent" cmake --install build
- name: Run CodeQL analysis
uses: github/codeql-action/analyze@v2
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') && startsWith(matrix.qt_version, 6)
with:
category: ${{ github.base_ref || github.ref_name }}
- name: Prepare build artifacts - name: Prepare build artifacts
run: | run: |
mkdir upload mkdir upload

View File

@@ -2,8 +2,7 @@ name: CI - WebUI
on: [pull_request, push] on: [pull_request, push]
permissions: permissions: {}
security-events: write
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -37,12 +36,3 @@ jobs:
run: | run: |
npm run format npm run format
git diff --exit-code git diff --exit-code
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
config-file: ./.github/workflows/helper/codeql/js.yaml
languages: javascript
- name: Run CodeQL analysis
uses: github/codeql-action/analyze@v2

View File

@@ -17,7 +17,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
libt_version: ["2.0.9", "1.2.19"] libt_version: ["2.0.8", "1.2.18"]
env: env:
boost_path: "${{ github.workspace }}/../boost" boost_path: "${{ github.workspace }}/../boost"
@@ -70,7 +70,7 @@ jobs:
- name: Install boost - name: Install boost
run: | run: |
aria2c ` aria2c `
"https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.7z" ` "https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.7z" `
-d "${{ runner.temp }}" ` -d "${{ runner.temp }}" `
-o "boost.7z" -o "boost.7z"
7z x "${{ runner.temp }}/boost.7z" -o"${{ github.workspace }}/.." 7z x "${{ runner.temp }}/boost.7z" -o"${{ github.workspace }}/.."
@@ -79,7 +79,7 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
version: "6.5.0" version: "6.4.0"
archives: qtbase qtsvg qttools archives: qtbase qtsvg qttools
- name: Install libtorrent - name: Install libtorrent
@@ -152,8 +152,6 @@ jobs:
copy "${{ env.Qt6_DIR }}/plugins/sqldrivers/qsqlite.dll" upload/plugins/sqldrivers copy "${{ env.Qt6_DIR }}/plugins/sqldrivers/qsqlite.dll" upload/plugins/sqldrivers
mkdir upload/plugins/styles mkdir upload/plugins/styles
copy "${{ env.Qt6_DIR }}/plugins/styles/qwindowsvistastyle.dll" 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 # cmake additionals
mkdir upload/cmake mkdir upload/cmake
copy build/compile_commands.json upload/cmake copy build/compile_commands.json upload/cmake

View File

@@ -26,13 +26,13 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
version: "6.5.0" version: "6.4.0"
archives: icu qtbase qtsvg qttools archives: icu qtbase qtsvg qttools
- name: Install libtorrent - name: Install libtorrent
run: | run: |
git clone \ git clone \
--branch "v2.0.9" \ --branch "v2.0.8" \
--depth 1 \ --depth 1 \
--recurse-submodules \ --recurse-submodules \
https://github.com/arvidn/libtorrent.git https://github.com/arvidn/libtorrent.git
@@ -69,7 +69,7 @@ jobs:
- name: Submit the result to Coverity Scan - name: Submit the result to Coverity Scan
run: | run: |
tar -caf qbittorrent.xz cov-int tar caf qbittorrent.xz cov-int
curl \ curl \
--form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \ --form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \
--form email=sledgehammer999@qbittorrent.org \ --form email=sledgehammer999@qbittorrent.org \

4
.github/workflows/helper/appimage/export_vars.sh vendored Executable file → Normal file
View File

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

View File

@@ -1,14 +0,0 @@
name: "CodeQL config for C++"
queries:
- uses: security-and-quality
query-filters:
- exclude:
id: cpp/commented-out-code
- exclude:
id: cpp/include-non-header
- exclude:
id: cpp/loop-variable-changed
- exclude:
id: cpp/useless-expression

View File

@@ -1,11 +0,0 @@
name: "CodeQL config for Javascript"
paths-ignore:
- "**/lib/*"
queries:
- uses: security-and-quality
query-filters:
- exclude:
id: js/superfluous-trailing-arguments

View File

@@ -1,18 +0,0 @@
# https://github.com/crate-ci/typos/blob/master/docs/reference.md
# https://github.com/crate-ci/typos/blob/master/docs/design.md#identifiers-and-words
# try adding to `identifiers` list first, if doesn't work then `words` list
[default.extend-identifiers]
additionals = "additionals"
caf = "caf"
curren = "curren"
FO = "FO"
ket = "ket"
Q_INVOKABLE = "Q_INVOKABLE"
switchs = "switchs"
ths = "ths"
[default.extend-words]
BA = "BA"
helo = "helo"

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Mark and close stale PRs - name: Mark and close stale PRs
uses: actions/stale@v8 uses: actions/stale@v5
with: 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." 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." close-pr-message: "This PR was closed because it has been stalled for some time with no activity."

View File

@@ -3,7 +3,7 @@ repos:
hooks: hooks:
- id: check-translation-tag - id: check-translation-tag
name: Check newline characters in <translation> tag name: Check newline characters in <translation> tag
entry: .github/workflows/helper/pre-commit/check_translation_tag.py entry: .github/workflows/check_translation_tag.py
language: script language: script
exclude: | exclude: |
(?x)^( (?x)^(
@@ -13,7 +13,7 @@ repos:
- ts - ts
- repo: https://github.com/pre-commit/pre-commit-hooks.git - repo: https://github.com/pre-commit/pre-commit-hooks.git
rev: v4.4.0 rev: v4.3.0
hooks: hooks:
- id: check-json - id: check-json
name: Check JSON files name: Check JSON files
@@ -33,19 +33,17 @@ repos:
args: ["--fix=lf"] args: ["--fix=lf"]
exclude: | exclude: |
(?x)^( (?x)^(
src/webui/www/private/css/lib/.* | compile_commands.json |
src/webui/www/private/scripts/lib/.* | src/webui/www/private/scripts/lib/.*
test/testdata/crlf.txt
)$ )$
- id: end-of-file-fixer - id: end-of-file-fixer
name: Check trailing newlines name: Check trailing newlines
exclude: | exclude: |
(?x)^( (?x)^(
compile_commands.json |
configure | configure |
src/webui/www/private/css/lib/.* | src/webui/www/private/scripts/lib/.*
src/webui/www/private/scripts/lib/.* |
test/testdata/crlf.txt
)$ )$
exclude_types: exclude_types:
- svg - svg
@@ -55,54 +53,7 @@ repos:
name: Check trailing whitespaces name: Check trailing whitespaces
exclude: | exclude: |
(?x)^( (?x)^(
src/webui/www/private/css/lib/.* |
src/webui/www/private/scripts/lib/.* src/webui/www/private/scripts/lib/.*
)$ )$
exclude_types: exclude_types:
- ts - ts
- repo: https://github.com/codespell-project/codespell
rev: v2.2.5
hooks:
- id: codespell
name: Check spelling (codespell)
args: ["--ignore-words-list", "additionals,curren,fo,ket,superseeding,te,ths"]
exclude: |
(?x)^(
.*\.desktop |
.*\.qrc |
build-aux/.* |
Changelog |
dist/windows/installer-translations/.* |
m4/.* |
src/base/3rdparty/.* |
src/searchengine/nova3/socks.py |
src/webui/www/private/scripts/lib/.*
)$
exclude_types:
- ts
- repo: https://github.com/crate-ci/typos
rev: v1.15.5
hooks:
- id: typos
name: Check spelling (typos)
args: ["--config", ".github/workflows/helper/pre-commit/.typos.toml"]
exclude: |
(?x)^(
.*\.asc |
.*\.desktop |
.*\.qrc |
\.pre-commit-config\.yaml |
build-aux/.* |
Changelog |
configure.* |
dist/windows/installer-translations/.* |
m4/.* |
src/base/3rdparty/.* |
src/searchengine/nova3/socks.py |
src/webui/www/private/scripts/lib/.*
)$
exclude_types:
- svg
- ts

View File

@@ -1,7 +1,7 @@
[main] [main]
host = https://www.transifex.com host = https://www.transifex.com
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_master] [o:sledgehammer999:p:qbittorrent:r:qbittorrent_v45x]
file_filter = src/lang/qbittorrent_<lang>.ts file_filter = src/lang/qbittorrent_<lang>.ts
source_file = src/lang/qbittorrent_en.ts source_file = src/lang/qbittorrent_en.ts
source_lang = en source_lang = en
@@ -9,7 +9,7 @@ type = QT
minimum_perc = 23 minimum_perc = 23
lang_map = pt: pt_PT, zh: zh_CN lang_map = pt: pt_PT, zh: zh_CN
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui] [o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v45x]
file_filter = src/webui/www/translations/webui_<lang>.ts file_filter = src/webui/www/translations/webui_<lang>.ts
source_file = src/webui/www/translations/webui_en.ts source_file = src/webui/www/translations/webui_en.ts
source_lang = en source_lang = en

View File

@@ -29,17 +29,13 @@ Code from other projects:
copyright: Dan Haim <negativeiq@users.sourceforge.net> copyright: Dan Haim <negativeiq@users.sourceforge.net>
license: BSD license: BSD
* files src/webui/www/private/css/lib/vanillaSelectBox.css src/webui/www/private/scripts/lib/vanillaSelectBox.js
copyright: Philippe Meyer <pmg.meyer@gmail.com>
license: MIT
Images Authors: Images Authors:
* files: src/icons/qbittorrent-tray.svg * 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+
* files: src/qbittorrent_file.ico src/icons/fileicon.svg * files: src/qbittorrent_file.ico src/icons/fileicon.svg
copyright: 'unknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlaid 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/flags/*.svg * files: src/icons/flags/*.svg

View File

@@ -11,8 +11,8 @@ set(minBoostVersion 1.71)
set(minQt5Version 5.15.2) set(minQt5Version 5.15.2)
set(minQt6Version 6.2) set(minQt6Version 6.2)
set(minOpenSSLVersion 1.1.1) set(minOpenSSLVersion 1.1.1)
set(minLibtorrent1Version 1.2.19) set(minLibtorrent1Version 1.2.18)
set(minLibtorrentVersion 2.0.9) set(minLibtorrentVersion 2.0.8)
set(minZlibVersion 1.2.11) set(minZlibVersion 1.2.11)
include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19 include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19

View File

@@ -200,7 +200,7 @@ Following these guidelines helps maintainers and the community understand your s
[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-git-commit-message-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md#10-git-commit-message [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]: https://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 [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

View File

@@ -1,4 +1,60 @@
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.0 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: Add `Auto resize columns` functionality (Chocobo1)
- FEATURE: Allow to use Category paths in `Manual` mode (glassez) - FEATURE: Allow to use Category paths in `Manual` mode (glassez)
- FEATURE: Allow to disable Automatic mode when default "temp" path changed (glassez) - FEATURE: Allow to disable Automatic mode when default "temp" path changed (glassez)

View File

@@ -5,7 +5,7 @@ qBittorrent - A BitTorrent client in C++ / Qt
- Boost >= 1.71 - Boost >= 1.71
- libtorrent-rasterbar 1.2.19 - 1.2.x || 2.0.9 - 2.0.x - libtorrent-rasterbar 1.2.18 - 1.2.x || 2.0.8 - 2.0.x
* By Arvid Norberg, 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
@@ -18,7 +18,7 @@ qBittorrent - A BitTorrent client in C++ / Qt
- pkg-config * - pkg-config *
* Compile-time only on *nix systems * Compile-time only on *nix systems
- Python >= 3.7.0 - Python >= 3.5.0
* Optional, run-time only * Optional, run-time only
* Used by the bundled search engine * Used by the bundled search engine
@@ -43,7 +43,7 @@ Please ensure you are building with an officially supported configuration when r
will install and execute qBittorrent. will install and execute qBittorrent.
DOCUMENTATION: DOCUMENTATION:
Please note that there is a "Compilation" section at https://wiki.qbittorrent.org. Please note that there is a "Compilation" section at http://wiki.qbittorrent.org.
------------------------------------------ ------------------------------------------
sledgehammer999 <sledgehammer999@qbittorrent.org> sledgehammer999 <sledgehammer999@qbittorrent.org>

View File

@@ -37,13 +37,13 @@ For more information please visit:
https://www.qbittorrent.org https://www.qbittorrent.org
or our wiki here: or our wiki here:
https://wiki.qbittorrent.org http://wiki.qbittorrent.org
Use the forum for troubleshooting before reporting bugs: Use the forum for troubleshooting before reporting bugs:
https://forum.qbittorrent.org http://forum.qbittorrent.org
Please report any bug (or feature request) to: Please report any bug (or feature request) to:
https://bugs.qbittorrent.org http://bugs.qbittorrent.org
Official IRC channel: Official IRC channel:
[#qbittorrent on irc.libera.chat](ircs://irc.libera.chat:6697/qbittorrent) [#qbittorrent on irc.libera.chat](ircs://irc.libera.chat:6697/qbittorrent)

View File

@@ -101,10 +101,6 @@ if (MSVC)
endif() endif()
endif() endif()
if (DBUS)
target_compile_definitions(qbt_common_cfg INTERFACE QBT_USES_DBUS)
endif()
if (LibtorrentRasterbar_VERSION VERSION_GREATER_EQUAL ${minLibtorrentVersion}) if (LibtorrentRasterbar_VERSION VERSION_GREATER_EQUAL ${minLibtorrentVersion})
target_compile_definitions(qbt_common_cfg INTERFACE QBT_USES_LIBTORRENT2) target_compile_definitions(qbt_common_cfg INTERFACE QBT_USES_LIBTORRENT2)
endif() endif()

86
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.6.0RC2. # Generated by GNU Autoconf 2.71 for qbittorrent v4.5.3.
# #
# 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.6.0RC2' PACKAGE_VERSION='v4.5.3'
PACKAGE_STRING='qbittorrent v4.6.0RC2' PACKAGE_STRING='qbittorrent v4.5.3'
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.6.0RC2 to adapt to many kinds of systems. \`configure' configures qbittorrent v4.5.3 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.6.0RC2:";; short | recursive ) echo "Configuration of qbittorrent v4.5.3:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -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.6.0RC2 qbittorrent configure v4.5.3
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.6.0RC2, which was It was created by qbittorrent $as_me v4.5.3, 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.6.0RC2' VERSION='v4.5.3'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5649,7 +5649,7 @@ fi
then : then :
as_fn_error $? "Could not find QtDBus" "$LINENO" 5 as_fn_error $? "Could not find QtDBus" "$LINENO" 5
else $as_nop else $as_nop
QBT_ADD_CONFIG="$QBT_ADD_CONFIG dbus" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_DBUS" QBT_ADD_CONFIG="$QBT_ADD_CONFIG dbus"
fi ;; #( fi ;; #(
"xno") : "xno") :
@@ -6024,19 +6024,19 @@ LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 2.0.9" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 2.0.8" >&5
printf %s "checking for libtorrent-rasterbar >= 2.0.9... " >&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 >= 2.0.9\""; } >&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 >= 2.0.9") 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 >= 2.0.9" 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
@@ -6048,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 >= 2.0.9\""; } >&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 >= 2.0.9") 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 >= 2.0.9" 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
@@ -6074,28 +6074,28 @@ 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 >= 2.0.9" 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 >= 2.0.9" 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
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" >&5 { 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.19 libtorrent-rasterbar < 2... " >&6; } printf %s "checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2... " >&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.19 libtorrent-rasterbar < 2\""; } >&5 { { 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.19 libtorrent-rasterbar < 2") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>/dev/null` pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6107,12 +6107,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.19 libtorrent-rasterbar < 2\""; } >&5 { { 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.19 libtorrent-rasterbar < 2") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>/dev/null` pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6133,14 +6133,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
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
else else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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 "$libtorrent_PKG_ERRORS" >&5 echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2) were not met: as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2) were not met:
$libtorrent_PKG_ERRORS $libtorrent_PKG_ERRORS
@@ -6177,19 +6177,19 @@ elif test $pkg_failed = untried; then
printf "%s\n" "no" >&6; } printf "%s\n" "no" >&6; }
pkg_failed=no pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" >&5 { 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.19 libtorrent-rasterbar < 2... " >&6; } printf %s "checking for libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2... " >&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.19 libtorrent-rasterbar < 2\""; } >&5 { { 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.19 libtorrent-rasterbar < 2") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>/dev/null` pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6201,12 +6201,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.19 libtorrent-rasterbar < 2\""; } >&5 { { 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.19 libtorrent-rasterbar < 2") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>/dev/null` pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -6227,14 +6227,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
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2" 2>&1`
else else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 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 "$libtorrent_PKG_ERRORS" >&5 echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2) were not met: as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2) were not met:
$libtorrent_PKG_ERRORS $libtorrent_PKG_ERRORS
@@ -7237,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.6.0RC2, which was This file was extended by qbittorrent $as_me v4.5.3, 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
@@ -7297,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.6.0RC2 qbittorrent config.status v4.5.3
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.6.0RC2], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/]) AC_INIT([qbittorrent], [v4.5.3], [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=""}
@@ -165,7 +165,7 @@ AS_CASE(["x$enable_qt_dbus"],
FIND_QTDBUS() FIND_QTDBUS()
AS_IF([test "x$HAVE_QTDBUS" = "xfalse"], AS_IF([test "x$HAVE_QTDBUS" = "xfalse"],
[AC_MSG_ERROR([Could not find QtDBus])], [AC_MSG_ERROR([Could not find QtDBus])],
[QBT_ADD_CONFIG="$QBT_ADD_CONFIG dbus" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_DBUS"] [QBT_ADD_CONFIG="$QBT_ADD_CONFIG dbus"]
)], )],
["xno"], ["xno"],
[AC_MSG_RESULT([no]) [AC_MSG_RESULT([no])
@@ -188,10 +188,10 @@ m4_define([DETECT_BOOST_VERSION_PROGRAM],
[[(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));]])]) [[(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))]));]])])
PKG_CHECK_MODULES(libtorrent, PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 2.0.9], [libtorrent-rasterbar >= 2.0.8],
[CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_LIBTORRENT2"], [CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS" QBT_ADD_DEFINES="$QBT_ADD_DEFINES QBT_USES_LIBTORRENT2"],
[PKG_CHECK_MODULES(libtorrent, [PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 1.2.19 libtorrent-rasterbar < 2], [libtorrent-rasterbar >= 1.2.18 libtorrent-rasterbar < 2],
[CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS"])]) [CXXFLAGS="$libtorrent_CFLAGS $CXXFLAGS" LIBS="$libtorrent_LIBS $LIBS"])])
PKG_CHECK_MODULES(openssl, PKG_CHECK_MODULES(openssl,

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.5.0</string> <string>4.5.3</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-2023 The qBittorrent project</string> <string>Copyright © 2006-2022 The qBittorrent project</string>
<key>UTExportedTypeDeclarations</key> <key>UTExportedTypeDeclarations</key>
<array> <array>
<dict> <dict>

View File

@@ -68,12 +68,12 @@
<update_contact>sledgehammer999@qbittorrent.org</update_contact> <update_contact>sledgehammer999@qbittorrent.org</update_contact>
<developer_name>The qBittorrent Project</developer_name> <developer_name>The qBittorrent Project</developer_name>
<url type="homepage">https://www.qbittorrent.org/</url> <url type="homepage">https://www.qbittorrent.org/</url>
<url type="bugtracker">https://bugs.qbittorrent.org/</url> <url type="bugtracker">http://bugs.qbittorrent.org/</url>
<url type="donation">https://www.qbittorrent.org/donate</url> <url type="donation">https://www.qbittorrent.org/donate</url>
<url type="help">https://forum.qbittorrent.org/</url> <url type="help">http://forum.qbittorrent.org/</url>
<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.5.0" date="2022-01-06"/> <release version="4.5.3" date="2023-05-28"/>
</releases> </releases>
</component> </component>

View File

@@ -98,8 +98,8 @@ 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 კლიენტი
@@ -178,7 +178,7 @@ Comment[zh_HK]=經由BitTorrent下載並分享檔案
GenericName[zh_HK]=BitTorrent用戶端 GenericName[zh_HK]=BitTorrent用戶端
Name[zh_HK]=qBittorrent Name[zh_HK]=qBittorrent
Comment[zh_TW]=經由 BitTorrent 下載並分享檔案 Comment[zh_TW]=經由 BitTorrent 下載並分享檔案
GenericName[zh_TW]=BitTorrent 戶端 GenericName[zh_TW]=BitTorrent 戶端
Name[zh_TW]=qBittorrent Name[zh_TW]=qBittorrent
Comment[eo]=Elŝutu kaj kunhavigu dosierojn per BitTorrent Comment[eo]=Elŝutu kaj kunhavigu dosierojn per BitTorrent
GenericName[eo]=BitTorrent-kliento GenericName[eo]=BitTorrent-kliento
@@ -208,7 +208,7 @@ Name[ltg]=qBittorrent
Comment[hi_IN]=BitTorrent द्वारा फाइल डाउनलोड व सहभाजन Comment[hi_IN]=BitTorrent द्वारा फाइल डाउनलोड व सहभाजन
GenericName[hi_IN]=Bittorrent साधन GenericName[hi_IN]=Bittorrent साधन
Name[hi_IN]=qBittorrent Name[hi_IN]=qBittorrent
Comment[az@latin]=Faylları BitTorrent vasitəsilə endirin və paylaşın Comment[az@latin]=Faylları BitTorrent vasitəsilə ndərin və paylaşın
GenericName[az@latin]=BitTorrent client GenericName[az@latin]=BitTorrent client
Name[az@latin]=qBittorrent Name[az@latin]=qBittorrent
Comment[lv_LV]=Lejupielādēt un koplietot failus ar BitTorrent Comment[lv_LV]=Lejupielādēt un koplietot failus ar BitTorrent

View File

@@ -25,7 +25,7 @@
; 4.5.1.3 -> good ; 4.5.1.3 -> good
; 4.5.1.3.2 -> bad ; 4.5.1.3.2 -> bad
; 4.5.0beta -> bad ; 4.5.0beta -> bad
!define /ifndef QBT_VERSION "4.5.0" !define /ifndef QBT_VERSION "4.5.3"
; Option that controls the installer's window name ; Option that controls the installer's window name
; If set, its value will be used like this: ; If set, its value will be used like this:
@@ -112,7 +112,7 @@ OutFile "qbittorrent_${QBT_INSTALLER_FILENAME}_setup.exe"
;Installer Version Information ;Installer Version Information
VIAddVersionKey "ProductName" "qBittorrent" VIAddVersionKey "ProductName" "qBittorrent"
VIAddVersionKey "CompanyName" "The qBittorrent project" VIAddVersionKey "CompanyName" "The qBittorrent project"
VIAddVersionKey "LegalCopyright" "Copyright ©2006-2023 The qBittorrent project" VIAddVersionKey "LegalCopyright" "Copyright ©2006-2022 The qBittorrent project"
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client" VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
VIAddVersionKey "FileVersion" "${QBT_VERSION}" VIAddVersionKey "FileVersion" "${QBT_VERSION}"

View File

@@ -19,7 +19,7 @@ def main() -> int:
tmp_translations: List[str] = glob.glob(f'{args.qt_translations_folder}/qt_??.qm') tmp_translations: List[str] = glob.glob(f'{args.qt_translations_folder}/qt_??.qm')
tmp_translations += glob.glob(f'{args.qt_translations_folder}/qt_??_??.qm') tmp_translations += glob.glob(f'{args.qt_translations_folder}/qt_??_??.qm')
tmp_translations += glob.glob(f'{args.qt_translations_folder}/qtbase_??.qm') tmp_translations += glob.glob(f'{args.qt_translations_folder}/qtbase_??.qm')
tmp_translations += glob.glob(f'{args.qt_translations_folder}/qtbase_??_??.qm') tmp_translations += glob.glob(f'{args.qt_translations_folder}qtbase_??_??.qm')
filtered = filter(isNotStub, tmp_translations) filtered = filter(isNotStub, tmp_translations)
for file in filtered: for file in filtered:

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_AFRIKAANS} "qBittorrent (required)" LangString inst_qbt_req ${LANG_AFRIKAANS} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_AFRIKAANS} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_AFRIKAANS} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_AFRIKAANS} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_AFRIKAANS} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ALBANIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_ALBANIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ALBANIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_ALBANIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ALBANIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_ALBANIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ARABIC} "qBittorrent (مطلوب)" LangString inst_qbt_req ${LANG_ARABIC} "qBittorrent (مطلوب)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ARABIC} "وضع اختصار على سطح المكتب" LangString inst_dekstop ${LANG_ARABIC} "وضع اختصار على سطح المكتب"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ARABIC} "وضع اختصار في قائمة البداية" LangString inst_startmenu ${LANG_ARABIC} "وضع اختصار في قائمة البداية"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_BASQUE} "qBittorrent (beharrezkoa)" LangString inst_qbt_req ${LANG_BASQUE} "qBittorrent (beharrezkoa)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_BASQUE} "Sortu Mahaigaineko Lasterbidea" LangString inst_dekstop ${LANG_BASQUE} "Sortu Mahaigaineko Lasterbidea"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_BASQUE} "Sortu Hasierako Lasterbidea" LangString inst_startmenu ${LANG_BASQUE} "Sortu Hasierako Lasterbidea"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_BELARUSIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_BELARUSIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_BELARUSIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_BELARUSIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_BELARUSIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_BELARUSIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_BOSNIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_BOSNIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_BOSNIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_BOSNIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_BOSNIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_BOSNIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_BRETON} "qBittorrent (required)" LangString inst_qbt_req ${LANG_BRETON} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_BRETON} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_BRETON} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_BRETON} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_BRETON} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_BULGARIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_BULGARIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_BULGARIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_BULGARIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_BULGARIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_BULGARIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_CATALAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_CATALAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_CATALAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_CATALAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_CATALAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_CATALAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_CROATIAN} "qBittorrent (neophodno)" LangString inst_qbt_req ${LANG_CROATIAN} "qBittorrent (neophodno)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_CROATIAN} "Kreiraj prečac na radnoj površini" LangString inst_dekstop ${LANG_CROATIAN} "Kreiraj prečac na radnoj površini"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_CROATIAN} "Kreiraj prečac u početnom meniju" LangString inst_startmenu ${LANG_CROATIAN} "Kreiraj prečac u početnom meniju"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_CZECH} "qBittorrent (vyžadováno)" LangString inst_qbt_req ${LANG_CZECH} "qBittorrent (vyžadováno)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_CZECH} "Vytvořit zástupce na ploše" LangString inst_dekstop ${LANG_CZECH} "Vytvořit zástupce na ploše"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_CZECH} "Vytvořit zástupce v nabídce Start" LangString inst_startmenu ${LANG_CZECH} "Vytvořit zástupce v nabídce Start"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_DANISH} "qBittorrent (påkrævet)" LangString inst_qbt_req ${LANG_DANISH} "qBittorrent (påkrævet)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_DANISH} "Opret skrivebordsgenvej" LangString inst_dekstop ${LANG_DANISH} "Opret skrivebordsgenvej"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_DANISH} "Opret genvej i menuen Start" LangString inst_startmenu ${LANG_DANISH} "Opret genvej i menuen Start"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_DUTCH} "qBittorrent (vereist)" LangString inst_qbt_req ${LANG_DUTCH} "qBittorrent (vereist)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_DUTCH} "Snelkoppeling aanmaken op bureaublad" LangString inst_dekstop ${LANG_DUTCH} "Snelkoppeling aanmaken op bureaublad"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_DUTCH} "Snelkoppeling aanmaken in startmenu" LangString inst_startmenu ${LANG_DUTCH} "Snelkoppeling aanmaken in startmenu"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ESPERANTO} "qBittorrent (required)" LangString inst_qbt_req ${LANG_ESPERANTO} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ESPERANTO} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_ESPERANTO} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ESPERANTO} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_ESPERANTO} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ESTONIAN} "qBittorrent (vajalik)" LangString inst_qbt_req ${LANG_ESTONIAN} "qBittorrent (vajalik)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ESTONIAN} "Loo Töölaua Otsetee" LangString inst_dekstop ${LANG_ESTONIAN} "Loo Töölaua Otsetee"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ESTONIAN} "Loo Start Menüü Otsetee" LangString inst_startmenu ${LANG_ESTONIAN} "Loo Start Menüü Otsetee"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_FARSI} "qBittorrent (required)" LangString inst_qbt_req ${LANG_FARSI} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_FARSI} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_FARSI} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_FARSI} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_FARSI} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_FINNISH} "qBittorrent (pakollinen)" LangString inst_qbt_req ${LANG_FINNISH} "qBittorrent (pakollinen)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_FINNISH} "Luo pikakuvake työpöydälle" LangString inst_dekstop ${LANG_FINNISH} "Luo pikakuvake työpöydälle"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_FINNISH} "Luo pikakuvake aloitusvalikkoon" LangString inst_startmenu ${LANG_FINNISH} "Luo pikakuvake aloitusvalikkoon"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,12 +2,12 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_FRENCH} "qBittorrent (requis)" LangString inst_qbt_req ${LANG_FRENCH} "qBittorrent (requis)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_FRENCH} "Créer un Raccourci sur le Bureau" LangString inst_dekstop ${LANG_FRENCH} "Créer un Raccourci sur le Bureau"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_FRENCH} "Créer un Raccourci dans le Menu Démarrer" LangString inst_startmenu ${LANG_FRENCH} "Créer un Raccourci dans le Menu Démarrer"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
LangString inst_startup ${LANG_FRENCH} "Démarrer qBittorrent au démarrage de Windows" LangString inst_startup ${LANG_FRENCH} "Démarrez qBittorrent au démarrage de Windows"
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent" ;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
LangString inst_torrent ${LANG_FRENCH} "Ouvrir les fichiers .torrent avec qBittorrent" LangString inst_torrent ${LANG_FRENCH} "Ouvrir les fichiers .torrent avec qBittorrent"
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent" ;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
@@ -15,7 +15,7 @@ LangString inst_magnet ${LANG_FRENCH} "Ouvrir les liens magnet avec qBittorrent"
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule" ;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
LangString inst_firewall ${LANG_FRENCH} "Ajouter une règle au Pare-Feu de Windows" LangString inst_firewall ${LANG_FRENCH} "Ajouter une règle au Pare-Feu de Windows"
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)" ;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
LangString inst_pathlimit ${LANG_FRENCH} "Désactiver la limite de taille des chemins de Windows (limite MAX_PATH de 260 caractères, nécessite Windows 10 1607 ou plus)" LangString inst_pathlimit ${LANG_FRENCH} "Désactiver la limite de taille du chemin de Windows (limitation de MAX_PATH 260 caractères, nécessite Windows 10 1607 ou plus)"
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule" ;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
LangString inst_firewallinfo ${LANG_FRENCH} "Ajout d'une règle au Pare-Feu de Windows" LangString inst_firewallinfo ${LANG_FRENCH} "Ajout d'une règle au Pare-Feu de Windows"
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing." ;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
@@ -31,7 +31,7 @@ LangString inst_requires_64bit ${LANG_FRENCH} "Cet installateur ne fonctionne qu
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7." ;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
LangString inst_requires_win7 ${LANG_FRENCH} "Cette version de qBittorrent nécessite au moins Windows 7." LangString inst_requires_win7 ${LANG_FRENCH} "Cette version de qBittorrent nécessite au moins Windows 7."
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809." ;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_FRENCH} "Cet installateur nécessite au moins Windows 10 1809." LangString inst_requires_win10 ${LANG_FRENCH} "This installer requires at least Windows 10 1809."
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent" ;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_FRENCH} "Désinstaller qBittorrent" LangString inst_uninstall_link_description ${LANG_FRENCH} "Désinstaller qBittorrent"
@@ -53,9 +53,9 @@ LangString remove_firewall ${LANG_FRENCH} "Supprimer la règle du Pare-Feu de Wi
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule" ;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
LangString remove_firewallinfo ${LANG_FRENCH} "Suppression de la règle du Pare-Feu de Windows" LangString remove_firewallinfo ${LANG_FRENCH} "Suppression de la règle du Pare-Feu de Windows"
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data" ;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
LangString remove_cache ${LANG_FRENCH} "Supprimer les torrents et données en cache" LangString remove_cache ${LANG_FRENCH} "Supprimer les torrents et données cachées"
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling." ;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_FRENCH} "qBittorrent est en cours d'exécution. Fermez l'application avant de la désinstaller." LangString uninst_warning ${LANG_FRENCH} "qBittorrent est en cours d'exécution. Veuillez fermer l'application avant la désinstallation."
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:" ;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_FRENCH} "Ne peut pas supprimer l'association du .torrent. Elle est associée avec :" LangString uninst_tor_warn ${LANG_FRENCH} "Ne peut pas supprimer l'association du .torrent. Elle est associée avec :"
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:" ;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_GALICIAN} "qBittorrent (necesario)" LangString inst_qbt_req ${LANG_GALICIAN} "qBittorrent (necesario)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_GALICIAN} "Crear atallo no escritorio" LangString inst_dekstop ${LANG_GALICIAN} "Crear atallo no escritorio"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_GALICIAN} "Crear atallo no menú de inicio" LangString inst_startmenu ${LANG_GALICIAN} "Crear atallo no menú de inicio"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_GERMAN} "qBittorrent (erforderlich)" LangString inst_qbt_req ${LANG_GERMAN} "qBittorrent (erforderlich)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_GERMAN} "Verknüpfung auf dem Desktop erstellen" LangString inst_dekstop ${LANG_GERMAN} "Verknüpfung auf dem Desktop erstellen"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_GERMAN} "Eintrag im Startmenü erstellen" LangString inst_startmenu ${LANG_GERMAN} "Eintrag im Startmenü erstellen"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_GREEK} "qBittorrent (απαιτείται)" LangString inst_qbt_req ${LANG_GREEK} "qBittorrent (απαιτείται)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_GREEK} "Δημιουργία συντόμευσης στην Επιφάνεια Εργασίας" LangString inst_dekstop ${LANG_GREEK} "Δημιουργία συντόμευσης στην Επιφάνεια Εργασίας"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_GREEK} "Δημιουργία συντόμευσης στο Μενού Έναρξης" LangString inst_startmenu ${LANG_GREEK} "Δημιουργία συντόμευσης στο Μενού Έναρξης"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_HEBREW} "qBittorrent (required)" LangString inst_qbt_req ${LANG_HEBREW} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_HEBREW} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_HEBREW} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_HEBREW} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_HEBREW} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_HUNGARIAN} "qBittorrent (kötelező)" LangString inst_qbt_req ${LANG_HUNGARIAN} "qBittorrent (kötelező)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_HUNGARIAN} "Asztali parancsikon létrehozása" LangString inst_dekstop ${LANG_HUNGARIAN} "Asztali parancsikon létrehozása"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_HUNGARIAN} "Start menüben parancsikon létrehozása" LangString inst_startmenu ${LANG_HUNGARIAN} "Start menüben parancsikon létrehozása"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ICELANDIC} "qBittorrent (required)" LangString inst_qbt_req ${LANG_ICELANDIC} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ICELANDIC} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_ICELANDIC} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ICELANDIC} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_ICELANDIC} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_INDONESIAN} "qBittorrent (wajib)" LangString inst_qbt_req ${LANG_INDONESIAN} "qBittorrent (wajib)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_INDONESIAN} "Buat Pintasan Desktop" LangString inst_dekstop ${LANG_INDONESIAN} "Buat Pintasan Desktop"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_INDONESIAN} "Buat Pintasan Menu" LangString inst_startmenu ${LANG_INDONESIAN} "Buat Pintasan Menu"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_IRISH} "qBittorrent (required)" LangString inst_qbt_req ${LANG_IRISH} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_IRISH} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_IRISH} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_IRISH} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_IRISH} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ITALIAN} "qBittorrent (necessario)" LangString inst_qbt_req ${LANG_ITALIAN} "qBittorrent (necessario)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ITALIAN} "Crea collegamento sul Desktop" LangString inst_dekstop ${LANG_ITALIAN} "Crea collegamento sul Desktop"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ITALIAN} "Aggiungi al menu Start" LangString inst_startmenu ${LANG_ITALIAN} "Aggiungi al menu Start"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_JAPANESE} "qBittorrent (必須)" LangString inst_qbt_req ${LANG_JAPANESE} "qBittorrent (必須)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_JAPANESE} "デスクトップにショートカットを作成" LangString inst_dekstop ${LANG_JAPANESE} "デスクトップにショートカットを作成"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_JAPANESE} "スタートメニューにショートカットを作成" LangString inst_startmenu ${LANG_JAPANESE} "スタートメニューにショートカットを作成"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_KOREAN} "qBittorrent (필요)" LangString inst_qbt_req ${LANG_KOREAN} "qBittorrent (필요)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_KOREAN} "바탕화면 바로 가기 만들기" LangString inst_dekstop ${LANG_KOREAN} "바탕화면 바로 가기 만들기"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_KOREAN} "시작 메뉴 바로 가기 만들기" LangString inst_startmenu ${LANG_KOREAN} "시작 메뉴 바로 가기 만들기"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_KURDISH} "qBittorrent (required)" LangString inst_qbt_req ${LANG_KURDISH} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_KURDISH} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_KURDISH} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_KURDISH} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_KURDISH} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_LATVIAN} "qBittorrent (nepieciešams)" LangString inst_qbt_req ${LANG_LATVIAN} "qBittorrent (nepieciešams)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_LATVIAN} "Izveidot saīsni uz darbvirsmas" LangString inst_dekstop ${LANG_LATVIAN} "Izveidot saīsni uz darbvirsmas"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_LATVIAN} "Izveidot izvēlnes Sākt saīsnes" LangString inst_startmenu ${LANG_LATVIAN} "Izveidot izvēlnes Sākt saīsnes"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_LITHUANIAN} "qBittorrent (reikalingas)" LangString inst_qbt_req ${LANG_LITHUANIAN} "qBittorrent (reikalingas)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_LITHUANIAN} "Sukurti nuorodą darbalaukyje" LangString inst_dekstop ${LANG_LITHUANIAN} "Sukurti nuorodą darbalaukyje"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_LITHUANIAN} "Sukurti Pradėti meniu nuorodą" LangString inst_startmenu ${LANG_LITHUANIAN} "Sukurti Pradėti meniu nuorodą"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_LUXEMBOURGISH} "qBittorrent (required)" LangString inst_qbt_req ${LANG_LUXEMBOURGISH} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_LUXEMBOURGISH} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_LUXEMBOURGISH} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_LUXEMBOURGISH} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_LUXEMBOURGISH} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_MACEDONIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_MACEDONIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_MACEDONIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_MACEDONIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_MACEDONIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_MACEDONIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_MALAY} "qBittorrent (required)" LangString inst_qbt_req ${LANG_MALAY} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_MALAY} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_MALAY} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_MALAY} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_MALAY} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_MONGOLIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_MONGOLIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_MONGOLIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_MONGOLIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_MONGOLIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_MONGOLIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_NORWEGIAN} "qBittorrent (kreves)" LangString inst_qbt_req ${LANG_NORWEGIAN} "qBittorrent (kreves)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_NORWEGIAN} "Opprett Skrivebordssnarvei" LangString inst_dekstop ${LANG_NORWEGIAN} "Opprett Skrivebordssnarvei"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_NORWEGIAN} "Opprett Startmeny-snarvei" LangString inst_startmenu ${LANG_NORWEGIAN} "Opprett Startmeny-snarvei"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_NORWEGIANNYNORSK} "qBittorrent (required)" LangString inst_qbt_req ${LANG_NORWEGIANNYNORSK} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_NORWEGIANNYNORSK} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_NORWEGIANNYNORSK} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_NORWEGIANNYNORSK} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_NORWEGIANNYNORSK} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_POLISH} "qBittorrent (wymagany)" LangString inst_qbt_req ${LANG_POLISH} "qBittorrent (wymagany)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_POLISH} "Utwórz skrót na pulpicie" LangString inst_dekstop ${LANG_POLISH} "Utwórz skrót na pulpicie"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_POLISH} "Utwórz skrót w menu Start" LangString inst_startmenu ${LANG_POLISH} "Utwórz skrót w menu Start"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_PORTUGUESE} "qBittorrent (obrigatório)" LangString inst_qbt_req ${LANG_PORTUGUESE} "qBittorrent (obrigatório)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_PORTUGUESE} "Criar atalho no ambiente de trabalho" LangString inst_dekstop ${LANG_PORTUGUESE} "Criar atalho no ambiente de trabalho"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_PORTUGUESE} "Criar atalho no menu Iniciar" LangString inst_startmenu ${LANG_PORTUGUESE} "Criar atalho no menu Iniciar"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_PORTUGUESEBR} "qBittorrent (requerido)" LangString inst_qbt_req ${LANG_PORTUGUESEBR} "qBittorrent (requerido)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_PORTUGUESEBR} "Criar Atalho no Desktop" LangString inst_dekstop ${LANG_PORTUGUESEBR} "Criar Atalho no Desktop"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_PORTUGUESEBR} "Criar Atalho no Menu Iniciar" LangString inst_startmenu ${LANG_PORTUGUESEBR} "Criar Atalho no Menu Iniciar"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -1,62 +1,62 @@
;Installer strings ;Installer strings
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_ROMANIAN} "qBittorrent (obligatoriu)" LangString inst_qbt_req ${LANG_ROMANIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_ROMANIAN} "Creați o comandă rapidă pe Desktop" LangString inst_dekstop ${LANG_ROMANIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_ROMANIAN} "Creați o comandă rapidă în meniul Start" LangString inst_startmenu ${LANG_ROMANIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
LangString inst_startup ${LANG_ROMANIAN} "Porniți qBittorrent la pornirea Windows" LangString inst_startup ${LANG_ROMANIAN} "Start qBittorrent on Windows start up"
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent" ;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
LangString inst_torrent ${LANG_ROMANIAN} "Deschideți fișierele .torrent cu qBittorrent" LangString inst_torrent ${LANG_ROMANIAN} "Open .torrent files with qBittorrent"
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent" ;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
LangString inst_magnet ${LANG_ROMANIAN} "Deschideți linkurile magnet cu qBittorrent" LangString inst_magnet ${LANG_ROMANIAN} "Open magnet links with qBittorrent"
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule" ;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
LangString inst_firewall ${LANG_ROMANIAN} "Adăugați regula Windows Firewall" LangString inst_firewall ${LANG_ROMANIAN} "Add Windows Firewall rule"
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)" ;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
LangString inst_pathlimit ${LANG_ROMANIAN} "Dezactivați limita de lungime a căii Windows (260 de caractere limită MAX_PATH, necesită Windows 10 1607 sau o versiune ulterioară)" LangString inst_pathlimit ${LANG_ROMANIAN} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule" ;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
LangString inst_firewallinfo ${LANG_ROMANIAN} "Adăugarea regulii Windows Firewall" LangString inst_firewallinfo ${LANG_ROMANIAN} "Adding Windows Firewall rule"
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing." ;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
LangString inst_warning ${LANG_ROMANIAN} "qBittorrent rulează. Vă rugăm să închideți aplicația înainte de instalare." LangString inst_warning ${LANG_ROMANIAN} "qBittorrent is running. Please close the application before installing."
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact." ;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
LangString inst_uninstall_question ${LANG_ROMANIAN} "Versiunea actuală va fi dezinstalată. Setările utilizatorului și torrentele vor rămâne intacte." LangString inst_uninstall_question ${LANG_ROMANIAN} "Current version will be uninstalled. User settings and torrents will remain intact."
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version." ;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
LangString inst_unist ${LANG_ROMANIAN} "Se dezinstalează versiunea anterioară." LangString inst_unist ${LANG_ROMANIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent." ;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ROMANIAN} "Lansați qBittorrent." LangString launch_qbt ${LANG_ROMANIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions." ;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ROMANIAN} "Acest program de instalare funcționează doar pe versiunile Windows pe 64 de biți." LangString inst_requires_64bit ${LANG_ROMANIAN} "This installer works only in 64-bit Windows versions."
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7." ;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
LangString inst_requires_win7 ${LANG_ROMANIAN} "Această versiune de qBittorrent necesită cel puțin Windows 7." LangString inst_requires_win7 ${LANG_ROMANIAN} "This qBittorrent version requires at least Windows 7."
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809." ;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_ROMANIAN} "Acest program de instalare necesită cel puțin Windows 10 1809." LangString inst_requires_win10 ${LANG_ROMANIAN} "This installer requires at least Windows 10 1809."
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent" ;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_ROMANIAN} "Dezinstalați qBittorrent" LangString inst_uninstall_link_description ${LANG_ROMANIAN} "Uninstall qBittorrent"
;------------------------------------ ;------------------------------------
;Uninstaller strings ;Uninstaller strings
;LangString remove_files ${LANG_ENGLISH} "Remove files" ;LangString remove_files ${LANG_ENGLISH} "Remove files"
LangString remove_files ${LANG_ROMANIAN} "Eliminați fișierele" LangString remove_files ${LANG_ROMANIAN} "Remove files"
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts" ;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
LangString remove_shortcuts ${LANG_ROMANIAN} "Eliminați comenzile rapide" LangString remove_shortcuts ${LANG_ROMANIAN} "Remove shortcuts"
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations" ;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
LangString remove_associations ${LANG_ROMANIAN} "Eliminați asocierile de fișiere" LangString remove_associations ${LANG_ROMANIAN} "Remove file associations"
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys" ;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
LangString remove_registry ${LANG_ROMANIAN} "Eliminați cheile din registru" LangString remove_registry ${LANG_ROMANIAN} "Remove registry keys"
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files" ;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
LangString remove_conf ${LANG_ROMANIAN} "Eliminați fișierele de configurare" LangString remove_conf ${LANG_ROMANIAN} "Remove configuration files"
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule" ;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
LangString remove_firewall ${LANG_ROMANIAN} "Eliminați regula Windows Firewall" LangString remove_firewall ${LANG_ROMANIAN} "Remove Windows Firewall rule"
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule" ;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
LangString remove_firewallinfo ${LANG_ROMANIAN} "Se elimină regula Windows Firewall" LangString remove_firewallinfo ${LANG_ROMANIAN} "Removing Windows Firewall rule"
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data" ;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
LangString remove_cache ${LANG_ROMANIAN} "Eliminați torrentele și datele din cache" LangString remove_cache ${LANG_ROMANIAN} "Remove torrents and cached data"
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling." ;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_ROMANIAN} "qBittorrent rulează. Vă rugăm să închideți aplicația înainte de a o dezinstala." LangString uninst_warning ${LANG_ROMANIAN} "qBittorrent is running. Please close the application before uninstalling."
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:" ;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_ROMANIAN} "Nu se elimină asocierea .torrent. Este asociat cu:" LangString uninst_tor_warn ${LANG_ROMANIAN} "Not removing .torrent association. It is associated with:"
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:" ;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
LangString uninst_mag_warn ${LANG_ROMANIAN} "Nu se elimină asocierea magnet. Este asociat cu:" LangString uninst_mag_warn ${LANG_ROMANIAN} "Not removing magnet association. It is associated with:"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_RUSSIAN} "qBittorrent (обязательно)" LangString inst_qbt_req ${LANG_RUSSIAN} "qBittorrent (обязательно)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_RUSSIAN} "Создать ярлык на рабочем столе" LangString inst_dekstop ${LANG_RUSSIAN} "Создать ярлык на рабочем столе"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_RUSSIAN} "Создать ярлык в меню Пуск" LangString inst_startmenu ${LANG_RUSSIAN} "Создать ярлык в меню Пуск"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SERBIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_SERBIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SERBIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_SERBIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SERBIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_SERBIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SERBIANLATIN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_SERBIANLATIN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SERBIANLATIN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_SERBIANLATIN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SERBIANLATIN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_SERBIANLATIN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SIMPCHINESE} "qBittorrent 主程序 (必要)" LangString inst_qbt_req ${LANG_SIMPCHINESE} "qBittorrent 主程序 (必要)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SIMPCHINESE} "创建桌面快捷方式" LangString inst_dekstop ${LANG_SIMPCHINESE} "创建桌面快捷方式"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SIMPCHINESE} "创建开始菜单快捷方式" LangString inst_startmenu ${LANG_SIMPCHINESE} "创建开始菜单快捷方式"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SLOVAK} "qBittorrent (požadované)" LangString inst_qbt_req ${LANG_SLOVAK} "qBittorrent (požadované)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SLOVAK} "Vytvoriť odkaz na pracovnej ploche" LangString inst_dekstop ${LANG_SLOVAK} "Vytvoriť odkaz na pracovnej ploche"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SLOVAK} "Vytvoriť odkaz v štart menu" LangString inst_startmenu ${LANG_SLOVAK} "Vytvoriť odkaz v štart menu"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SLOVENIAN} "qBittorrent (required)" LangString inst_qbt_req ${LANG_SLOVENIAN} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SLOVENIAN} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_SLOVENIAN} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SLOVENIAN} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_SLOVENIAN} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SPANISH} "qBittorrent (necesario)" LangString inst_qbt_req ${LANG_SPANISH} "qBittorrent (necesario)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SPANISH} "Crear un acceso directo en el escritorio" LangString inst_dekstop ${LANG_SPANISH} "Crear un acceso directo en el escritorio"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SPANISH} "Crear un acceso directo en el menú inicio" LangString inst_startmenu ${LANG_SPANISH} "Crear un acceso directo en el menú inicio"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SPANISHINTERNATIONAL} "qBittorrent (necesario)" LangString inst_qbt_req ${LANG_SPANISHINTERNATIONAL} "qBittorrent (necesario)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SPANISHINTERNATIONAL} "Crear un acceso directo en el escritorio" LangString inst_dekstop ${LANG_SPANISHINTERNATIONAL} "Crear un acceso directo en el escritorio"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SPANISHINTERNATIONAL} "Crear un acceso directo en el menú inicio" LangString inst_startmenu ${LANG_SPANISHINTERNATIONAL} "Crear un acceso directo en el menú inicio"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_SWEDISH} "qBittorrent (krävs)" LangString inst_qbt_req ${LANG_SWEDISH} "qBittorrent (krävs)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_SWEDISH} "Skapa skrivbordsgenväg" LangString inst_dekstop ${LANG_SWEDISH} "Skapa skrivbordsgenväg"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_SWEDISH} "Skapa startmenygenväg" LangString inst_startmenu ${LANG_SWEDISH} "Skapa startmenygenväg"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_THAI} "qBittorrent (required)" LangString inst_qbt_req ${LANG_THAI} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_THAI} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_THAI} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_THAI} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_THAI} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_TRADCHINESE} "qBittorrent (必要)" LangString inst_qbt_req ${LANG_TRADCHINESE} "qBittorrent (必要)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_TRADCHINESE} "建立桌面捷徑" LangString inst_dekstop ${LANG_TRADCHINESE} "建立桌面捷徑"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_TRADCHINESE} "建立開始功能表捷徑" LangString inst_startmenu ${LANG_TRADCHINESE} "建立開始功能表捷徑"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_TURKISH} "qBittorrent (zorunlu)" LangString inst_qbt_req ${LANG_TURKISH} "qBittorrent (zorunlu)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_TURKISH} "Masaüstü Kısayolu oluştur" LangString inst_dekstop ${LANG_TURKISH} "Masaüstü Kısayolu oluştur"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_TURKISH} "Başlangıç Menüsü Kısayolu oluştur" LangString inst_startmenu ${LANG_TURKISH} "Başlangıç Menüsü Kısayolu oluştur"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
@@ -15,17 +15,17 @@ LangString inst_magnet ${LANG_TURKISH} "Magnet bağlantılarını qBittorrent il
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule" ;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
LangString inst_firewall ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekle" LangString inst_firewall ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekle"
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)" ;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
LangString inst_pathlimit ${LANG_TURKISH} "Windows yol uzunluğu sınırını etkisizleştir (260 karakterlik MAX_PATH sınırlaması, Windows 10 1607 veya sonrasını gerektirir)" LangString inst_pathlimit ${LANG_TURKISH} "Windows yol uzunluğu sınırını etkisizleştir (260 karakter MAX_PATH sınırlaması, Windows 10 1607 veya sonrasını gerektirir)"
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule" ;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
LangString inst_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekleniyor" LangString inst_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekleniyor"
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing." ;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
LangString inst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen yüklemeden önce uygulamayı kapatın." LangString inst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen yüklemeden önce uygulamayı kapatın."
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact." ;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
LangString inst_uninstall_question ${LANG_TURKISH} "Şu anki sürüm kaldırılacaktır. Kullanıcı ayarları ve torrent'ler bozulmadan kalacaktır." LangString inst_uninstall_question ${LANG_TURKISH} "Önceki bir kurulum algılandı. Kullanıcı ayarları silinmeden kaldırılacaktır."
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version." ;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
LangString inst_unist ${LANG_TURKISH} "Önceki sürüm kaldırılıyor." LangString inst_unist ${LANG_TURKISH} "Önceki sürüm kaldırılıyor."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent." ;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_TURKISH} "qBittorrent'i başlat." LangString launch_qbt ${LANG_TURKISH} "qBittorrent'i başlat"
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions." ;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_TURKISH} "Bu yükleyici sadece 64-bit Windows sürümlerinde çalışır." LangString inst_requires_64bit ${LANG_TURKISH} "Bu yükleyici sadece 64-bit Windows sürümlerinde çalışır."
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7." ;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
@@ -53,10 +53,10 @@ LangString remove_firewall ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralını
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule" ;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
LangString remove_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı kaldırılıyor" LangString remove_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı kaldırılıyor"
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data" ;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
LangString remove_cache ${LANG_TURKISH} "Torrent'leri ve önbelleklenen verileri kaldır" LangString remove_cache ${LANG_TURKISH} "Torrentleri ve önbelleklenen verileri kaldır"
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling." ;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen kaldırmadan önce uygulamayı kapatın." LangString uninst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen kaldırmadan önce uygulamayı kapatın."
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:" ;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_TURKISH} ".torrent ilişkilendirmesi kaldırılamıyor. Şununla ilişkilendirildi:" LangString uninst_tor_warn ${LANG_TURKISH} ".torrent ilişkilendirmesi kaldırılmıyor. Şununla ilişkilendirildi:"
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:" ;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
LangString uninst_mag_warn ${LANG_TURKISH} "Magnet ilişkilendirmesi kaldırılamıyor. Şununla ilişkilendirildi:" LangString uninst_mag_warn ${LANG_TURKISH} "Magnet ilişkilendirmesi kaldırılmıyor. Şununla ilişkilendirildi:"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_UKRAINIAN} "qBittorrent (необхідний)" LangString inst_qbt_req ${LANG_UKRAINIAN} "qBittorrent (необхідний)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_UKRAINIAN} "Створити ярлик на стільниці" LangString inst_dekstop ${LANG_UKRAINIAN} "Створити ярлик на стільниці"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_UKRAINIAN} "Створити ярлик в меню Пуск" LangString inst_startmenu ${LANG_UKRAINIAN} "Створити ярлик в меню Пуск"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_UZBEK} "qBittorrent (talab qilinadi)" LangString inst_qbt_req ${LANG_UZBEK} "qBittorrent (talab qilinadi)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_UZBEK} "Ish Stolida Yorliq Yaratilsin" LangString inst_dekstop ${LANG_UZBEK} "Ish Stolida Yorliq Yaratilsin"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_UZBEK} "Boshlash Menyusida Yorliq Yaratilsin" LangString inst_startmenu ${LANG_UZBEK} "Boshlash Menyusida Yorliq Yaratilsin"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -2,8 +2,8 @@
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_WELSH} "qBittorrent (required)" LangString inst_qbt_req ${LANG_WELSH} "qBittorrent (required)"
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut" ;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_desktop ${LANG_WELSH} "Create Desktop Shortcut" LangString inst_dekstop ${LANG_WELSH} "Create Desktop Shortcut"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut" ;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_WELSH} "Create Start Menu Shortcut" LangString inst_startmenu ${LANG_WELSH} "Create Start Menu Shortcut"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up" ;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"

View File

@@ -65,7 +65,7 @@ Section $(inst_qbt_req) ;"qBittorrent (required)"
SectionEnd SectionEnd
; Optional section (can be disabled by the user) ; Optional section (can be disabled by the user)
Section /o $(inst_desktop) ;"Create Desktop Shortcut" Section /o $(inst_dekstop) ;"Create Desktop Shortcut"
CreateShortCut "$DESKTOP\qBittorrent.lnk" "$INSTDIR\qbittorrent.exe" CreateShortCut "$DESKTOP\qBittorrent.lnk" "$INSTDIR\qbittorrent.exe"

View File

@@ -42,6 +42,6 @@ number.
8080). 8080).
.SH BUGS .SH BUGS
.PP .PP
If you find a bug, please report it at https://bugs.qbittorrent.org If you find a bug, please report it at http://bugs.qbittorrent.org
.SH AUTHORS .SH AUTHORS
Christophe Dumez <chris@qbittorrent.org>. Christophe Dumez <chris@qbittorrent.org>.

View File

@@ -38,4 +38,4 @@ the default account user name is "admin" with "adminadmin" as a password.
# BUGS # BUGS
If you find a bug, please report it at https://bugs.qbittorrent.org If you find a bug, please report it at http://bugs.qbittorrent.org

View File

@@ -36,6 +36,6 @@ number.
8080). 8080).
.SH BUGS .SH BUGS
.PP .PP
If you find a bug, please report it at https://bugs.qbittorrent.org If you find a bug, please report it at http://bugs.qbittorrent.org
.SH AUTHORS .SH AUTHORS
Christophe Dumez <chris@qbittorrent.org>. Christophe Dumez <chris@qbittorrent.org>.

View File

@@ -33,4 +33,4 @@ FAST extension (mainline) and PeX support (utorrent compatible).
# BUGS # BUGS
If you find a bug, please report it at https://bugs.qbittorrent.org If you find a bug, please report it at http://bugs.qbittorrent.org

View File

@@ -97,7 +97,6 @@
#include "gui/shutdownconfirmdialog.h" #include "gui/shutdownconfirmdialog.h"
#include "gui/uithememanager.h" #include "gui/uithememanager.h"
#include "gui/utils.h" #include "gui/utils.h"
#include "gui/windowstate.h"
#endif // DISABLE_GUI #endif // DISABLE_GUI
#ifndef DISABLE_WEBUI #ifndef DISABLE_WEBUI
@@ -108,12 +107,12 @@ namespace
{ {
#define SETTINGS_KEY(name) u"Application/" name #define SETTINGS_KEY(name) u"Application/" name
#define FILELOGGER_SETTINGS_KEY(name) (SETTINGS_KEY(u"FileLogger/") name) #define FILELOGGER_SETTINGS_KEY(name) (SETTINGS_KEY(u"FileLogger/") name)
#define NOTIFICATIONS_SETTINGS_KEY(name) (SETTINGS_KEY(u"GUI/Notifications/"_s) name) #define NOTIFICATIONS_SETTINGS_KEY(name) (SETTINGS_KEY(u"GUI/Notifications/"_qs) name)
const QString LOG_FOLDER = u"logs"_s; const QString LOG_FOLDER = u"logs"_qs;
const QChar PARAMS_SEPARATOR = u'|'; const QChar PARAMS_SEPARATOR = u'|';
const Path DEFAULT_PORTABLE_MODE_PROFILE_DIR {u"profile"_s}; const Path DEFAULT_PORTABLE_MODE_PROFILE_DIR {u"profile"_qs};
const int MIN_FILELOG_SIZE = 1024; // 1KiB const int MIN_FILELOG_SIZE = 1024; // 1KiB
const int MAX_FILELOG_SIZE = 1000 * 1024 * 1024; // 1000MiB const int MAX_FILELOG_SIZE = 1000 * 1024 * 1024; // 1000MiB
@@ -122,132 +121,34 @@ namespace
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
const int PIXMAP_CACHE_SIZE = 64 * 1024 * 1024; // 64MiB const int PIXMAP_CACHE_SIZE = 64 * 1024 * 1024; // 64MiB
#endif #endif
QString serializeParams(const QBtCommandLineParameters &params)
{
QStringList result;
// Because we're passing a string list to the currently running
// qBittorrent process, we need some way of passing along the options
// the user has specified. Here we place special strings that are
// almost certainly not going to collide with a file path or URL
// specified by the user, and placing them at the beginning of the
// string list so that they will be processed before the list of
// torrent paths or URLs.
const BitTorrent::AddTorrentParams &addTorrentParams = params.addTorrentParams;
if (!addTorrentParams.savePath.isEmpty())
result.append(u"@savePath=" + addTorrentParams.savePath.data());
if (addTorrentParams.addPaused.has_value())
result.append(*addTorrentParams.addPaused ? u"@addPaused=1"_s : u"@addPaused=0"_s);
if (addTorrentParams.skipChecking)
result.append(u"@skipChecking"_s);
if (!addTorrentParams.category.isEmpty())
result.append(u"@category=" + addTorrentParams.category);
if (addTorrentParams.sequential)
result.append(u"@sequential"_s);
if (addTorrentParams.firstLastPiecePriority)
result.append(u"@firstLastPiecePriority"_s);
if (params.skipDialog.has_value())
result.append(*params.skipDialog ? u"@skipDialog=1"_s : u"@skipDialog=0"_s);
result += params.torrentSources;
return result.join(PARAMS_SEPARATOR);
}
QBtCommandLineParameters parseParams(const QString &str)
{
QBtCommandLineParameters parsedParams;
BitTorrent::AddTorrentParams &addTorrentParams = parsedParams.addTorrentParams;
for (QString param : asConst(str.split(PARAMS_SEPARATOR, Qt::SkipEmptyParts)))
{
param = param.trimmed();
// Process strings indicating options specified by the user.
if (param.startsWith(u"@savePath="))
{
addTorrentParams.savePath = Path(param.mid(10));
continue;
}
if (param.startsWith(u"@addPaused="))
{
addTorrentParams.addPaused = (QStringView(param).mid(11).toInt() != 0);
continue;
}
if (param == u"@skipChecking")
{
addTorrentParams.skipChecking = true;
continue;
}
if (param.startsWith(u"@category="))
{
addTorrentParams.category = param.mid(10);
continue;
}
if (param == u"@sequential")
{
addTorrentParams.sequential = true;
continue;
}
if (param == u"@firstLastPiecePriority")
{
addTorrentParams.firstLastPiecePriority = true;
continue;
}
if (param.startsWith(u"@skipDialog="))
{
parsedParams.skipDialog = (QStringView(param).mid(12).toInt() != 0);
continue;
}
parsedParams.torrentSources.append(param);
}
return parsedParams;
}
} }
Application::Application(int &argc, char **argv) Application::Application(int &argc, char **argv)
: BaseApplication(argc, argv) : BaseApplication(argc, argv)
, m_commandLineArgs(parseCommandLine(Application::arguments())) , m_shutdownAct(ShutdownDialogAction::Exit)
, m_storeFileLoggerEnabled(FILELOGGER_SETTINGS_KEY(u"Enabled"_s)) , m_commandLineArgs(parseCommandLine(this->arguments()))
, m_storeFileLoggerBackup(FILELOGGER_SETTINGS_KEY(u"Backup"_s)) , m_storeFileLoggerEnabled(FILELOGGER_SETTINGS_KEY(u"Enabled"_qs))
, m_storeFileLoggerDeleteOld(FILELOGGER_SETTINGS_KEY(u"DeleteOld"_s)) , m_storeFileLoggerBackup(FILELOGGER_SETTINGS_KEY(u"Backup"_qs))
, m_storeFileLoggerMaxSize(FILELOGGER_SETTINGS_KEY(u"MaxSizeBytes"_s)) , m_storeFileLoggerDeleteOld(FILELOGGER_SETTINGS_KEY(u"DeleteOld"_qs))
, m_storeFileLoggerAge(FILELOGGER_SETTINGS_KEY(u"Age"_s)) , m_storeFileLoggerMaxSize(FILELOGGER_SETTINGS_KEY(u"MaxSizeBytes"_qs))
, m_storeFileLoggerAgeType(FILELOGGER_SETTINGS_KEY(u"AgeType"_s)) , m_storeFileLoggerAge(FILELOGGER_SETTINGS_KEY(u"Age"_qs))
, m_storeFileLoggerPath(FILELOGGER_SETTINGS_KEY(u"Path"_s)) , m_storeFileLoggerAgeType(FILELOGGER_SETTINGS_KEY(u"AgeType"_qs))
, m_storeMemoryWorkingSetLimit(SETTINGS_KEY(u"MemoryWorkingSetLimit"_s)) , m_storeFileLoggerPath(FILELOGGER_SETTINGS_KEY(u"Path"_qs))
, m_storeMemoryWorkingSetLimit(SETTINGS_KEY(u"MemoryWorkingSetLimit"_qs))
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
, m_processMemoryPriority(SETTINGS_KEY(u"ProcessMemoryPriority"_s)) , m_processMemoryPriority(SETTINGS_KEY(u"ProcessMemoryPriority"_qs))
#endif #endif
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
, m_startUpWindowState(u"GUI/StartUpWindowState"_s) , m_storeNotificationTorrentAdded(NOTIFICATIONS_SETTINGS_KEY(u"TorrentAdded"_qs))
, m_storeNotificationTorrentAdded(NOTIFICATIONS_SETTINGS_KEY(u"TorrentAdded"_s))
#endif #endif
{ {
qRegisterMetaType<Log::Msg>("Log::Msg"); qRegisterMetaType<Log::Msg>("Log::Msg");
qRegisterMetaType<Log::Peer>("Log::Peer"); qRegisterMetaType<Log::Peer>("Log::Peer");
setApplicationName(u"qBittorrent"_s); setApplicationName(u"qBittorrent"_qs);
setOrganizationDomain(u"qbittorrent.org"_s); setOrganizationDomain(u"qbittorrent.org"_qs);
#if !defined(DISABLE_GUI) #if !defined(DISABLE_GUI)
setDesktopFileName(u"org.qbittorrent.qBittorrent"_s); setDesktopFileName(u"org.qbittorrent.qBittorrent"_qs);
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
setAttribute(Qt::AA_UseHighDpiPixmaps, true); // opt-in to the high DPI pixmap support setAttribute(Qt::AA_UseHighDpiPixmaps, true); // opt-in to the high DPI pixmap support
#endif #endif
@@ -275,7 +176,7 @@ Application::Application(int &argc, char **argv)
if (!firstTimeUser) if (!firstTimeUser)
{ {
if (!upgrade()) if (!upgrade())
throw RuntimeError(u"Failed migration of old settings"_s); // Not translatable. Translation isn't configured yet. throw RuntimeError(u"Failed migration of old settings"_qs); // Not translatable. Translation isn't configured yet.
handleChangedDefaults(DefaultPreferencesMode::Legacy); handleChangedDefaults(DefaultPreferencesMode::Legacy);
} }
else else
@@ -296,7 +197,7 @@ Application::Application(int &argc, char **argv)
{ {
LogMsg(tr("Running in portable mode. Auto detected profile folder at: %1").arg(profileDir.toString())); LogMsg(tr("Running in portable mode. Auto detected profile folder at: %1").arg(profileDir.toString()));
if (m_commandLineArgs.relativeFastresumePaths) if (m_commandLineArgs.relativeFastresumePaths)
LogMsg(tr("Redundant command line flag detected: \"%1\". Portable mode implies relative fastresume.").arg(u"--relative-fastresume"_s), Log::WARNING); // to avoid translating the `--relative-fastresume` string LogMsg(tr("Redundant command line flag detected: \"%1\". Portable mode implies relative fastresume.").arg(u"--relative-fastresume"_qs), Log::WARNING); // to avoid translating the `--relative-fastresume` string
} }
else else
{ {
@@ -311,7 +212,7 @@ Application::Application(int &argc, char **argv)
if (m_commandLineArgs.torrentingPort > 0) // it will be -1 when user did not set any value if (m_commandLineArgs.torrentingPort > 0) // it will be -1 when user did not set any value
{ {
SettingValue<int> port {u"BitTorrent/Session/Port"_s}; SettingValue<int> port {u"BitTorrent/Session/Port"_qs};
port = m_commandLineArgs.torrentingPort; port = m_commandLineArgs.torrentingPort;
} }
} }
@@ -334,16 +235,6 @@ MainWindow *Application::mainWindow()
return m_window; return m_window;
} }
WindowState Application::startUpWindowState() const
{
return m_startUpWindowState;
}
void Application::setStartUpWindowState(const WindowState windowState)
{
m_startUpWindowState = windowState;
}
bool Application::isTorrentAddedNotificationsEnabled() const bool Application::isTorrentAddedNotificationsEnabled() const
{ {
return m_storeNotificationTorrentAdded; return m_storeNotificationTorrentAdded;
@@ -487,7 +378,7 @@ void Application::processMessage(const QString &message)
} }
#endif #endif
const QBtCommandLineParameters params = parseParams(message); const AddTorrentParams params = parseParams(message.split(PARAMS_SEPARATOR, Qt::SkipEmptyParts));
// If Application is not allowed to process params immediately // If Application is not allowed to process params immediately
// (i.e., other components are not ready) store params // (i.e., other components are not ready) store params
if (m_isProcessingParamsAllowed) if (m_isProcessingParamsAllowed)
@@ -523,13 +414,13 @@ void Application::runExternalProgram(const QString &programTemplate, const BitTo
str.replace(i, 2, torrent->contentPath().toString()); str.replace(i, 2, torrent->contentPath().toString());
break; break;
case u'G': case u'G':
str.replace(i, 2, torrent->tags().join(u","_s)); str.replace(i, 2, torrent->tags().join(u","_qs));
break; break;
case u'I': case u'I':
str.replace(i, 2, (torrent->infoHash().v1().isValid() ? torrent->infoHash().v1().toString() : u"-"_s)); str.replace(i, 2, (torrent->infoHash().v1().isValid() ? torrent->infoHash().v1().toString() : u"-"_qs));
break; break;
case u'J': case u'J':
str.replace(i, 2, (torrent->infoHash().v2().isValid() ? torrent->infoHash().v2().toString() : u"-"_s)); str.replace(i, 2, (torrent->infoHash().v2().isValid() ? torrent->infoHash().v2().toString() : u"-"_qs));
break; break;
case u'K': case u'K':
str.replace(i, 2, torrent->id().toString()); str.replace(i, 2, torrent->id().toString());
@@ -735,12 +626,71 @@ void Application::allTorrentsFinished()
exit(); exit();
} }
bool Application::callMainInstance() bool Application::sendParams(const QStringList &params)
{ {
return m_instanceManager->sendMessage(serializeParams(commandLineArgs())); return m_instanceManager->sendMessage(params.join(PARAMS_SEPARATOR));
} }
void Application::processParams(const QBtCommandLineParameters &params) Application::AddTorrentParams Application::parseParams(const QStringList &params) const
{
AddTorrentParams parsedParams;
BitTorrent::AddTorrentParams &torrentParams = parsedParams.torrentParams;
for (QString param : params)
{
param = param.trimmed();
// Process strings indicating options specified by the user.
if (param.startsWith(u"@savePath="))
{
torrentParams.savePath = Path(param.mid(10));
continue;
}
if (param.startsWith(u"@addPaused="))
{
torrentParams.addPaused = (QStringView(param).mid(11).toInt() != 0);
continue;
}
if (param == u"@skipChecking")
{
torrentParams.skipChecking = true;
continue;
}
if (param.startsWith(u"@category="))
{
torrentParams.category = param.mid(10);
continue;
}
if (param == u"@sequential")
{
torrentParams.sequential = true;
continue;
}
if (param == u"@firstLastPiecePriority")
{
torrentParams.firstLastPiecePriority = true;
continue;
}
if (param.startsWith(u"@skipDialog="))
{
parsedParams.skipTorrentDialog = (QStringView(param).mid(12).toInt() != 0);
continue;
}
parsedParams.torrentSources.append(param);
}
return parsedParams;
}
void Application::processParams(const AddTorrentParams &params)
{ {
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
// There are two circumstances in which we want to show the torrent // There are two circumstances in which we want to show the torrent
@@ -748,21 +698,22 @@ void Application::processParams(const QBtCommandLineParameters &params)
// be shown and skipTorrentDialog is undefined. The other is when // be shown and skipTorrentDialog is undefined. The other is when
// skipTorrentDialog is false, meaning that the application setting // skipTorrentDialog is false, meaning that the application setting
// should be overridden. // should be overridden.
const bool showDialog = !params.skipDialog.value_or(!AddNewTorrentDialog::isEnabled()); const bool showDialogForThisTorrent = !params.skipTorrentDialog.value_or(!AddNewTorrentDialog::isEnabled());
if (showDialog) if (showDialogForThisTorrent)
{ {
for (const QString &torrentSource : params.torrentSources) for (const QString &torrentSource : params.torrentSources)
AddNewTorrentDialog::show(torrentSource, params.addTorrentParams, m_window); AddNewTorrentDialog::show(torrentSource, params.torrentParams, m_window);
} }
else else
#endif #endif
{ {
for (const QString &torrentSource : params.torrentSources) for (const QString &torrentSource : params.torrentSources)
BitTorrent::Session::instance()->addTorrent(torrentSource, params.addTorrentParams); BitTorrent::Session::instance()->addTorrent(torrentSource, params.torrentParams);
} }
} }
int Application::exec() int Application::exec(const QStringList &params)
try
{ {
#if !defined(DISABLE_WEBUI) && defined(DISABLE_GUI) #if !defined(DISABLE_WEBUI) && defined(DISABLE_GUI)
const QString loadingStr = tr("WebUI will be started shortly after internal preparations. Please wait..."); const QString loadingStr = tr("WebUI will be started shortly after internal preparations. Please wait...");
@@ -791,7 +742,7 @@ int Application::exec()
#ifndef Q_OS_MACOS #ifndef Q_OS_MACOS
auto *desktopIntegrationMenu = new QMenu; auto *desktopIntegrationMenu = new QMenu;
auto *actionExit = new QAction(tr("E&xit"), desktopIntegrationMenu); auto *actionExit = new QAction(tr("E&xit"), desktopIntegrationMenu);
actionExit->setIcon(UIThemeManager::instance()->getIcon(u"application-exit"_s)); actionExit->setIcon(UIThemeManager::instance()->getIcon(u"application-exit"_qs));
actionExit->setMenuRole(QAction::QuitRole); actionExit->setMenuRole(QAction::QuitRole);
actionExit->setShortcut(Qt::CTRL | Qt::Key_Q); actionExit->setShortcut(Qt::CTRL | Qt::Key_Q);
connect(actionExit, &QAction::triggered, this, [] connect(actionExit, &QAction::triggered, this, []
@@ -801,8 +752,11 @@ int Application::exec()
desktopIntegrationMenu->addAction(actionExit); desktopIntegrationMenu->addAction(actionExit);
m_desktopIntegration->setMenu(desktopIntegrationMenu); m_desktopIntegration->setMenu(desktopIntegrationMenu);
#endif
const bool isHidden = m_desktopIntegration->isActive() && (startUpWindowState() == WindowState::Hidden); const auto *pref = Preferences::instance();
#ifndef Q_OS_MACOS
const bool isHidden = m_desktopIntegration->isActive() && pref->startMinimized() && pref->minimizeToTray();
#else #else
const bool isHidden = false; const bool isHidden = false;
#endif #endif
@@ -812,7 +766,7 @@ int Application::exec()
createStartupProgressDialog(); createStartupProgressDialog();
// Add a small delay to avoid "flashing" the progress dialog in case there are not many torrents to restore. // Add a small delay to avoid "flashing" the progress dialog in case there are not many torrents to restore.
m_startupProgressDialog->setMinimumDuration(1000); m_startupProgressDialog->setMinimumDuration(1000);
if (startUpWindowState() != WindowState::Normal) if (pref->startMinimized())
m_startupProgressDialog->setWindowState(Qt::WindowMinimized); m_startupProgressDialog->setWindowState(Qt::WindowMinimized);
} }
else else
@@ -865,14 +819,8 @@ int Application::exec()
}); });
disconnect(m_desktopIntegration, &DesktopIntegration::activationRequested, this, &Application::createStartupProgressDialog); disconnect(m_desktopIntegration, &DesktopIntegration::activationRequested, this, &Application::createStartupProgressDialog);
#ifndef Q_OS_MACOS const MainWindow::State windowState = (!m_startupProgressDialog || (m_startupProgressDialog->windowState() & Qt::WindowMinimized))
const WindowState windowState = !m_startupProgressDialog ? WindowState::Hidden ? MainWindow::Minimized : MainWindow::Normal;
: (m_startupProgressDialog->windowState() & Qt::WindowMinimized) ? WindowState::Minimized
: WindowState::Normal;
#else
const WindowState windowState = (m_startupProgressDialog->windowState() & Qt::WindowMinimized)
? WindowState::Minimized : WindowState::Normal;
#endif
m_window = new MainWindow(this, windowState); m_window = new MainWindow(this, windowState);
delete m_startupProgressDialog; delete m_startupProgressDialog;
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
@@ -903,16 +851,16 @@ int Application::exec()
const Preferences *pref = Preferences::instance(); const Preferences *pref = Preferences::instance();
const auto scheme = pref->isWebUiHttpsEnabled() ? u"https"_s : u"http"_s; const auto scheme = pref->isWebUiHttpsEnabled() ? u"https"_qs : u"http"_qs;
const auto url = u"%1://localhost:%2\n"_s.arg(scheme, QString::number(pref->getWebUiPort())); const auto url = u"%1://localhost:%2\n"_qs.arg(scheme, QString::number(pref->getWebUiPort()));
const QString mesg = u"\n******** %1 ********\n"_s.arg(tr("Information")) const QString mesg = u"\n******** %1 ********\n"_qs.arg(tr("Information"))
+ tr("To control qBittorrent, access the WebUI at: %1").arg(url); + tr("To control qBittorrent, access the WebUI at: %1").arg(url);
printf("%s\n", qUtf8Printable(mesg)); printf("%s\n", qUtf8Printable(mesg));
if (pref->getWebUIPassword() == QByteArrayLiteral("ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==")) if (pref->getWebUIPassword() == QByteArrayLiteral("ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ=="))
{ {
const QString warning = tr("The Web UI administrator username is: %1").arg(pref->getWebUiUsername()) + u'\n' const QString warning = tr("The Web UI administrator username is: %1").arg(pref->getWebUiUsername()) + u'\n'
+ tr("The Web UI administrator password has not been changed from the default: %1").arg(u"adminadmin"_s) + u'\n' + tr("The Web UI administrator password has not been changed from the default: %1").arg(u"adminadmin"_qs) + u'\n'
+ tr("This is a security risk, please change your password in program preferences.") + u'\n'; + tr("This is a security risk, please change your password in program preferences.") + u'\n';
printf("%s", qUtf8Printable(warning)); printf("%s", qUtf8Printable(warning));
} }
@@ -920,17 +868,31 @@ int Application::exec()
#endif // DISABLE_WEBUI #endif // DISABLE_WEBUI
m_isProcessingParamsAllowed = true; m_isProcessingParamsAllowed = true;
for (const QBtCommandLineParameters &params : m_paramsQueue) for (const AddTorrentParams &params : m_paramsQueue)
processParams(params); processParams(params);
m_paramsQueue.clear(); m_paramsQueue.clear();
}); });
const QBtCommandLineParameters params = commandLineArgs(); if (!params.isEmpty())
if (!params.torrentSources.isEmpty()) m_paramsQueue.append(parseParams(params));
m_paramsQueue.append(params);
return BaseApplication::exec(); return BaseApplication::exec();
} }
catch (const RuntimeError &err)
{
#ifdef DISABLE_GUI
fprintf(stderr, "%s", qPrintable(err.message()));
#else
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText(QCoreApplication::translate("Application", "Application failed to start."));
msgBox.setInformativeText(err.message());
msgBox.show(); // Need to be shown or to moveToCenter does not work
msgBox.move(Utils::Gui::screenCenter(&msgBox));
msgBox.exec();
#endif
return EXIT_FAILURE;
}
bool Application::isRunning() bool Application::isRunning()
{ {
@@ -998,8 +960,7 @@ bool Application::event(QEvent *ev)
path = static_cast<QFileOpenEvent *>(ev)->url().toString(); path = static_cast<QFileOpenEvent *>(ev)->url().toString();
qDebug("Received a mac file open event: %s", qUtf8Printable(path)); qDebug("Received a mac file open event: %s", qUtf8Printable(path));
QBtCommandLineParameters params; const AddTorrentParams params = parseParams({path});
params.torrentSources.append(path);
// If Application is not allowed to process params immediately // If Application is not allowed to process params immediately
// (i.e., other components are not ready) store params // (i.e., other components are not ready) store params
if (m_isProcessingParamsAllowed) if (m_isProcessingParamsAllowed)
@@ -1106,22 +1067,7 @@ void Application::applyMemoryWorkingSetLimit() const
if (::getrlimit(RLIMIT_RSS, &limit) != 0) if (::getrlimit(RLIMIT_RSS, &limit) != 0)
return; return;
const size_t newSize = memoryWorkingSetLimit() * MiB; limit.rlim_cur = memoryWorkingSetLimit() * MiB;
if (newSize > limit.rlim_max)
{
// try to raise the hard limit
rlimit newLimit = limit;
newLimit.rlim_max = newSize;
if (::setrlimit(RLIMIT_RSS, &newLimit) != 0)
{
const auto message = QString::fromLocal8Bit(strerror(errno));
LogMsg(tr("Failed to set physical memory (RAM) usage hard limit. Requested size: %1. System hard limit: %2. Error code: %3. Error message: \"%4\"")
.arg(QString::number(newSize), QString::number(limit.rlim_max), QString::number(errno), message), Log::WARNING);
return;
}
}
limit.rlim_cur = newSize;
if (::setrlimit(RLIMIT_RSS, &limit) != 0) if (::setrlimit(RLIMIT_RSS, &limit) != 0)
{ {
const auto message = QString::fromLocal8Bit(strerror(errno)); const auto message = QString::fromLocal8Bit(strerror(errno));
@@ -1149,12 +1095,12 @@ void Application::setProcessMemoryPriority(const MemoryPriority priority)
void Application::applyMemoryPriority() const void Application::applyMemoryPriority() const
{ {
using SETPROCESSINFORMATION = BOOL (WINAPI *)(HANDLE, PROCESS_INFORMATION_CLASS, LPVOID, DWORD); using SETPROCESSINFORMATION = BOOL (WINAPI *)(HANDLE, PROCESS_INFORMATION_CLASS, LPVOID, DWORD);
const auto setProcessInformation = Utils::Misc::loadWinAPI<SETPROCESSINFORMATION>(u"Kernel32.dll"_s, "SetProcessInformation"); const auto setProcessInformation = Utils::Misc::loadWinAPI<SETPROCESSINFORMATION>(u"Kernel32.dll"_qs, "SetProcessInformation");
if (!setProcessInformation) // only available on Windows >= 8 if (!setProcessInformation) // only available on Windows >= 8
return; return;
using SETTHREADINFORMATION = BOOL (WINAPI *)(HANDLE, THREAD_INFORMATION_CLASS, LPVOID, DWORD); using SETTHREADINFORMATION = BOOL (WINAPI *)(HANDLE, THREAD_INFORMATION_CLASS, LPVOID, DWORD);
const auto setThreadInformation = Utils::Misc::loadWinAPI<SETTHREADINFORMATION>(u"Kernel32.dll"_s, "SetThreadInformation"); const auto setThreadInformation = Utils::Misc::loadWinAPI<SETTHREADINFORMATION>(u"Kernel32.dll"_qs, "SetThreadInformation");
if (!setThreadInformation) // only available on Windows >= 8 if (!setThreadInformation) // only available on Windows >= 8
return; return;

View File

@@ -96,10 +96,10 @@ public:
Application(int &argc, char **argv); Application(int &argc, char **argv);
~Application() override; ~Application() override;
int exec(); int exec(const QStringList &params);
bool isRunning(); bool isRunning();
bool callMainInstance(); bool sendParams(const QStringList &params);
const QBtCommandLineParameters &commandLineArgs() const; const QBtCommandLineParameters &commandLineArgs() const;
// FileLogger properties // FileLogger properties
@@ -130,9 +130,6 @@ public:
DesktopIntegration *desktopIntegration() override; DesktopIntegration *desktopIntegration() override;
MainWindow *mainWindow() override; MainWindow *mainWindow() override;
WindowState startUpWindowState() const override;
void setStartUpWindowState(WindowState windowState) override;
bool isTorrentAddedNotificationsEnabled() const override; bool isTorrentAddedNotificationsEnabled() const override;
void setTorrentAddedNotificationsEnabled(bool value) override; void setTorrentAddedNotificationsEnabled(bool value) override;
#endif #endif
@@ -149,8 +146,16 @@ private slots:
#endif #endif
private: private:
struct AddTorrentParams
{
QStringList torrentSources;
BitTorrent::AddTorrentParams torrentParams;
std::optional<bool> skipTorrentDialog;
};
void initializeTranslation(); void initializeTranslation();
void processParams(const QBtCommandLineParameters &params); AddTorrentParams parseParams(const QStringList &params) const;
void processParams(const AddTorrentParams &params);
void runExternalProgram(const QString &programTemplate, const BitTorrent::Torrent *torrent) const; void runExternalProgram(const QString &programTemplate, const BitTorrent::Torrent *torrent) const;
void sendNotificationEmail(const BitTorrent::Torrent *torrent); void sendNotificationEmail(const BitTorrent::Torrent *torrent);
@@ -173,7 +178,7 @@ private:
ApplicationInstanceManager *m_instanceManager = nullptr; ApplicationInstanceManager *m_instanceManager = nullptr;
QAtomicInt m_isCleanupRun; QAtomicInt m_isCleanupRun;
bool m_isProcessingParamsAllowed = false; bool m_isProcessingParamsAllowed = false;
ShutdownDialogAction m_shutdownAct = ShutdownDialogAction::Exit; ShutdownDialogAction m_shutdownAct;
QBtCommandLineParameters m_commandLineArgs; QBtCommandLineParameters m_commandLineArgs;
// FileLog // FileLog
@@ -182,7 +187,7 @@ private:
QTranslator m_qtTranslator; QTranslator m_qtTranslator;
QTranslator m_translator; QTranslator m_translator;
QList<QBtCommandLineParameters> m_paramsQueue; QList<AddTorrentParams> m_paramsQueue;
SettingValue<bool> m_storeFileLoggerEnabled; SettingValue<bool> m_storeFileLoggerEnabled;
SettingValue<bool> m_storeFileLoggerBackup; SettingValue<bool> m_storeFileLoggerBackup;
@@ -198,7 +203,6 @@ private:
#endif #endif
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
SettingValue<WindowState> m_startUpWindowState;
SettingValue<bool> m_storeNotificationTorrentAdded; SettingValue<bool> m_storeNotificationTorrentAdded;
DesktopIntegration *m_desktopIntegration = nullptr; DesktopIntegration *m_desktopIntegration = nullptr;

View File

@@ -32,7 +32,6 @@
#include <cstdio> #include <cstdio>
#include <QCoreApplication>
#include <QDebug> #include <QDebug>
#include <QFileInfo> #include <QFileInfo>
#include <QProcessEnvironment> #include <QProcessEnvironment>
@@ -152,16 +151,16 @@ namespace
{ {
QStringList parts = arg.split(u'='); QStringList parts = arg.split(u'=');
if (parts.size() == 2) if (parts.size() == 2)
return Utils::String::unquote(parts[1], u"'\""_s); return Utils::String::unquote(parts[1], u"'\""_qs);
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "Parameter '%1' must follow syntax '%1=%2'", throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
"e.g. Parameter '--webui-port' must follow syntax '--webui-port=value'") "e.g. Parameter '--webui-port' must follow syntax '--webui-port=value'")
.arg(fullParameter(), u"<value>"_s)); .arg(fullParameter(), u"<value>"_qs));
} }
QString value(const QProcessEnvironment &env, const QString &defaultValue = {}) const QString value(const QProcessEnvironment &env, const QString &defaultValue = {}) const
{ {
QString val = env.value(envVarName()); QString val = env.value(envVarName());
return val.isEmpty() ? defaultValue : Utils::String::unquote(val, u"'\""_s); return val.isEmpty() ? defaultValue : Utils::String::unquote(val, u"'\""_qs);
} }
QString usage(const QString &valueName) const QString usage(const QString &valueName) const
@@ -199,15 +198,13 @@ namespace
int value(const QString &arg) const int value(const QString &arg) const
{ {
const QString val = StringOption::value(arg); QString val = StringOption::value(arg);
bool ok = false; bool ok = false;
const int res = val.toInt(&ok); int res = val.toInt(&ok);
if (!ok) if (!ok)
{ throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "Parameter '%1' must follow syntax '%1=%2'",
"e.g. Parameter '--webui-port' must follow syntax '--webui-port=<value>'") "e.g. Parameter '--webui-port' must follow syntax '--webui-port=<value>'")
.arg(fullParameter(), u"<integer value>"_s)); .arg(fullParameter(), u"<integer value>"_qs));
}
return res; return res;
} }
@@ -220,7 +217,7 @@ namespace
int res = val.toInt(&ok); int res = val.toInt(&ok);
if (!ok) if (!ok)
{ {
qDebug() << QCoreApplication::translate("CMD Options", "Expected integer number in environment variable '%1', but got '%2'") qDebug() << QObject::tr("Expected integer number in environment variable '%1', but got '%2'")
.arg(envVarName(), val); .arg(envVarName(), val);
return defaultValue; return defaultValue;
} }
@@ -276,15 +273,15 @@ namespace
} }
} }
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "Parameter '%1' must follow syntax '%1=%2'", throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
"e.g. Parameter '--add-paused' must follow syntax " "e.g. Parameter '--add-paused' must follow syntax "
"'--add-paused=<true|false>'") "'--add-paused=<true|false>'")
.arg(fullParameter(), u"<true|false>"_s)); .arg(fullParameter(), u"<true|false>"_qs));
} }
std::optional<bool> value(const QProcessEnvironment &env) const std::optional<bool> value(const QProcessEnvironment &env) const
{ {
const QString val = env.value(envVarName(), u"-1"_s); const QString val = env.value(envVarName(), u"-1"_qs);
if (val.isEmpty()) if (val.isEmpty())
{ {
@@ -303,8 +300,8 @@ namespace
return false; return false;
} }
qDebug() << QCoreApplication::translate("CMD Options", "Expected %1 in environment variable '%2', but got '%3'") qDebug() << QObject::tr("Expected %1 in environment variable '%2', but got '%3'")
.arg(u"true|false"_s, envVarName(), val); .arg(u"true|false"_qs, envVarName(), val);
return std::nullopt; return std::nullopt;
} }
@@ -343,7 +340,14 @@ namespace
} }
QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env) QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env)
: relativeFastresumePaths(RELATIVE_FASTRESUME.value(env)) : showHelp(false)
, relativeFastresumePaths(RELATIVE_FASTRESUME.value(env))
, skipChecking(SKIP_HASH_CHECK_OPTION.value(env))
, sequential(SEQUENTIAL_OPTION.value(env))
, firstLastPiecePriority(FIRST_AND_LAST_OPTION.value(env))
#if !defined(Q_OS_WIN) || defined(DISABLE_GUI)
, showVersion(false)
#endif
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
, noSplash(NO_SPLASH_OPTION.value(env)) , noSplash(NO_SPLASH_OPTION.value(env))
#elif !defined(Q_OS_WIN) #elif !defined(Q_OS_WIN)
@@ -351,16 +355,49 @@ QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &en
#endif #endif
, webUiPort(WEBUI_PORT_OPTION.value(env, -1)) , webUiPort(WEBUI_PORT_OPTION.value(env, -1))
, torrentingPort(TORRENTING_PORT_OPTION.value(env, -1)) , torrentingPort(TORRENTING_PORT_OPTION.value(env, -1))
, addPaused(PAUSED_OPTION.value(env))
, skipDialog(SKIP_DIALOG_OPTION.value(env)) , skipDialog(SKIP_DIALOG_OPTION.value(env))
, profileDir(PROFILE_OPTION.value(env)) , profileDir(PROFILE_OPTION.value(env))
, configurationName(CONFIGURATION_OPTION.value(env)) , configurationName(CONFIGURATION_OPTION.value(env))
, savePath(SAVE_PATH_OPTION.value(env))
, category(CATEGORY_OPTION.value(env))
{ {
addTorrentParams.savePath = Path(SAVE_PATH_OPTION.value(env)); }
addTorrentParams.category = CATEGORY_OPTION.value(env);
addTorrentParams.skipChecking = SKIP_HASH_CHECK_OPTION.value(env); QStringList QBtCommandLineParameters::paramList() const
addTorrentParams.sequential = SEQUENTIAL_OPTION.value(env); {
addTorrentParams.firstLastPiecePriority = FIRST_AND_LAST_OPTION.value(env); QStringList result;
addTorrentParams.addPaused = PAUSED_OPTION.value(env); // Because we're passing a string list to the currently running
// qBittorrent process, we need some way of passing along the options
// the user has specified. Here we place special strings that are
// almost certainly not going to collide with a file path or URL
// specified by the user, and placing them at the beginning of the
// string list so that they will be processed before the list of
// torrent paths or URLs.
if (!savePath.isEmpty())
result.append(u"@savePath=" + savePath.data());
if (addPaused.has_value())
result.append(*addPaused ? u"@addPaused=1"_qs : u"@addPaused=0"_qs);
if (skipChecking)
result.append(u"@skipChecking"_qs);
if (!category.isEmpty())
result.append(u"@category=" + category);
if (sequential)
result.append(u"@sequential"_qs);
if (firstLastPiecePriority)
result.append(u"@firstLastPiecePriority"_qs);
if (skipDialog.has_value())
result.append(*skipDialog ? u"@skipDialog=1"_qs : u"@skipDialog=0"_qs);
result += torrents;
return result;
} }
QBtCommandLineParameters parseCommandLine(const QStringList &args) QBtCommandLineParameters parseCommandLine(const QStringList &args)
@@ -389,16 +426,16 @@ QBtCommandLineParameters parseCommandLine(const QStringList &args)
{ {
result.webUiPort = WEBUI_PORT_OPTION.value(arg); result.webUiPort = WEBUI_PORT_OPTION.value(arg);
if ((result.webUiPort < 1) || (result.webUiPort > 65535)) if ((result.webUiPort < 1) || (result.webUiPort > 65535))
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "%1 must specify a valid port (1 to 65535).") throw CommandLineParameterError(QObject::tr("%1 must specify a valid port (1 to 65535).")
.arg(u"--webui-port"_s)); .arg(u"--webui-port"_qs));
} }
else if (arg == TORRENTING_PORT_OPTION) else if (arg == TORRENTING_PORT_OPTION)
{ {
result.torrentingPort = TORRENTING_PORT_OPTION.value(arg); result.torrentingPort = TORRENTING_PORT_OPTION.value(arg);
if ((result.torrentingPort < 1) || (result.torrentingPort > 65535)) if ((result.torrentingPort < 1) || (result.torrentingPort > 65535))
{ {
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "%1 must specify a valid port (1 to 65535).") throw CommandLineParameterError(QObject::tr("%1 must specify a valid port (1 to 65535).")
.arg(u"--torrenting-port"_s)); .arg(u"--torrenting-port"_qs));
} }
} }
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
@@ -426,27 +463,27 @@ QBtCommandLineParameters parseCommandLine(const QStringList &args)
} }
else if (arg == SAVE_PATH_OPTION) else if (arg == SAVE_PATH_OPTION)
{ {
result.addTorrentParams.savePath = Path(SAVE_PATH_OPTION.value(arg)); result.savePath = Path(SAVE_PATH_OPTION.value(arg));
} }
else if (arg == PAUSED_OPTION) else if (arg == PAUSED_OPTION)
{ {
result.addTorrentParams.addPaused = PAUSED_OPTION.value(arg); result.addPaused = PAUSED_OPTION.value(arg);
} }
else if (arg == SKIP_HASH_CHECK_OPTION) else if (arg == SKIP_HASH_CHECK_OPTION)
{ {
result.addTorrentParams.skipChecking = true; result.skipChecking = true;
} }
else if (arg == CATEGORY_OPTION) else if (arg == CATEGORY_OPTION)
{ {
result.addTorrentParams.category = CATEGORY_OPTION.value(arg); result.category = CATEGORY_OPTION.value(arg);
} }
else if (arg == SEQUENTIAL_OPTION) else if (arg == SEQUENTIAL_OPTION)
{ {
result.addTorrentParams.sequential = true; result.sequential = true;
} }
else if (arg == FIRST_AND_LAST_OPTION) else if (arg == FIRST_AND_LAST_OPTION)
{ {
result.addTorrentParams.firstLastPiecePriority = true; result.firstLastPiecePriority = true;
} }
else if (arg == SKIP_DIALOG_OPTION) else if (arg == SKIP_DIALOG_OPTION)
{ {
@@ -465,9 +502,9 @@ QBtCommandLineParameters parseCommandLine(const QStringList &args)
torrentPath.setFile(arg); torrentPath.setFile(arg);
if (torrentPath.exists()) if (torrentPath.exists())
result.torrentSources += torrentPath.absoluteFilePath(); result.torrents += torrentPath.absoluteFilePath();
else else
result.torrentSources += arg; result.torrents += arg;
} }
} }
@@ -500,58 +537,58 @@ QString makeUsage(const QString &prgName)
{ {
const QString indentation {USAGE_INDENTATION, u' '}; const QString indentation {USAGE_INDENTATION, u' '};
const QString text = QCoreApplication::translate("CMD Options", "Usage:") + u'\n' const QString text = QObject::tr("Usage:") + u'\n'
+ indentation + prgName + u' ' + QCoreApplication::translate("CMD Options", "[options] [(<filename> | <url>)...]") + u'\n' + indentation + prgName + u' ' + QObject::tr("[options] [(<filename> | <url>)...]") + u'\n'
+ QCoreApplication::translate("CMD Options", "Options:") + u'\n' + QObject::tr("Options:") + u'\n'
#if !defined(Q_OS_WIN) || defined(DISABLE_GUI) #if !defined(Q_OS_WIN) || defined(DISABLE_GUI)
+ SHOW_VERSION_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Display program version and exit")) + u'\n' + SHOW_VERSION_OPTION.usage() + wrapText(QObject::tr("Display program version and exit")) + u'\n'
#endif #endif
+ SHOW_HELP_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Display this help message and exit")) + u'\n' + SHOW_HELP_OPTION.usage() + wrapText(QObject::tr("Display this help message and exit")) + u'\n'
+ WEBUI_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port")) + WEBUI_PORT_OPTION.usage(QObject::tr("port"))
+ wrapText(QCoreApplication::translate("CMD Options", "Change the Web UI port")) + wrapText(QObject::tr("Change the Web UI port"))
+ u'\n' + u'\n'
+ TORRENTING_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port")) + TORRENTING_PORT_OPTION.usage(QObject::tr("port"))
+ wrapText(QCoreApplication::translate("CMD Options", "Change the torrenting port")) + wrapText(QObject::tr("Change the torrenting port"))
+ u'\n' + u'\n'
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
+ NO_SPLASH_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Disable splash screen")) + u'\n' + NO_SPLASH_OPTION.usage() + wrapText(QObject::tr("Disable splash screen")) + u'\n'
#elif !defined(Q_OS_WIN) #elif !defined(Q_OS_WIN)
+ DAEMON_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Run in daemon-mode (background)")) + u'\n' + DAEMON_OPTION.usage() + wrapText(QObject::tr("Run in daemon-mode (background)")) + u'\n'
#endif #endif
//: Use appropriate short form or abbreviation of "directory" //: Use appropriate short form or abbreviation of "directory"
+ PROFILE_OPTION.usage(QCoreApplication::translate("CMD Options", "dir")) + PROFILE_OPTION.usage(QObject::tr("dir"))
+ wrapText(QCoreApplication::translate("CMD Options", "Store configuration files in <dir>")) + u'\n' + wrapText(QObject::tr("Store configuration files in <dir>")) + u'\n'
+ CONFIGURATION_OPTION.usage(QCoreApplication::translate("CMD Options", "name")) + CONFIGURATION_OPTION.usage(QObject::tr("name"))
+ wrapText(QCoreApplication::translate("CMD Options", "Store configuration files in directories qBittorrent_<name>")) + u'\n' + wrapText(QObject::tr("Store configuration files in directories qBittorrent_<name>")) + u'\n'
+ RELATIVE_FASTRESUME.usage() + RELATIVE_FASTRESUME.usage()
+ wrapText(QCoreApplication::translate("CMD Options", "Hack into libtorrent fastresume files and make file paths relative " + wrapText(QObject::tr("Hack into libtorrent fastresume files and make file paths relative "
"to the profile directory")) + u'\n' "to the profile directory")) + u'\n'
+ Option::padUsageText(QCoreApplication::translate("CMD Options", "files or URLs")) + Option::padUsageText(QObject::tr("files or URLs"))
+ wrapText(QCoreApplication::translate("CMD Options", "Download the torrents passed by the user")) + u'\n' + wrapText(QObject::tr("Download the torrents passed by the user")) + u'\n'
+ u'\n' + u'\n'
+ wrapText(QCoreApplication::translate("CMD Options", "Options when adding new torrents:"), 0) + u'\n' + wrapText(QObject::tr("Options when adding new torrents:"), 0) + u'\n'
+ SAVE_PATH_OPTION.usage(QCoreApplication::translate("CMD Options", "path")) + wrapText(QCoreApplication::translate("CMD Options", "Torrent save path")) + u'\n' + SAVE_PATH_OPTION.usage(QObject::tr("path")) + wrapText(QObject::tr("Torrent save path")) + u'\n'
+ PAUSED_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Add torrents as started or paused")) + u'\n' + PAUSED_OPTION.usage() + wrapText(QObject::tr("Add torrents as started or paused")) + u'\n'
+ SKIP_HASH_CHECK_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Skip hash check")) + u'\n' + SKIP_HASH_CHECK_OPTION.usage() + wrapText(QObject::tr("Skip hash check")) + u'\n'
+ CATEGORY_OPTION.usage(QCoreApplication::translate("CMD Options", "name")) + CATEGORY_OPTION.usage(QObject::tr("name"))
+ wrapText(QCoreApplication::translate("CMD Options", "Assign torrents to category. If the category doesn't exist, it will be " + wrapText(QObject::tr("Assign torrents to category. If the category doesn't exist, it will be "
"created.")) + u'\n' "created.")) + u'\n'
+ SEQUENTIAL_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Download files in sequential order")) + u'\n' + SEQUENTIAL_OPTION.usage() + wrapText(QObject::tr("Download files in sequential order")) + u'\n'
+ FIRST_AND_LAST_OPTION.usage() + FIRST_AND_LAST_OPTION.usage()
+ wrapText(QCoreApplication::translate("CMD Options", "Download first and last pieces first")) + u'\n' + wrapText(QObject::tr("Download first and last pieces first")) + u'\n'
+ SKIP_DIALOG_OPTION.usage() + SKIP_DIALOG_OPTION.usage()
+ wrapText(QCoreApplication::translate("CMD Options", "Specify whether the \"Add New Torrent\" dialog opens when adding a " + wrapText(QObject::tr("Specify whether the \"Add New Torrent\" dialog opens when adding a "
"torrent.")) + u'\n' "torrent.")) + u'\n'
+ u'\n' + u'\n'
+ wrapText(QCoreApplication::translate("CMD Options", "Option values may be supplied via environment variables. For option named " + wrapText(QObject::tr("Option values may be supplied via environment variables. For option named "
"'parameter-name', environment variable name is 'QBT_PARAMETER_NAME' (in upper " "'parameter-name', environment variable name is 'QBT_PARAMETER_NAME' (in upper "
"case, '-' replaced with '_'). To pass flag values, set the variable to '1' or " "case, '-' replaced with '_'). To pass flag values, set the variable to '1' or "
"'TRUE'. For example, to disable the splash screen: "), 0) + u'\n' "'TRUE'. For example, to disable the splash screen: "), 0) + u'\n'
+ u"QBT_NO_SPLASH=1 " + prgName + u'\n' + u"QBT_NO_SPLASH=1 " + prgName + u'\n'
+ wrapText(QCoreApplication::translate("CMD Options", "Command line parameters take precedence over environment variables"), 0) + u'\n'; + wrapText(QObject::tr("Command line parameters take precedence over environment variables"), 0) + u'\n';
return text; return text;
} }
@@ -559,7 +596,7 @@ QString makeUsage(const QString &prgName)
void displayUsage(const QString &prgName) void displayUsage(const QString &prgName)
{ {
#if defined(Q_OS_WIN) && !defined(DISABLE_GUI) #if defined(Q_OS_WIN) && !defined(DISABLE_GUI)
QMessageBox msgBox(QMessageBox::Information, QCoreApplication::translate("CMD Options", "Help"), makeUsage(prgName), QMessageBox::Ok); QMessageBox msgBox(QMessageBox::Information, QObject::tr("Help"), makeUsage(prgName), QMessageBox::Ok);
msgBox.show(); // Need to be shown or to moveToCenter does not work msgBox.show(); // Need to be shown or to moveToCenter does not work
msgBox.move(Utils::Gui::screenCenter(&msgBox)); msgBox.move(Utils::Gui::screenCenter(&msgBox));
msgBox.exec(); msgBox.exec();

View File

@@ -35,7 +35,6 @@
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include "base/bittorrent/addtorrentparams.h"
#include "base/exceptions.h" #include "base/exceptions.h"
#include "base/path.h" #include "base/path.h"
@@ -43,29 +42,32 @@ class QProcessEnvironment;
struct QBtCommandLineParameters struct QBtCommandLineParameters
{ {
bool showHelp = false; bool showHelp;
bool relativeFastresumePaths = false; bool relativeFastresumePaths;
bool skipChecking;
bool sequential;
bool firstLastPiecePriority;
#if !defined(Q_OS_WIN) || defined(DISABLE_GUI) #if !defined(Q_OS_WIN) || defined(DISABLE_GUI)
bool showVersion = false; bool showVersion;
#endif #endif
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
bool noSplash = false; bool noSplash;
#elif !defined(Q_OS_WIN) #elif !defined(Q_OS_WIN)
bool shouldDaemonize = false; bool shouldDaemonize;
#endif #endif
int webUiPort = -1; int webUiPort;
int torrentingPort = -1; int torrentingPort;
std::optional<bool> addPaused;
std::optional<bool> skipDialog; std::optional<bool> skipDialog;
QStringList torrents;
Path profileDir; Path profileDir;
QString configurationName; QString configurationName;
Path savePath;
QStringList torrentSources; QString category;
BitTorrent::AddTorrentParams addTorrentParams;
QString unknownParameter; QString unknownParameter;
QBtCommandLineParameters() = default;
explicit QBtCommandLineParameters(const QProcessEnvironment &); explicit QBtCommandLineParameters(const QProcessEnvironment &);
QStringList paramList() const;
}; };
class CommandLineParameterError : public RuntimeError class CommandLineParameterError : public RuntimeError

View File

@@ -78,7 +78,7 @@ void FileLogger::changePath(const Path &newPath)
closeLogFile(); closeLogFile();
m_path = newPath / Path(u"qbittorrent.log"_s); m_path = newPath / Path(u"qbittorrent.log"_qs);
m_logFile.setFileName(m_path.data()); m_logFile.setFileName(m_path.data());
Utils::Fs::mkpath(newPath); Utils::Fs::mkpath(newPath);
@@ -89,7 +89,7 @@ void FileLogger::deleteOld(const int age, const FileLogAgeType ageType)
{ {
const QDateTime date = QDateTime::currentDateTime(); const QDateTime date = QDateTime::currentDateTime();
const QDir dir {m_path.parentPath().data()}; const QDir dir {m_path.parentPath().data()};
const QFileInfoList fileList = dir.entryInfoList(QStringList(u"qbittorrent.log.bak*"_s) const QFileInfoList fileList = dir.entryInfoList(QStringList(u"qbittorrent.log.bak*"_qs)
, (QDir::Files | QDir::Writable), (QDir::Time | QDir::Reversed)); , (QDir::Files | QDir::Writable), (QDir::Time | QDir::Reversed));
for (const QFileInfo &file : fileList) for (const QFileInfo &file : fileList)

View File

@@ -45,8 +45,7 @@
#include <io.h> #include <io.h>
#endif #endif
#include <QCoreApplication> #include <QDebug>
#include <QString>
#include <QThread> #include <QThread>
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
@@ -86,7 +85,6 @@ using namespace std::chrono_literals;
void displayVersion(); void displayVersion();
bool userAgreesWithLegalNotice(); bool userAgreesWithLegalNotice();
void displayBadArgMessage(const QString &message); void displayBadArgMessage(const QString &message);
void displayErrorMessage(const QString &message);
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
void showSplashScreen(); void showSplashScreen();
@@ -115,12 +113,10 @@ int main(int argc, char *argv[])
Application::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); Application::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif #endif
// `app` must be declared out of try block to allow display message box in case of exception
std::unique_ptr<Application> app;
try try
{ {
// Create Application // Create Application
app = std::make_unique<Application>(argc, argv); auto app = std::make_unique<Application>(argc, argv);
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
// QCoreApplication::applicationDirPath() needs an Application object instantiated first // QCoreApplication::applicationDirPath() needs an Application object instantiated first
@@ -130,13 +126,13 @@ int main(int argc, char *argv[])
if (envValue.isEmpty()) if (envValue.isEmpty())
qputenv(envName, Application::applicationDirPath().toLocal8Bit()); qputenv(envName, Application::applicationDirPath().toLocal8Bit());
else else
qputenv(envName, u"%1;%2"_s.arg(envValue, Application::applicationDirPath()).toLocal8Bit()); qputenv(envName, u"%1;%2"_qs.arg(envValue, Application::applicationDirPath()).toLocal8Bit());
#endif #endif
const QBtCommandLineParameters params = app->commandLineArgs(); const QBtCommandLineParameters params = app->commandLineArgs();
if (!params.unknownParameter.isEmpty()) if (!params.unknownParameter.isEmpty())
{ {
throw CommandLineParameterError(QCoreApplication::translate("Main", "%1 is an unknown command line parameter.", throw CommandLineParameterError(QObject::tr("%1 is an unknown command line parameter.",
"--random-parameter is an unknown command line parameter.") "--random-parameter is an unknown command line parameter.")
.arg(params.unknownParameter)); .arg(params.unknownParameter));
} }
@@ -148,8 +144,8 @@ int main(int argc, char *argv[])
displayVersion(); displayVersion();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
throw CommandLineParameterError(QCoreApplication::translate("Main", "%1 must be the single command line parameter.") throw CommandLineParameterError(QObject::tr("%1 must be the single command line parameter.")
.arg(u"-v (or --version)"_s)); .arg(u"-v (or --version)"_qs));
} }
#endif #endif
if (params.showHelp) if (params.showHelp)
@@ -159,8 +155,8 @@ int main(int argc, char *argv[])
displayUsage(QString::fromLocal8Bit(argv[0])); displayUsage(QString::fromLocal8Bit(argv[0]));
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
throw CommandLineParameterError(QCoreApplication::translate("Main", "%1 must be the single command line parameter.") throw CommandLineParameterError(QObject::tr("%1 must be the single command line parameter.")
.arg(u"-h (or --help)"_s)); .arg(u"-h (or --help)"_qs));
} }
const bool firstTimeUser = !Preferences::instance()->getAcceptedLegal(); const bool firstTimeUser = !Preferences::instance()->getAcceptedLegal();
@@ -191,13 +187,13 @@ int main(int argc, char *argv[])
#if defined(DISABLE_GUI) && !defined(Q_OS_WIN) #if defined(DISABLE_GUI) && !defined(Q_OS_WIN)
if (params.shouldDaemonize) if (params.shouldDaemonize)
{ {
throw CommandLineParameterError(QCoreApplication::translate("Main", "You cannot use %1: qBittorrent is already running for this user.") throw CommandLineParameterError(QObject::tr("You cannot use %1: qBittorrent is already running for this user.")
.arg(u"-d (or --daemon)"_s)); .arg(u"-d (or --daemon)"_qs));
} }
#endif #endif
QThread::msleep(300); QThread::msleep(300);
app->callMainInstance(); app->sendParams(params.paramList());
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
@@ -262,7 +258,7 @@ int main(int argc, char *argv[])
registerSignalHandlers(); registerSignalHandlers();
return app->exec(); return app->exec(params.paramList());
} }
catch (const CommandLineParameterError &er) catch (const CommandLineParameterError &er)
{ {
@@ -271,7 +267,7 @@ int main(int argc, char *argv[])
} }
catch (const RuntimeError &er) catch (const RuntimeError &er)
{ {
displayErrorMessage(er.message()); qDebug() << er.message();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
@@ -279,11 +275,11 @@ int main(int argc, char *argv[])
#if !defined(DISABLE_GUI) #if !defined(DISABLE_GUI)
void showSplashScreen() void showSplashScreen()
{ {
QPixmap splashImg(u":/icons/splash.png"_s); QPixmap splashImg(u":/icons/splash.png"_qs);
QPainter painter(&splashImg); QPainter painter(&splashImg);
const auto version = QStringLiteral(QBT_VERSION); const auto version = QStringLiteral(QBT_VERSION);
painter.setPen(QPen(Qt::white)); painter.setPen(QPen(Qt::white));
painter.setFont(QFont(u"Arial"_s, 22, QFont::Black)); painter.setFont(QFont(u"Arial"_qs, 22, QFont::Black));
painter.drawText(224 - painter.fontMetrics().horizontalAdvance(version), 270, version); painter.drawText(224 - painter.fontMetrics().horizontalAdvance(version), 270, version);
QSplashScreen *splash = new QSplashScreen(splashImg); QSplashScreen *splash = new QSplashScreen(splashImg);
splash->show(); splash->show();
@@ -299,55 +295,31 @@ void displayVersion()
void displayBadArgMessage(const QString &message) void displayBadArgMessage(const QString &message)
{ {
const QString help = QCoreApplication::translate("Main", "Run application with -h option to read about command line parameters."); const QString help = QObject::tr("Run application with -h option to read about command line parameters.");
#if defined(Q_OS_WIN) && !defined(DISABLE_GUI) #if defined(Q_OS_WIN) && !defined(DISABLE_GUI)
QMessageBox msgBox(QMessageBox::Critical, QCoreApplication::translate("Main", "Bad command line"), QMessageBox msgBox(QMessageBox::Critical, QObject::tr("Bad command line"),
(message + u'\n' + help), QMessageBox::Ok); (message + u'\n' + help), QMessageBox::Ok);
msgBox.show(); // Need to be shown or to moveToCenter does not work msgBox.show(); // Need to be shown or to moveToCenter does not work
msgBox.move(Utils::Gui::screenCenter(&msgBox)); msgBox.move(Utils::Gui::screenCenter(&msgBox));
msgBox.exec(); msgBox.exec();
#else #else
const QString errMsg = QCoreApplication::translate("Main", "Bad command line: ") + u'\n' const QString errMsg = QObject::tr("Bad command line: ") + u'\n'
+ message + u'\n' + message + u'\n'
+ help + u'\n'; + help + u'\n';
fprintf(stderr, "%s", qUtf8Printable(errMsg)); fprintf(stderr, "%s", qUtf8Printable(errMsg));
#endif #endif
} }
void displayErrorMessage(const QString &message)
{
#ifndef DISABLE_GUI
if (QApplication::instance())
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText(QCoreApplication::translate("Main", "An unrecoverable error occurred."));
msgBox.setInformativeText(message);
msgBox.show(); // Need to be shown or to moveToCenter does not work
msgBox.move(Utils::Gui::screenCenter(&msgBox));
msgBox.exec();
}
else
{
const QString errMsg = QCoreApplication::translate("Main", "qBittorrent has encountered an unrecoverable error.") + u'\n' + message + u'\n';
fprintf(stderr, "%s", qUtf8Printable(errMsg));
}
#else
const QString errMsg = QCoreApplication::translate("Main", "qBittorrent has encountered an unrecoverable error.") + u'\n' + message + u'\n';
fprintf(stderr, "%s", qUtf8Printable(errMsg));
#endif
}
bool userAgreesWithLegalNotice() bool userAgreesWithLegalNotice()
{ {
Preferences *const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
Q_ASSERT(!pref->getAcceptedLegal()); Q_ASSERT(!pref->getAcceptedLegal());
#ifdef DISABLE_GUI #ifdef DISABLE_GUI
const QString eula = u"\n*** %1 ***\n"_s.arg(QCoreApplication::translate("Main", "Legal Notice")) const QString eula = u"\n*** %1 ***\n"_qs.arg(QObject::tr("Legal Notice"))
+ QCoreApplication::translate("Main", "qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility.") + u"\n\n" + QObject::tr("qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility.") + u"\n\n"
+ QCoreApplication::translate("Main", "No further notices will be issued.") + u"\n\n" + QObject::tr("No further notices will be issued.") + u"\n\n"
+ QCoreApplication::translate("Main", "Press %1 key to accept and continue...").arg(u"'y'"_s) + u'\n'; + QObject::tr("Press %1 key to accept and continue...").arg(u"'y'"_qs) + u'\n';
printf("%s", qUtf8Printable(eula)); printf("%s", qUtf8Printable(eula));
const char ret = getchar(); // Read pressed key const char ret = getchar(); // Read pressed key
@@ -359,10 +331,10 @@ bool userAgreesWithLegalNotice()
} }
#else #else
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText(QCoreApplication::translate("Main", "qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility.\n\nNo further notices will be issued.")); msgBox.setText(QObject::tr("qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility.\n\nNo further notices will be issued."));
msgBox.setWindowTitle(QCoreApplication::translate("Main", "Legal notice")); msgBox.setWindowTitle(QObject::tr("Legal notice"));
msgBox.addButton(QCoreApplication::translate("Main", "Cancel"), QMessageBox::RejectRole); msgBox.addButton(QObject::tr("Cancel"), QMessageBox::RejectRole);
const QAbstractButton *agreeButton = msgBox.addButton(QCoreApplication::translate("Main", "I Agree"), QMessageBox::AcceptRole); const QAbstractButton *agreeButton = msgBox.addButton(QObject::tr("I Agree"), QMessageBox::AcceptRole);
msgBox.show(); // Need to be shown or to moveToCenter does not work msgBox.show(); // Need to be shown or to moveToCenter does not work
msgBox.move(Utils::Gui::screenCenter(&msgBox)); msgBox.move(Utils::Gui::screenCenter(&msgBox));
msgBox.exec(); msgBox.exec();

View File

@@ -152,10 +152,10 @@ bool QtLocalPeer::sendMessage(const QString &message, const int timeout)
break; break;
int ms = 250; int ms = 250;
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
::Sleep(DWORD(ms)); Sleep(DWORD(ms));
#else #else
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
::nanosleep(&ts, nullptr); nanosleep(&ts, NULL);
#endif #endif
} }
if (!connOk) if (!connOk)

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