Compare commits
194 Commits
release-3.
...
release-3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
258efe261d | ||
|
|
59abbab9b9 | ||
|
|
7cc32cbe97 | ||
|
|
5783f7bafe | ||
|
|
0e64e6887a | ||
|
|
c25cb29e61 | ||
|
|
bca9b60db8 | ||
|
|
1ec122c4ab | ||
|
|
562dd41ab2 | ||
|
|
b4bca7cfb7 | ||
|
|
b985bb43fa | ||
|
|
bf8a438a6f | ||
|
|
7cd9b6f750 | ||
|
|
d487c69dcc | ||
|
|
444c2bdf19 | ||
|
|
f86064e322 | ||
|
|
6675544c23 | ||
|
|
10205ca67e | ||
|
|
2dfed3c41e | ||
|
|
db29a61fbf | ||
|
|
3497c5307c | ||
|
|
565f263ecb | ||
|
|
c94a61f434 | ||
|
|
d390d941eb | ||
|
|
f1de249c9e | ||
|
|
f85768412c | ||
|
|
5a28e8c5e9 | ||
|
|
5b72595547 | ||
|
|
a363ed6d7c | ||
|
|
077469d5a0 | ||
|
|
66df7c47b2 | ||
|
|
20b30dd4b5 | ||
|
|
bacef1ca24 | ||
|
|
8d11af94f2 | ||
|
|
02c96fa5e2 | ||
|
|
65b491fed0 | ||
|
|
f0eab3f085 | ||
|
|
21212fdfe5 | ||
|
|
f39465c25a | ||
|
|
a3eaee7e7e | ||
|
|
1e28bbb47e | ||
|
|
c5b98339ae | ||
|
|
edb1b727c6 | ||
|
|
78aeb5eee7 | ||
|
|
9dd93c3d17 | ||
|
|
2d64405eb8 | ||
|
|
dff560d8c2 | ||
|
|
b3c973612f | ||
|
|
3480d3d10c | ||
|
|
f45d21d3a2 | ||
|
|
8dcb792ac0 | ||
|
|
cb5174bfa2 | ||
|
|
9138156968 | ||
|
|
8a0b1fe0be | ||
|
|
3bbe304856 | ||
|
|
0356172a1d | ||
|
|
80f3b19356 | ||
|
|
39a569b438 | ||
|
|
edaa7e85a7 | ||
|
|
f9f7a8cbf2 | ||
|
|
7aef9828c9 | ||
|
|
18ad972936 | ||
|
|
8b5c275934 | ||
|
|
59765954b8 | ||
|
|
f5fff855bb | ||
|
|
26c713851e | ||
|
|
f9b64c4e73 | ||
|
|
edf6c30cd8 | ||
|
|
83860afa60 | ||
|
|
4b7362aa6b | ||
|
|
dd0537d8d2 | ||
|
|
3c50cc1d2c | ||
|
|
78fdb68457 | ||
|
|
bb1bd34ec0 | ||
|
|
1841834c89 | ||
|
|
30b70a99f1 | ||
|
|
f0f2e93e4d | ||
|
|
5852c5e318 | ||
|
|
b38827bb8e | ||
|
|
240046f720 | ||
|
|
78b1194da1 | ||
|
|
c1a66dad51 | ||
|
|
4a10d246c2 | ||
|
|
125ab378a4 | ||
|
|
4cd8a36b40 | ||
|
|
364df2e18c | ||
|
|
f8f2476aa5 | ||
|
|
d685c9739b | ||
|
|
6fdfcf38f1 | ||
|
|
7c85866881 | ||
|
|
37673cd86f | ||
|
|
a4a38d633c | ||
|
|
93bdc81e3c | ||
|
|
827d5a22fb | ||
|
|
34e56eade8 | ||
|
|
4a23e7da37 | ||
|
|
f577a26fe2 | ||
|
|
3f176d8265 | ||
|
|
cbc001e059 | ||
|
|
a66ed05ecd | ||
|
|
ec347d8dbe | ||
|
|
f0acafb853 | ||
|
|
1a12e891ec | ||
|
|
88ba8e2ceb | ||
|
|
2e403277f3 | ||
|
|
89349f60b0 | ||
|
|
0604d3729a | ||
|
|
cf16e3b8a1 | ||
|
|
dcb3496651 | ||
|
|
9d10da3ed2 | ||
|
|
0524deb496 | ||
|
|
787ae43d54 | ||
|
|
67bb2cc150 | ||
|
|
51995c80d1 | ||
|
|
5f43741b09 | ||
|
|
3328d8efd2 | ||
|
|
a54a9e5487 | ||
|
|
0181ca70f4 | ||
|
|
ff665af3f7 | ||
|
|
9275cdc5bf | ||
|
|
b7c3bdd443 | ||
|
|
5fd08f8664 | ||
|
|
84a4d323c7 | ||
|
|
8efb13bfaf | ||
|
|
0187b55610 | ||
|
|
2f606b2728 | ||
|
|
025f75beca | ||
|
|
4711cafd20 | ||
|
|
8d12ca9477 | ||
|
|
67b90bfb51 | ||
|
|
ab05c0c326 | ||
|
|
c5ea453438 | ||
|
|
4f041c16e1 | ||
|
|
28cfee7bd3 | ||
|
|
6272287fbb | ||
|
|
e7a1542902 | ||
|
|
5e371d8195 | ||
|
|
6bb189ea13 | ||
|
|
8496f31e39 | ||
|
|
08f634f748 | ||
|
|
2b5dc5c4a6 | ||
|
|
0a2f0aefb3 | ||
|
|
66e137b8ee | ||
|
|
f9be39545b | ||
|
|
789b8046a2 | ||
|
|
129bf497c8 | ||
|
|
a6d7693d62 | ||
|
|
4e9fbc4da5 | ||
|
|
23f6ff4673 | ||
|
|
3c0dfa6444 | ||
|
|
694311b2bd | ||
|
|
b77626897f | ||
|
|
b8081feac1 | ||
|
|
8b805f4518 | ||
|
|
8bb4f021f1 | ||
|
|
97c79050dc | ||
|
|
ac62a708de | ||
|
|
8d9789f51b | ||
|
|
559d0228fd | ||
|
|
1296e7b891 | ||
|
|
0333e23710 | ||
|
|
7320a80caa | ||
|
|
0579bfc069 | ||
|
|
d20d04299e | ||
|
|
50b2009e9c | ||
|
|
721d29edda | ||
|
|
bc9cae199b | ||
|
|
c38b250667 | ||
|
|
101b2f3ad2 | ||
|
|
9c4f798d93 | ||
|
|
249ff21738 | ||
|
|
f1149097b6 | ||
|
|
111b0df307 | ||
|
|
8041af72cd | ||
|
|
4be6d0b30f | ||
|
|
8c757969f2 | ||
|
|
ae6a82f814 | ||
|
|
eed3f0559a | ||
|
|
c7884e7621 | ||
|
|
2946ab7e7a | ||
|
|
ddb8e4d21a | ||
|
|
00d4f6141f | ||
|
|
7971a25c2a | ||
|
|
ab2411930a | ||
|
|
93f972bfca | ||
|
|
db638844d0 | ||
|
|
ba99eddc91 | ||
|
|
92428cee5d | ||
|
|
2c7d836925 | ||
|
|
7703dcf626 | ||
|
|
157520c4fc | ||
|
|
5bc728fa33 | ||
|
|
35fdc43b3f | ||
|
|
ae6ea29f2f |
14
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
**Please provide the following information**
|
||||||
|
|
||||||
|
### qBittorrent version and Operating System:
|
||||||
|
|
||||||
|
### If on linux, libtorrent and Qt version:
|
||||||
|
|
||||||
|
### What is the problem:
|
||||||
|
|
||||||
|
### What is the expected behavior:
|
||||||
|
|
||||||
|
### Steps to reproduce:
|
||||||
|
|
||||||
|
### Extra info(if any):
|
||||||
|
|
||||||
31
.travis.yml
@@ -17,6 +17,12 @@ env:
|
|||||||
global:
|
global:
|
||||||
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
|
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
|
||||||
- coverity_branch: coverity_scan
|
- coverity_branch: coverity_scan
|
||||||
|
matrix:
|
||||||
|
allow_failures:
|
||||||
|
- os: osx
|
||||||
|
env: lt_branch=RC_1_0 qt=4 gui=true
|
||||||
|
- os: osx
|
||||||
|
env: lt_branch=RC_1_0 qt=4 gui=false
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
except:
|
except:
|
||||||
@@ -83,10 +89,6 @@ before_install:
|
|||||||
# setup virtual display for after_success target
|
# setup virtual display for after_success target
|
||||||
if [ "$gui" = true ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
|
if [ "$gui" = true ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
|
||||||
fi
|
fi
|
||||||
- |
|
|
||||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
||||||
qbtconf="$qbtconf --disable-qt-dbus" ;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# print settings
|
# print settings
|
||||||
- echo $lt_branch
|
- echo $lt_branch
|
||||||
@@ -120,14 +122,18 @@ install:
|
|||||||
fi
|
fi
|
||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
mkdir -p "$HOME/hombebrew_cache" ;
|
|
||||||
wget https://builds.shiki.hu/homebrew/version ;
|
wget https://builds.shiki.hu/homebrew/version ;
|
||||||
if ! cmp --quiet "version" "$HOME/hombebrew_cache/version" ; then
|
if ! cmp --quiet "version" "$HOME/hombebrew_cache/version" ; then
|
||||||
echo "Cached files are different from server. Downloading new ones." ;
|
echo "Cached files are different from server. Downloading new ones." ;
|
||||||
|
# First delete old files
|
||||||
|
rm -r "$HOME/hombebrew_cache" ;
|
||||||
|
mkdir "$HOME/hombebrew_cache";
|
||||||
cp "version" $HOME/hombebrew_cache ;
|
cp "version" $HOME/hombebrew_cache ;
|
||||||
cd "$HOME/hombebrew_cache" ;
|
cd "$HOME/hombebrew_cache" ;
|
||||||
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar.rb ;
|
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar.rb ;
|
||||||
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar-1.0.10.el_capitan.bottle.tar.gz ;
|
wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar-1.0.10.el_capitan.bottle.tar.gz ;
|
||||||
|
wget https://builds.shiki.hu/homebrew/qt5.rb ;
|
||||||
|
wget https://builds.shiki.hu/homebrew/qt5-5.7.1_1.el_capitan.bottle.tar.gz ;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
@@ -142,7 +148,14 @@ install:
|
|||||||
|
|
||||||
# Qt
|
# Qt
|
||||||
if [ "$qt" = 4 ]; then brew install qt && ln -s /usr/local/Cellar/qt/4.8.7_2/plugins /usr/local ; fi ;
|
if [ "$qt" = 4 ]; then brew install qt && ln -s /usr/local/Cellar/qt/4.8.7_2/plugins /usr/local ; fi ;
|
||||||
if [ "$qt" = 5 ]; then brew install qt5 && brew link --force qt5 && ln -s /usr/local/Cellar/qt5/5.7.0/plugins /usr/local ; fi ;
|
if [ "$qt" = 5 ]; then
|
||||||
|
# Copy custom qt5 bottle to homebrew's cache so it can find and install it
|
||||||
|
# Also install our custom qt5 formula by passing the local path to it
|
||||||
|
# These 2 files are restored from Travis' cache.
|
||||||
|
cp "$HOME/hombebrew_cache/qt5-5.7.1_1.el_capitan.bottle.tar.gz" "$(brew --cache)" ;
|
||||||
|
brew install "$HOME/hombebrew_cache/qt5.rb" ;
|
||||||
|
brew link --force qt5 ;
|
||||||
|
fi
|
||||||
|
|
||||||
# ccache
|
# ccache
|
||||||
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
|
if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
|
||||||
@@ -165,7 +178,11 @@ script:
|
|||||||
after_success:
|
after_success:
|
||||||
- if [ "$gui" = true ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
|
- if [ "$gui" = true ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
|
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then cd "$TRAVIS_BUILD_DIR/src/" && macdeployqt "$qbt_exe.app" && cd "$qbt_exe.app/Contents/MacOS" ; fi
|
- |
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
|
macdeployqt "$TRAVIS_BUILD_DIR/src/$qbt_exe.app" ;
|
||||||
|
cd "$TRAVIS_BUILD_DIR/src/$qbt_exe.app/Contents/MacOS" ;
|
||||||
|
fi
|
||||||
- ./$qbt_exe --version
|
- ./$qbt_exe --version
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
|
|||||||
87
5B7CC9A2.asc
@@ -26,28 +26,67 @@ HiShCTSSDBJqFmhfjrCo0nISKnzyxgO/rY9vFlwXsKkTyL7s53ONkjwK34WmGnya
|
|||||||
tXdjBWShzAiTfF5hephfBSszmoBG2C8Jcu6P5n4buBY4RCsEa+6jE0R1vCtmpVwx
|
tXdjBWShzAiTfF5hephfBSszmoBG2C8Jcu6P5n4buBY4RCsEa+6jE0R1vCtmpVwx
|
||||||
WrXOeN2kGYMpAkPK1L69Le0FofgUDKlaFMv7KRl4R367xNRukYrsKwVlontJ+Y72
|
WrXOeN2kGYMpAkPK1L69Le0FofgUDKlaFMv7KRl4R367xNRukYrsKwVlontJ+Y72
|
||||||
X5t1BeRn8VSp0IzhssNXM8a4bTE8lvs889DOS2vgWEHIi0iyIesJYWPs4AKUw4rG
|
X5t1BeRn8VSp0IzhssNXM8a4bTE8lvs889DOS2vgWEHIi0iyIesJYWPs4AKUw4rG
|
||||||
EDwWxtTS0a7Rfx3DxLkCDQRXDSCMARAAqMIVJizEJp205c546IN75xeYiFszNXcs
|
EDwWxtTS0a7Rfx3DxLRWc2xlZGdlaGFtbWVyOTk5IChVc2VkIGZvciBzaWduaW5n
|
||||||
3768IY8bOoWj+rTwt2wIwtL/3O5K2dG79CSt2H5o6BPKmq43tOO60YW3Yk3m9BB/
|
IGdpdCBjb21taXRzL3RhZ3MvZXRjLikgPGhhbW1lcmVkOTk5QHFiaXR0b3JyZW50
|
||||||
gnAVqk0QOPr5O8+yeBzdElU8CZh6y6zZMWugSkNmTDm6jZzPhgNjcjrit/dl9+0D
|
Lm9yZz6JAh8EMAEIAAkFAlhie1ICHQAACgkQbkotAlt8yaILIhAAp25o1BbUG2Zk
|
||||||
GqJQcqoD8WzEWNcWrMHVz9cDewnLSVkwR758mZMaIiL7R10MZ++tNrC0j69UINqx
|
At3cSrTFnZSCA7nEygbSUv1Uek33JZfY0Apw5qEM8lQCMZk+mhdrSQCYUJcQlruN
|
||||||
+9z1r1J07+NNnxqSTxVRcbjPYtM9E+tUiVFS2HPWN9ShVDkBAEdoWh90qzRaMiFl
|
zJcJf4CH+VGE23xkI3Kf0nGp9Cjn/q6b1hLIPe5rimvw5pTAejFtebcYY/ZJIB8Z
|
||||||
2NGNGOD1iHx/xr06RMeGEEXt2vhSlhfMW2YQW+UD2jzlFbARf53v39MUKKscGuIp
|
H1ebuzfqBZ/9k7eYTarZ/ZsgG8YptB0RXBQWOMaSEKwdeo2m7HXHgK3blQiqbuJJ
|
||||||
BhxGw3JCq4l6qLW/bDkgnoXlOhZDmhQm6OpsjAyk9IEdd3ponSc7yYD3mUkJKR9e
|
uyPbid01Wus4AVN47/FKgDNswPs8irYZsu5yakgpi2KLycGDtSiN5XFHI4xbC0zM
|
||||||
TaALD5t6TQGyNHakb4UfoXtE2RR78cbPlLIwag7eQ8GsNA+dfjowmOZdojx3ROsH
|
srR7Cz0/fC+klhGcuxbw0V0It7UUIitgCcTPHXkukUU8i2+AGMyKa1HjchsXDdLg
|
||||||
ZdGQwb0YFLjuKAusA3TY+lCfbS6kzE2iI2DuaW+3dICcLrYuibbVb0CBNHyD+8KE
|
DIs6KIurp2ve7znKOz7h1aX8cOBmB/QYeYAx9jRRkePMIRT8V1lRwfvJlJxx1+G3
|
||||||
tczdur/wm0lhqyVJkGyZKZT8C2cPxywKgy1Rn6F8Yfmj0Lna3nvtaZu0ZUS4/8Li
|
e2gJLjqTN8a08KHHjdY/S0ZFERxSlmOym2uf/y6di1ipDPxo8xvDuS5kDbdZLC0t
|
||||||
t5PcOso1lSmYBuD6yq+GEAMCnUmn1Pm8eZRMlxxQuTPvyJKQrRDhbtAAr472MSno
|
XijlsH8ONK27KNuWhucG8zHzKQvnPw2qN06SZq4FjbSmAkkuYs56heLEXMzFr75k
|
||||||
JKlS4SfaUF0AEQEAAYkCHwQYAQgACQUCVw0gjAIbDAAKCRBuSi0CW3zJomZDD/9I
|
SE8rUoQQ+ABG9gU46GEvKlZxqSwXgGnb1X6K7h8svjMh/NlAU358p8Sra4Ru5tz4
|
||||||
Jmzd5hiEzntlp84pyIJcfyIRe4KImvldAy6T02OSIbF1HzCNnwmqIPob6MOdMZ+K
|
jUu9MoVEw5Lbjcrsnp6/4Kk1Q2ckBNt43nv8/+C7NsC3xi6BrOInuaKHZ4QsTuzJ
|
||||||
NwMK0htRkrRr/zM034+lBiWKZt+tVYHu49ioTYXEjAc5qDJE09Sq7HceQnhgE48f
|
m1/A4zlKRnUi6T98DXfIYnNuV9NSmAWJAjkEEwEIACMFAlhiemMCGwMHCwkIBwMC
|
||||||
1n54XGT5G2w5gw+/a8Qn1SceE44VwXafL3E1gKaOrrsb1UH/AJhp+W4VMu+7bLXu
|
AQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBuSi0CW3zJor6yD/9N2U0INx0nYpGkmvah
|
||||||
7h1tN6v2PhvCYvBt3zyy8Q8xfJ2x7/D1lbF8ATJAiZ/km9x5bRm7OGRliVYaUe1n
|
yVG/vw2S6hhKK+03AN+RrtddNRg4aBf/gmOvRWQhAmFnXOBA7fO09wgcljaV5tVb
|
||||||
yR42fZOj3CBmAR0+lZLgjriqdMXrs+qlBbrmAhkn0XPQXAeaPifKoKIGDAUWIsqD
|
MYyYZvHhK0o2/sli2p/M5N8ZxchRHypjxUSEyG9ZQ06QG5DVhh4HtM8nIN+UcwTV
|
||||||
HqM7imMGT+MR9APfSw8M4enOJWL+HnKpVBEARCEDpaFpJ3u7QRucFybpEhvIymoN
|
C5QjyoWZvHf+tNroyFeh7zT+w4kX1VxgynTQr5LGdYsrVA3CFyT3zsBWV3dMae23
|
||||||
ftyw+urId2Eg2K33NypeZo3M1K2LC65f2Ta7f/sZcIDUTbgW+m334fgVl1KptDA5
|
22CHOirsBBLwairHUsWW+BdThT3MkKYpTEV0jkH4OyAXhJYcS5IjjtKQ8UpZE9dw
|
||||||
DX3U9lTci7mi4uPuAFtbWrB1di4jYrxXYuzFm5g4xTb0Hw3kYIB6WXF+I7i0JaGO
|
f4saJ0TnXNe7goPRZtH7UjPwfVbtYK4y8QklWUTRxgoBxNwSC5X7Flg+3xXxE/VU
|
||||||
THxPC5X5lIAZrYrkxh+1n1Y1CY+TC8JcTzwORJIbFFm9tD/BHXa4849k4DVvFYCZ
|
U4cehyRkH64i7MJDoFkqh5JtjkgIz+kuTTXb7xR0Wf+JXrGMybZTR8xth2TEMC20
|
||||||
khq+/56FKZfoVByhB+x+2GaMlsBm1uPniO4lAakFPpIi0kaap4UVayQ/7ak+Bhsc
|
1FT5L5+0vH1WRzL7bhlaU3EXyCnoH8sDvMEClZbibbew+rf7fC3tFU41ohUT0HDl
|
||||||
AIHZUy6NtgZkuvW3xdpwp07LYo2ilhMI8RnzmtoRmg==
|
zlyfVjRvBHWMTgfpWKBV2m/qP941xTJ9VHxOlAB02XKUZYwFt07CpH+yjMOCOzA4
|
||||||
=tDGM
|
cTPBD3mGRuft0V0BJ8bA5bcTly/GBciRX0Y5oIeHZGgq2czb0sywSYT6mPoQMFNM
|
||||||
|
B+Cwr4pm90r1DMMfW518onF2itwyN/Id0FsWDhsLJHKluBJw52C3OnxCuToVutTm
|
||||||
|
xntqpPVv62LaeVeWQqxIieTJErRQc2xlZGdlaGFtbWVyXzk5OSAoVXNlZCBmb3Ig
|
||||||
|
c2lnbmluZyBnaXQgY29tbWl0cy90YWdzL2V0YykgPGhhbW1lcmVkOTk5QGdtYWls
|
||||||
|
LmNvbT6JAjkEEwEIACMFAlhifeICGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIX
|
||||||
|
gAAKCRBuSi0CW3zJolcCD/9xPBNEkFtnhTW89th0TFZnB5oykCQjyefquvQs8KWT
|
||||||
|
C92/1VizHi4ZxDehHWP9IKVWT3ZJthj5ZXBSedyl1tHnwkyrUYBW9roQwtDWPncK
|
||||||
|
pXl/HsE6p3q6EIus+g6YJo4UvYachJFAZATZp1WDBPIswziHGzaL0tndFWZuVM8V
|
||||||
|
QD0tfPQsS1qCDVv6+B1JWZDnA1JzdSG/uzPhL95q/ff6JmNbfSAVedK2PyqYshnC
|
||||||
|
KWBx6Yna/0ColBuDFho8+bDuHPQcM35xyjPosVD7moXQiY4yMAJ+VzwEBaCFleI0
|
||||||
|
RBWw8/+qyoFqfIKwdq8G+7I9LjWpBiN2+uQBZ+OAvsMWyRShLopxt3JluPTtL6xb
|
||||||
|
Ca6dglOdlaOS/A6FK7u05k/8kQMDS5Jq2/rpfTPRl1/weCaJZgfRIBosk1Mon/pR
|
||||||
|
p1zd0abM4t7BcGQpwSkKAmqlKCrWf886EFQT0CJTBo8q7pzgpVraWWPVsmAOdkfU
|
||||||
|
YcKBgz1A2uMSAxypkSzaDZkIVj6I7gwiGk7IMYx1OK7Ev46h/x4Z7kgT0y3DYYOq
|
||||||
|
ggVEKQ+15Krn7bZ35s8vbZdfnVKPSXdCC8jkIMBmGmRX6cgZZ3OXZlrrHht5icgJ
|
||||||
|
5Z2d1M4JUoEZVUr2xNZkkaMk01NAIpGgKvIS6yHuj6vE4GMJ+A/qEW6J60/3YHRe
|
||||||
|
0bkCDQRXDSCMARAAqMIVJizEJp205c546IN75xeYiFszNXcs3768IY8bOoWj+rTw
|
||||||
|
t2wIwtL/3O5K2dG79CSt2H5o6BPKmq43tOO60YW3Yk3m9BB/gnAVqk0QOPr5O8+y
|
||||||
|
eBzdElU8CZh6y6zZMWugSkNmTDm6jZzPhgNjcjrit/dl9+0DGqJQcqoD8WzEWNcW
|
||||||
|
rMHVz9cDewnLSVkwR758mZMaIiL7R10MZ++tNrC0j69UINqx+9z1r1J07+NNnxqS
|
||||||
|
TxVRcbjPYtM9E+tUiVFS2HPWN9ShVDkBAEdoWh90qzRaMiFl2NGNGOD1iHx/xr06
|
||||||
|
RMeGEEXt2vhSlhfMW2YQW+UD2jzlFbARf53v39MUKKscGuIpBhxGw3JCq4l6qLW/
|
||||||
|
bDkgnoXlOhZDmhQm6OpsjAyk9IEdd3ponSc7yYD3mUkJKR9eTaALD5t6TQGyNHak
|
||||||
|
b4UfoXtE2RR78cbPlLIwag7eQ8GsNA+dfjowmOZdojx3ROsHZdGQwb0YFLjuKAus
|
||||||
|
A3TY+lCfbS6kzE2iI2DuaW+3dICcLrYuibbVb0CBNHyD+8KEtczdur/wm0lhqyVJ
|
||||||
|
kGyZKZT8C2cPxywKgy1Rn6F8Yfmj0Lna3nvtaZu0ZUS4/8Lit5PcOso1lSmYBuD6
|
||||||
|
yq+GEAMCnUmn1Pm8eZRMlxxQuTPvyJKQrRDhbtAAr472MSnoJKlS4SfaUF0AEQEA
|
||||||
|
AYkCHwQYAQgACQUCVw0gjAIbDAAKCRBuSi0CW3zJomZDD/9IJmzd5hiEzntlp84p
|
||||||
|
yIJcfyIRe4KImvldAy6T02OSIbF1HzCNnwmqIPob6MOdMZ+KNwMK0htRkrRr/zM0
|
||||||
|
34+lBiWKZt+tVYHu49ioTYXEjAc5qDJE09Sq7HceQnhgE48f1n54XGT5G2w5gw+/
|
||||||
|
a8Qn1SceE44VwXafL3E1gKaOrrsb1UH/AJhp+W4VMu+7bLXu7h1tN6v2PhvCYvBt
|
||||||
|
3zyy8Q8xfJ2x7/D1lbF8ATJAiZ/km9x5bRm7OGRliVYaUe1nyR42fZOj3CBmAR0+
|
||||||
|
lZLgjriqdMXrs+qlBbrmAhkn0XPQXAeaPifKoKIGDAUWIsqDHqM7imMGT+MR9APf
|
||||||
|
Sw8M4enOJWL+HnKpVBEARCEDpaFpJ3u7QRucFybpEhvIymoNftyw+urId2Eg2K33
|
||||||
|
NypeZo3M1K2LC65f2Ta7f/sZcIDUTbgW+m334fgVl1KptDA5DX3U9lTci7mi4uPu
|
||||||
|
AFtbWrB1di4jYrxXYuzFm5g4xTb0Hw3kYIB6WXF+I7i0JaGOTHxPC5X5lIAZrYrk
|
||||||
|
xh+1n1Y1CY+TC8JcTzwORJIbFFm9tD/BHXa4849k4DVvFYCZkhq+/56FKZfoVByh
|
||||||
|
B+x+2GaMlsBm1uPniO4lAakFPpIi0kaap4UVayQ/7ak+BhscAIHZUy6NtgZkuvW3
|
||||||
|
xdpwp07LYo2ilhMI8RnzmtoRmg==
|
||||||
|
=UBeB
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
cmake_policy(VERSION 3.5)
|
cmake_policy(VERSION 3.5)
|
||||||
|
|
||||||
project(qBittorrent VERSION 3.4.0.0)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
|
||||||
|
include(FunctionReadVersion)
|
||||||
|
|
||||||
set(VER_MAJOR ${qBittorrent_VERSION_MAJOR})
|
read_version("${CMAKE_CURRENT_SOURCE_DIR}/version.pri" VER_MAJOR VER_MINOR VER_BUGFIX VER_BUILD VER_STATUS)
|
||||||
set(VER_MINOR ${qBittorrent_VERSION_MINOR})
|
# message(STATUS "Project version is: ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD} (${VER_STATUS})")
|
||||||
set(VER_BUGFIX ${qBittorrent_VERSION_PATCH})
|
|
||||||
set(VER_BUILD ${qBittorrent_VERSION_TWEAK})
|
project(qBittorrent VERSION ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD})
|
||||||
set(VER_STATUS "alpha") # Should be empty for stable releases!
|
|
||||||
|
|
||||||
# Don't touch the rest part
|
|
||||||
set(PROJECT_VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}")
|
set(PROJECT_VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}")
|
||||||
|
|
||||||
if (NOT VER_BUILD EQUAL 0)
|
if (NOT VER_BUILD EQUAL 0)
|
||||||
@@ -18,17 +17,18 @@ endif()
|
|||||||
|
|
||||||
set(PROJECT_VERSION "${PROJECT_VERSION}${VER_STATUS}")
|
set(PROJECT_VERSION "${PROJECT_VERSION}${VER_STATUS}")
|
||||||
|
|
||||||
add_definitions(-DVERSION_MAJOR=${VER_MAJOR})
|
add_definitions(-DQBT_VERSION_MAJOR=${VER_MAJOR})
|
||||||
add_definitions(-DVERSION_MINOR=${VER_MINOR})
|
add_definitions(-DQBT_VERSION_MINOR=${VER_MINOR})
|
||||||
add_definitions(-DVERSION_BUGFIX=${VER_BUGFIX})
|
add_definitions(-DQBT_VERSION_BUGFIX=${VER_BUGFIX})
|
||||||
add_definitions(-DVERSION_BUILD=${VER_BUILD})
|
add_definitions(-DQBT_VERSION_BUILD=${VER_BUILD})
|
||||||
|
|
||||||
# os2 {
|
# os2 {
|
||||||
# DEFINES += VERSION=\'\"v$${PROJECT_VERSION}\"\'
|
# DEFINES += DQBT_VERSION=\'\"v$${PROJECT_VERSION}\"\'
|
||||||
|
# DEFINES += DQBT_VERSION_2=\'\"$${PROJECT_VERSION}\"\'
|
||||||
# } else {
|
# } else {
|
||||||
add_definitions(-DVERSION="v${PROJECT_VERSION}")
|
add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
|
||||||
|
add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
|
||||||
# }
|
# }
|
||||||
list(APPEND CMAKE_MODULE_PATH ${qBittorrent_SOURCE_DIR}/cmake/Modules)
|
|
||||||
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE)
|
||||||
|
|||||||
102
Changelog
@@ -1,3 +1,105 @@
|
|||||||
|
* Thu Apr 06 2017 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.12
|
||||||
|
- FEATURE: Indicate bitness in stackstrace and about dialog. Closes #6172. (sledgehammer999)
|
||||||
|
- BUGFIX: Fix incomplete type compile error with Qt4 (Chocobo1)
|
||||||
|
- BUGFIX: Fix compile error: ‘escape’ is not a member of ‘Qt’ (Chocobo1)
|
||||||
|
- BUGFIX: Use system locale to format dates/time/etc (sledgehammer999)
|
||||||
|
- BUGFIX: Follow http user-agent format (Chocobo1)
|
||||||
|
- BUGFIX: Fix cancel "Set location" causes files move to installation dir. (Chocobo1)
|
||||||
|
- WEBUI: Improve performance of updating 'progress' column (buinsky)
|
||||||
|
- WEBUI: Implement statistics window in web UI (FranciscoPombal)
|
||||||
|
- WEBUI: fixed "remaining" column in WebUI (FranciscoPombal)
|
||||||
|
- WEBUI: Set HttpOnly attribute to SID cookie (Chocobo1)
|
||||||
|
- WEBUI: Fire up the timer to clean inactive sessions (Chocobo1)
|
||||||
|
- WEBUI: Set cookie SID value to empty on logout (Chocobo1)
|
||||||
|
- WINDOWS: Make the installer DPI aware (regs01)
|
||||||
|
- WINDOWS: Set exit code to 0 on install/uninstall success. Fixes problem with silent installations. (Chocobo1)
|
||||||
|
- WINDOWS: The 64-bit installer refuses to install on 32-bit systems. (sledgehammer999)
|
||||||
|
- WINDOWS: The 64-bit installer uses the correct "Program Files" now. Detection will not work if you install on top of previous installer. (sledgehammer999)
|
||||||
|
- WINDOWS: Fix running the uninstaller if the user chose a different path in the installer. Closes #6080. (sledgehammer999)
|
||||||
|
- LINUX: Add keywords to the .desktop file. (sledgehammer999)
|
||||||
|
- LINUX: Update stuff in appdata.xml and run 'appstream-utl upgrade' on it. (sledgehammer999)
|
||||||
|
- OTHER: Replace rand() by a true uniform distribution generator (Chocobo1)
|
||||||
|
- OTHER: Change our user-agent format as indicated earlier in the news section (Chocobo1)
|
||||||
|
- OTHER: cmake: fix OSX bundle creation (evsh)
|
||||||
|
|
||||||
|
* Fri Mar 03 2017 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.11
|
||||||
|
- FEATURE: Always show progress and remaining bytes for unselected files. (sledgehammer999)
|
||||||
|
- FEATURE: Allow to change priority for unselected files through the combobox like it is done via the context menu. (sledgehammer999)
|
||||||
|
- FEATURE: Remove settings to exchange trackers. It wasn't used by non-libtorrent clients. Also it has a privacy risk and you might be DDoSing someone. (sledgehammer999)
|
||||||
|
- FEATURE: Put temp files in .qBittorrent directory. Closes #4462. (Chocobo1)
|
||||||
|
- FEATURE: Use the numbers from tracker scrape response. Closes #5048, #6117. (Chocobo1)
|
||||||
|
- FEATURE: Implement category filter widget. Show categories in tree mode when subcategories are enabled. (glassez)
|
||||||
|
- FEATURE: Allow to toggle columns in searchtab (thalieht)
|
||||||
|
- FEATURE: PeerList: allow to hide zero values for the "uploaded" and "downloaded" columns (thalieht)
|
||||||
|
- FEATURE: Display more information in tracker tab (ngosang)
|
||||||
|
- FEATURE: Use Ctrl+F to search torrents. Closes #5797. (Tim Delaney)
|
||||||
|
- FEATURE: Transferlist: add hotkeys for double click and recheck selected torrents (thalieht)
|
||||||
|
- FEATURE: Add hotkey for execution log tab, Trackerlist, Peerlist etc (thalieht)
|
||||||
|
- FEATURE: Seperate seeds from peers for DHT, PeX and LSD (thalieht)
|
||||||
|
- BUGFIX: Do not remove added files unconditionally. Closes #6248 (Eugene Shalygin)
|
||||||
|
- BUGFIX: Ignore mouse wheel events in Advanced Settings. Closes #866. (Chocobo1)
|
||||||
|
- BUGFIX: Add queue repair code. It should fix missing torrents after restarting. (Eugene Shalygin, nxd4)
|
||||||
|
- BUGFIX: Fetch torrent status when generating final fastresume data. It should fix missing torrents after restarting. (Eugene Shalygin)
|
||||||
|
- BUGFIX: Fix queue overload for add torrent at session start. It should fix missing torrents after restarting. (falco)
|
||||||
|
- BUGFIX: After files relocate, don't remove the old folder even if it is empty. (Chocobo1)
|
||||||
|
- BUGFIX: Fix finding 'English' item in language dropdown menu when an unrecognized locale is requested. Closes #6109. (sledgehammer999)
|
||||||
|
- BUGIFX: Speedlimitdlg: raise slider default value to 10000. Closes #6150. (Chocobo1)
|
||||||
|
- BUGFIX: TransferListWidget: keep columns width even if they are hidden on qBittorrent startup (unless something goes wrong) (thalieht)
|
||||||
|
- BUGFIX: fix index overflow for torrents with invalid meta data or empty progress (Falco)
|
||||||
|
- BUGFIX: Immediately update torrent_status after manipulating super seeding mode. Partially fixes #6072. (sledgehammer999)
|
||||||
|
- BUGFIX: Use case-insensitive comparsion for torrent content window. Closes #6327. (Chocobo1)
|
||||||
|
- BUGFIX: Fixed sort order for datetime columns with empty values (closes #2988) (Vladimir Sinenko)
|
||||||
|
- BUGFIX: Disable proxy in WebUI HTTP server. Closes #6349. (Eugene Shalygin)
|
||||||
|
- COSMETIC: Use a disabled progressbar's palette for unselected files. (sledgehammer999)
|
||||||
|
- COSMETIC: Support fallback when selecting theme icons (Eugene Shalygin)
|
||||||
|
- COSMETIC: Do not resize SVG icons (Eugene Shalygin)
|
||||||
|
- COSMETIC: Align text to the right in columns that handle numbers for PeerList and SearchTab (thalieht)
|
||||||
|
- COSMETIC: Increased number of digits after the decimal point for Gibibytes and above (thalieht)
|
||||||
|
- COSMETIC: Use non-breaking spaces between numbers and units (thalieht)
|
||||||
|
- WEBUI: Fix proxy type bug (Oke Atime)
|
||||||
|
- WEBUI: Use the correct value for KEY_TORRENT_NUM_COMPLETE/KEY_TORRENT_NUM_INCOMPLETE (Chocobo1)
|
||||||
|
- WEBUI: Make torrents table scrollable horizontally (buinsky)
|
||||||
|
- WEBUI: Make torrent peers table scrollable horizontally (buinsky)
|
||||||
|
- WEBUI: Add tooltips to dynamic table header (buinsky)
|
||||||
|
- WEBUI: Implement dynamic table columns resizing, reordering and hiding (buinsky)
|
||||||
|
- WEBUI: Add some missing columns to dynamic tables (buinsky)
|
||||||
|
- WEBUI: Make too tall menus scrollable (buinksy)
|
||||||
|
- WEBUI: Prevent text wrapping in menus (buinsky)
|
||||||
|
- WEBUI: Add a vertical separator between columns (buinsky)
|
||||||
|
- WEBUI: Implement resizable progress bar in "Done" column (buinsky)
|
||||||
|
- WEBUI: Fix scrollbar covers menu item with long text (buinsky)
|
||||||
|
- WEBUI: Remove 300px limit of column width (buinsky)
|
||||||
|
- WEBUI: Avoid lags in firefox on resizing progress column (buinsky)
|
||||||
|
- WEBUI: Fix category in torrent upload. Closes #6260 (ngosang)
|
||||||
|
- WEBUI: Turn off port forwarding of WebUI by default for GUI users (Chocobo1)
|
||||||
|
- WEBUI: Exclude insecure ciphers. Fixes security issues reported by @beardog108 privately. (Chocobo1)
|
||||||
|
- WEBUI: Avoid clickjacking attacks. Fixes security issues reported by @beardog108 privately. (ngosang)
|
||||||
|
- WEBUI: Add X-XSS-Protection, X-Content-Type-Options, CSP header. Fixes security issues reported by @beardog108 privately. (Chocobo1)
|
||||||
|
- WEBUI: Escape various values that might contain injected html. Fixes security issues reported by @beardog108 privately. (Chocobo1)
|
||||||
|
- WEBUI: Bump API_VERSION to 12.
|
||||||
|
- SEARCH: Update extratorrent plugin. Closes #6261 (ngosang)
|
||||||
|
- SEARCH: SearchTab: can now save sorting column changes (thalieht)
|
||||||
|
- SEARCH: Use case-insensitive sort for Name column in Search tab. Closes #407. (Chocobo1)
|
||||||
|
- RSS: Fix tab order in RSS downloader. Closes #6164. (Tim Delaney)
|
||||||
|
- RSS: Move old RSS items to separate config file. Closes #6167. (Tim Delaney)
|
||||||
|
- RSS: Episode filter code refactoring (Tim Delaney)
|
||||||
|
- RSS: Allow resetting rule to no category. Closes #5539. (Tim Delaney)
|
||||||
|
- RSS: Save rule on enable/disable even if not selected. Closes #6163. (Tim Delaney)
|
||||||
|
- RSS: Allow | in RSS must contain. Closes #6171. (Tim Delaney)
|
||||||
|
- RSS: RSS use red text to indicate invalid filter. Closes #6165. (Tim Delaney)
|
||||||
|
- RSS: Allow episode zero (special) and leading zeroes in RSS episode filter. (Tim Delaney)
|
||||||
|
- RSS: RSS parse torrent episodes like 1x01 as well as S01E01. Closes #2749. (Tim Delaney)
|
||||||
|
- RSS: RSS allow infinite range to extend beyond current season. Closes #800, #3876, #6170. (Tim Delaney)
|
||||||
|
- RSS: Improve UI responsiveness during RSS downloading. Closes #873, #1089, #1235, #5423. (Tim Delaney)
|
||||||
|
- RSS: Show name of feed list and sort rules in editor. Closes #3782, #6281. (Tim Delaney)
|
||||||
|
- RSS: Fix regex matching. Closes #6337. (Tim Delaney)
|
||||||
|
- MACOS: Fix qbittorrent-nox build (Oke Atime)
|
||||||
|
- LINUX: fixes default indicator name (Bilal Elmoussaoui)
|
||||||
|
- OTHER: Workaround problem with moc from Qt4 and #if (Eugene Shalygin)
|
||||||
|
- OTHER: Print warning to the user if stacktrace contains no function names (Eugene Shalygin)
|
||||||
|
- OTHER: Various cmake fixes (Eugene Shalygin)
|
||||||
|
- OTHER: Fix finding qmake in configure when cross-compiling (Zach Bacon)
|
||||||
|
|
||||||
* Sat Dec 17 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.10
|
* Sat Dec 17 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.10
|
||||||
- BUGFIX: Fix share ratio limiting. Broken by commit 259b5e51c49b744. Closes #6039 #6048. (sledgehammer999)
|
- BUGFIX: Fix share ratio limiting. Broken by commit 259b5e51c49b744. Closes #6039 #6048. (sledgehammer999)
|
||||||
- BUGFIX: Case insensitive sort for client column. Closes #6054. (Oke Atime)
|
- BUGFIX: Case insensitive sort for client column. Closes #6054. (Oke Atime)
|
||||||
|
|||||||
@@ -14,6 +14,11 @@
|
|||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
find_package(PkgConfig QUIET)
|
find_package(PkgConfig QUIET)
|
||||||
|
|
||||||
|
macro(_detect_boost_components _outComponets librariesList)
|
||||||
|
string(REGEX MATCHALL "boost_[a-z_]+[-a-z]*" _boost_libraries "${librariesList}")
|
||||||
|
string(REGEX REPLACE "boost_([a-z_]+)[-a-z]*" "\\1" ${_outComponets} "${_boost_libraries}")
|
||||||
|
endmacro()
|
||||||
|
|
||||||
if(PKG_CONFIG_FOUND)
|
if(PKG_CONFIG_FOUND)
|
||||||
pkg_check_modules(PC_LIBTORRENT_RASTERBAR QUIET libtorrent-rasterbar)
|
pkg_check_modules(PC_LIBTORRENT_RASTERBAR QUIET libtorrent-rasterbar)
|
||||||
endif()
|
endif()
|
||||||
@@ -62,13 +67,33 @@ endif()
|
|||||||
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
|
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIR})
|
set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIR})
|
||||||
|
|
||||||
if(NOT Boost_SYSTEM_FOUND OR NOT Boost_CHRONO_FOUND OR NOT Boost_RANDOM_FOUND)
|
# Without pkg-config, we can't possibly figure out the correct boost dependencies
|
||||||
find_package(Boost REQUIRED COMPONENTS date_time system chrono random thread)
|
if (LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||||
set(LibtorrentRasterbar_LIBRARIES
|
set(_boost_components "${LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES}")
|
||||||
${LibtorrentRasterbar_LIBRARIES} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
else(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||||
set(LibtorrentRasterbar_INCLUDE_DIRS
|
if(PC_LIBTORRENT_RASTERBAR_FOUND)
|
||||||
${LibtorrentRasterbar_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
|
_detect_boost_components(_boost_components "${PC_LIBTORRENT_RASTERBAR_LIBRARIES}")
|
||||||
|
else()
|
||||||
|
# all possible boost dependencies
|
||||||
|
set(_boost_components
|
||||||
|
date_time
|
||||||
|
system
|
||||||
|
chrono
|
||||||
|
random
|
||||||
|
thread
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
endif(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
|
||||||
|
|
||||||
|
list(SORT _boost_components)
|
||||||
|
message(STATUS "Libtorrent Boost dependencies: ${_boost_components}")
|
||||||
|
find_package(Boost REQUIRED COMPONENTS ${_boost_components})
|
||||||
|
set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
foreach(_boost_cmpnt IN LISTS _boost_components)
|
||||||
|
list(APPEND LibtorrentRasterbar_LIBRARIES "Boost::${_boost_cmpnt}")
|
||||||
|
endforeach(_boost_cmpnt)
|
||||||
|
|
||||||
|
set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
|
||||||
|
|
||||||
list(FIND LibtorrentRasterbar_DEFINITIONS -DTORRENT_USE_OPENSSL LibtorrentRasterbar_ENCRYPTION_INDEX)
|
list(FIND LibtorrentRasterbar_DEFINITIONS -DTORRENT_USE_OPENSSL LibtorrentRasterbar_ENCRYPTION_INDEX)
|
||||||
if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
|
if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
|
||||||
@@ -83,10 +108,7 @@ include(FindPackageHandleStandardArgs)
|
|||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
find_package_handle_standard_args(LibtorrentRasterbar DEFAULT_MSG
|
find_package_handle_standard_args(LibtorrentRasterbar DEFAULT_MSG
|
||||||
LibtorrentRasterbar_LIBRARY
|
LibtorrentRasterbar_LIBRARY
|
||||||
LibtorrentRasterbar_INCLUDE_DIR
|
LibtorrentRasterbar_INCLUDE_DIR)
|
||||||
Boost_SYSTEM_FOUND
|
|
||||||
Boost_CHRONO_FOUND
|
|
||||||
Boost_RANDOM_FOUND)
|
|
||||||
|
|
||||||
mark_as_advanced(LibtorrentRasterbar_INCLUDE_DIR LibtorrentRasterbar_LIBRARY
|
mark_as_advanced(LibtorrentRasterbar_INCLUDE_DIR LibtorrentRasterbar_LIBRARY
|
||||||
LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
|
LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
|
||||||
|
|||||||
28
cmake/Modules/FunctionReadVersion.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# function for parsing version variables that are set in version.pri file
|
||||||
|
# the version identifiers there are defined as follows:
|
||||||
|
# VER_MAJOR = 3
|
||||||
|
# VER_MINOR = 4
|
||||||
|
# VER_BUGFIX = 0
|
||||||
|
# VER_BUILD = 0
|
||||||
|
# VER_STATUS = alpha
|
||||||
|
|
||||||
|
function(read_version priFile outMajor outMinor outBugfix outBuild outStatus)
|
||||||
|
file(STRINGS ${priFile} _priFileContents REGEX "^VER_.+")
|
||||||
|
# message(STATUS "version.pri version contents: ${_priFileContents}")
|
||||||
|
# the _priFileContents variable contains something like the following:
|
||||||
|
# VER_MAJOR = 3;VER_MINOR = 4;VER_BUGFIX = 0;VER_BUILD = 0;VER_STATUS = alpha # Should be empty for stable releases!
|
||||||
|
set(_regex "VER_MAJOR += +([0-9]+);VER_MINOR += +([0-9]+);VER_BUGFIX += +([0-9]+);VER_BUILD += +([0-9]+);VER_STATUS += +([0-9A-Za-z]+)?")
|
||||||
|
# note quotes around _regex, they are needed because the variable contains semicolons
|
||||||
|
string(REGEX MATCH "${_regex}" _tmp "${_priFileContents}")
|
||||||
|
if (NOT _tmp)
|
||||||
|
message(FATAL_ERROR "Could not detect project version number from ${priFile}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# message(STATUS "Matched version string: ${_tmp}")
|
||||||
|
|
||||||
|
set(${outMajor} ${CMAKE_MATCH_1} PARENT_SCOPE)
|
||||||
|
set(${outMinor} ${CMAKE_MATCH_2} PARENT_SCOPE)
|
||||||
|
set(${outBugfix} ${CMAKE_MATCH_3} PARENT_SCOPE)
|
||||||
|
set(${outBuild} ${CMAKE_MATCH_4} PARENT_SCOPE)
|
||||||
|
set(${outStatus} ${CMAKE_MATCH_5} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
@@ -5,11 +5,23 @@
|
|||||||
macro (target_link_qt_components target)
|
macro (target_link_qt_components target)
|
||||||
if (QT4_FOUND)
|
if (QT4_FOUND)
|
||||||
foreach(_cmp ${ARGN})
|
foreach(_cmp ${ARGN})
|
||||||
|
if ("${_cmp}" STREQUAL "PRIVATE" OR
|
||||||
|
"${_cmp}" STREQUAL "PUBLIC" OR
|
||||||
|
"${_cmp}" STREQUAL "INTERFACE")
|
||||||
|
list(APPEND _QT_CMPNTS "${_cmp}")
|
||||||
|
else()
|
||||||
list(APPEND _QT_CMPNTS "Qt4::Qt${_cmp}")
|
list(APPEND _QT_CMPNTS "Qt4::Qt${_cmp}")
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
else (QT4_FOUND)
|
else (QT4_FOUND)
|
||||||
foreach(_cmp ${ARGN})
|
foreach(_cmp ${ARGN})
|
||||||
|
if ("${_cmp}" STREQUAL "PRIVATE" OR
|
||||||
|
"${_cmp}" STREQUAL "PUBLIC" OR
|
||||||
|
"${_cmp}" STREQUAL "INTERFACE")
|
||||||
|
list(APPEND _QT_CMPNTS "${_cmp}")
|
||||||
|
else()
|
||||||
list(APPEND _QT_CMPNTS "Qt5::${_cmp}")
|
list(APPEND _QT_CMPNTS "Qt5::${_cmp}")
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endif (QT4_FOUND)
|
endif (QT4_FOUND)
|
||||||
target_link_libraries(${target} ${_QT_CMPNTS})
|
target_link_libraries(${target} ${_QT_CMPNTS})
|
||||||
|
|||||||
@@ -9,18 +9,20 @@ set(LibtorrentRasterbar_CUSTOM_DEFINITIONS
|
|||||||
-DBOOST_EXCEPTION_DISABLE
|
-DBOOST_EXCEPTION_DISABLE
|
||||||
-DBOOST_SYSTEM_STATIC_LINK=1
|
-DBOOST_SYSTEM_STATIC_LINK=1
|
||||||
-DTORRENT_USE_OPENSSL
|
-DTORRENT_USE_OPENSSL
|
||||||
-DUNICODE
|
-D__USE_W32_SOCKETS
|
||||||
|
-D_FILE_OFFSET_BITS=64)
|
||||||
|
|
||||||
|
add_definitions(-DUNICODE
|
||||||
-D_UNICODE
|
-D_UNICODE
|
||||||
-DWIN32
|
-DWIN32
|
||||||
-D_WIN32
|
-D_WIN32
|
||||||
-DWIN32_LEAN_AND_MEAN
|
-DWIN32_LEAN_AND_MEAN
|
||||||
|
-DNTDDI_VERSION=0x05010000
|
||||||
-D_WIN32_WINNT=0x0501
|
-D_WIN32_WINNT=0x0501
|
||||||
-D_WIN32_IE=0x0500
|
-D_WIN32_IE=0x0501
|
||||||
-D_CRT_SECURE_NO_DEPRECATE
|
-D_CRT_SECURE_NO_DEPRECATE
|
||||||
-D_SCL_SECURE_NO_DEPRECATE
|
-D_SCL_SECURE_NO_DEPRECATE
|
||||||
-D__USE_W32_SOCKETS
|
)
|
||||||
-D_FILE_OFFSET_BITS=64)
|
|
||||||
|
|
||||||
# and boost
|
# and boost
|
||||||
set(Boost_USE_STATIC_LIBS True)
|
set(Boost_USE_STATIC_LIBS True)
|
||||||
# set(Boost_USE_STATIC_RUNTIME True)
|
# set(Boost_USE_STATIC_RUNTIME True)
|
||||||
@@ -29,16 +31,17 @@ set(Boost_USE_STATIC_LIBS True)
|
|||||||
# with usual unix subdirectories (bin, lib, include)
|
# with usual unix subdirectories (bin, lib, include)
|
||||||
# if so, we just need to set CMAKE_SYSTEM_PREFIX_PATH
|
# if so, we just need to set CMAKE_SYSTEM_PREFIX_PATH
|
||||||
# If it is not the case, individual paths need to be specified manually (see below)
|
# If it is not the case, individual paths need to be specified manually (see below)
|
||||||
set(COMMON_INSTALL_PREFIX "c:/usr")
|
set(COMMON_INSTALL_PREFIX "c:/usr" CACHE PATH "Prefix used to install all the required libraries")
|
||||||
list(APPEND CMAKE_SYSTEM_PREFIX_PATH "${COMMON_INSTALL_PREFIX}")
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH "${COMMON_INSTALL_PREFIX}")
|
||||||
|
|
||||||
# If two version of Qt are installed, separate prefixes are needed most likely
|
# If two version of Qt are installed, separate prefixes are needed most likely
|
||||||
set(QT4_INSTALL_PREFIX "${COMMON_INSTALL_PREFIX}/lib/qt4")
|
set(QT4_INSTALL_PREFIX "${COMMON_INSTALL_PREFIX}/lib/qt4" CACHE PATH "Prefix where Qt4 is installed")
|
||||||
set(QT5_INSTALL_PREFIX "${COMMON_INSTALL_PREFIX}/lib/qt5")
|
set(QT5_INSTALL_PREFIX "${COMMON_INSTALL_PREFIX}/lib/qt5" CACHE PATH "Prefix where Qt5 is installed")
|
||||||
|
|
||||||
# it is safe to set Qt dirs even if their files are directly in the prefix
|
# it is safe to set Qt dirs even if their files are directly in the prefix
|
||||||
# Qt4
|
# Qt4
|
||||||
if(NOT QT5)
|
if(NOT QT5)
|
||||||
|
# for qt 4 we need qmake, Qt5 provides cmake config files
|
||||||
LIST(APPEND CMAKE_PROGRAM_PATH "${QT4_INSTALL_PREFIX}/bin/")
|
LIST(APPEND CMAKE_PROGRAM_PATH "${QT4_INSTALL_PREFIX}/bin/")
|
||||||
endif(NOT QT5)
|
endif(NOT QT5)
|
||||||
|
|
||||||
|
|||||||
85
configure
vendored
@@ -4504,53 +4504,17 @@ fi
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
as_ac_File=`$as_echo "ac_cv_file_$QT_QMAKE/qmake" | $as_tr_sh`
|
if test -f "$QT_QMAKE/qmake"; then :
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $QT_QMAKE/qmake" >&5
|
|
||||||
$as_echo_n "checking for $QT_QMAKE/qmake... " >&6; }
|
|
||||||
if eval \${$as_ac_File+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
test "$cross_compiling" = yes &&
|
|
||||||
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
|
|
||||||
if test -r "$QT_QMAKE/qmake"; then
|
|
||||||
eval "$as_ac_File=yes"
|
|
||||||
else
|
|
||||||
eval "$as_ac_File=no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
eval ac_res=\$$as_ac_File
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
$as_echo "$ac_res" >&6; }
|
|
||||||
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
|
|
||||||
QT_QMAKE="$QT_QMAKE/qmake"
|
QT_QMAKE="$QT_QMAKE/qmake"
|
||||||
else
|
else
|
||||||
as_ac_File=`$as_echo "ac_cv_file_$QT_QMAKE/qmake-qt5" | $as_tr_sh`
|
if test -f "$QT_QMAKE/qmake-qt5"; then :
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $QT_QMAKE/qmake-qt5" >&5
|
|
||||||
$as_echo_n "checking for $QT_QMAKE/qmake-qt5... " >&6; }
|
|
||||||
if eval \${$as_ac_File+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
test "$cross_compiling" = yes &&
|
|
||||||
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
|
|
||||||
if test -r "$QT_QMAKE/qmake-qt5"; then
|
|
||||||
eval "$as_ac_File=yes"
|
|
||||||
else
|
|
||||||
eval "$as_ac_File=no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
eval ac_res=\$$as_ac_File
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
$as_echo "$ac_res" >&6; }
|
|
||||||
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
|
|
||||||
QT_QMAKE="$QT_QMAKE/qmake-qt5"
|
QT_QMAKE="$QT_QMAKE/qmake-qt5"
|
||||||
else
|
else
|
||||||
QT_QMAKE=""
|
QT_QMAKE=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.2.0" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.2.0" >&5
|
||||||
$as_echo_n "checking for Qt5 qmake >= 5.2.0... " >&6; }
|
$as_echo_n "checking for Qt5 qmake >= 5.2.0... " >&6; }
|
||||||
if test "x$QT_QMAKE" != "x"; then :
|
if test "x$QT_QMAKE" != "x"; then :
|
||||||
@@ -4621,53 +4585,17 @@ fi
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
as_ac_File=`$as_echo "ac_cv_file_$QT_QMAKE/qmake" | $as_tr_sh`
|
if test -f "$QT_QMAKE/qmake"; then :
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $QT_QMAKE/qmake" >&5
|
|
||||||
$as_echo_n "checking for $QT_QMAKE/qmake... " >&6; }
|
|
||||||
if eval \${$as_ac_File+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
test "$cross_compiling" = yes &&
|
|
||||||
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
|
|
||||||
if test -r "$QT_QMAKE/qmake"; then
|
|
||||||
eval "$as_ac_File=yes"
|
|
||||||
else
|
|
||||||
eval "$as_ac_File=no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
eval ac_res=\$$as_ac_File
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
$as_echo "$ac_res" >&6; }
|
|
||||||
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
|
|
||||||
QT_QMAKE="$QT_QMAKE/qmake"
|
QT_QMAKE="$QT_QMAKE/qmake"
|
||||||
else
|
else
|
||||||
as_ac_File=`$as_echo "ac_cv_file_$QT_QMAKE/qmake-qt4" | $as_tr_sh`
|
if test -f "$QT_QMAKE/qmake-qt4"; then :
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $QT_QMAKE/qmake-qt4" >&5
|
|
||||||
$as_echo_n "checking for $QT_QMAKE/qmake-qt4... " >&6; }
|
|
||||||
if eval \${$as_ac_File+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
test "$cross_compiling" = yes &&
|
|
||||||
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
|
|
||||||
if test -r "$QT_QMAKE/qmake-qt4"; then
|
|
||||||
eval "$as_ac_File=yes"
|
|
||||||
else
|
|
||||||
eval "$as_ac_File=no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
eval ac_res=\$$as_ac_File
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
$as_echo "$ac_res" >&6; }
|
|
||||||
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
|
|
||||||
QT_QMAKE="$QT_QMAKE/qmake-qt4"
|
QT_QMAKE="$QT_QMAKE/qmake-qt4"
|
||||||
else
|
else
|
||||||
QT_QMAKE=""
|
QT_QMAKE=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt4 qmake >= 4.8.0" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt4 qmake >= 4.8.0" >&5
|
||||||
$as_echo_n "checking for Qt4 qmake >= 4.8.0... " >&6; }
|
$as_echo_n "checking for Qt4 qmake >= 4.8.0... " >&6; }
|
||||||
if test "x$QT_QMAKE" != "x"; then :
|
if test "x$QT_QMAKE" != "x"; then :
|
||||||
@@ -5044,8 +4972,8 @@ fi
|
|||||||
if test "x$BOOST_CPPFLAGS" = "x"; then :
|
if test "x$BOOST_CPPFLAGS" = "x"; then :
|
||||||
as_fn_error $? "Could not find Boost" "$LINENO" 5
|
as_fn_error $? "Could not find Boost" "$LINENO" 5
|
||||||
else
|
else
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Boost CPPFLGAS: $BOOST_CPPFLAGS" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: Boost CPPFLAGS: $BOOST_CPPFLAGS" >&5
|
||||||
$as_echo "$as_me: Boost CPPFLGAS: $BOOST_CPPFLAGS" >&6;}
|
$as_echo "$as_me: Boost CPPFLAGS: $BOOST_CPPFLAGS" >&6;}
|
||||||
CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
|
CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
|
||||||
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
|
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
|
||||||
fi
|
fi
|
||||||
@@ -5094,6 +5022,7 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
|
|||||||
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||||
|
|
||||||
CXXFLAGS_SAVE=$CXXFLAGS
|
CXXFLAGS_SAVE=$CXXFLAGS
|
||||||
|
CXXFLAGS=
|
||||||
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ AX_BOOST_BASE([1.35])
|
|||||||
# how to test for a set vs unset variable.
|
# how to test for a set vs unset variable.
|
||||||
AS_IF([test "x$BOOST_CPPFLAGS" = "x"],
|
AS_IF([test "x$BOOST_CPPFLAGS" = "x"],
|
||||||
[AC_MSG_ERROR([Could not find Boost])],
|
[AC_MSG_ERROR([Could not find Boost])],
|
||||||
[AC_MSG_NOTICE([Boost CPPFLGAS: $BOOST_CPPFLAGS])
|
[AC_MSG_NOTICE([Boost CPPFLAGS: $BOOST_CPPFLAGS])
|
||||||
CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
|
CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
|
||||||
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"])
|
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"])
|
||||||
|
|
||||||
|
|||||||
8
dist/mac/Info.plist
vendored
@@ -37,7 +37,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>qBittorrent</string>
|
<string>@EXECUTABLE@</string>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
<string>qbittorrent_mac.icns</string>
|
<string>qbittorrent_mac.icns</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
@@ -45,11 +45,11 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.3.10</string>
|
<string>3.3.12</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>qBit</string>
|
<string>qBit</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>qbittorrent</string>
|
<string>@EXECUTABLE@</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>org.qbittorrent</string>
|
<string>org.qbittorrent</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
<key>NSAppleScriptEnabled</key>
|
<key>NSAppleScriptEnabled</key>
|
||||||
<string>YES</string>
|
<string>YES</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2006-2016 The qBittorrent project</string>
|
<string>Copyright © 2006-2017 The qBittorrent project</string>
|
||||||
<key>UTExportedTypeDeclarations</key>
|
<key>UTExportedTypeDeclarations</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||
1
dist/mac/bundle.cmake
vendored
@@ -1,2 +1,3 @@
|
|||||||
|
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
||||||
include(BundleUtilities)
|
include(BundleUtilities)
|
||||||
fixup_bundle("$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/qbittorrent.app" "" "")
|
fixup_bundle("$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/qbittorrent.app" "" "")
|
||||||
|
|||||||
BIN
dist/unix/menuicons/128x128/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
dist/unix/menuicons/16x16/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 893 B |
BIN
dist/unix/menuicons/192x192/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
dist/unix/menuicons/22x22/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
dist/unix/menuicons/24x24/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
dist/unix/menuicons/32x32/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
dist/unix/menuicons/36x36/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
dist/unix/menuicons/48x48/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
dist/unix/menuicons/64x64/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
dist/unix/menuicons/72x72/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
dist/unix/menuicons/96x96/status/qbittorrent-tray.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
13
dist/unix/qBittorrent.appdata.xml
vendored
@@ -36,26 +36,31 @@
|
|||||||
</description>
|
</description>
|
||||||
<screenshots>
|
<screenshots>
|
||||||
<screenshot type="default">
|
<screenshot type="default">
|
||||||
<image width="1200" height="675">
|
<image height="675" width="1200">
|
||||||
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_01.png
|
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_01.png
|
||||||
</image>
|
</image>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image width="1200" height="675">
|
<image height="675" width="1200">
|
||||||
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_02.png
|
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_02.png
|
||||||
</image>
|
</image>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image width="1200" height="675">
|
<image height="675" width="1200">
|
||||||
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_03.png
|
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_03.png
|
||||||
</image>
|
</image>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image width="1200" height="675">
|
<image height="675" width="1200">
|
||||||
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_04.png
|
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_04.png
|
||||||
</image>
|
</image>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
<url type="homepage">http://www.qbittorrent.org/</url>
|
<url type="homepage">http://www.qbittorrent.org/</url>
|
||||||
<update_contact>sledgehammer999@qbittorrent.org</update_contact>
|
<update_contact>sledgehammer999@qbittorrent.org</update_contact>
|
||||||
|
<developer_name>The qBittorrent Project</developer_name>
|
||||||
|
<url type="bugtracker">http://bugs.qbittorrent.org/</url>
|
||||||
|
<url type="donation">https://www.qbittorrent.org/donate</url>
|
||||||
|
<url type="help">http://forum.qbittorrent.org/</url>
|
||||||
|
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_AFRIKAANS} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_AFRIKAANS} "Uninstalling previous version."
|
LangString inst_unist ${LANG_AFRIKAANS} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_AFRIKAANS} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_AFRIKAANS} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_AFRIKAANS} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ALBANIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_ALBANIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ALBANIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ALBANIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ALBANIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ALBANIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ARABIC} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_ARABIC} "جاري ازالة النسخة السابقة من البرنامج"
|
LangString inst_unist ${LANG_ARABIC} "جاري ازالة النسخة السابقة من البرنامج"
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ARABIC} "تشغيل البرنامج"
|
LangString launch_qbt ${LANG_ARABIC} "تشغيل البرنامج"
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ARABIC} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BASQUE} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_BASQUE} "Aurreko bertsioa kentzen."
|
LangString inst_unist ${LANG_BASQUE} "Aurreko bertsioa kentzen."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_BASQUE} "Abiarazi qBittorrent."
|
LangString launch_qbt ${LANG_BASQUE} "Abiarazi qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_BASQUE} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BELARUSIAN} "A previous installation w
|
|||||||
LangString inst_unist ${LANG_BELARUSIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_BELARUSIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_BELARUSIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_BELARUSIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_BELARUSIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BOSNIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_BOSNIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_BOSNIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_BOSNIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_BOSNIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_BOSNIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BRETON} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_BRETON} "Uninstalling previous version."
|
LangString inst_unist ${LANG_BRETON} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_BRETON} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_BRETON} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_BRETON} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BULGARIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_BULGARIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_BULGARIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_BULGARIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_BULGARIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_BULGARIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CATALAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_CATALAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_CATALAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_CATALAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_CATALAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_CATALAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CROATIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_CROATIAN} "Deinstaliraj prethodnu verziju."
|
LangString inst_unist ${LANG_CROATIAN} "Deinstaliraj prethodnu verziju."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_CROATIAN} "Pokreni qBittorrent."
|
LangString launch_qbt ${LANG_CROATIAN} "Pokreni qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_CROATIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CZECH} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_CZECH} "Odebírání předchozí verze."
|
LangString inst_unist ${LANG_CZECH} "Odebírání předchozí verze."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_CZECH} "Spustit qBittorrent."
|
LangString launch_qbt ${LANG_CZECH} "Spustit qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_CZECH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_DANISH} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_DANISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_DANISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_DANISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_DANISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_DANISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_DUTCH} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_DUTCH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_DUTCH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_DUTCH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_DUTCH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_DUTCH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ENGLISH} "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."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ESPERANTO} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_ESPERANTO} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ESPERANTO} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ESPERANTO} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ESPERANTO} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ESPERANTO} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ESTONIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_ESTONIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ESTONIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ESTONIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ESTONIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ESTONIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FARSI} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_FARSI} "Uninstalling previous version."
|
LangString inst_unist ${LANG_FARSI} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_FARSI} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_FARSI} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_FARSI} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FINNISH} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_FINNISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_FINNISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_FINNISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_FINNISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_FINNISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FRENCH} "Une installation précédente
|
|||||||
LangString inst_unist ${LANG_FRENCH} "Désinstallation de la version précédente."
|
LangString inst_unist ${LANG_FRENCH} "Désinstallation de la version précédente."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_FRENCH} "Lancer qBittorrent."
|
LangString launch_qbt ${LANG_FRENCH} "Lancer qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_FRENCH} "Cet installateur ne fonctionne que dans les versions 64 bits de Windows."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GALICIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_GALICIAN} "Desinstalando a versión anterior."
|
LangString inst_unist ${LANG_GALICIAN} "Desinstalando a versión anterior."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_GALICIAN} "Iniciar qBittorrent."
|
LangString launch_qbt ${LANG_GALICIAN} "Iniciar qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_GALICIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GERMAN} "Eine ältere Installation wur
|
|||||||
LangString inst_unist ${LANG_GERMAN} "Vorherige Version wird deinstalliert."
|
LangString inst_unist ${LANG_GERMAN} "Vorherige Version wird deinstalliert."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_GERMAN} "Starte qBittorrent."
|
LangString launch_qbt ${LANG_GERMAN} "Starte qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_GERMAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GREEK} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_GREEK} "Uninstalling previous version."
|
LangString inst_unist ${LANG_GREEK} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_GREEK} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_GREEK} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_GREEK} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_HEBREW} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_HEBREW} "Uninstalling previous version."
|
LangString inst_unist ${LANG_HEBREW} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_HEBREW} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_HEBREW} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_HEBREW} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_HUNGARIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_HUNGARIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_HUNGARIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_HUNGARIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_HUNGARIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_HUNGARIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ICELANDIC} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_ICELANDIC} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ICELANDIC} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ICELANDIC} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ICELANDIC} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ICELANDIC} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_INDONESIAN} "A previous installation w
|
|||||||
LangString inst_unist ${LANG_INDONESIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_INDONESIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_INDONESIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_INDONESIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_INDONESIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_IRISH} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_IRISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_IRISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_IRISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_IRISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_IRISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ITALIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_ITALIAN} "Disinstallazione versione precedente."
|
LangString inst_unist ${LANG_ITALIAN} "Disinstallazione versione precedente."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ITALIAN} "Esegui qBittorrent."
|
LangString launch_qbt ${LANG_ITALIAN} "Esegui qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_ITALIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_JAPANESE} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_JAPANESE} "以前のバージョンをアンインストールしています。"
|
LangString inst_unist ${LANG_JAPANESE} "以前のバージョンをアンインストールしています。"
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_JAPANESE} "qBittorrent を起動する"
|
LangString launch_qbt ${LANG_JAPANESE} "qBittorrent を起動する"
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_JAPANESE} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_KOREAN} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_KOREAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_KOREAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_KOREAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_KOREAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_KOREAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_KURDISH} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_KURDISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_KURDISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_KURDISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_KURDISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_KURDISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LATVIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_LATVIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_LATVIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_LATVIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_LATVIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_LATVIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LITHUANIAN} "A previous installation w
|
|||||||
LangString inst_unist ${LANG_LITHUANIAN} "Šalinu ankstesnę versiją."
|
LangString inst_unist ${LANG_LITHUANIAN} "Šalinu ankstesnę versiją."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_LITHUANIAN} "Paleisti qBittorrent."
|
LangString launch_qbt ${LANG_LITHUANIAN} "Paleisti qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_LITHUANIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LUXEMBOURGISH} "A previous installatio
|
|||||||
LangString inst_unist ${LANG_LUXEMBOURGISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_LUXEMBOURGISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_LUXEMBOURGISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_LUXEMBOURGISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_LUXEMBOURGISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MACEDONIAN} "A previous installation w
|
|||||||
LangString inst_unist ${LANG_MACEDONIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_MACEDONIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_MACEDONIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_MACEDONIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_MACEDONIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MALAY} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_MALAY} "Uninstalling previous version."
|
LangString inst_unist ${LANG_MALAY} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_MALAY} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_MALAY} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_MALAY} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MONGOLIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_MONGOLIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_MONGOLIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_MONGOLIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_MONGOLIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_MONGOLIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_NORWEGIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_NORWEGIAN} "Avinstallerer forrige versjon."
|
LangString inst_unist ${LANG_NORWEGIAN} "Avinstallerer forrige versjon."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_NORWEGIAN} "Sett i gang qBittorrent."
|
LangString launch_qbt ${LANG_NORWEGIAN} "Sett i gang qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_NORWEGIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_NORWEGIANNYNORSK} "A previous installa
|
|||||||
LangString inst_unist ${LANG_NORWEGIANNYNORSK} "Uninstalling previous version."
|
LangString inst_unist ${LANG_NORWEGIANNYNORSK} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_NORWEGIANNYNORSK} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_NORWEGIANNYNORSK} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_NORWEGIANNYNORSK} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_POLISH} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_POLISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_POLISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_POLISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_POLISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_POLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_PORTUGUESE} "Uma antiga instalação f
|
|||||||
LangString inst_unist ${LANG_PORTUGUESE} "A desinstalar versão anterior."
|
LangString inst_unist ${LANG_PORTUGUESE} "A desinstalar versão anterior."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_PORTUGUESE} "Iniciar qBittorrent."
|
LangString launch_qbt ${LANG_PORTUGUESE} "Iniciar qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_PORTUGUESE} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_PORTUGUESEBR} "Uma instalação anteri
|
|||||||
LangString inst_unist ${LANG_PORTUGUESEBR} "Desinstalando versão anterior."
|
LangString inst_unist ${LANG_PORTUGUESEBR} "Desinstalando versão anterior."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_PORTUGUESEBR} "Executar qBittorrent."
|
LangString launch_qbt ${LANG_PORTUGUESEBR} "Executar qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_PORTUGUESEBR} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ROMANIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_ROMANIAN} "Uninstalling previous version."
|
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} "Launch 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_ROMANIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_RUSSIAN} "Обнаружена пре
|
|||||||
LangString inst_unist ${LANG_RUSSIAN} "Деинсталлируем старую версию."
|
LangString inst_unist ${LANG_RUSSIAN} "Деинсталлируем старую версию."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_RUSSIAN} "Запустить qBittorrent."
|
LangString launch_qbt ${LANG_RUSSIAN} "Запустить qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_RUSSIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SERBIAN} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_SERBIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SERBIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SERBIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SERBIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SERBIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SERBIANLATIN} "A previous installation
|
|||||||
LangString inst_unist ${LANG_SERBIANLATIN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SERBIANLATIN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SERBIANLATIN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SERBIANLATIN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SERBIANLATIN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SIMPCHINESE} "A previous installation
|
|||||||
LangString inst_unist ${LANG_SIMPCHINESE} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SIMPCHINESE} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SIMPCHINESE} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SIMPCHINESE} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SIMPCHINESE} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SLOVAK} "A previous installation was d
|
|||||||
LangString inst_unist ${LANG_SLOVAK} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SLOVAK} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SLOVAK} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SLOVAK} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SLOVAK} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SLOVENIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_SLOVENIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SLOVENIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SLOVENIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SLOVENIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SLOVENIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SPANISH} "Se detectó una instalación
|
|||||||
LangString inst_unist ${LANG_SPANISH} "Desinstalando la versión anterior."
|
LangString inst_unist ${LANG_SPANISH} "Desinstalando la versión anterior."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SPANISH} "Iniciar qBittorrent."
|
LangString launch_qbt ${LANG_SPANISH} "Iniciar qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SPANISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SPANISHINTERNATIONAL} "Se detectó una
|
|||||||
LangString inst_unist ${LANG_SPANISHINTERNATIONAL} "Desinstalando la versión anterior."
|
LangString inst_unist ${LANG_SPANISHINTERNATIONAL} "Desinstalando la versión anterior."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SPANISHINTERNATIONAL} "Iniciar qBittorrent."
|
LangString launch_qbt ${LANG_SPANISHINTERNATIONAL} "Iniciar qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SPANISHINTERNATIONAL} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SWEDISH} "A previous installation was
|
|||||||
LangString inst_unist ${LANG_SWEDISH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_SWEDISH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_SWEDISH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_SWEDISH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_SWEDISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
2
dist/windows/installer-translations/thai.nsi
vendored
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_THAI} "A previous installation was det
|
|||||||
LangString inst_unist ${LANG_THAI} "Uninstalling previous version."
|
LangString inst_unist ${LANG_THAI} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_THAI} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_THAI} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_THAI} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_TRADCHINESE} "A previous installation
|
|||||||
LangString inst_unist ${LANG_TRADCHINESE} "正在移除先前版本"
|
LangString inst_unist ${LANG_TRADCHINESE} "正在移除先前版本"
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_TRADCHINESE} "啟動 qBittorrent"
|
LangString launch_qbt ${LANG_TRADCHINESE} "啟動 qBittorrent"
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_TRADCHINESE} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_TURKISH} "Önceki bir kurulum algılan
|
|||||||
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 çalıştır."
|
LangString launch_qbt ${LANG_TURKISH} "qBittorrent'i çalıştır."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_TURKISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_UKRAINIAN} "A previous installation wa
|
|||||||
LangString inst_unist ${LANG_UKRAINIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_UKRAINIAN} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_UKRAINIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_UKRAINIAN} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_UKRAINIAN} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_UZBEK} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_UZBEK} "Uninstalling previous version."
|
LangString inst_unist ${LANG_UZBEK} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_UZBEK} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_UZBEK} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_UZBEK} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_WELSH} "A previous installation was de
|
|||||||
LangString inst_unist ${LANG_WELSH} "Uninstalling previous version."
|
LangString inst_unist ${LANG_WELSH} "Uninstalling previous version."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_WELSH} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_WELSH} "Launch qBittorrent."
|
||||||
|
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
|
||||||
|
LangString inst_requires_64bit ${LANG_WELSH} "This installer works only in 64-bit Windows versions."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
|
|||||||
25
dist/windows/installer.nsi
vendored
@@ -1,14 +1,17 @@
|
|||||||
Section "-hidden"
|
Var uninstallerPath
|
||||||
|
|
||||||
|
Section "-hidden"
|
||||||
|
|
||||||
;Search if qBittorrent is already installed.
|
;Search if qBittorrent is already installed.
|
||||||
FindFirst $0 $1 "$INSTDIR\uninst.exe"
|
FindFirst $0 $1 "$uninstallerPath\uninst.exe"
|
||||||
FindClose $0
|
FindClose $0
|
||||||
StrCmp $1 "" done
|
StrCmp $1 "" done
|
||||||
|
|
||||||
;Run the uninstaller of the previous install.
|
;Run the uninstaller of the previous install.
|
||||||
DetailPrint $(inst_unist)
|
DetailPrint $(inst_unist)
|
||||||
ExecWait '"$INSTDIR\uninst.exe" /S _?=$INSTDIR'
|
ExecWait '"$uninstallerPath\uninst.exe" /S _?=$uninstallerPath'
|
||||||
Delete "$INSTDIR\uninst.exe"
|
Delete "$uninstallerPath\uninst.exe"
|
||||||
|
RMDir "$uninstallerPath"
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
||||||
@@ -196,11 +199,21 @@ Function .onInit
|
|||||||
!insertmacro Init "installer"
|
!insertmacro Init "installer"
|
||||||
!insertmacro MUI_LANGDLL_DISPLAY
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
|
|
||||||
|
!ifdef APP64BIT
|
||||||
|
${IfNot} ${RunningX64}
|
||||||
|
MessageBox MB_OK|MB_ICONEXCLAMATION $(inst_requires_64bit)
|
||||||
|
Abort
|
||||||
|
${EndIf}
|
||||||
|
!endif
|
||||||
|
|
||||||
;Search if qBittorrent is already installed.
|
;Search if qBittorrent is already installed.
|
||||||
FindFirst $0 $1 "$INSTDIR\uninst.exe"
|
FindFirst $0 $1 "$INSTDIR\uninst.exe"
|
||||||
FindClose $0
|
FindClose $0
|
||||||
StrCmp $1 "" done
|
StrCmp $1 "" done
|
||||||
|
|
||||||
|
;Copy old value to var so we can call the correct uninstaller
|
||||||
|
StrCpy $uninstallerPath $INSTDIR
|
||||||
|
|
||||||
;Inform the user
|
;Inform the user
|
||||||
MessageBox MB_OKCANCEL|MB_ICONINFORMATION $(inst_uninstall_question) /SD IDOK IDOK done
|
MessageBox MB_OKCANCEL|MB_ICONINFORMATION $(inst_uninstall_question) /SD IDOK IDOK done
|
||||||
Quit
|
Quit
|
||||||
@@ -228,3 +241,7 @@ Function PageFinishRun
|
|||||||
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\qbittorrent.exe" "" "" ""
|
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\qbittorrent.exe" "" "" ""
|
||||||
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
|
Function .onInstSuccess
|
||||||
|
SetErrorLevel 0
|
||||||
|
FunctionEnd
|
||||||
|
|||||||
32
dist/windows/options.nsi
vendored
@@ -1,4 +1,5 @@
|
|||||||
Unicode true
|
Unicode true
|
||||||
|
ManifestDPIAware true
|
||||||
;Compress the header too
|
;Compress the header too
|
||||||
!packhdr "$%TEMP%\exehead.tmp" 'upx.exe -9 --best --ultra-brute "$%TEMP%\exehead.tmp"'
|
!packhdr "$%TEMP%\exehead.tmp" 'upx.exe -9 --best --ultra-brute "$%TEMP%\exehead.tmp"'
|
||||||
|
|
||||||
@@ -7,9 +8,15 @@ SetCompressor /SOLID LZMA
|
|||||||
SetCompressorDictSize 64
|
SetCompressorDictSize 64
|
||||||
XPStyle on
|
XPStyle on
|
||||||
|
|
||||||
|
;Uncomment when packaging 64bit qbittorrent
|
||||||
|
;!define APP64BIT
|
||||||
|
|
||||||
!include "MUI.nsh"
|
!include "MUI.nsh"
|
||||||
!include "UAC.nsh"
|
!include "UAC.nsh"
|
||||||
!include "FileFunc.nsh"
|
!include "FileFunc.nsh"
|
||||||
|
!ifdef APP64BIT
|
||||||
|
!include "x64.nsh"
|
||||||
|
!endif
|
||||||
|
|
||||||
;For the file association
|
;For the file association
|
||||||
!define SHCNE_ASSOCCHANGED 0x8000000
|
!define SHCNE_ASSOCCHANGED 0x8000000
|
||||||
@@ -19,28 +26,45 @@ XPStyle on
|
|||||||
!define CSIDL_APPDATA '0x1A' ;Application Data path
|
!define CSIDL_APPDATA '0x1A' ;Application Data path
|
||||||
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
|
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
|
||||||
|
|
||||||
!define PROG_VERSION "3.3.10"
|
; Program specific
|
||||||
|
!define PROG_VERSION "3.3.12"
|
||||||
|
|
||||||
!define MUI_FINISHPAGE_RUN
|
!define MUI_FINISHPAGE_RUN
|
||||||
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
|
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
|
||||||
!define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt)
|
!define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt)
|
||||||
|
|
||||||
|
!ifndef APP64BIT
|
||||||
; The name of the installer
|
; The name of the installer
|
||||||
Name "qBittorrent ${PROG_VERSION}"
|
Name "qBittorrent ${PROG_VERSION}"
|
||||||
|
|
||||||
; The file to write
|
; The file to write
|
||||||
OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
|
OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
|
||||||
|
!else
|
||||||
|
; The name of the installer
|
||||||
|
Name "qBittorrent ${PROG_VERSION} x64"
|
||||||
|
|
||||||
|
; The file to write
|
||||||
|
OutFile "qbittorrent_${PROG_VERSION}_x64_setup.exe"
|
||||||
|
!endif
|
||||||
|
|
||||||
;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-2016 The qBittorrent project"
|
VIAddVersionKey "LegalCopyright" "Copyright ©2006-2017 The qBittorrent project"
|
||||||
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
|
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
|
||||||
VIAddVersionKey "FileVersion" "${PROG_VERSION}"
|
VIAddVersionKey "FileVersion" "${PROG_VERSION}"
|
||||||
|
|
||||||
VIProductVersion "${PROG_VERSION}.0"
|
VIProductVersion "${PROG_VERSION}.0"
|
||||||
|
|
||||||
; The default installation directory
|
; The default installation directory. It changes depending if we install in the 64bit dir or not.
|
||||||
InstallDir $PROGRAMFILES\qBittorrent
|
; A caveat of this is if a user has installed a 32bit version and then runs the 64bit installer
|
||||||
|
; (which in turn launches the 32bit uninstaller first) the value will still point to the 32bit location.
|
||||||
|
; The user has to manually uninstall the old version and THEN run the 64bit installer
|
||||||
|
!ifndef APP64BIT
|
||||||
|
InstallDir $PROGRAMFILES32\qBittorrent
|
||||||
|
!else
|
||||||
|
InstallDir $PROGRAMFILES64\qBittorrent
|
||||||
|
!endif
|
||||||
|
|
||||||
; Registry key to check for directory (so if you install again, it will
|
; Registry key to check for directory (so if you install again, it will
|
||||||
; overwrite the old one automatically)
|
; overwrite the old one automatically)
|
||||||
|
|||||||
4
dist/windows/uninstaller.nsi
vendored
@@ -166,3 +166,7 @@ Function un.check_instance
|
|||||||
notfound:
|
notfound:
|
||||||
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
|
Function un.onUninstSuccess
|
||||||
|
SetErrorLevel 0
|
||||||
|
FunctionEnd
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ AC_DEFUN([FIND_QT4],
|
|||||||
[QT_QMAKE=`AS_DIRNAME(["$QT_QMAKE"])`])
|
[QT_QMAKE=`AS_DIRNAME(["$QT_QMAKE"])`])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_CHECK_FILE([$QT_QMAKE/qmake],
|
AS_IF([test -f "$QT_QMAKE/qmake"],
|
||||||
[QT_QMAKE="$QT_QMAKE/qmake"],
|
[QT_QMAKE="$QT_QMAKE/qmake"],
|
||||||
[AC_CHECK_FILE([$QT_QMAKE/qmake-qt4],
|
[AS_IF([test -f "$QT_QMAKE/qmake-qt4"],
|
||||||
[QT_QMAKE="$QT_QMAKE/qmake-qt4"],
|
[QT_QMAKE="$QT_QMAKE/qmake-qt4"],
|
||||||
[QT_QMAKE=""])
|
[QT_QMAKE=""])
|
||||||
])
|
])
|
||||||
@@ -36,9 +36,9 @@ AC_DEFUN([FIND_QT5],
|
|||||||
[host_bins])
|
[host_bins])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_CHECK_FILE([$QT_QMAKE/qmake],
|
AS_IF([test -f "$QT_QMAKE/qmake"],
|
||||||
[QT_QMAKE="$QT_QMAKE/qmake"],
|
[QT_QMAKE="$QT_QMAKE/qmake"],
|
||||||
[AC_CHECK_FILE([$QT_QMAKE/qmake-qt5],
|
[AS_IF([test -f "$QT_QMAKE/qmake-qt5"],
|
||||||
[QT_QMAKE="$QT_QMAKE/qmake-qt5"],
|
[QT_QMAKE="$QT_QMAKE/qmake-qt5"],
|
||||||
[QT_QMAKE=""])
|
[QT_QMAKE=""])
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ if (WIN32)
|
|||||||
else (MINGW)
|
else (MINGW)
|
||||||
list (APPEND QBT_APP_SOURCES ../qbittorrent.rc)
|
list (APPEND QBT_APP_SOURCES ../qbittorrent.rc)
|
||||||
endif (MINGW)
|
endif (MINGW)
|
||||||
|
list(APPEND QBT_APP_SOURCES ../qbittorent.exe.manifest)
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
@@ -161,10 +162,15 @@ endif (GUI AND WIN32)
|
|||||||
target_link_libraries(${QBT_TARGET_NAME} ${QBT_TARGET_LIBRARIES} QtSingleApplication::QtSingleApplication)
|
target_link_libraries(${QBT_TARGET_NAME} ${QBT_TARGET_LIBRARIES} QtSingleApplication::QtSingleApplication)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(qbt_BUNDLE_NAME "${CMAKE_PROJECT_NAME}")
|
set(qbt_BUNDLE_NAME "${QBT_TARGET_NAME}")
|
||||||
|
|
||||||
|
# substitute @EXECUTABLE@ in dist/mac/Info.plist
|
||||||
|
set(EXECUTABLE ${qbt_BUNDLE_NAME})
|
||||||
|
configure_file(${qBittorrent_SOURCE_DIR}/dist/mac/Info.plist ${qBittorrent_BINARY_DIR}/dist/mac/Info.plist @ONLY)
|
||||||
|
|
||||||
set_target_properties(${QBT_TARGET_NAME} PROPERTIES
|
set_target_properties(${QBT_TARGET_NAME} PROPERTIES
|
||||||
MACOSX_BUNDLE_BUNDLE_NAME "${qbt_BUNDLE_NAME}"
|
MACOSX_BUNDLE_BUNDLE_NAME "${qbt_BUNDLE_NAME}"
|
||||||
MACOSX_BUNDLE_INFO_PLIST ${qBittorrent_SOURCE_DIR}/dist/mac/Info.plist
|
MACOSX_BUNDLE_INFO_PLIST ${qBittorrent_BINARY_DIR}/dist/mac/Info.plist
|
||||||
)
|
)
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
|
|
||||||
@@ -174,6 +180,6 @@ install(TARGETS ${QBT_TARGET_NAME}
|
|||||||
BUNDLE DESTINATION .
|
BUNDLE DESTINATION .
|
||||||
COMPONENT runtime)
|
COMPONENT runtime)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE AND GUI)
|
||||||
install(SCRIPT ${OSX_RES_SRC_DIR}/bundle.cmake)
|
install(SCRIPT ${OSX_RES_SRC_DIR}/bundle.cmake)
|
||||||
endif (APPLE)
|
endif (APPLE AND GUI)
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ Application::Application(const QString &id, int &argc, char **argv)
|
|||||||
if (isFileLoggerEnabled())
|
if (isFileLoggerEnabled())
|
||||||
m_fileLogger = new FileLogger(fileLoggerPath(), isFileLoggerBackup(), fileLoggerMaxSize(), isFileLoggerDeleteOld(), fileLoggerAge(), static_cast<FileLogger::FileLogAgeType>(fileLoggerAgeType()));
|
m_fileLogger = new FileLogger(fileLoggerPath(), isFileLoggerBackup(), fileLoggerMaxSize(), isFileLoggerDeleteOld(), fileLoggerAge(), static_cast<FileLogger::FileLogAgeType>(fileLoggerAgeType()));
|
||||||
|
|
||||||
Logger::instance()->addMessage(tr("qBittorrent %1 started", "qBittorrent v3.2.0alpha started").arg(VERSION));
|
Logger::instance()->addMessage(tr("qBittorrent %1 started", "qBittorrent v3.2.0alpha started").arg(QBT_VERSION));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
@@ -511,36 +511,26 @@ void Application::initializeTranslation()
|
|||||||
{
|
{
|
||||||
Preferences* const pref = Preferences::instance();
|
Preferences* const pref = Preferences::instance();
|
||||||
// Load translation
|
// Load translation
|
||||||
QString locale = pref->getLocale();
|
QString localeStr = pref->getLocale();
|
||||||
|
|
||||||
if (locale.isEmpty()) {
|
if (
|
||||||
locale = QLocale::system().name();
|
|
||||||
pref->setLocale(locale);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_qtTranslator.load(
|
|
||||||
#ifdef QBT_USES_QT5
|
#ifdef QBT_USES_QT5
|
||||||
QString::fromUtf8("qtbase_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)) ||
|
m_qtTranslator.load(QString::fromUtf8("qtbase_") + localeStr, QLibraryInfo::location(QLibraryInfo::TranslationsPath)) ||
|
||||||
m_qtTranslator.load(
|
|
||||||
#endif
|
#endif
|
||||||
QString::fromUtf8("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
|
m_qtTranslator.load(QString::fromUtf8("qt_") + localeStr, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
|
||||||
qDebug("Qt %s locale recognized, using translation.", qPrintable(locale));
|
qDebug("Qt %s locale recognized, using translation.", qPrintable(localeStr));
|
||||||
}
|
else
|
||||||
else {
|
qDebug("Qt %s locale unrecognized, using default (en).", qPrintable(localeStr));
|
||||||
qDebug("Qt %s locale unrecognized, using default (en).", qPrintable(locale));
|
|
||||||
}
|
|
||||||
installTranslator(&m_qtTranslator);
|
installTranslator(&m_qtTranslator);
|
||||||
|
|
||||||
if (m_translator.load(QString::fromUtf8(":/lang/qbittorrent_") + locale)) {
|
if (m_translator.load(QString::fromUtf8(":/lang/qbittorrent_") + localeStr))
|
||||||
qDebug("%s locale recognized, using translation.", qPrintable(locale));
|
qDebug("%s locale recognized, using translation.", qPrintable(localeStr));
|
||||||
}
|
else
|
||||||
else {
|
qDebug("%s locale unrecognized, using default (en).", qPrintable(localeStr));
|
||||||
qDebug("%s locale unrecognized, using default (en).", qPrintable(locale));
|
|
||||||
}
|
|
||||||
installTranslator(&m_translator);
|
installTranslator(&m_translator);
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
if (locale.startsWith("ar") || locale.startsWith("he")) {
|
if (localeStr.startsWith("ar") || localeStr.startsWith("he")) {
|
||||||
qDebug("Right to Left mode");
|
qDebug("Right to Left mode");
|
||||||
setLayoutDirection(Qt::RightToLeft);
|
setLayoutDirection(Qt::RightToLeft);
|
||||||
}
|
}
|
||||||
@@ -629,6 +619,7 @@ void Application::cleanup()
|
|||||||
delete m_fileLogger;
|
delete m_fileLogger;
|
||||||
Logger::freeInstance();
|
Logger::freeInstance();
|
||||||
IconProvider::freeInstance();
|
IconProvider::freeInstance();
|
||||||
|
Utils::Fs::removeDirRecursive(Utils::Fs::tempPath());
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
|||||||
@@ -141,6 +141,10 @@ int main(int argc, char *argv[])
|
|||||||
macMigratePlists();
|
macMigratePlists();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DISABLE_GUI
|
||||||
|
migrateRSS();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Create Application
|
// Create Application
|
||||||
QString appId = QLatin1String("qBittorrent-") + Utils::Misc::getUserIDString();
|
QString appId = QLatin1String("qBittorrent-") + Utils::Misc::getUserIDString();
|
||||||
QScopedPointer<Application> app(new Application(appId, argc, argv));
|
QScopedPointer<Application> app(new Application(appId, argc, argv));
|
||||||
@@ -189,7 +193,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set environment variable
|
// Set environment variable
|
||||||
if (!qputenv("QBITTORRENT", QByteArray(VERSION)))
|
if (!qputenv("QBITTORRENT", QBT_VERSION))
|
||||||
std::cerr << "Couldn't set environment variable...\n";
|
std::cerr << "Couldn't set environment variable...\n";
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
@@ -255,7 +259,6 @@ int main(int argc, char *argv[])
|
|||||||
&& isatty(fileno(stdout)))) return EXIT_FAILURE;
|
&& isatty(fileno(stdout)))) return EXIT_FAILURE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
srand(time(0));
|
|
||||||
#ifdef DISABLE_GUI
|
#ifdef DISABLE_GUI
|
||||||
if (params.shouldDaemonize) {
|
if (params.shouldDaemonize) {
|
||||||
app.reset(); // Destroy current application
|
app.reset(); // Destroy current application
|
||||||
@@ -360,7 +363,7 @@ void sigAbnormalHandler(int signum)
|
|||||||
const char str1[] = "\n\n*************************************************************\nCatching signal: ";
|
const char str1[] = "\n\n*************************************************************\nCatching signal: ";
|
||||||
const char *sigName = sysSigName[signum];
|
const char *sigName = sysSigName[signum];
|
||||||
const char str2[] = "\nPlease file a bug report at http://bug.qbittorrent.org and provide the following information:\n\n"
|
const char str2[] = "\nPlease file a bug report at http://bug.qbittorrent.org and provide the following information:\n\n"
|
||||||
"qBittorrent version: " VERSION "\n";
|
"qBittorrent version: " QBT_VERSION "\n";
|
||||||
write(STDERR_FILENO, str1, strlen(str1));
|
write(STDERR_FILENO, str1, strlen(str1));
|
||||||
write(STDERR_FILENO, sigName, strlen(sigName));
|
write(STDERR_FILENO, sigName, strlen(sigName));
|
||||||
write(STDERR_FILENO, str2, strlen(str2));
|
write(STDERR_FILENO, str2, strlen(str2));
|
||||||
@@ -381,7 +384,7 @@ void showSplashScreen()
|
|||||||
{
|
{
|
||||||
QPixmap splash_img(":/icons/skin/splash.png");
|
QPixmap splash_img(":/icons/skin/splash.png");
|
||||||
QPainter painter(&splash_img);
|
QPainter painter(&splash_img);
|
||||||
QString version = VERSION;
|
QString version = QBT_VERSION;
|
||||||
painter.setPen(QPen(Qt::white));
|
painter.setPen(QPen(Qt::white));
|
||||||
painter.setFont(QFont("Arial", 22, QFont::Black));
|
painter.setFont(QFont("Arial", 22, QFont::Black));
|
||||||
painter.drawText(224 - painter.fontMetrics().width(version), 270, version);
|
painter.drawText(224 - painter.fontMetrics().width(version), 270, version);
|
||||||
@@ -394,7 +397,7 @@ void showSplashScreen()
|
|||||||
|
|
||||||
void displayVersion()
|
void displayVersion()
|
||||||
{
|
{
|
||||||
std::cout << qPrintable(qApp->applicationName()) << " " << VERSION << std::endl;
|
std::cout << qPrintable(qApp->applicationName()) << " " << QBT_VERSION << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString makeUsage(const QString &prg_name)
|
QString makeUsage(const QString &prg_name)
|
||||||
|
|||||||
@@ -33,30 +33,30 @@ static inline void print_stacktrace(FILE *out = stderr, unsigned int max_frames
|
|||||||
size_t funcnamesize = 256;
|
size_t funcnamesize = 256;
|
||||||
char *funcname = (char *)malloc(funcnamesize);
|
char *funcname = (char *)malloc(funcnamesize);
|
||||||
|
|
||||||
|
int functionNamesFound = 0;
|
||||||
// iterate over the returned symbol lines. skip the first, it is the
|
// iterate over the returned symbol lines. skip the first, it is the
|
||||||
// address of this function.
|
// address of this function.
|
||||||
for (int i = 2; i < addrlen; i++)
|
for (int i = 2; i < addrlen; i++) {
|
||||||
{
|
|
||||||
char *begin_name = 0, *begin_offset = 0, *end_offset = 0;
|
char *begin_name = 0, *begin_offset = 0, *end_offset = 0;
|
||||||
|
|
||||||
// find parentheses and +address offset surrounding the mangled name:
|
// find parentheses and +address offset surrounding the mangled name:
|
||||||
// ./module(function+0x15c) [0x8048a6d]
|
// ./module(function+0x15c) [0x8048a6d]
|
||||||
// fprintf(out, "%s TT\n", symbollist[i]);
|
// fprintf(out, "%s TT\n", symbollist[i]);
|
||||||
for (char *p = symbollist[i]; *p; ++p)
|
for (char *p = symbollist[i]; *p; ++p) {
|
||||||
{
|
if (*p == '(') {
|
||||||
if (*p == '(')
|
|
||||||
begin_name = p;
|
begin_name = p;
|
||||||
else if (*p == '+')
|
}
|
||||||
|
else if (*p == '+') {
|
||||||
begin_offset = p;
|
begin_offset = p;
|
||||||
else if (*p == ')' && begin_offset) {
|
}
|
||||||
|
else if ((*p == ')') && begin_offset) {
|
||||||
end_offset = p;
|
end_offset = p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (begin_name && begin_offset && end_offset
|
if (begin_name && begin_offset && end_offset
|
||||||
&& begin_name < begin_offset)
|
&& (begin_name < begin_offset)) {
|
||||||
{
|
|
||||||
*begin_name++ = '\0';
|
*begin_name++ = '\0';
|
||||||
*begin_offset++ = '\0';
|
*begin_offset++ = '\0';
|
||||||
*end_offset = '\0';
|
*end_offset = '\0';
|
||||||
@@ -79,14 +79,22 @@ static inline void print_stacktrace(FILE *out = stderr, unsigned int max_frames
|
|||||||
fprintf(out, " %s : %s()+%s %s\n",
|
fprintf(out, " %s : %s()+%s %s\n",
|
||||||
symbollist[i], begin_name, begin_offset, ++end_offset);
|
symbollist[i], begin_name, begin_offset, ++end_offset);
|
||||||
}
|
}
|
||||||
|
++functionNamesFound;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
// couldn't parse the line? print the whole line.
|
// couldn't parse the line? print the whole line.
|
||||||
fprintf(out, " %s\n", symbollist[i]);
|
fprintf(out, " %s\n", symbollist[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!functionNamesFound) {
|
||||||
|
fprintf(out, "There were no function names found in the stack trace\n."
|
||||||
|
"Seems like debug symbols are not installed, and the stack trace is useless.\n");
|
||||||
|
}
|
||||||
|
if (functionNamesFound < addrlen - 2) {
|
||||||
|
fprintf(out, "Consider installing debug symbols for packages containing files with empty"
|
||||||
|
" function names (i.e. empty braces \"()\") to make your stack trace more useful\n");
|
||||||
|
}
|
||||||
free(funcname);
|
free(funcname);
|
||||||
free(symbollist);
|
free(symbollist);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ public:
|
|||||||
"</p></font>"
|
"</p></font>"
|
||||||
"<br/><hr><br/>"
|
"<br/><hr><br/>"
|
||||||
"<p align=center><font size=4>"
|
"<p align=center><font size=4>"
|
||||||
"qBittorrent version: " VERSION "<br/>"
|
#if defined(__x86_64__) || defined(_M_X64)
|
||||||
|
"qBittorrent version: " QBT_VERSION " (64-bit)<br/>"
|
||||||
|
#else
|
||||||
|
"qBittorrent version: " QBT_VERSION " (32-bit)<br/>"
|
||||||
|
#endif
|
||||||
"Libtorrent version: %1<br/>"
|
"Libtorrent version: %1<br/>"
|
||||||
"Qt version: " QT_VERSION_STR "<br/>"
|
"Qt version: " QT_VERSION_STR "<br/>"
|
||||||
"Boost version: %2<br/>"
|
"Boost version: %2<br/>"
|
||||||
|
|||||||
@@ -228,7 +228,6 @@ bool upgrade(bool ask = true)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
void migratePlistToIni(const QString &application)
|
void migratePlistToIni(const QString &application)
|
||||||
{
|
{
|
||||||
@@ -257,5 +256,22 @@ void macMigratePlists()
|
|||||||
}
|
}
|
||||||
#endif // Q_OS_MAC
|
#endif // Q_OS_MAC
|
||||||
|
|
||||||
|
#ifndef DISABLE_GUI
|
||||||
|
void migrateRSS()
|
||||||
|
{
|
||||||
|
// Copy old feed items to new file if needed
|
||||||
|
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss-feeds");
|
||||||
|
if (!qBTRSS.allKeys().isEmpty()) return; // We move the contents of RSS old_items only if inifile does not exist (is empty).
|
||||||
|
|
||||||
|
QIniSettings qBTRSSLegacy("qBittorrent", "qBittorrent-rss");
|
||||||
|
QHash<QString, QVariant> allOldItems = qBTRSSLegacy.value("old_items", QHash<QString, QVariant>()).toHash();
|
||||||
|
|
||||||
|
if (!allOldItems.empty()) {
|
||||||
|
qDebug("Moving %d old items for feeds to qBittorrent-rss-feeds", allOldItems.size());
|
||||||
|
qBTRSS.setValue("old_items", allOldItems);
|
||||||
|
qBTRSSLegacy.remove("old_items");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // UPGRADE_H
|
#endif // UPGRADE_H
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ rss/rssmanager.h
|
|||||||
utils/fs.h
|
utils/fs.h
|
||||||
utils/gzip.h
|
utils/gzip.h
|
||||||
utils/misc.h
|
utils/misc.h
|
||||||
|
utils/random.h
|
||||||
utils/string.h
|
utils/string.h
|
||||||
filesystemwatcher.h
|
filesystemwatcher.h
|
||||||
iconprovider.h
|
iconprovider.h
|
||||||
@@ -103,6 +104,7 @@ rss/rssmanager.cpp
|
|||||||
utils/fs.cpp
|
utils/fs.cpp
|
||||||
utils/gzip.cpp
|
utils/gzip.cpp
|
||||||
utils/misc.cpp
|
utils/misc.cpp
|
||||||
|
utils/random.cpp
|
||||||
utils/string.cpp
|
utils/string.cpp
|
||||||
filesystemwatcher.cpp
|
filesystemwatcher.cpp
|
||||||
iconprovider.cpp
|
iconprovider.cpp
|
||||||
@@ -117,24 +119,24 @@ tristatebool.cpp
|
|||||||
)
|
)
|
||||||
|
|
||||||
add_library(qbt_base STATIC ${QBT_BASE_HEADERS} ${QBT_BASE_SOURCES})
|
add_library(qbt_base STATIC ${QBT_BASE_HEADERS} ${QBT_BASE_SOURCES})
|
||||||
target_link_libraries(qbt_base ZLIB::ZLIB LibtorrentRasterbar::LibTorrent)
|
target_link_libraries(qbt_base PRIVATE ZLIB::ZLIB PUBLIC LibtorrentRasterbar::LibTorrent)
|
||||||
target_link_qt_components(qbt_base Core Network Xml)
|
target_link_qt_components(qbt_base PUBLIC Core Network Xml)
|
||||||
if (QT4_FOUND)
|
if (QT4_FOUND)
|
||||||
if (GUI)
|
if (GUI)
|
||||||
target_link_libraries(qbt_base Qt4::QtGui)
|
target_link_libraries(qbt_base PUBLIC Qt4::QtGui)
|
||||||
endif (GUI)
|
endif (GUI)
|
||||||
else (QT4_FOUND)
|
else (QT4_FOUND)
|
||||||
if (GUI)
|
if (GUI)
|
||||||
target_link_libraries(qbt_base Qt5::Gui Qt5::Widgets)
|
target_link_libraries(qbt_base PUBLIC Qt5::Gui Qt5::Widgets)
|
||||||
endif (GUI)
|
endif (GUI)
|
||||||
endif (QT4_FOUND)
|
endif (QT4_FOUND)
|
||||||
|
|
||||||
if (DBUS)
|
if (DBUS)
|
||||||
target_link_qt_components(qbt_base DBus)
|
target_link_qt_components(qbt_base PRIVATE DBus)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
find_library(IOKit_LIBRARY IOKit)
|
find_library(IOKit_LIBRARY IOKit)
|
||||||
find_library(Carbon_LIBRARY Carbon)
|
find_library(Carbon_LIBRARY Carbon)
|
||||||
target_link_libraries(qbt_base ${Carbon_LIBRARY} ${IOKit_LIBRARY})
|
target_link_libraries(qbt_base PRIVATE ${Carbon_LIBRARY} ${IOKit_LIBRARY})
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ HEADERS += \
|
|||||||
$$PWD/utils/fs.h \
|
$$PWD/utils/fs.h \
|
||||||
$$PWD/utils/gzip.h \
|
$$PWD/utils/gzip.h \
|
||||||
$$PWD/utils/misc.h \
|
$$PWD/utils/misc.h \
|
||||||
|
$$PWD/utils/random.h \
|
||||||
$$PWD/utils/string.h \
|
$$PWD/utils/string.h \
|
||||||
$$PWD/unicodestrings.h \
|
$$PWD/unicodestrings.h \
|
||||||
$$PWD/torrentfileguard.h \
|
$$PWD/torrentfileguard.h \
|
||||||
@@ -107,6 +108,7 @@ SOURCES += \
|
|||||||
$$PWD/utils/fs.cpp \
|
$$PWD/utils/fs.cpp \
|
||||||
$$PWD/utils/gzip.cpp \
|
$$PWD/utils/gzip.cpp \
|
||||||
$$PWD/utils/misc.cpp \
|
$$PWD/utils/misc.cpp \
|
||||||
|
$$PWD/utils/random.cpp \
|
||||||
$$PWD/utils/string.cpp \
|
$$PWD/utils/string.cpp \
|
||||||
$$PWD/torrentfileguard.cpp \
|
$$PWD/torrentfileguard.cpp \
|
||||||
$$PWD/torrentfilter.cpp \
|
$$PWD/torrentfilter.cpp \
|
||||||
|
|||||||
@@ -49,11 +49,6 @@ class FilterParserThread : public QThread
|
|||||||
public:
|
public:
|
||||||
FilterParserThread(libtorrent::session *s, QObject *parent = 0);
|
FilterParserThread(libtorrent::session *s, QObject *parent = 0);
|
||||||
~FilterParserThread();
|
~FilterParserThread();
|
||||||
|
|
||||||
int parseDATFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
|
||||||
int parseP2PFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
|
||||||
int getlineInStream(QDataStream &stream, std::string &name, char delim);
|
|
||||||
int parseP2BFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
|
||||||
void processFilterFile(QString filePath);
|
void processFilterFile(QString filePath);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -65,6 +60,11 @@ protected:
|
|||||||
void run();
|
void run();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int parseDATFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
||||||
|
int parseP2PFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
||||||
|
int getlineInStream(QDataStream &stream, std::string &name, char delim);
|
||||||
|
int parseP2BFilterFile(QString filePath, libtorrent::ip_filter &filter);
|
||||||
|
|
||||||
libtorrent::session *m_session;
|
libtorrent::session *m_session;
|
||||||
bool m_abort;
|
bool m_abort;
|
||||||
QString m_filePath;
|
QString m_filePath;
|
||||||
|
|||||||
@@ -55,7 +55,6 @@
|
|||||||
#include <libtorrent/bencode.hpp>
|
#include <libtorrent/bencode.hpp>
|
||||||
#include <libtorrent/error_code.hpp>
|
#include <libtorrent/error_code.hpp>
|
||||||
#include <libtorrent/extensions/ut_metadata.hpp>
|
#include <libtorrent/extensions/ut_metadata.hpp>
|
||||||
#include <libtorrent/extensions/lt_trackers.hpp>
|
|
||||||
#include <libtorrent/extensions/ut_pex.hpp>
|
#include <libtorrent/extensions/ut_pex.hpp>
|
||||||
#include <libtorrent/extensions/smart_ban.hpp>
|
#include <libtorrent/extensions/smart_ban.hpp>
|
||||||
#include <libtorrent/identify_client.hpp>
|
#include <libtorrent/identify_client.hpp>
|
||||||
@@ -77,6 +76,7 @@
|
|||||||
#include "base/unicodestrings.h"
|
#include "base/unicodestrings.h"
|
||||||
#include "base/utils/misc.h"
|
#include "base/utils/misc.h"
|
||||||
#include "base/utils/fs.h"
|
#include "base/utils/fs.h"
|
||||||
|
#include "base/utils/random.h"
|
||||||
#include "base/utils/string.h"
|
#include "base/utils/string.h"
|
||||||
#include "cachestatus.h"
|
#include "cachestatus.h"
|
||||||
#include "magneturi.h"
|
#include "magneturi.h"
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
|
|
||||||
static const char PEER_ID[] = "qB";
|
static const char PEER_ID[] = "qB";
|
||||||
static const char RESUME_FOLDER[] = "BT_backup";
|
static const char RESUME_FOLDER[] = "BT_backup";
|
||||||
static const char USER_AGENT[] = "qBittorrent " VERSION;
|
static const char USER_AGENT[] = "qBittorrent/" QBT_VERSION_2;
|
||||||
|
|
||||||
namespace libt = libtorrent;
|
namespace libt = libtorrent;
|
||||||
using namespace BitTorrent;
|
using namespace BitTorrent;
|
||||||
@@ -213,7 +213,6 @@ Session::Session(QObject *parent)
|
|||||||
, m_isDHTEnabled(BITTORRENT_SESSION_KEY("DHTEnabled"), true)
|
, m_isDHTEnabled(BITTORRENT_SESSION_KEY("DHTEnabled"), true)
|
||||||
, m_isLSDEnabled(BITTORRENT_SESSION_KEY("LSDEnabled"), true)
|
, m_isLSDEnabled(BITTORRENT_SESSION_KEY("LSDEnabled"), true)
|
||||||
, m_isPeXEnabled(BITTORRENT_SESSION_KEY("PeXEnabled"), true)
|
, m_isPeXEnabled(BITTORRENT_SESSION_KEY("PeXEnabled"), true)
|
||||||
, m_isTrackerExchangeEnabled(BITTORRENT_SESSION_KEY("TrackerExchangeEnabled"), false)
|
|
||||||
, m_isIPFilteringEnabled(BITTORRENT_SESSION_KEY("IPFilteringEnabled"), false)
|
, m_isIPFilteringEnabled(BITTORRENT_SESSION_KEY("IPFilteringEnabled"), false)
|
||||||
, m_isTrackerFilteringEnabled(BITTORRENT_SESSION_KEY("TrackerFilteringEnabled"), false)
|
, m_isTrackerFilteringEnabled(BITTORRENT_SESSION_KEY("TrackerFilteringEnabled"), false)
|
||||||
, m_IPFilterFile(BITTORRENT_SESSION_KEY("IPFilter"))
|
, m_IPFilterFile(BITTORRENT_SESSION_KEY("IPFilter"))
|
||||||
@@ -278,7 +277,6 @@ Session::Session(QObject *parent)
|
|||||||
, m_isTrackerEnabled(BITTORRENT_KEY("TrackerEnabled"), false)
|
, m_isTrackerEnabled(BITTORRENT_KEY("TrackerEnabled"), false)
|
||||||
, m_bannedIPs("State/BannedIPs")
|
, m_bannedIPs("State/BannedIPs")
|
||||||
, m_wasPexEnabled(m_isPeXEnabled)
|
, m_wasPexEnabled(m_isPeXEnabled)
|
||||||
, m_wasTrackerExchangeEnabled(m_isTrackerExchangeEnabled)
|
|
||||||
, m_numResumeData(0)
|
, m_numResumeData(0)
|
||||||
, m_extraLimit(0)
|
, m_extraLimit(0)
|
||||||
, m_useProxy(false)
|
, m_useProxy(false)
|
||||||
@@ -304,7 +302,7 @@ Session::Session(QObject *parent)
|
|||||||
;
|
;
|
||||||
|
|
||||||
#if LIBTORRENT_VERSION_NUM < 10100
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
libt::fingerprint fingerprint(PEER_ID, VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, VERSION_BUILD);
|
libt::fingerprint fingerprint(PEER_ID, QBT_VERSION_MAJOR, QBT_VERSION_MINOR, QBT_VERSION_BUGFIX, QBT_VERSION_BUILD);
|
||||||
std::string peerId = fingerprint.to_string();
|
std::string peerId = fingerprint.to_string();
|
||||||
const ushort port = this->port();
|
const ushort port = this->port();
|
||||||
std::pair<int, int> ports(port, port);
|
std::pair<int, int> ports(port, port);
|
||||||
@@ -334,7 +332,7 @@ Session::Session(QObject *parent)
|
|||||||
dispatchAlerts(alertPtr.release());
|
dispatchAlerts(alertPtr.release());
|
||||||
});
|
});
|
||||||
#else
|
#else
|
||||||
std::string peerId = libt::generate_fingerprint(PEER_ID, VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, VERSION_BUILD);
|
std::string peerId = libt::generate_fingerprint(PEER_ID, QBT_VERSION_MAJOR, QBT_VERSION_MINOR, QBT_VERSION_BUGFIX, QBT_VERSION_BUILD);
|
||||||
libt::settings_pack pack;
|
libt::settings_pack pack;
|
||||||
pack.set_int(libt::settings_pack::alert_mask, alertMask);
|
pack.set_int(libt::settings_pack::alert_mask, alertMask);
|
||||||
pack.set_str(libt::settings_pack::peer_fingerprint, peerId);
|
pack.set_str(libt::settings_pack::peer_fingerprint, peerId);
|
||||||
@@ -365,8 +363,6 @@ Session::Session(QObject *parent)
|
|||||||
// Enabling plugins
|
// Enabling plugins
|
||||||
//m_nativeSession->add_extension(&libt::create_metadata_plugin);
|
//m_nativeSession->add_extension(&libt::create_metadata_plugin);
|
||||||
m_nativeSession->add_extension(&libt::create_ut_metadata_plugin);
|
m_nativeSession->add_extension(&libt::create_ut_metadata_plugin);
|
||||||
if (isTrackerExchangeEnabled())
|
|
||||||
m_nativeSession->add_extension(&libt::create_lt_trackers_plugin);
|
|
||||||
if (isPeXEnabled())
|
if (isPeXEnabled())
|
||||||
m_nativeSession->add_extension(&libt::create_ut_pex_plugin);
|
m_nativeSession->add_extension(&libt::create_ut_pex_plugin);
|
||||||
m_nativeSession->add_extension(&libt::create_smart_ban_plugin);
|
m_nativeSession->add_extension(&libt::create_smart_ban_plugin);
|
||||||
@@ -475,18 +471,6 @@ void Session::setPeXEnabled(bool enabled)
|
|||||||
Logger::instance()->addMessage(tr("Restart is required to toggle PeX support"), Log::WARNING);
|
Logger::instance()->addMessage(tr("Restart is required to toggle PeX support"), Log::WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Session::isTrackerExchangeEnabled() const
|
|
||||||
{
|
|
||||||
return m_isTrackerExchangeEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Session::setTrackerExchangeEnabled(bool enabled)
|
|
||||||
{
|
|
||||||
m_isTrackerExchangeEnabled = enabled;
|
|
||||||
if (m_wasTrackerExchangeEnabled != enabled)
|
|
||||||
Logger::instance()->addMessage(tr("Restart is required to toggle Tracker Exchange support"), Log::WARNING);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Session::isTempPathEnabled() const
|
bool Session::isTempPathEnabled() const
|
||||||
{
|
{
|
||||||
return m_isTempPathEnabled;
|
return m_isTempPathEnabled;
|
||||||
@@ -1056,6 +1040,11 @@ void Session::configure(libtorrent::settings_pack &settingsPack)
|
|||||||
settingsPack.set_int(libt::settings_pack::active_tracker_limit, -1);
|
settingsPack.set_int(libt::settings_pack::active_tracker_limit, -1);
|
||||||
settingsPack.set_int(libt::settings_pack::active_dht_limit, -1);
|
settingsPack.set_int(libt::settings_pack::active_dht_limit, -1);
|
||||||
settingsPack.set_int(libt::settings_pack::active_lsd_limit, -1);
|
settingsPack.set_int(libt::settings_pack::active_lsd_limit, -1);
|
||||||
|
// 1 active torrent force 2 connections. If you have more active torrents * 2 than connection limit,
|
||||||
|
// connection limit will get extended. Multiply max connections or active torrents by 10 for queue.
|
||||||
|
// Ignore -1 values because we don't want to set a max int message queue
|
||||||
|
settingsPack.set_int(libt::settings_pack::alert_queue_size, std::max(1000,
|
||||||
|
10 * std::max(maxActiveTorrents() * 2, maxConnections())));
|
||||||
|
|
||||||
// Outgoing ports
|
// Outgoing ports
|
||||||
settingsPack.set_int(libt::settings_pack::outgoing_port, outgoingPortsMin());
|
settingsPack.set_int(libt::settings_pack::outgoing_port, outgoingPortsMin());
|
||||||
@@ -1197,6 +1186,11 @@ void Session::configure(libtorrent::session_settings &sessionSettings)
|
|||||||
sessionSettings.active_tracker_limit = -1;
|
sessionSettings.active_tracker_limit = -1;
|
||||||
sessionSettings.active_dht_limit = -1;
|
sessionSettings.active_dht_limit = -1;
|
||||||
sessionSettings.active_lsd_limit = -1;
|
sessionSettings.active_lsd_limit = -1;
|
||||||
|
// 1 active torrent force 2 connections. If you have more active torrents * 2 than connection limit,
|
||||||
|
// connection limit will get extended. Multiply max connections or active torrents by 10 for queue.
|
||||||
|
// Ignore -1 values because we don't want to set a max int message queue
|
||||||
|
sessionSettings.alert_queue_size = std::max(1000,
|
||||||
|
10 * std::max(maxActiveTorrents() * 2, maxConnections()));
|
||||||
|
|
||||||
// Outgoing ports
|
// Outgoing ports
|
||||||
sessionSettings.outgoing_ports = std::make_pair(outgoingPortsMin(), outgoingPortsMax());
|
sessionSettings.outgoing_ports = std::make_pair(outgoingPortsMin(), outgoingPortsMax());
|
||||||
@@ -1576,8 +1570,10 @@ bool Session::addTorrent(QString source, const AddTorrentParams ¶ms)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TorrentFileGuard guard(source);
|
TorrentFileGuard guard(source);
|
||||||
|
if (addTorrent_impl(params, MagnetUri(), TorrentInfo::loadFromFile(source))) {
|
||||||
guard.markAsAddedToSession();
|
guard.markAsAddedToSession();
|
||||||
return addTorrent_impl(params, MagnetUri(), TorrentInfo::loadFromFile(source));
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -1856,7 +1852,7 @@ void Session::generateResumeData(bool final)
|
|||||||
if (torrent->isChecking() || torrent->hasError()) continue;
|
if (torrent->isChecking() || torrent->hasError()) continue;
|
||||||
if (!final && !torrent->needSaveResumeData()) continue;
|
if (!final && !torrent->needSaveResumeData()) continue;
|
||||||
|
|
||||||
saveTorrentResumeData(torrent);
|
saveTorrentResumeData(torrent, final);
|
||||||
qDebug("Saving fastresume data for %s", qPrintable(torrent->name()));
|
qDebug("Saving fastresume data for %s", qPrintable(torrent->name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1885,9 +1881,7 @@ void Session::saveResumeData()
|
|||||||
switch (a->type()) {
|
switch (a->type()) {
|
||||||
case libt::save_resume_data_failed_alert::alert_type:
|
case libt::save_resume_data_failed_alert::alert_type:
|
||||||
case libt::save_resume_data_alert::alert_type:
|
case libt::save_resume_data_alert::alert_type:
|
||||||
TorrentHandle *torrent = m_torrents.take(static_cast<libt::torrent_alert *>(a)->handle.info_hash());
|
dispatchTorrentAlert(a);
|
||||||
if (torrent)
|
|
||||||
torrent->handleAlert(a);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#if LIBTORRENT_VERSION_NUM < 10100
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
@@ -1939,7 +1933,7 @@ void Session::networkConfigurationChange(const QNetworkConfiguration& cfg)
|
|||||||
|
|
||||||
// workaround for QTBUG-52633: check interface IPs, react only if the IPs have changed
|
// workaround for QTBUG-52633: check interface IPs, react only if the IPs have changed
|
||||||
// seems to be present only with NetworkManager, hence Q_OS_LINUX
|
// seems to be present only with NetworkManager, hence Q_OS_LINUX
|
||||||
#if defined Q_OS_LINUX && QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // && QT_VERSION <= QT_VERSION_CHECK(5, ?, ?)
|
#if defined Q_OS_LINUX && QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(5, 7, 1)
|
||||||
static QStringList boundIPs = getListeningIPs();
|
static QStringList boundIPs = getListeningIPs();
|
||||||
const QStringList newBoundIPs = getListeningIPs();
|
const QStringList newBoundIPs = getListeningIPs();
|
||||||
if ((configuredInterfaceName == changedInterface) && (boundIPs != newBoundIPs)) {
|
if ((configuredInterfaceName == changedInterface) && (boundIPs != newBoundIPs)) {
|
||||||
@@ -2217,7 +2211,7 @@ void Session::setSaveResumeDataInterval(uint value)
|
|||||||
|
|
||||||
int Session::port() const
|
int Session::port() const
|
||||||
{
|
{
|
||||||
static int randomPort = rand() % 64512 + 1024;
|
static int randomPort = Utils::Random::rand(1024, 65535);
|
||||||
if (useRandomPort())
|
if (useRandomPort())
|
||||||
return randomPort;
|
return randomPort;
|
||||||
return m_port;
|
return m_port;
|
||||||
@@ -2780,9 +2774,9 @@ void Session::handleTorrentRatioLimitChanged(TorrentHandle *const torrent)
|
|||||||
updateRatioTimer();
|
updateRatioTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::saveTorrentResumeData(TorrentHandle *const torrent)
|
void Session::saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave)
|
||||||
{
|
{
|
||||||
torrent->saveResumeData();
|
torrent->saveResumeData(finalSave);
|
||||||
++m_numResumeData;
|
++m_numResumeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3061,13 +3055,19 @@ void Session::startUpTorrents()
|
|||||||
QByteArray data;
|
QByteArray data;
|
||||||
} TorrentResumeData;
|
} TorrentResumeData;
|
||||||
|
|
||||||
auto startupTorrent = [this, logger, resumeDataDir](const TorrentResumeData ¶ms)
|
int resumedTorrentsCount = 0;
|
||||||
|
const auto startupTorrent = [this, logger, &resumeDataDir, &resumedTorrentsCount](const TorrentResumeData ¶ms)
|
||||||
{
|
{
|
||||||
QString filePath = resumeDataDir.filePath(QString("%1.torrent").arg(params.hash));
|
QString filePath = resumeDataDir.filePath(QString("%1.torrent").arg(params.hash));
|
||||||
qDebug() << "Starting up torrent" << params.hash << "...";
|
qDebug() << "Starting up torrent" << params.hash << "...";
|
||||||
if (!addTorrent_impl(params.addTorrentData, params.magnetUri, TorrentInfo::loadFromFile(filePath), params.data))
|
if (!addTorrent_impl(params.addTorrentData, params.magnetUri, TorrentInfo::loadFromFile(filePath), params.data))
|
||||||
logger->addMessage(tr("Unable to resume torrent '%1'.", "e.g: Unable to resume torrent 'hash'.")
|
logger->addMessage(tr("Unable to resume torrent '%1'.", "e.g: Unable to resume torrent 'hash'.")
|
||||||
.arg(params.hash), Log::CRITICAL);
|
.arg(params.hash), Log::CRITICAL);
|
||||||
|
|
||||||
|
// process add torrent messages before message queue overflow
|
||||||
|
if (resumedTorrentsCount % 100 == 0) readAlerts();
|
||||||
|
|
||||||
|
++resumedTorrentsCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
qDebug("Starting up torrents");
|
qDebug("Starting up torrents");
|
||||||
@@ -3075,6 +3075,7 @@ void Session::startUpTorrents()
|
|||||||
// Resume downloads
|
// Resume downloads
|
||||||
QMap<int, TorrentResumeData> queuedResumeData;
|
QMap<int, TorrentResumeData> queuedResumeData;
|
||||||
int nextQueuePosition = 1;
|
int nextQueuePosition = 1;
|
||||||
|
int numOfRemappedFiles = 0;
|
||||||
QRegExp rx(QLatin1String("^([A-Fa-f0-9]{40})\\.fastresume$"));
|
QRegExp rx(QLatin1String("^([A-Fa-f0-9]{40})\\.fastresume$"));
|
||||||
foreach (const QString &fastresumeName, fastresumes) {
|
foreach (const QString &fastresumeName, fastresumes) {
|
||||||
if (rx.indexIn(fastresumeName) == -1) continue;
|
if (rx.indexIn(fastresumeName) == -1) continue;
|
||||||
@@ -3098,11 +3099,23 @@ void Session::startUpTorrents()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
queuedResumeData[queuePosition] = { hash, magnetUri, resumeData, data };
|
int q = queuePosition;
|
||||||
|
for(; queuedResumeData.contains(q); ++q) {
|
||||||
|
}
|
||||||
|
if (q != queuePosition) {
|
||||||
|
++numOfRemappedFiles;
|
||||||
|
}
|
||||||
|
queuedResumeData[q] = { hash, magnetUri, resumeData, data };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (numOfRemappedFiles > 0) {
|
||||||
|
logger->addMessage(
|
||||||
|
QString(tr("Queue positions were corrected in %1 resume files")).arg(numOfRemappedFiles),
|
||||||
|
Log::CRITICAL);
|
||||||
|
}
|
||||||
|
|
||||||
// starting up downloading torrents (queue position > 0)
|
// starting up downloading torrents (queue position > 0)
|
||||||
foreach (const TorrentResumeData &torrentResumeData, queuedResumeData)
|
foreach (const TorrentResumeData &torrentResumeData, queuedResumeData)
|
||||||
startupTorrent(torrentResumeData);
|
startupTorrent(torrentResumeData);
|
||||||
|
|||||||
@@ -218,8 +218,6 @@ namespace BitTorrent
|
|||||||
void setLSDEnabled(bool enabled);
|
void setLSDEnabled(bool enabled);
|
||||||
bool isPeXEnabled() const;
|
bool isPeXEnabled() const;
|
||||||
void setPeXEnabled(bool enabled);
|
void setPeXEnabled(bool enabled);
|
||||||
bool isTrackerExchangeEnabled() const;
|
|
||||||
void setTrackerExchangeEnabled(bool enabled);
|
|
||||||
bool isAddTorrentPaused() const;
|
bool isAddTorrentPaused() const;
|
||||||
void setAddTorrentPaused(bool value);
|
void setAddTorrentPaused(bool value);
|
||||||
bool isTrackerEnabled() const;
|
bool isTrackerEnabled() const;
|
||||||
@@ -467,7 +465,7 @@ namespace BitTorrent
|
|||||||
|
|
||||||
void updateRatioTimer();
|
void updateRatioTimer();
|
||||||
void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular);
|
void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular);
|
||||||
void saveTorrentResumeData(TorrentHandle *const torrent);
|
void saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave = false);
|
||||||
|
|
||||||
void handleAlert(libtorrent::alert *a);
|
void handleAlert(libtorrent::alert *a);
|
||||||
void dispatchTorrentAlert(libtorrent::alert *a);
|
void dispatchTorrentAlert(libtorrent::alert *a);
|
||||||
@@ -507,7 +505,6 @@ namespace BitTorrent
|
|||||||
CachedSettingValue<bool> m_isDHTEnabled;
|
CachedSettingValue<bool> m_isDHTEnabled;
|
||||||
CachedSettingValue<bool> m_isLSDEnabled;
|
CachedSettingValue<bool> m_isLSDEnabled;
|
||||||
CachedSettingValue<bool> m_isPeXEnabled;
|
CachedSettingValue<bool> m_isPeXEnabled;
|
||||||
CachedSettingValue<bool> m_isTrackerExchangeEnabled;
|
|
||||||
CachedSettingValue<bool> m_isIPFilteringEnabled;
|
CachedSettingValue<bool> m_isIPFilteringEnabled;
|
||||||
CachedSettingValue<bool> m_isTrackerFilteringEnabled;
|
CachedSettingValue<bool> m_isTrackerFilteringEnabled;
|
||||||
CachedSettingValue<QString> m_IPFilterFile;
|
CachedSettingValue<QString> m_IPFilterFile;
|
||||||
@@ -572,11 +569,10 @@ namespace BitTorrent
|
|||||||
CachedSettingValue<bool> m_isTrackerEnabled;
|
CachedSettingValue<bool> m_isTrackerEnabled;
|
||||||
CachedSettingValue<QStringList> m_bannedIPs;
|
CachedSettingValue<QStringList> m_bannedIPs;
|
||||||
|
|
||||||
// Order is important. These need to be declared after their CachedSettingsValue
|
// Order is important. This needs to be declared after its CachedSettingsValue
|
||||||
// counterparts, because they use them for initialization in the constructor
|
// counterpart, because it uses it for initialization in the constructor
|
||||||
// initialization list.
|
// initialization list.
|
||||||
const bool m_wasPexEnabled;
|
const bool m_wasPexEnabled;
|
||||||
const bool m_wasTrackerExchangeEnabled;
|
|
||||||
|
|
||||||
int m_numResumeData;
|
int m_numResumeData;
|
||||||
int m_extraLimit;
|
int m_extraLimit;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ void TorrentCreatorThread::run()
|
|||||||
{
|
{
|
||||||
emit updateProgress(0);
|
emit updateProgress(0);
|
||||||
|
|
||||||
QString creator_str("qBittorrent " VERSION);
|
QString creator_str("qBittorrent " QBT_VERSION);
|
||||||
try {
|
try {
|
||||||
libt::file_storage fs;
|
libt::file_storage fs;
|
||||||
// Adding files to the torrent
|
// Adding files to the torrent
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
* exception statement from your version.
|
* exception statement from your version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
@@ -151,47 +153,36 @@ TorrentState::operator int() const
|
|||||||
|
|
||||||
// TorrentHandle
|
// TorrentHandle
|
||||||
|
|
||||||
#define SAFE_CALL(func, ...) \
|
|
||||||
try { \
|
|
||||||
m_nativeHandle.func(__VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
catch (std::exception &exc) { \
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SAFE_CALL_BOOL(func, ...) \
|
|
||||||
try { \
|
|
||||||
m_nativeHandle.func(__VA_ARGS__); \
|
|
||||||
return true; \
|
|
||||||
} \
|
|
||||||
catch (std::exception &exc) { \
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
|
|
||||||
return false; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SAFE_RETURN(type, func, val) \
|
|
||||||
type result = val; \
|
|
||||||
try { \
|
|
||||||
result = m_nativeHandle.func(); \
|
|
||||||
} \
|
|
||||||
catch (std::exception &exc) { \
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
|
|
||||||
} \
|
|
||||||
return result;
|
|
||||||
|
|
||||||
#define SAFE_GET(var, func, ...) \
|
|
||||||
try { \
|
|
||||||
var = m_nativeHandle.func(__VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
catch (std::exception &exc) { \
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
|
|
||||||
}
|
|
||||||
|
|
||||||
const qreal TorrentHandle::USE_GLOBAL_RATIO = -2.;
|
const qreal TorrentHandle::USE_GLOBAL_RATIO = -2.;
|
||||||
const qreal TorrentHandle::NO_RATIO_LIMIT = -1.;
|
const qreal TorrentHandle::NO_RATIO_LIMIT = -1.;
|
||||||
|
|
||||||
const qreal TorrentHandle::MAX_RATIO = 9999.;
|
const qreal TorrentHandle::MAX_RATIO = 9999.;
|
||||||
|
|
||||||
|
// The new libtorrent::create_torrent constructor appeared after 1.0.11 in RC_1_0
|
||||||
|
// and after 1.1.1 in RC_1_1. Since it fixed an ABI incompatibility with previous versions
|
||||||
|
// distros might choose to backport it onto 1.0.11 and 1.1.1 respectively.
|
||||||
|
// So we need a way to detect its presence without relying solely on the LIBTORRENT_VERSION_NUM.
|
||||||
|
// Relevant links:
|
||||||
|
// 1. https://github.com/arvidn/libtorrent/issues/1696
|
||||||
|
// 2. https://github.com/qbittorrent/qBittorrent/issues/6406
|
||||||
|
// The following can be removed after one or two libtorrent releases on each branch.
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// new constructor is available
|
||||||
|
template<typename T, typename std::enable_if<std::is_constructible<T, libt::torrent_info, bool>::value, int>::type = 0>
|
||||||
|
T makeTorrentCreator(const libtorrent::torrent_info & ti)
|
||||||
|
{
|
||||||
|
return T(ti, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// new constructor isn't available
|
||||||
|
template<typename T, typename std::enable_if<!std::is_constructible<T, libt::torrent_info, bool>::value, int>::type = 0>
|
||||||
|
T makeTorrentCreator(const libtorrent::torrent_info & ti)
|
||||||
|
{
|
||||||
|
return T(ti);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TorrentHandle::TorrentHandle(Session *session, const libtorrent::torrent_handle &nativeHandle,
|
TorrentHandle::TorrentHandle(Session *session, const libtorrent::torrent_handle &nativeHandle,
|
||||||
const AddTorrentData &data)
|
const AddTorrentData &data)
|
||||||
: QObject(session)
|
: QObject(session)
|
||||||
@@ -351,8 +342,8 @@ QList<TrackerEntry> TorrentHandle::trackers() const
|
|||||||
{
|
{
|
||||||
QList<TrackerEntry> entries;
|
QList<TrackerEntry> entries;
|
||||||
std::vector<libt::announce_entry> announces;
|
std::vector<libt::announce_entry> announces;
|
||||||
SAFE_GET(announces, trackers);
|
|
||||||
|
|
||||||
|
announces = m_nativeHandle.trackers();
|
||||||
foreach (const libt::announce_entry &tracker, announces)
|
foreach (const libt::announce_entry &tracker, announces)
|
||||||
entries << tracker;
|
entries << tracker;
|
||||||
|
|
||||||
@@ -390,7 +381,6 @@ void TorrentHandle::replaceTrackers(QList<TrackerEntry> trackers)
|
|||||||
existingTrackers.removeOne(tracker);
|
existingTrackers.removeOne(tracker);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
m_nativeHandle.replace_trackers(announces);
|
m_nativeHandle.replace_trackers(announces);
|
||||||
if (addedTrackers.isEmpty() && existingTrackers.isEmpty()) {
|
if (addedTrackers.isEmpty() && existingTrackers.isEmpty()) {
|
||||||
m_session->handleTorrentTrackersChanged(this);
|
m_session->handleTorrentTrackersChanged(this);
|
||||||
@@ -401,11 +391,6 @@ void TorrentHandle::replaceTrackers(QList<TrackerEntry> trackers)
|
|||||||
if (!addedTrackers.isEmpty())
|
if (!addedTrackers.isEmpty())
|
||||||
m_session->handleTorrentTrackersAdded(this, addedTrackers);
|
m_session->handleTorrentTrackersAdded(this, addedTrackers);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
catch (std::exception &exc) {
|
|
||||||
qDebug("torrent_handle::replace_trackers() throws exception: %s", exc.what());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::addTracker(const TrackerEntry &tracker)
|
bool TorrentHandle::addTracker(const TrackerEntry &tracker)
|
||||||
@@ -413,14 +398,14 @@ bool TorrentHandle::addTracker(const TrackerEntry &tracker)
|
|||||||
if (trackers().contains(tracker))
|
if (trackers().contains(tracker))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SAFE_CALL_BOOL(add_tracker, tracker.nativeEntry());
|
m_nativeHandle.add_tracker(tracker.nativeEntry());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QUrl> TorrentHandle::urlSeeds() const
|
QList<QUrl> TorrentHandle::urlSeeds() const
|
||||||
{
|
{
|
||||||
QList<QUrl> urlSeeds;
|
QList<QUrl> urlSeeds;
|
||||||
std::set<std::string> seeds;
|
std::set<std::string> seeds = m_nativeHandle.url_seeds();
|
||||||
SAFE_GET(seeds, url_seeds);
|
|
||||||
|
|
||||||
foreach (const std::string &urlSeed, seeds)
|
foreach (const std::string &urlSeed, seeds)
|
||||||
urlSeeds.append(QUrl(urlSeed.c_str()));
|
urlSeeds.append(QUrl(urlSeed.c_str()));
|
||||||
@@ -457,7 +442,8 @@ bool TorrentHandle::addUrlSeed(const QUrl &urlSeed)
|
|||||||
QList<QUrl> seeds = urlSeeds();
|
QList<QUrl> seeds = urlSeeds();
|
||||||
if (seeds.contains(urlSeed)) return false;
|
if (seeds.contains(urlSeed)) return false;
|
||||||
|
|
||||||
SAFE_CALL_BOOL(add_url_seed, Utils::String::toStdString(urlSeed.toString()));
|
m_nativeHandle.add_url_seed(Utils::String::toStdString(urlSeed.toString()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::removeUrlSeed(const QUrl &urlSeed)
|
bool TorrentHandle::removeUrlSeed(const QUrl &urlSeed)
|
||||||
@@ -465,7 +451,8 @@ bool TorrentHandle::removeUrlSeed(const QUrl &urlSeed)
|
|||||||
QList<QUrl> seeds = urlSeeds();
|
QList<QUrl> seeds = urlSeeds();
|
||||||
if (!seeds.contains(urlSeed)) return false;
|
if (!seeds.contains(urlSeed)) return false;
|
||||||
|
|
||||||
SAFE_CALL_BOOL(remove_url_seed, Utils::String::toStdString(urlSeed.toString()));
|
m_nativeHandle.remove_url_seed(Utils::String::toStdString(urlSeed.toString()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::connectPeer(const PeerAddress &peerAddress)
|
bool TorrentHandle::connectPeer(const PeerAddress &peerAddress)
|
||||||
@@ -475,19 +462,23 @@ bool TorrentHandle::connectPeer(const PeerAddress &peerAddress)
|
|||||||
if (ec) return false;
|
if (ec) return false;
|
||||||
|
|
||||||
boost::asio::ip::tcp::endpoint ep(addr, peerAddress.port);
|
boost::asio::ip::tcp::endpoint ep(addr, peerAddress.port);
|
||||||
SAFE_CALL_BOOL(connect_peer, ep);
|
m_nativeHandle.connect_peer(ep);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::needSaveResumeData() const
|
bool TorrentHandle::needSaveResumeData() const
|
||||||
{
|
{
|
||||||
if (m_needSaveResumeData) return true;
|
if (m_needSaveResumeData) return true;
|
||||||
|
|
||||||
SAFE_RETURN(bool, need_save_resume_data, false);
|
return m_nativeHandle.need_save_resume_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::saveResumeData()
|
void TorrentHandle::saveResumeData(bool updateStatus)
|
||||||
{
|
{
|
||||||
SAFE_CALL(save_resume_data);
|
if (updateStatus) // to update queue_position, see discussion in PR #6154
|
||||||
|
this->updateStatus();
|
||||||
|
|
||||||
|
m_nativeHandle.save_resume_data();
|
||||||
m_needSaveResumeData = false;
|
m_needSaveResumeData = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,7 +574,7 @@ QStringList TorrentHandle::absoluteFilePathsUnwanted() const
|
|||||||
QDir saveDir(savePath(true));
|
QDir saveDir(savePath(true));
|
||||||
QStringList res;
|
QStringList res;
|
||||||
std::vector<int> fp;
|
std::vector<int> fp;
|
||||||
SAFE_GET(fp, file_priorities);
|
fp = m_nativeHandle.file_priorities();
|
||||||
|
|
||||||
int count = static_cast<int>(fp.size());
|
int count = static_cast<int>(fp.size());
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
@@ -600,7 +591,7 @@ QStringList TorrentHandle::absoluteFilePathsUnwanted() const
|
|||||||
QVector<int> TorrentHandle::filePriorities() const
|
QVector<int> TorrentHandle::filePriorities() const
|
||||||
{
|
{
|
||||||
std::vector<int> fp;
|
std::vector<int> fp;
|
||||||
SAFE_GET(fp, file_priorities);
|
fp = m_nativeHandle.file_priorities();
|
||||||
|
|
||||||
return QVector<int>::fromStdVector(fp);
|
return QVector<int>::fromStdVector(fp);
|
||||||
}
|
}
|
||||||
@@ -688,7 +679,9 @@ bool TorrentHandle::isErrored() const
|
|||||||
bool TorrentHandle::isSeed() const
|
bool TorrentHandle::isSeed() const
|
||||||
{
|
{
|
||||||
// Affected by bug http://code.rasterbar.com/libtorrent/ticket/402
|
// Affected by bug http://code.rasterbar.com/libtorrent/ticket/402
|
||||||
//SAFE_RETURN(bool, is_seed, false);
|
//bool result;
|
||||||
|
//result = m_nativeHandle.is_seed());
|
||||||
|
//return result;
|
||||||
// May suffer from approximation problems
|
// May suffer from approximation problems
|
||||||
//return (progress() == 1.);
|
//return (progress() == 1.);
|
||||||
// This looks safe
|
// This looks safe
|
||||||
@@ -712,7 +705,7 @@ bool TorrentHandle::hasFirstLastPiecePriority() const
|
|||||||
|
|
||||||
// Get int first media file
|
// Get int first media file
|
||||||
std::vector<int> fp;
|
std::vector<int> fp;
|
||||||
SAFE_GET(fp, file_priorities);
|
fp = m_nativeHandle.file_priorities();
|
||||||
|
|
||||||
TorrentInfo::PieceRange extremities;
|
TorrentInfo::PieceRange extremities;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@@ -728,10 +721,8 @@ bool TorrentHandle::hasFirstLastPiecePriority() const
|
|||||||
|
|
||||||
if (!found) return false; // No media file
|
if (!found) return false; // No media file
|
||||||
|
|
||||||
int first = 0;
|
int first = m_nativeHandle.piece_priority(extremities.first());
|
||||||
int last = 0;
|
int last = m_nativeHandle.piece_priority(extremities.last());
|
||||||
SAFE_GET(first, piece_priority, extremities.first());
|
|
||||||
SAFE_GET(last, piece_priority, extremities.last());
|
|
||||||
|
|
||||||
return ((first == 7) && (last == 7));
|
return ((first == 7) && (last == 7));
|
||||||
}
|
}
|
||||||
@@ -810,8 +801,7 @@ bool TorrentHandle::hasError() const
|
|||||||
|
|
||||||
bool TorrentHandle::hasFilteredPieces() const
|
bool TorrentHandle::hasFilteredPieces() const
|
||||||
{
|
{
|
||||||
std::vector<int> pp;
|
std::vector<int> pp = m_nativeHandle.piece_priorities();
|
||||||
SAFE_GET(pp, piece_priorities);
|
|
||||||
|
|
||||||
foreach (const int priority, pp)
|
foreach (const int priority, pp)
|
||||||
if (priority == 0) return true;
|
if (priority == 0) return true;
|
||||||
@@ -884,7 +874,7 @@ QVector<qreal> TorrentHandle::filesProgress() const
|
|||||||
{
|
{
|
||||||
std::vector<boost::int64_t> fp;
|
std::vector<boost::int64_t> fp;
|
||||||
QVector<qreal> result;
|
QVector<qreal> result;
|
||||||
SAFE_CALL(file_progress, fp, libt::torrent_handle::piece_granularity);
|
m_nativeHandle.file_progress(fp, libt::torrent_handle::piece_granularity);
|
||||||
|
|
||||||
int count = static_cast<int>(fp.size());
|
int count = static_cast<int>(fp.size());
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
@@ -915,26 +905,29 @@ int TorrentHandle::leechsCount() const
|
|||||||
|
|
||||||
int TorrentHandle::totalSeedsCount() const
|
int TorrentHandle::totalSeedsCount() const
|
||||||
{
|
{
|
||||||
return m_nativeStatus.list_seeds;
|
return (m_nativeStatus.num_complete > 0) ? m_nativeStatus.num_complete : m_nativeStatus.list_seeds;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TorrentHandle::totalPeersCount() const
|
int TorrentHandle::totalPeersCount() const
|
||||||
{
|
{
|
||||||
return m_nativeStatus.list_peers;
|
int peers = m_nativeStatus.num_complete + m_nativeStatus.num_incomplete;
|
||||||
|
return (peers > 0) ? peers : m_nativeStatus.list_peers;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TorrentHandle::totalLeechersCount() const
|
int TorrentHandle::totalLeechersCount() const
|
||||||
{
|
{
|
||||||
return (m_nativeStatus.list_peers - m_nativeStatus.list_seeds);
|
return (m_nativeStatus.num_incomplete > 0) ? m_nativeStatus.num_incomplete : (m_nativeStatus.list_peers - m_nativeStatus.list_seeds);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TorrentHandle::completeCount() const
|
int TorrentHandle::completeCount() const
|
||||||
{
|
{
|
||||||
|
// additional info: https://github.com/qbittorrent/qBittorrent/pull/5300#issuecomment-267783646
|
||||||
return m_nativeStatus.num_complete;
|
return m_nativeStatus.num_complete;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TorrentHandle::incompleteCount() const
|
int TorrentHandle::incompleteCount() const
|
||||||
{
|
{
|
||||||
|
// additional info: https://github.com/qbittorrent/qBittorrent/pull/5300#issuecomment-267783646
|
||||||
return m_nativeStatus.num_incomplete;
|
return m_nativeStatus.num_incomplete;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -974,12 +967,12 @@ int TorrentHandle::timeSinceActivity() const
|
|||||||
|
|
||||||
int TorrentHandle::downloadLimit() const
|
int TorrentHandle::downloadLimit() const
|
||||||
{
|
{
|
||||||
SAFE_RETURN(int, download_limit, -1)
|
return m_nativeHandle.download_limit();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TorrentHandle::uploadLimit() const
|
int TorrentHandle::uploadLimit() const
|
||||||
{
|
{
|
||||||
SAFE_RETURN(int, upload_limit, -1)
|
return m_nativeHandle.upload_limit();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::superSeeding() const
|
bool TorrentHandle::superSeeding() const
|
||||||
@@ -992,7 +985,7 @@ QList<PeerInfo> TorrentHandle::peers() const
|
|||||||
QList<PeerInfo> peers;
|
QList<PeerInfo> peers;
|
||||||
std::vector<libt::peer_info> nativePeers;
|
std::vector<libt::peer_info> nativePeers;
|
||||||
|
|
||||||
SAFE_CALL(get_peer_info, nativePeers);
|
m_nativeHandle.get_peer_info(nativePeers);
|
||||||
|
|
||||||
foreach (const libt::peer_info &peer, nativePeers)
|
foreach (const libt::peer_info &peer, nativePeers)
|
||||||
peers << PeerInfo(this, peer);
|
peers << PeerInfo(this, peer);
|
||||||
@@ -1015,7 +1008,7 @@ QBitArray TorrentHandle::downloadingPieces() const
|
|||||||
QBitArray result(piecesCount());
|
QBitArray result(piecesCount());
|
||||||
|
|
||||||
std::vector<libt::partial_piece_info> queue;
|
std::vector<libt::partial_piece_info> queue;
|
||||||
SAFE_CALL(get_download_queue, queue);
|
m_nativeHandle.get_download_queue(queue);
|
||||||
|
|
||||||
std::vector<libt::partial_piece_info>::const_iterator it = queue.begin();
|
std::vector<libt::partial_piece_info>::const_iterator it = queue.begin();
|
||||||
std::vector<libt::partial_piece_info>::const_iterator itend = queue.end();
|
std::vector<libt::partial_piece_info>::const_iterator itend = queue.end();
|
||||||
@@ -1028,7 +1021,7 @@ QBitArray TorrentHandle::downloadingPieces() const
|
|||||||
QVector<int> TorrentHandle::pieceAvailability() const
|
QVector<int> TorrentHandle::pieceAvailability() const
|
||||||
{
|
{
|
||||||
std::vector<int> avail;
|
std::vector<int> avail;
|
||||||
SAFE_CALL(piece_availability, avail);
|
m_nativeHandle.piece_availability(avail);
|
||||||
|
|
||||||
return QVector<int>::fromStdVector(avail);
|
return QVector<int>::fromStdVector(avail);
|
||||||
}
|
}
|
||||||
@@ -1173,12 +1166,12 @@ void TorrentHandle::move_impl(QString path)
|
|||||||
|
|
||||||
void TorrentHandle::forceReannounce(int index)
|
void TorrentHandle::forceReannounce(int index)
|
||||||
{
|
{
|
||||||
SAFE_CALL(force_reannounce, 0, index);
|
m_nativeHandle.force_reannounce(0, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::forceDHTAnnounce()
|
void TorrentHandle::forceDHTAnnounce()
|
||||||
{
|
{
|
||||||
SAFE_CALL(force_dht_announce);
|
m_nativeHandle.force_dht_announce();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::forceRecheck()
|
void TorrentHandle::forceRecheck()
|
||||||
@@ -1190,13 +1183,13 @@ void TorrentHandle::forceRecheck()
|
|||||||
resume();
|
resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
SAFE_CALL(force_recheck);
|
m_nativeHandle.force_recheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::setSequentialDownload(bool b)
|
void TorrentHandle::setSequentialDownload(bool b)
|
||||||
{
|
{
|
||||||
if (b != isSequentialDownload()) {
|
if (b != isSequentialDownload()) {
|
||||||
SAFE_CALL(set_sequential_download, b);
|
m_nativeHandle.set_sequential_download(b);
|
||||||
m_nativeStatus.sequential_download = b; // prevent return cached value
|
m_nativeStatus.sequential_download = b; // prevent return cached value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1210,10 +1203,8 @@ void TorrentHandle::setFirstLastPiecePriority(bool b)
|
|||||||
{
|
{
|
||||||
if (!hasMetadata()) return;
|
if (!hasMetadata()) return;
|
||||||
|
|
||||||
std::vector<int> fp;
|
std::vector<int> fp = m_nativeHandle.file_priorities();
|
||||||
SAFE_GET(fp, file_priorities);
|
std::vector<int> pp = m_nativeHandle.piece_priorities();
|
||||||
std::vector<int> pp;
|
|
||||||
SAFE_GET(pp, piece_priorities);
|
|
||||||
|
|
||||||
// Download first and last pieces first for all media files in the torrent
|
// Download first and last pieces first for all media files in the torrent
|
||||||
int nbfiles = static_cast<int>(fp.size());
|
int nbfiles = static_cast<int>(fp.size());
|
||||||
@@ -1237,7 +1228,7 @@ void TorrentHandle::setFirstLastPiecePriority(bool b)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SAFE_CALL(prioritize_pieces, pp);
|
m_nativeHandle.prioritize_pieces(pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::toggleFirstLastPiecePriority()
|
void TorrentHandle::toggleFirstLastPiecePriority()
|
||||||
@@ -1249,18 +1240,12 @@ void TorrentHandle::pause()
|
|||||||
{
|
{
|
||||||
if (isPaused()) return;
|
if (isPaused()) return;
|
||||||
|
|
||||||
try {
|
|
||||||
m_nativeHandle.auto_managed(false);
|
m_nativeHandle.auto_managed(false);
|
||||||
m_nativeHandle.pause();
|
m_nativeHandle.pause();
|
||||||
}
|
}
|
||||||
catch (std::exception &exc) {
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TorrentHandle::resume(bool forced)
|
void TorrentHandle::resume(bool forced)
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
if (hasError())
|
if (hasError())
|
||||||
m_nativeHandle.clear_error();
|
m_nativeHandle.clear_error();
|
||||||
m_hasMissingFiles = false;
|
m_hasMissingFiles = false;
|
||||||
@@ -1268,10 +1253,6 @@ void TorrentHandle::resume(bool forced)
|
|||||||
m_nativeHandle.auto_managed(!forced);
|
m_nativeHandle.auto_managed(!forced);
|
||||||
m_nativeHandle.resume();
|
m_nativeHandle.resume();
|
||||||
}
|
}
|
||||||
catch (std::exception &exc) {
|
|
||||||
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TorrentHandle::moveStorage(const QString &newPath)
|
void TorrentHandle::moveStorage(const QString &newPath)
|
||||||
{
|
{
|
||||||
@@ -1280,39 +1261,35 @@ void TorrentHandle::moveStorage(const QString &newPath)
|
|||||||
m_queuedPath = newPath;
|
m_queuedPath = newPath;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QString oldPath = nativeActualSavePath();
|
const QString oldPath = nativeActualSavePath();
|
||||||
if (QDir(oldPath) == QDir(newPath)) return;
|
if (QDir(oldPath) == QDir(newPath)) return;
|
||||||
|
|
||||||
qDebug("move storage: %s to %s", qPrintable(oldPath), qPrintable(newPath));
|
qDebug("move storage: %s to %s", qPrintable(oldPath), qPrintable(newPath));
|
||||||
try {
|
|
||||||
// Actually move the storage
|
// Actually move the storage
|
||||||
m_nativeHandle.move_storage(newPath.toUtf8().constData());
|
m_nativeHandle.move_storage(newPath.toUtf8().constData());
|
||||||
m_oldPath = oldPath;
|
m_oldPath = oldPath;
|
||||||
m_newPath = newPath;
|
m_newPath = newPath;
|
||||||
}
|
}
|
||||||
catch (std::exception &exc) {
|
|
||||||
qDebug("torrent_handle::move_storage() throws exception: %s", exc.what());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::setTrackerLogin(const QString &username, const QString &password)
|
void TorrentHandle::setTrackerLogin(const QString &username, const QString &password)
|
||||||
{
|
{
|
||||||
SAFE_CALL(set_tracker_login, std::string(username.toLocal8Bit().constData()), std::string(password.toLocal8Bit().constData()));
|
m_nativeHandle.set_tracker_login(std::string(username.toLocal8Bit().constData())
|
||||||
|
, std::string(password.toLocal8Bit().constData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::renameFile(int index, const QString &name)
|
void TorrentHandle::renameFile(int index, const QString &name)
|
||||||
{
|
{
|
||||||
++m_renameCount;
|
++m_renameCount;
|
||||||
qDebug() << Q_FUNC_INFO << index << name;
|
qDebug() << Q_FUNC_INFO << index << name;
|
||||||
SAFE_CALL(rename_file, index, Utils::String::toStdString(Utils::Fs::toNativePath(name)));
|
m_nativeHandle.rename_file(index, Utils::String::toStdString(Utils::Fs::toNativePath(name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentHandle::saveTorrentFile(const QString &path)
|
bool TorrentHandle::saveTorrentFile(const QString &path)
|
||||||
{
|
{
|
||||||
if (!m_torrentInfo.isValid()) return false;
|
if (!m_torrentInfo.isValid()) return false;
|
||||||
|
|
||||||
libt::create_torrent torrentCreator(*(m_torrentInfo.nativeInfo()));
|
libt::create_torrent torrentCreator = makeTorrentCreator<libt::create_torrent>(*(m_torrentInfo.nativeInfo()));
|
||||||
libt::entry torrentEntry = torrentCreator.generate();
|
libt::entry torrentEntry = torrentCreator.generate();
|
||||||
|
|
||||||
QVector<char> out;
|
QVector<char> out;
|
||||||
@@ -1326,8 +1303,7 @@ bool TorrentHandle::saveTorrentFile(const QString &path)
|
|||||||
|
|
||||||
void TorrentHandle::setFilePriority(int index, int priority)
|
void TorrentHandle::setFilePriority(int index, int priority)
|
||||||
{
|
{
|
||||||
std::vector<int> priorities;
|
std::vector<int> priorities = m_nativeHandle.file_priorities();
|
||||||
SAFE_GET(priorities, file_priorities);
|
|
||||||
|
|
||||||
if ((priorities.size() > static_cast<quint64>(index)) && (priorities[index] != priority)) {
|
if ((priorities.size() > static_cast<quint64>(index)) && (priorities[index] != priority)) {
|
||||||
priorities[index] = priority;
|
priorities[index] = priority;
|
||||||
@@ -1347,7 +1323,7 @@ void TorrentHandle::handleStorageMovedAlert(libtorrent::storage_moved_alert *p)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString newPath = Utils::String::fromStdString(p->path);
|
const QString newPath = Utils::String::fromStdString(p->path);
|
||||||
if (newPath != m_newPath) {
|
if (newPath != m_newPath) {
|
||||||
qWarning() << Q_FUNC_INFO << ": New path doesn't match a path in a queue.";
|
qWarning() << Q_FUNC_INFO << ": New path doesn't match a path in a queue.";
|
||||||
return;
|
return;
|
||||||
@@ -1367,13 +1343,6 @@ void TorrentHandle::handleStorageMovedAlert(libtorrent::storage_moved_alert *p)
|
|||||||
m_session->handleTorrentSavePathChanged(this);
|
m_session->handleTorrentSavePathChanged(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to remove old folder if empty
|
|
||||||
QDir oldSaveDir(Utils::Fs::fromNativePath(m_oldPath));
|
|
||||||
if (oldSaveDir != QDir(m_session->defaultSavePath())) {
|
|
||||||
qDebug("Attempting to remove %s", qPrintable(m_oldPath));
|
|
||||||
QDir().rmpath(m_oldPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!isMoveInProgress() && (m_renameCount == 0) && !m_moveFinishedTriggers.isEmpty())
|
while (!isMoveInProgress() && (m_renameCount == 0) && !m_moveFinishedTriggers.isEmpty())
|
||||||
m_moveFinishedTriggers.takeFirst()();
|
m_moveFinishedTriggers.takeFirst()();
|
||||||
}
|
}
|
||||||
@@ -1702,6 +1671,11 @@ void TorrentHandle::manageIncompleteFiles()
|
|||||||
{
|
{
|
||||||
const bool isAppendExtensionEnabled = m_session->isAppendExtensionEnabled();
|
const bool isAppendExtensionEnabled = m_session->isAppendExtensionEnabled();
|
||||||
QVector<qreal> fp = filesProgress();
|
QVector<qreal> fp = filesProgress();
|
||||||
|
if( fp.size() != filesCount() ) {
|
||||||
|
qDebug() << "skip manageIncompleteFiles because of invalid torrent meta-data or empty file-progress";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < filesCount(); ++i) {
|
for (int i = 0; i < filesCount(); ++i) {
|
||||||
QString name = filePath(i);
|
QString name = filePath(i);
|
||||||
if (isAppendExtensionEnabled && (fileSize(i) > 0) && (fp[i] < 1)) {
|
if (isAppendExtensionEnabled && (fileSize(i) > 0) && (fp[i] < 1)) {
|
||||||
@@ -1774,10 +1748,7 @@ bool TorrentHandle::useTempPath() const
|
|||||||
|
|
||||||
void TorrentHandle::updateStatus()
|
void TorrentHandle::updateStatus()
|
||||||
{
|
{
|
||||||
libt::torrent_status status;
|
updateStatus(m_nativeHandle.status());
|
||||||
SAFE_GET(status, status);
|
|
||||||
|
|
||||||
updateStatus(status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::updateStatus(const libtorrent::torrent_status &nativeStatus)
|
void TorrentHandle::updateStatus(const libtorrent::torrent_status &nativeStatus)
|
||||||
@@ -1804,22 +1775,24 @@ void TorrentHandle::setRatioLimit(qreal limit)
|
|||||||
|
|
||||||
void TorrentHandle::setUploadLimit(int limit)
|
void TorrentHandle::setUploadLimit(int limit)
|
||||||
{
|
{
|
||||||
SAFE_CALL(set_upload_limit, limit)
|
m_nativeHandle.set_upload_limit(limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::setDownloadLimit(int limit)
|
void TorrentHandle::setDownloadLimit(int limit)
|
||||||
{
|
{
|
||||||
SAFE_CALL(set_download_limit, limit)
|
m_nativeHandle.set_download_limit(limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::setSuperSeeding(bool enable)
|
void TorrentHandle::setSuperSeeding(bool enable)
|
||||||
{
|
{
|
||||||
SAFE_CALL(super_seeding, enable)
|
m_nativeHandle.super_seeding(enable);
|
||||||
|
if (superSeeding() != enable)
|
||||||
|
updateStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::flushCache()
|
void TorrentHandle::flushCache()
|
||||||
{
|
{
|
||||||
SAFE_CALL(flush_cache)
|
m_nativeHandle.flush_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TorrentHandle::toMagnetUri() const
|
QString TorrentHandle::toMagnetUri() const
|
||||||
@@ -1847,7 +1820,7 @@ void TorrentHandle::prioritizeFiles(const QVector<int> &priorities)
|
|||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Changing files priorities...";
|
qDebug() << Q_FUNC_INFO << "Changing files priorities...";
|
||||||
SAFE_CALL(prioritize_files, priorities.toStdVector());
|
m_nativeHandle.prioritize_files(priorities.toStdVector());
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Moving unwanted files to .unwanted folder and conversely...";
|
qDebug() << Q_FUNC_INFO << "Moving unwanted files to .unwanted folder and conversely...";
|
||||||
QString spath = savePath(true);
|
QString spath = savePath(true);
|
||||||
|
|||||||