Compare commits
316 Commits
release-5.
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d5c173be16 | ||
![]() |
e78b392c7b | ||
![]() |
34ad55bb29 | ||
![]() |
d5d690cace | ||
![]() |
4181a10542 | ||
![]() |
ee881d4889 | ||
![]() |
eed0e56d1a | ||
![]() |
01ac8c012c | ||
![]() |
2d6d9ab792 | ||
![]() |
4fb54d3da0 | ||
![]() |
84224c1bbf | ||
![]() |
42786b2afc | ||
![]() |
222d265eec | ||
![]() |
d02b01c733 | ||
![]() |
10b879bdaf | ||
![]() |
3de2a9f486 | ||
![]() |
3b744c3dba | ||
![]() |
9696c99dbd | ||
![]() |
753fb80e9b | ||
![]() |
c075097acd | ||
![]() |
b0148ef36c | ||
![]() |
5edaf2cf10 | ||
![]() |
fcaa95101d | ||
![]() |
8e14541236 | ||
![]() |
919520b4c3 | ||
![]() |
df9e2bb155 | ||
![]() |
7ddbf58a3b | ||
![]() |
69b2d7a53e | ||
![]() |
94ef038f3a | ||
![]() |
5c0010ac6c | ||
![]() |
0a9316382a | ||
![]() |
463ac253fd | ||
![]() |
4ad93bafb2 | ||
![]() |
f651a311a4 | ||
![]() |
3146a3c2f9 | ||
![]() |
93a72673d4 | ||
![]() |
56277d5e2b | ||
![]() |
ac31fe52e9 | ||
![]() |
4fa433a728 | ||
![]() |
becfd19e34 | ||
![]() |
dffd27a879 | ||
![]() |
b851caa6b9 | ||
![]() |
07f2afc4ac | ||
![]() |
02c2a68282 | ||
![]() |
0933ffd805 | ||
![]() |
8daa87d9de | ||
![]() |
5e11f4dc5e | ||
![]() |
6ac0c5a8b8 | ||
![]() |
2be052e9c4 | ||
![]() |
2bd0965906 | ||
![]() |
acab056fe4 | ||
![]() |
86acc01b1a | ||
![]() |
fb4b266828 | ||
![]() |
c953730a42 | ||
![]() |
4be33b2ddc | ||
![]() |
6830e32c72 | ||
![]() |
2f34c9b2f0 | ||
![]() |
bda37cbade | ||
![]() |
feacfb0627 | ||
![]() |
119a5a6e85 | ||
![]() |
6ef9db89f9 | ||
![]() |
b2d6323034 | ||
![]() |
7a1a214f73 | ||
![]() |
d6672abb94 | ||
![]() |
03fb036ae3 | ||
![]() |
f743ae2d08 | ||
![]() |
a265ba7fd2 | ||
![]() |
2631692cff | ||
![]() |
02892d1250 | ||
![]() |
02d72179fe | ||
![]() |
fa3531dcb4 | ||
![]() |
de7d9c960d | ||
![]() |
4eda3e791a | ||
![]() |
e86cc22b3d | ||
![]() |
96c55c4998 | ||
![]() |
d7b330c069 | ||
![]() |
fef6ac515c | ||
![]() |
94552b2384 | ||
![]() |
ae8a6689dc | ||
![]() |
2c6c61cc79 | ||
![]() |
eb84e99866 | ||
![]() |
378b8c78cb | ||
![]() |
2b3ee59e25 | ||
![]() |
bb1c02125b | ||
![]() |
d4c914e003 | ||
![]() |
03efbac581 | ||
![]() |
1c33fefc6d | ||
![]() |
8f709b5fbc | ||
![]() |
c962a6b1d7 | ||
![]() |
e3141ce449 | ||
![]() |
163f683186 | ||
![]() |
7c443b0c3b | ||
![]() |
ec9d541bbd | ||
![]() |
7aebd07f9f | ||
![]() |
e1ebf8374e | ||
![]() |
66f3cf7e67 | ||
![]() |
bf86592e8c | ||
![]() |
b18a964a0b | ||
![]() |
9fc7bd938f | ||
![]() |
f5a93be544 | ||
![]() |
399707fdc5 | ||
![]() |
2ebe8595c9 | ||
![]() |
c5a282a02f | ||
![]() |
0e0b1d0962 | ||
![]() |
15b8a81f92 | ||
![]() |
f8d44b5073 | ||
![]() |
f42dd1b529 | ||
![]() |
b7a43ea118 | ||
![]() |
4f94eac235 | ||
![]() |
a3e6d1a0ad | ||
![]() |
efedbcb407 | ||
![]() |
55de9b07d2 | ||
![]() |
9ad4a94940 | ||
![]() |
c47b981a56 | ||
![]() |
5028f68d48 | ||
![]() |
ef4957a9f4 | ||
![]() |
99d25eec71 | ||
![]() |
70a6153b78 | ||
![]() |
690a139538 | ||
![]() |
e447baa04a | ||
![]() |
fdfdbae30c | ||
![]() |
dd4a2eb583 | ||
![]() |
41d7d672ce | ||
![]() |
d379fa3035 | ||
![]() |
71af105a89 | ||
![]() |
f6ee6b92a4 | ||
![]() |
fe1679d778 | ||
![]() |
67ef356064 | ||
![]() |
254f39f89d | ||
![]() |
d702a02c1f | ||
![]() |
86e11d344f | ||
![]() |
6972962ee0 | ||
![]() |
599a2d0c93 | ||
![]() |
e27cbab7ee | ||
![]() |
794310dca9 | ||
![]() |
3cd40cc5a2 | ||
![]() |
380d9af34c | ||
![]() |
5605e08347 | ||
![]() |
753c6629a3 | ||
![]() |
9b66693cb8 | ||
![]() |
406a389d7c | ||
![]() |
d7a5430893 | ||
![]() |
7ac160a481 | ||
![]() |
4c190b0d4f | ||
![]() |
69bf31f4e9 | ||
![]() |
e45ca3fde7 | ||
![]() |
5750de6270 | ||
![]() |
ff07591a87 | ||
![]() |
c215c1e8b1 | ||
![]() |
06756936f3 | ||
![]() |
7ed026ef78 | ||
![]() |
78fae0ae76 | ||
![]() |
8aa1a96d71 | ||
![]() |
4132173b30 | ||
![]() |
8e2125ee72 | ||
![]() |
05bcc4e175 | ||
![]() |
5dfb51a8d2 | ||
![]() |
526abdf7ce | ||
![]() |
617b1da842 | ||
![]() |
c59ac3b970 | ||
![]() |
0c48b70e5b | ||
![]() |
1cb6173ad1 | ||
![]() |
2cbfb91b88 | ||
![]() |
0729c9a2f8 | ||
![]() |
7982f66fa6 | ||
![]() |
50d60b9589 | ||
![]() |
96f0eebc4e | ||
![]() |
4b07597d54 | ||
![]() |
a9213627a9 | ||
![]() |
28c1ba869b | ||
![]() |
054003970e | ||
![]() |
44bb1ac7eb | ||
![]() |
e309b17732 | ||
![]() |
e10fb40a48 | ||
![]() |
7648a2838d | ||
![]() |
8cd1a80852 | ||
![]() |
c79a9624af | ||
![]() |
4e9c514c2f | ||
![]() |
84ed24e257 | ||
![]() |
48f7f6fb8c | ||
![]() |
f47754838b | ||
![]() |
a3d1ff0eb2 | ||
![]() |
afcfea5b8f | ||
![]() |
84cd8e1535 | ||
![]() |
eb3718fc91 | ||
![]() |
7e0247fefe | ||
![]() |
f9f031cdb4 | ||
![]() |
d56b353c52 | ||
![]() |
83799f4f07 | ||
![]() |
c7caae1150 | ||
![]() |
1662a9deb2 | ||
![]() |
6c310aa311 | ||
![]() |
368748ac52 | ||
![]() |
9c81e58de6 | ||
![]() |
778a158597 | ||
![]() |
09071d2b69 | ||
![]() |
b79ac0d716 | ||
![]() |
de767871f1 | ||
![]() |
2477e13b3f | ||
![]() |
eb82c9078d | ||
![]() |
663da093bd | ||
![]() |
13f9c20a69 | ||
![]() |
86e4b662ce | ||
![]() |
dcaf4b6d80 | ||
![]() |
d29f47c36e | ||
![]() |
ab04064adc | ||
![]() |
9afbd47b52 | ||
![]() |
582dc99cae | ||
![]() |
3691eb948e | ||
![]() |
76bb4e5f98 | ||
![]() |
0262faa915 | ||
![]() |
f1b7c4572b | ||
![]() |
c494314a29 | ||
![]() |
559f47ab0c | ||
![]() |
380b25e22f | ||
![]() |
7745ac19d8 | ||
![]() |
6cd6267c26 | ||
![]() |
e7dee969e1 | ||
![]() |
bb68a39b53 | ||
![]() |
4c91cd9372 | ||
![]() |
0791828b84 | ||
![]() |
c2f2a38582 | ||
![]() |
ad4bdc0653 | ||
![]() |
f3095935ea | ||
![]() |
732b2bcbdb | ||
![]() |
33aaa867b5 | ||
![]() |
fdd17159eb | ||
![]() |
e9fee414df | ||
![]() |
1077cbba2b | ||
![]() |
70dbe9468a | ||
![]() |
45babc336d | ||
![]() |
70822e8942 | ||
![]() |
b5394e7939 | ||
![]() |
411ca0f668 | ||
![]() |
7b3aa51bb1 | ||
![]() |
0b3bce8993 | ||
![]() |
0160aa28b6 | ||
![]() |
0187f19f60 | ||
![]() |
e87dfe35f3 | ||
![]() |
e51be45ce6 | ||
![]() |
b4a16f6464 | ||
![]() |
250fef4ee7 | ||
![]() |
8fc5d0914d | ||
![]() |
fc5daf6e1d | ||
![]() |
c878a09d27 | ||
![]() |
2aee875642 | ||
![]() |
2785636d3f | ||
![]() |
15069b2643 | ||
![]() |
f0361f1bed | ||
![]() |
110e6d32b4 | ||
![]() |
3d73026ff2 | ||
![]() |
abafbc0685 | ||
![]() |
5465605377 | ||
![]() |
9331580e86 | ||
![]() |
795889c417 | ||
![]() |
ff03eeab5b | ||
![]() |
f0b9a17566 | ||
![]() |
72e8b3272b | ||
![]() |
6c36830e5e | ||
![]() |
cdddaae939 | ||
![]() |
f540381caf | ||
![]() |
055d82bda4 | ||
![]() |
0796f96ee4 | ||
![]() |
841cffafa7 | ||
![]() |
ade39432be | ||
![]() |
830d2c207b | ||
![]() |
97865545c3 | ||
![]() |
3abdc3134b | ||
![]() |
5a716a40fb | ||
![]() |
943e403241 | ||
![]() |
103ea813dc | ||
![]() |
52b1f3588a | ||
![]() |
4bd50672e8 | ||
![]() |
8c8a0ac54c | ||
![]() |
7b4a3fccc6 | ||
![]() |
d21653e8cf | ||
![]() |
627d89813c | ||
![]() |
b28c229f85 | ||
![]() |
8d0870c953 | ||
![]() |
5a4b3b25d3 | ||
![]() |
d174bc75e4 | ||
![]() |
882da47609 | ||
![]() |
b74b334e34 | ||
![]() |
53f919aea8 | ||
![]() |
62a7fd86d6 | ||
![]() |
96295adc08 | ||
![]() |
8f53fb8178 | ||
![]() |
37eb80919c | ||
![]() |
1b044d9476 | ||
![]() |
83599f1f7b | ||
![]() |
6e1b5ec18b | ||
![]() |
249c80aaaf | ||
![]() |
0ac47496d4 | ||
![]() |
4ec80de268 | ||
![]() |
f432c1e615 | ||
![]() |
41d9ee91a1 | ||
![]() |
ba3d89b674 | ||
![]() |
1ca33d45ba | ||
![]() |
a9b54d94a0 | ||
![]() |
693390ff27 | ||
![]() |
5ddc5a8b87 | ||
![]() |
ad9100ac07 | ||
![]() |
1043bea896 | ||
![]() |
955688c125 | ||
![]() |
8da43a4054 | ||
![]() |
ddf6dd5fa2 | ||
![]() |
8c02bbb4bc | ||
![]() |
7e95375cec | ||
![]() |
29201fa016 | ||
![]() |
1a3d0f6fab | ||
![]() |
f58d6ae984 | ||
![]() |
7f0134108a | ||
![]() |
d79dc86d00 | ||
![]() |
38070c6eee | ||
![]() |
c9eb1fbac8 | ||
![]() |
7238bad5a6 |
2
.github/FUNDING.yml
vendored
@@ -1 +1 @@
|
||||
custom: "https://www.qbittorrent.org/donate.php"
|
||||
custom: "https://www.qbittorrent.org/donate"
|
||||
|
16
.github/workflows/ci_file_health.yaml
vendored
@@ -16,12 +16,12 @@ jobs:
|
||||
security-events: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "*"
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
curl \
|
||||
-L \
|
||||
-o "${{ runner.temp }}/pandoc.tar.gz" \
|
||||
"https://github.com/jgm/pandoc/releases/download/3.6/pandoc-3.6-linux-amd64.tar.gz"
|
||||
"https://github.com/jgm/pandoc/releases/download/3.7.0.2/pandoc-3.7.0.2-linux-amd64.tar.gz"
|
||||
tar -xf "${{ runner.temp }}/pandoc.tar.gz" -C "${{ github.workspace }}/.."
|
||||
mv "${{ github.workspace }}/.."/pandoc-* "${{ env.pandoc_path }}"
|
||||
# run pandoc
|
||||
@@ -52,13 +52,13 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
pip install zizmor
|
||||
IGNORE_RULEID='(.ruleId != "template-injection")
|
||||
and (.ruleId != "unpinned-uses")'
|
||||
IGNORE_ID='(.id != "template-injection")
|
||||
and (.id != "unpinned-uses")'
|
||||
IGNORE_RULEID='(.ruleId != "zizmor/template-injection")
|
||||
and (.ruleId != "zizmor/unpinned-uses")'
|
||||
IGNORE_ID='(.id != "zizmor/template-injection")
|
||||
and (.id != "zizmor/unpinned-uses")'
|
||||
zizmor \
|
||||
--format sarif \
|
||||
--pedantic \
|
||||
--persona auditor \
|
||||
./ \
|
||||
| jq "(.runs[].results |= map(select($IGNORE_RULEID)))
|
||||
| (.runs[].tool.driver.rules |= map(select($IGNORE_ID)))" \
|
||||
|
30
.github/workflows/ci_macos.yaml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
matrix:
|
||||
libt_version: ["2.0.11", "1.2.20"]
|
||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||
qt_version: ["6.7.0"]
|
||||
qt_version: ["6.9.1"]
|
||||
|
||||
env:
|
||||
boost_path: "${{ github.workspace }}/../boost"
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -43,8 +43,8 @@ jobs:
|
||||
command: |
|
||||
brew update > /dev/null
|
||||
brew install \
|
||||
cmake ninja \
|
||||
openssl@3 zlib
|
||||
# preinstalled on the image: cmake ninja
|
||||
|
||||
- name: Setup ccache
|
||||
uses: Chocobo1/setup-ccache-action@v1
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
store_cache: ${{ github.ref == 'refs/heads/master' }}
|
||||
update_packager_index: false
|
||||
ccache_options: |
|
||||
max_size=2G
|
||||
max_size=1G
|
||||
|
||||
- name: Install boost
|
||||
env:
|
||||
@@ -70,6 +70,9 @@ jobs:
|
||||
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
|
||||
fi
|
||||
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
|
||||
cd "${{ env.boost_path }}"
|
||||
./bootstrap.sh
|
||||
./b2 stage --stagedir=./ --with-headers
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
@@ -95,7 +98,7 @@ jobs:
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_CXX_STANDARD=20 \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-Ddeprecated-functions=OFF
|
||||
cmake --build build
|
||||
sudo cmake --install build
|
||||
@@ -109,7 +112,7 @@ jobs:
|
||||
-G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-DTESTING=ON \
|
||||
-DVERBOSE_CONFIGURE=ON \
|
||||
-D${{ matrix.qbt_gui }}
|
||||
@@ -119,17 +122,24 @@ jobs:
|
||||
|
||||
- name: Prepare build artifacts
|
||||
run: |
|
||||
# create .dmg
|
||||
appName="qbittorrent"
|
||||
if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then
|
||||
appName="qbittorrent-nox"
|
||||
fi
|
||||
# package
|
||||
pushd build
|
||||
# packaging
|
||||
macdeployqt "$appName.app" -no-strip
|
||||
# code signing
|
||||
xattr -cr "$appName.app"
|
||||
codesign --force --sign - \
|
||||
"$appName.app" \
|
||||
"$appName.app/Contents/Frameworks"/* \
|
||||
"$appName.app/Contents/MacOS/$appName"
|
||||
codesign --verify --deep --strict -v "$appName.app"
|
||||
# create .dmg
|
||||
PACKAGE_RETRY=0
|
||||
while [ "$PACKAGE_RETRY" -lt "3" ]; do
|
||||
macdeployqt "$appName.app" -dmg -no-strip
|
||||
if [ -f "$appName.dmg" ]; then
|
||||
if hdiutil create -fs HFS+ -srcfolder "$appName.app" -volname "$appName" "$appName.dmg"; then
|
||||
break
|
||||
fi
|
||||
sleep 5
|
||||
|
48
.github/workflows/ci_python.yaml
vendored
@@ -15,17 +15,17 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup python (auxiliary scripts)
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3' # use default version
|
||||
|
||||
- name: Install tools (auxiliary scripts)
|
||||
run: pip install bandit pycodestyle pyflakes
|
||||
run: pip install bandit isort pycodestyle pyflakes
|
||||
|
||||
- name: Gather files (auxiliary scripts)
|
||||
run: |
|
||||
@@ -44,48 +44,40 @@ jobs:
|
||||
--max-line-length=1000 \
|
||||
--statistics \
|
||||
$PY_FILES
|
||||
isort \
|
||||
--check \
|
||||
--diff \
|
||||
$PY_FILES
|
||||
|
||||
- name: Build code (auxiliary scripts)
|
||||
run: |
|
||||
python -m compileall $PY_FILES
|
||||
|
||||
- name: Setup python (search engine)
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.9'
|
||||
|
||||
- name: Install tools (search engine)
|
||||
run: pip install bandit mypy pycodestyle pyflakes pyright
|
||||
|
||||
- name: Gather files (search engine)
|
||||
working-directory: src/searchengine/nova3
|
||||
run: |
|
||||
export "PY_FILES=$(find . -type f -name '*.py' -path '*searchengine*' ! -name 'socks.py' -printf '%p ')"
|
||||
echo $PY_FILES
|
||||
echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV"
|
||||
pip install uv
|
||||
uv sync
|
||||
|
||||
- name: Check typings (search engine)
|
||||
run: |
|
||||
MYPYPATH="src/searchengine/nova3" \
|
||||
mypy \
|
||||
--follow-imports skip \
|
||||
--strict \
|
||||
$PY_FILES
|
||||
pyright \
|
||||
$PY_FILES
|
||||
working-directory: src/searchengine/nova3
|
||||
run: uv run just check
|
||||
|
||||
- name: Lint code (search engine)
|
||||
run: |
|
||||
pyflakes $PY_FILES
|
||||
bandit --skip B110,B310,B314,B405 $PY_FILES
|
||||
working-directory: src/searchengine/nova3
|
||||
run: uv run just lint
|
||||
|
||||
- name: Format code (search engine)
|
||||
working-directory: src/searchengine/nova3
|
||||
run: |
|
||||
pycodestyle \
|
||||
--ignore=E265,E402 \
|
||||
--max-line-length=1000 \
|
||||
--statistics \
|
||||
$PY_FILES
|
||||
uv run just format
|
||||
git diff --exit-code
|
||||
|
||||
- name: Build code (search engine)
|
||||
run: |
|
||||
python -m compileall $PY_FILES
|
||||
working-directory: src/searchengine/nova3
|
||||
run: uv run just build
|
||||
|
27
.github/workflows/ci_ubuntu.yaml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
matrix:
|
||||
libt_version: ["2.0.11", "1.2.20"]
|
||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||
qt_version: ["6.5.2"]
|
||||
qt_version: ["6.6.3"]
|
||||
|
||||
env:
|
||||
boost_path: "${{ github.workspace }}/../boost"
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
store_cache: ${{ github.ref == 'refs/heads/master' }}
|
||||
update_packager_index: false
|
||||
ccache_options: |
|
||||
max_size=2G
|
||||
max_size=1G
|
||||
|
||||
- name: Install boost
|
||||
env:
|
||||
@@ -65,6 +65,9 @@ jobs:
|
||||
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
|
||||
fi
|
||||
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
|
||||
cd "${{ env.boost_path }}"
|
||||
./bootstrap.sh
|
||||
./b2 stage --stagedir=./ --with-headers
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
@@ -90,7 +93,7 @@ jobs:
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_CXX_STANDARD=20 \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-Ddeprecated-functions=OFF
|
||||
cmake --build build
|
||||
sudo cmake --install build
|
||||
@@ -112,7 +115,7 @@ jobs:
|
||||
-G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
||||
-DTESTING=ON \
|
||||
-DVERBOSE_CONFIGURE=ON \
|
||||
@@ -138,16 +141,15 @@ jobs:
|
||||
|
||||
- name: Install AppImage
|
||||
run: |
|
||||
sudo apt install libfuse2
|
||||
curl \
|
||||
-L \
|
||||
-Z \
|
||||
-O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-static-x86_64.AppImage \
|
||||
-O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-static-x86_64.AppImage \
|
||||
-O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \
|
||||
-O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage \
|
||||
-O https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage
|
||||
chmod +x \
|
||||
linuxdeploy-static-x86_64.AppImage \
|
||||
linuxdeploy-plugin-qt-static-x86_64.AppImage \
|
||||
linuxdeploy-x86_64.AppImage \
|
||||
linuxdeploy-plugin-qt-x86_64.AppImage \
|
||||
linuxdeploy-plugin-appimage-x86_64.AppImage
|
||||
|
||||
- name: Prepare files for AppImage
|
||||
@@ -160,12 +162,13 @@ jobs:
|
||||
|
||||
- name: Package AppImage
|
||||
run: |
|
||||
./linuxdeploy-static-x86_64.AppImage --appdir qbittorrent --plugin qt
|
||||
rm -f "${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/gcc_64/plugins/sqldrivers/libqsqlmimer.so"
|
||||
./linuxdeploy-x86_64.AppImage --appdir qbittorrent --plugin qt
|
||||
rm qbittorrent/apprun-hooks/*
|
||||
cp .github/workflows/helper/appimage/export_vars.sh qbittorrent/apprun-hooks/export_vars.sh
|
||||
NO_APPSTREAM=1 \
|
||||
OUTPUT=upload/qbittorrent-CI_Ubuntu_x86_64.AppImage \
|
||||
./linuxdeploy-static-x86_64.AppImage --appdir qbittorrent --output appimage
|
||||
./linuxdeploy-x86_64.AppImage --appdir qbittorrent --output appimage
|
||||
|
||||
- name: Upload build artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
|
13
.github/workflows/ci_webui.yaml
vendored
@@ -21,12 +21,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup nodejs
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
|
||||
@@ -34,21 +34,30 @@ jobs:
|
||||
run: |
|
||||
npm install
|
||||
npm ls
|
||||
echo "::group::npm ls --all"
|
||||
npm ls --all
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
|
||||
- name: Lint code
|
||||
if: ${{ !cancelled() }}
|
||||
run: npm run lint
|
||||
|
||||
- name: Format code
|
||||
if: ${{ !cancelled() }}
|
||||
run: |
|
||||
npm run format
|
||||
git diff --exit-code
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
if: ${{ !cancelled() }}
|
||||
with:
|
||||
config-file: .github/workflows/helper/codeql/js.yaml
|
||||
languages: javascript
|
||||
|
||||
- name: Run CodeQL analysis
|
||||
if: ${{ !cancelled() }}
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
25
.github/workflows/ci_windows.yaml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
# https://learn.microsoft.com/en-us/vcpkg/users/binarycaching#gha
|
||||
- name: Set variables for vcpkg
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', (process.env.ACTIONS_CACHE_URL || ''));
|
||||
@@ -67,6 +67,7 @@ jobs:
|
||||
"set(VCPKG_BUILD_TYPE release)")
|
||||
# clear buildtrees after each package installation to reduce disk space requirements
|
||||
$packages = `
|
||||
"boost-build:x64-windows-static-md-release",
|
||||
"openssl:x64-windows-static-md-release",
|
||||
"zlib:x64-windows-static-md-release"
|
||||
${{ env.vcpkg_path }}/vcpkg.exe upgrade `
|
||||
@@ -94,11 +95,18 @@ jobs:
|
||||
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."
|
||||
}
|
||||
move "${{ github.workspace }}/../boost_*" "${{ env.boost_path }}"
|
||||
cd "${{ env.boost_path }}"
|
||||
#.\bootstrap.bat
|
||||
${{ env.vcpkg_path }}/installed/x64-windows-static-md-release/tools/boost-build/b2.exe `
|
||||
stage `
|
||||
toolset=msvc `
|
||||
--stagedir=.\ `
|
||||
--with-headers
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
with:
|
||||
version: "6.8.0"
|
||||
version: "6.9.1"
|
||||
arch: win64_msvc2022_64
|
||||
archives: qtbase qtsvg qttools
|
||||
cache: true
|
||||
@@ -113,7 +121,7 @@ jobs:
|
||||
${{ env.libtorrent_path }}
|
||||
cd ${{ env.libtorrent_path }}
|
||||
$env:CXXFLAGS+=" /guard:cf"
|
||||
$env:LDFLAGS+=" /guard:cf"
|
||||
$env:LDFLAGS+=" /GUARD:CF"
|
||||
cmake `
|
||||
-B build `
|
||||
-G "Ninja" `
|
||||
@@ -122,7 +130,7 @@ jobs:
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
||||
-DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}/install" `
|
||||
-DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" `
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" `
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" `
|
||||
-DBUILD_SHARED_LIBS=OFF `
|
||||
-Ddeprecated-functions=OFF `
|
||||
-Dstatic_runtime=OFF `
|
||||
@@ -139,7 +147,7 @@ jobs:
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
||||
-DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" `
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" `
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" `
|
||||
-DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/install/lib/cmake/LibtorrentRasterbar" `
|
||||
-DMSVC_RUNTIME_DYNAMIC=ON `
|
||||
-DTESTING=ON `
|
||||
@@ -191,6 +199,11 @@ jobs:
|
||||
name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}
|
||||
path: upload
|
||||
|
||||
- name: Install NSIS
|
||||
uses: repolevedavaj/install-nsis@265e893c16602d8ccfb0a9ca44173b084078917c # v1.0.3
|
||||
with:
|
||||
nsis-version: '3.11'
|
||||
|
||||
- name: Create installer
|
||||
run: |
|
||||
7z x -o"dist/windows/" "dist/windows/NSISPlugins.zip"
|
||||
|
13
.github/workflows/coverity-scan.yaml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
matrix:
|
||||
libt_version: ["2.0.11"]
|
||||
qbt_gui: ["GUI=ON"]
|
||||
qt_version: ["6.5.2"]
|
||||
qt_version: ["6.9.1"]
|
||||
|
||||
env:
|
||||
boost_path: "${{ github.workspace }}/../boost"
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
- name: Install boost
|
||||
env:
|
||||
BOOST_MAJOR_VERSION: "1"
|
||||
BOOST_MINOR_VERSION: "86"
|
||||
BOOST_MINOR_VERSION: "88"
|
||||
BOOST_PATCH_VERSION: "0"
|
||||
run: |
|
||||
boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
|
||||
@@ -52,6 +52,9 @@ jobs:
|
||||
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
|
||||
fi
|
||||
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
|
||||
cd "${{ env.boost_path }}"
|
||||
./bootstrap.sh
|
||||
./b2 stage --stagedir=./ --with-headers
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
@@ -74,7 +77,7 @@ jobs:
|
||||
-G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_CXX_STANDARD=20 \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-Ddeprecated-functions=OFF
|
||||
cmake --build build
|
||||
sudo cmake --install build
|
||||
@@ -98,7 +101,7 @@ jobs:
|
||||
-B build \
|
||||
-G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
||||
-DVERBOSE_CONFIGURE=ON \
|
||||
-D${{ matrix.qbt_gui }}
|
||||
PATH="${{ env.coverity_path }}/bin:$PATH" \
|
||||
|
@@ -26,12 +26,12 @@
|
||||
# but you are not obligated to do so. If you do not wish to do so, delete this
|
||||
# exception statement from your version.
|
||||
|
||||
from collections.abc import Callable, Sequence
|
||||
from typing import Optional
|
||||
import argparse
|
||||
import re
|
||||
import xml.etree.ElementTree as ElementTree
|
||||
import sys
|
||||
import xml.etree.ElementTree as ElementTree
|
||||
from collections.abc import Callable, Sequence
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def traversePostOrder(root: ElementTree.Element, visitFunc: Callable[[ElementTree.Element], None]) -> None:
|
||||
|
@@ -26,11 +26,11 @@
|
||||
# but you are not obligated to do so. If you do not wish to do so, delete this
|
||||
# exception statement from your version.
|
||||
|
||||
from collections.abc import Sequence
|
||||
from typing import Optional
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from collections.abc import Sequence
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def main(argv: Optional[Sequence[str]] = None) -> int:
|
||||
|
2
.github/workflows/stale_bot.yaml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Mark and close stale PRs
|
||||
uses: actions/stale@v9
|
||||
uses: actions/stale@v10
|
||||
with:
|
||||
stale-pr-message: "This PR is stale because it has been 60 days with no activity. This PR will be automatically closed within 7 days if there is no further activity."
|
||||
close-pr-message: "This PR was closed because it has been stalled for some time with no activity."
|
||||
|
2
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
.vscode/
|
||||
|
||||
src/gui/geoip/GeoIP.dat
|
||||
src/gui/geoip/GeoIP.dat.gz
|
||||
src/qbittorrent
|
||||
@@ -10,7 +11,6 @@ CMakeLists.txt.user*
|
||||
qbittorrent.pro.user*
|
||||
conf.pri
|
||||
Makefile*
|
||||
*.pyc
|
||||
*.log
|
||||
|
||||
# Compiled object files
|
||||
|
@@ -19,7 +19,7 @@ repos:
|
||||
- ts
|
||||
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks.git
|
||||
rev: v5.0.0
|
||||
rev: v6.0.0
|
||||
hooks:
|
||||
- id: check-json
|
||||
name: Check JSON files
|
||||
@@ -69,11 +69,11 @@ repos:
|
||||
- ts
|
||||
|
||||
- repo: https://github.com/codespell-project/codespell.git
|
||||
rev: v2.4.0
|
||||
rev: v2.4.1
|
||||
hooks:
|
||||
- id: codespell
|
||||
name: Check spelling (codespell)
|
||||
args: ["--ignore-words-list", "additionals,categor,curren,fo,ist,ket,notin,searchin,sectionin,superseeding,te,ths"]
|
||||
args: ["--ignore-words-list", "additionals,categor,curren,fo,indexIn,ist,ket,notin,searchin,sectionin,superseeding,te,ths"]
|
||||
exclude: |
|
||||
(?x)^(
|
||||
.*\.desktop |
|
||||
@@ -88,7 +88,7 @@ repos:
|
||||
- ts
|
||||
|
||||
- repo: https://github.com/crate-ci/typos.git
|
||||
rev: v1.29.4
|
||||
rev: v1.35.3
|
||||
hooks:
|
||||
- id: typos
|
||||
name: Check spelling (typos)
|
||||
|
@@ -8,7 +8,7 @@ project(qBittorrent
|
||||
|
||||
# version requirements - older versions may work, but you are on your own
|
||||
set(minBoostVersion 1.76)
|
||||
set(minQt6Version 6.5.0)
|
||||
set(minQt6Version 6.6.0)
|
||||
set(minOpenSSLVersion 3.0.2)
|
||||
set(minLibtorrent1Version 1.2.19)
|
||||
set(minLibtorrentVersion 2.0.10)
|
||||
|
2
INSTALL
@@ -11,7 +11,7 @@ qBittorrent - A BitTorrent client in C++ / Qt
|
||||
|
||||
- OpenSSL >= 3.0.2
|
||||
|
||||
- Qt 6.5.0 - 6.x
|
||||
- Qt 6.6.0 - 6.x
|
||||
|
||||
- zlib >= 1.2.11
|
||||
|
||||
|
88
WebAPI_Changelog.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# WebAPI Changelog
|
||||
|
||||
## 2.14.0
|
||||
* [#23202](https://github.com/qbittorrent/qBittorrent/pull/23202)
|
||||
* WebAPI responds with the error message "Endpoint does not exist" when the endpoint does not exist, to better differentiate from unrelated Not Found (i.e. 404) responses
|
||||
* `auth/login` endpoint responds to invalid credentials with a 401
|
||||
* `torrents/add` endpoint responds with `success_count`, `pending_count`, `failure_count`, and `added_torrent_ids`
|
||||
* When `pending_count` is non-zero, response code 202 is used
|
||||
* When all torrents fail to be added, response code 409 is used
|
||||
|
||||
## 2.13.1
|
||||
* [#23163](https://github.com/qbittorrent/qBittorrent/pull/23163)
|
||||
* `torrents/add` endpoint now supports downloading from a search plugin via the `downloader` parameter
|
||||
* `torrents/fetchMetadata` endpoint now supports fetching from a search plugin via the `downloader` parameter
|
||||
* [#23088](https://github.com/qbittorrent/qBittorrent/pull/23088)
|
||||
* Add `clientdata/load` and `clientdata/store` endpoints for managing WebUI-specific client settings and other shared data
|
||||
|
||||
## 2.13.0
|
||||
* [#23045](https://github.com/qbittorrent/qBittorrent/pull/23045)
|
||||
* `torrents/trackers` returns three new fields: `next_announce`, `min_announce` and `endpoints`
|
||||
* `endpoints` is an array of tracker endpoints, each with `name`, `updating`, `status`, `msg`, `bt_version`, `num_peers`, `num_peers`, `num_leeches`, `num_downloaded`, `next_announce` and `min_announce` fields
|
||||
* `torrents/trackers` now returns `5` and `6` in `status` field as possible values
|
||||
* `5` for `Tracker error` and `6` for `Unreachable`
|
||||
* [#22963](https://github.com/qbittorrent/qBittorrent/pull/22963)
|
||||
* `torrents/editTracker` endpoint now supports setting a tracker's tier via `tier` parameter
|
||||
* `torrents/editTracker` endpoint always responds with a 204 when successful
|
||||
* `torrents/editTracker` endpoint `origUrl` parameter renamed to `url`
|
||||
* [#23061](https://github.com/qbittorrent/qBittorrent/pull/23061)
|
||||
* `sync/torrentPeers` returns one new field: `i2p_dest`, only when the peer is from I2P
|
||||
* In this case, the fields `ip` and `port` are not returned
|
||||
* [#23085](https://github.com/qbittorrent/qBittorrent/pull/23085)
|
||||
* `torrents/parseMetadata` now responds with an array of metadata in the same order as the files in the request. It previously responded with an object keyed off of the submitted file name.
|
||||
|
||||
## 2.12.1
|
||||
* [#23031](https://github.com/qbittorrent/qBittorrent/pull/23031)
|
||||
* Add `torrents/setComment` endpoint with parameters `hashes` and `comment` for setting a new torrent comment
|
||||
|
||||
## 2.12.0
|
||||
|
||||
* [#22989](https://github.com/qbittorrent/qBittorrent/pull/22989)
|
||||
* `sync/maindata` returns one new field: `share_limit_action`
|
||||
* `torrents/setShareLimits` now requires a new `shareLimitAction` param that sets a torrent's shareLimitAction property
|
||||
* possible values `Default`, `Stop`, `Remove`, `RemoveWithContent` and `EnableSuperSeeding`
|
||||
|
||||
## 2.11.10
|
||||
|
||||
* [#22958](https://github.com/qbittorrent/qBittorrent/pull/22958)
|
||||
* `torrents/categories` and `sync/maindata` now serialize categories' `downloadPath` to `null`, rather than `undefined`
|
||||
* [#22954](https://github.com/qbittorrent/qBittorrent/pull/22954)
|
||||
* `torrents/reannounce` supports specifying individual trackers via `trackers` field
|
||||
|
||||
## 2.11.9
|
||||
|
||||
* [#21015](https://github.com/qbittorrent/qBittorrent/pull/21015)
|
||||
* Add `torrents/fetchMetadata` endpoint for retrieving torrent metadata associated with a URL
|
||||
* Add `torrents/parseMetadata` endpoint for retrieving torrent metadata associated with a .torrent file
|
||||
* Add `torrents/saveMetadata` endpoint for saving retrieved torrent metadata to a .torrent file
|
||||
* `torrents/add` allows adding a torrent with metadata previously retrieved via `torrents/fetchMetadata` or `torrents/parseMetadata`
|
||||
* `torrents/add` allows specifying a torrent's file priorities
|
||||
* [#22698](https://github.com/qbittorrent/qBittorrent/pull/22698)
|
||||
* `torrents/addTrackers` and `torrents/removeTrackers` now accept `hash=all` and adds/removes the tracker to/from *all* torrents
|
||||
* For compatibility, `torrents/removeTrackers` still accepts `hash=*` internally we transform it into `all`
|
||||
* Allow passing a pipe (`|`) separated list of hashes in `hash` for `torrents/addTrackers` and `torrents/removeTrackers`
|
||||
|
||||
## 2.11.8
|
||||
|
||||
* [#21349](https://github.com/qbittorrent/qBittorrent/pull/21349)
|
||||
* Handle sending `204 No Content` status code when response contains no data
|
||||
* Some endpoints still return `200 OK` to ensure smooth transition
|
||||
* [#22750](https://github.com/qbittorrent/qBittorrent/pull/22750)
|
||||
* `torrents/info` allows an optional parameter `includeFiles` that defaults to `false`
|
||||
* Each torrent will contain a new key `files` which will list all files similar to the `torrents/files` endpoint
|
||||
* [#22813](https://github.com/qbittorrent/qBittorrent/pull/22813)
|
||||
* `app/getDirectoryContent` allows an optional parameter `withMetadata` to send file metadata
|
||||
* Fields are `name`, `type`, `size`, `creation_date`, `last_access_date`, `last_modification_date`
|
||||
* See PR for TypeScript types
|
||||
|
||||
## 2.11.7
|
||||
|
||||
* [#22166](https://github.com/qbittorrent/qBittorrent/pull/22166)
|
||||
* `sync/maindata` returns 3 new torrent fields: `has_tracker_warning`, `has_tracker_error`, `has_other_announce_error`
|
||||
|
||||
## 2.11.6
|
||||
|
||||
* [#22460](https://github.com/qbittorrent/qBittorrent/pull/22460)
|
||||
* `app/setPreferences` allows only one of `max_ratio_enabled`, `max_ratio` to be present
|
||||
* `app/setPreferences` allows only one of `max_seeding_time_enabled`, `max_seeding_time` to be present
|
||||
* `app/setPreferences` allows only one of `max_inactive_seeding_time_enabled`, `max_inactive_seeding_time` to be present
|
@@ -47,6 +47,9 @@ find_package(Boost ${minBoostVersion} REQUIRED)
|
||||
find_package(OpenSSL ${minOpenSSLVersion} REQUIRED)
|
||||
find_package(ZLIB ${minZlibVersion} REQUIRED)
|
||||
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS Core Network Sql Xml LinguistTools)
|
||||
if (Qt6_FOUND AND (Qt6_VERSION VERSION_GREATER_EQUAL 6.10))
|
||||
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS CorePrivate)
|
||||
endif()
|
||||
if (DBUS)
|
||||
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS DBus)
|
||||
set_package_properties(Qt6DBus PROPERTIES
|
||||
|
@@ -20,10 +20,11 @@ target_compile_features(qbt_common_cfg INTERFACE
|
||||
)
|
||||
|
||||
target_compile_definitions(qbt_common_cfg INTERFACE
|
||||
QT_DISABLE_DEPRECATED_UP_TO=0x060500
|
||||
QT_DISABLE_DEPRECATED_UP_TO=0x060600
|
||||
QT_NO_CAST_FROM_ASCII
|
||||
QT_NO_CAST_TO_ASCII
|
||||
QT_NO_CAST_FROM_BYTEARRAY
|
||||
QT_NO_CONTEXTLESS_CONNECT
|
||||
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
|
||||
QT_USE_QSTRINGBUILDER
|
||||
QT_STRICT_ITERATORS
|
||||
@@ -89,7 +90,7 @@ if (MSVC)
|
||||
/Zc:__cplusplus
|
||||
)
|
||||
target_link_options(qbt_common_cfg INTERFACE
|
||||
/guard:cf
|
||||
/GUARD:CF
|
||||
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF>
|
||||
# suppress linking warning due to /INCREMENTAL and /OPT:ICF being both ON
|
||||
$<$<CONFIG:RelWithDebInfo>:/INCREMENTAL:NO>
|
||||
|
4
dist/mac/Info.plist
vendored
@@ -55,7 +55,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.1.0</string>
|
||||
<string>5.2.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -67,7 +67,7 @@
|
||||
<key>NSAppleScriptEnabled</key>
|
||||
<string>YES</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2006-2024 The qBittorrent project</string>
|
||||
<string>Copyright © 2006-2025 The qBittorrent project</string>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
BIN
dist/mac/qBitTorrentDocument.icns
vendored
BIN
dist/mac/qbittorrent_mac.icns
vendored
9
dist/unix/CMakeLists.txt
vendored
@@ -34,12 +34,12 @@ endforeach()
|
||||
|
||||
if (GUI)
|
||||
install(FILES org.qbittorrent.qBittorrent.desktop
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications
|
||||
COMPONENT data
|
||||
)
|
||||
|
||||
install(FILES org.qbittorrent.qBittorrent.metainfo.xml
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo/
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo
|
||||
COMPONENT data
|
||||
)
|
||||
|
||||
@@ -55,4 +55,9 @@ if (GUI)
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status
|
||||
COMPONENT data
|
||||
)
|
||||
else()
|
||||
install(FILES org.qbittorrent.qBittorrent-nox.metainfo.xml
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo
|
||||
COMPONENT data
|
||||
)
|
||||
endif()
|
||||
|
BIN
dist/unix/menuicons/16x16/apps/qbittorrent.png
vendored
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 747 B |
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 747 B |
BIN
dist/unix/menuicons/192x192/apps/qbittorrent.png
vendored
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
dist/unix/menuicons/24x24/apps/qbittorrent.png
vendored
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
dist/unix/menuicons/32x32/apps/qbittorrent.png
vendored
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
dist/unix/menuicons/36x36/apps/qbittorrent.png
vendored
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |