Compare commits
276 Commits
release-3.
...
release-3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
4eac2cab31 | ||
|
|
87f4f57f8e | ||
|
|
a6e250fa43 | ||
|
|
b118079379 | ||
|
|
cb2d39f2a7 | ||
|
|
4cf549ff25 | ||
|
|
b5c6342dca | ||
|
|
46ec556921 | ||
|
|
33ae1a7bee | ||
|
|
87a3a67668 | ||
|
|
055b1e0163 | ||
|
|
2bd5ea2c68 | ||
|
|
1479a74198 | ||
|
|
9a0d25284c | ||
|
|
284e836992 | ||
|
|
43f5b31843 | ||
|
|
cada6cfc88 | ||
|
|
99f157927f | ||
|
|
664664394c | ||
|
|
a790901691 | ||
|
|
fdc70eaa62 | ||
|
|
b05a23e1ab | ||
|
|
9f6a0882e2 | ||
|
|
b351b21e55 | ||
|
|
ef22f06e92 | ||
|
|
8ea7426bc1 | ||
|
|
79e7e1727f | ||
|
|
98c33dd77c | ||
|
|
9c6504f6dd | ||
|
|
76c350bdcb | ||
|
|
106dcfd00e | ||
|
|
668c8cb0e2 | ||
|
|
3159bdf4dd | ||
|
|
97d2c0d187 | ||
|
|
0041ee3636 | ||
|
|
1ed523bec3 | ||
|
|
b131a6e9df | ||
|
|
56d9d370e9 | ||
|
|
a6efc4d92d | ||
|
|
a77db6e822 | ||
|
|
95a558941e | ||
|
|
867d69d0f2 | ||
|
|
a6d381da38 | ||
|
|
f0eb708b07 | ||
|
|
1d70698bd0 | ||
|
|
79871c8e21 | ||
|
|
25d5524213 | ||
|
|
8d21b73434 | ||
|
|
2ef01a314c | ||
|
|
a8b4aca5e6 | ||
|
|
67e7315eae | ||
|
|
a25a15d1c6 | ||
|
|
086588eeed | ||
|
|
44fa308681 | ||
|
|
6188287094 | ||
|
|
17d10afd65 | ||
|
|
89bd0e4397 | ||
|
|
1c1917f885 | ||
|
|
642377bd65 | ||
|
|
bb4668c071 | ||
|
|
689316db09 | ||
|
|
ad0c008a3e | ||
|
|
09e3698b37 | ||
|
|
6450ebfc6c | ||
|
|
e9f38ebcfd | ||
|
|
4dba31f534 | ||
|
|
04c1aad0dd | ||
|
|
6763f3ac33 | ||
|
|
afca704db0 | ||
|
|
eaec8fcddd | ||
|
|
f86fd52d6f | ||
|
|
f3f175570c | ||
|
|
729c80f910 | ||
|
|
fcaca558a0 | ||
|
|
983df9113e | ||
|
|
acf9874252 | ||
|
|
d7cf6bb11b | ||
|
|
558ea53cc2 | ||
|
|
87a6478430 | ||
|
|
cea673b267 | ||
|
|
4a5ab93c62 | ||
|
|
4c86fc8973 | ||
|
|
1c485ffb07 | ||
|
|
f283734f13 | ||
|
|
dca4ff0649 | ||
|
|
1975f2269e | ||
|
|
6fac9b42da | ||
|
|
dabae4c914 | ||
|
|
b1e9b4493d | ||
|
|
2fa207e728 | ||
|
|
7adcd909e7 | ||
|
|
50805fc2b5 | ||
|
|
3a1b7b6159 | ||
|
|
498b7c2436 | ||
|
|
4f17364305 | ||
|
|
9ebc115719 | ||
|
|
a6fa8c3a8e | ||
|
|
8187366c89 | ||
|
|
366ad01120 | ||
|
|
4da05e5914 | ||
|
|
3fb19b6a28 | ||
|
|
88f59070a4 | ||
|
|
476ffbe68a | ||
|
|
8a1846cb26 | ||
|
|
1cafde2afe | ||
|
|
bdf7312f5d | ||
|
|
a848d3d2d8 | ||
|
|
4a328843e4 | ||
|
|
edeb2342be | ||
|
|
0639a06809 | ||
|
|
7590d0fdad | ||
|
|
fe54da80cd | ||
|
|
e4ac654795 | ||
|
|
1848180faa | ||
|
|
4e9b71078f | ||
|
|
fe1b388347 | ||
|
|
23b4e62834 | ||
|
|
7fb96431b9 | ||
|
|
5213f35ec0 | ||
|
|
8e2297510d | ||
|
|
18505e2517 | ||
|
|
10908a6ece | ||
|
|
c1ee91cd2a | ||
|
|
036b4e1a85 | ||
|
|
3a4dc08304 | ||
|
|
e805e6806a | ||
|
|
f2163f6c3d | ||
|
|
6288cb4fd3 | ||
|
|
409e877f8a | ||
|
|
f2d5ba2907 | ||
|
|
b33d0f0a59 | ||
|
|
63245de69b | ||
|
|
b9fd9f1d8d |
@@ -9,8 +9,8 @@ environment:
|
|||||||
REPO_DIR: &REPO_DIR c:\qbittorrent
|
REPO_DIR: &REPO_DIR c:\qbittorrent
|
||||||
CACHE_DIR: &CACHE_DIR c:\qbt_cache
|
CACHE_DIR: &CACHE_DIR c:\qbt_cache
|
||||||
|
|
||||||
QBT_VER_URL: http://builds.shiki.hu/appveyor/version
|
QBT_VER_URL: https://builds.shiki.hu/appveyor/version
|
||||||
QBT_LIB_URL: http://builds.shiki.hu/appveyor/qbt_libraries.7z
|
QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries.7z
|
||||||
|
|
||||||
# project directory
|
# project directory
|
||||||
clone_folder: *REPO_DIR
|
clone_folder: *REPO_DIR
|
||||||
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):
|
||||||
|
|
||||||
45
.travis.yml
@@ -3,7 +3,7 @@ language: cpp
|
|||||||
os:
|
os:
|
||||||
- linux
|
- linux
|
||||||
- osx
|
- osx
|
||||||
osx_image: xcode7
|
osx_image: xcode7.3
|
||||||
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -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:
|
||||||
@@ -30,7 +36,10 @@ notifications:
|
|||||||
|
|
||||||
# container-based builds
|
# container-based builds
|
||||||
#sudo: false
|
#sudo: false
|
||||||
cache: ccache
|
cache:
|
||||||
|
ccache: true
|
||||||
|
directories:
|
||||||
|
- $HOME/hombebrew_cache
|
||||||
|
|
||||||
# opt-in Ubuntu Trusty
|
# opt-in Ubuntu Trusty
|
||||||
sudo: required
|
sudo: required
|
||||||
@@ -117,12 +126,40 @@ install:
|
|||||||
fi
|
fi
|
||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
|
wget https://builds.shiki.hu/homebrew/version ;
|
||||||
|
if ! cmp --quiet "version" "$HOME/hombebrew_cache/version" ; then
|
||||||
|
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 ;
|
||||||
|
cd "$HOME/hombebrew_cache" ;
|
||||||
|
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/qt5.rb ;
|
||||||
|
wget https://builds.shiki.hu/homebrew/qt5-5.7.1_1.el_capitan.bottle.tar.gz ;
|
||||||
|
fi
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
brew update > /dev/null && brew install colormake ccache libtorrent-rasterbar ;
|
brew update > /dev/null ;
|
||||||
|
brew install colormake ccache ;
|
||||||
|
brew outdated "pkg-config" || brew upgrade "pkg-config" ;
|
||||||
|
# Copy custom libtorrent bottle to homebrew's cache so it can find and install it
|
||||||
|
# Also install our custom libtorrent formula by passing the local path to it
|
||||||
|
# These 2 files are restored from Travis' cache.
|
||||||
|
cp "$HOME/hombebrew_cache/libtorrent-rasterbar-1.0.10.el_capitan.bottle.tar.gz" "$(brew --cache)" ;
|
||||||
|
brew install "$HOME/hombebrew_cache/libtorrent-rasterbar.rb" ;
|
||||||
|
|
||||||
# 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.6.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
|
||||||
|
|||||||
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
|
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
|
||||||
|
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)
|
||||||
@@ -28,7 +27,6 @@ add_definitions(-DVERSION_BUILD=${VER_BUILD})
|
|||||||
# } else {
|
# } else {
|
||||||
add_definitions(-DVERSION="v${PROJECT_VERSION}")
|
add_definitions(-DVERSION="v${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)
|
||||||
|
|||||||
144
Changelog
@@ -1,3 +1,147 @@
|
|||||||
|
* 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
|
||||||
|
- 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: Make resume/pause menu items clickable. Closes #6040. (Oke Atime)
|
||||||
|
- WINDOWS: Make the updater to look for the x64 installer if running x64 version. (sledgehammer999)
|
||||||
|
|
||||||
|
* Wed Dec 14 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.9
|
||||||
|
- BUGFIX: Fix slider for per torrent speed limits when no global speed limit has been set. Closes #6046. (sledgehammer999)
|
||||||
|
- BUGFIX: Fix GUI for proxy settings. Closes #6045. (sledgehammer999)
|
||||||
|
- OSX: Correctly migrate settings/rss/usage stats in macOS. Closes #6041. (sledgehammer999)
|
||||||
|
|
||||||
|
* Wed Dec 14 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.8
|
||||||
|
- FEATURE: Start using new libtorrent 1.1.x APIs (needs at least 1.1.2). Still unofficial support. (glassez, sledgehammer999)
|
||||||
|
- FEATURE: Add a new DHT bootstrap node run by libtorrent author arvidn. (sledgehammer999)
|
||||||
|
- FEATURE: Option to disable tracker's favicon download. (sledgehammer999)
|
||||||
|
- FEATURE: Shift + scroll = horizontal scroll. Closes #5980. Only for TransferListWidget, PeerListWidget. (Chocobo1)
|
||||||
|
- BUGFIX: Actually set new path as default when checkBox is enabled in Add New Torrent dialog. (erikssm)
|
||||||
|
- BUGFIX: Properly fix the handling of default save path store/load. (sledgehammer999)
|
||||||
|
- BUGFIX: Fix crash when restoring from tray. Closes #5854. (Chocobo1)
|
||||||
|
- BUGFIX: Export torrents added only after the setting was enabled. (sledgehammer999)
|
||||||
|
- BUGFIX: Delete old rss favicon before assigning new one. (sledgehammer999)
|
||||||
|
- BUGFIX: Don't revert save path value in the Dialog when metadata are received. Closes #5482. (sledgehammer999)
|
||||||
|
- BUGFIX: Don't ever stop seeding forced torrents. Closes #5784. (sledgehammer999)
|
||||||
|
- BUGFIX: Fix potential crash in TransferList widget. Closes #5873. (Chocobo1)
|
||||||
|
- BUGFIX: Sort torrent names case insensitively. (Yez Ezey)
|
||||||
|
- BUGFIX: Fix mistake in getting values for sorting in TransferList widget. (Anton Lashkov)
|
||||||
|
- BUGFIX: Fix memory leaks. (dzmat, Chocobo1)
|
||||||
|
- WEBUI: Fix webui port overflow. (thalieht)
|
||||||
|
- WEBUI: Changed meaning of the value of the 'dl_limit', 'up_limit', 'alt_dl_limit' and 'alt_up_limit' tokens. The value is expressed in bytes and not in KiB. (sledgehammer999)
|
||||||
|
- WEBUI: Don't request client SSL certificate. Closes #3883. (borouhin)
|
||||||
|
- WEBUI: Bump API_VERSION and API_VERSION_MIN to 11.
|
||||||
|
- SEARCH: Fixed extratorrent search not working Closes #5736 #5753. (Yez Ezey)
|
||||||
|
- SEARCH: Update Demonoid plugin. (ngosang)
|
||||||
|
- SEARCH: Remove TorrentReactor plugin. (ngosang)
|
||||||
|
- SEARCH: Fix python auto install, deletion of installer and use 3.5.x series for Vista+. Closes #5871. (sledgehammer999)
|
||||||
|
- SEARCH: Set /usr/local/bin before default PATH on macOS. closes #5639 #5571. This enables finding newer python installs. (Yez Ezey)
|
||||||
|
- COSMETIC: Log: set embedded Tracker [OFF] msg type as info. (thalieht)
|
||||||
|
- COSMETIC: Remove (mostly) useless log warnings about tracker's favicon. (sledgehammer999)
|
||||||
|
- COSMETIC: Change RSS view layout to horizontal. Closes #5920. (Chocobo1)
|
||||||
|
- OSX: Fix crash on exit using Qt4. (Yez Ezey)
|
||||||
|
- OSX: Change QSettings to IniFormat on macOS. Closes #5770 #5808. (Yez Ezey)
|
||||||
|
- LINUX: Workaround a Qt5 bug which results in a flood of network interface change singals. (Eugene Shalygin)
|
||||||
|
- OTHER: Turkish translation for installer. (Burak Yavuz)
|
||||||
|
- OTHER: Update portugueseBR for installer. (DaRKSoM)
|
||||||
|
- OTHER: Update portuguese for installer. (EdwardLinux)
|
||||||
|
- OTHER: Add --disable-qt-dbus to configure if $host_os is macOS. (Yez Ezey)
|
||||||
|
- OTHER: New translations: Icelandic, Latvian, Malay, Occitan, Uzbek.
|
||||||
|
- OTHER: A whole lot of code refactoring by various people.
|
||||||
|
|
||||||
|
* Sun Sep 11 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.7
|
||||||
|
- FEATURE: Delete torrent+files with Shift+Delete (pieniacy)
|
||||||
|
- BUGFIX: Fix 6-hour speedplot point push rate. Close #5545 (Daniel Segesdi)
|
||||||
|
- BUGFIX: Avoid spawning a new explorer.exe process when selecting "Open containing folder". Closes #5564. (Chocobo1)
|
||||||
|
- BUGFIX: Fix loading of new geoip db due to an artificial size limit. (SagePtr)
|
||||||
|
- BUGFIX: Better error handling and logging with smtp communication. (Brian Kendall)
|
||||||
|
- SEARCH: Remove KickassTorrents search engine (ngosang)
|
||||||
|
- SEARCH: Remove BTDigg search engine (ngosang)
|
||||||
|
- SEARCH: Update Torrentz search engine (ngosang)
|
||||||
|
|
||||||
|
* Wed Jul 20 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.6
|
||||||
|
- BUGFIX: Do not create save folder in advance (glassez)
|
||||||
|
- BUGFIX: Fix upper-bound limit of command line for "Run External Program" in Windows. Closes #5399. (Chocobo1)
|
||||||
|
- BUGFIX: Invoke system's cmd.exe directly. (Chocobo1)
|
||||||
|
- BUGFIX: Workaround space issues in file path for running external program on Windows. (Chocobo1)
|
||||||
|
- BUGFIX: Fix icons are missing when using RTL languages in Options dialog. Closes #5398. (Chocobo1)
|
||||||
|
|
||||||
* Mon Jun 20 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.5
|
* Mon Jun 20 2016 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.5
|
||||||
- FEATURE: Implement Torrent Management Mode(TMM) (glassez)
|
- FEATURE: Implement Torrent Management Mode(TMM) (glassez)
|
||||||
- FEATURE: New cookies management dialog and various related fixes (glassez)
|
- FEATURE: New cookies management dialog and various related fixes (glassez)
|
||||||
|
|||||||
@@ -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}")
|
||||||
endif()
|
else()
|
||||||
|
# all possible boost dependencies
|
||||||
|
set(_boost_components
|
||||||
|
date_time
|
||||||
|
system
|
||||||
|
chrono
|
||||||
|
random
|
||||||
|
thread
|
||||||
|
)
|
||||||
|
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})
|
||||||
list(APPEND _QT_CMPNTS "Qt4::Qt${_cmp}")
|
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}")
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
else (QT4_FOUND)
|
else (QT4_FOUND)
|
||||||
foreach(_cmp ${ARGN})
|
foreach(_cmp ${ARGN})
|
||||||
list(APPEND _QT_CMPNTS "Qt5::${_cmp}")
|
if ("${_cmp}" STREQUAL "PRIVATE" OR
|
||||||
|
"${_cmp}" STREQUAL "PUBLIC" OR
|
||||||
|
"${_cmp}" STREQUAL "INTERFACE")
|
||||||
|
list(APPEND _QT_CMPNTS "${_cmp}")
|
||||||
|
else()
|
||||||
|
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,7 +9,10 @@ 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
|
||||||
@@ -18,9 +21,7 @@ set(LibtorrentRasterbar_CUSTOM_DEFINITIONS
|
|||||||
-D_WIN32_IE=0x0500
|
-D_WIN32_IE=0x0500
|
||||||
-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 +30,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)
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ QMAKE_CXXFLAGS += @QBT_CONF_EXTRA_CFLAGS@
|
|||||||
|
|
||||||
EXTERNAL_INCLUDES = @QBT_CONF_INCLUDES@
|
EXTERNAL_INCLUDES = @QBT_CONF_INCLUDES@
|
||||||
EXTERNAL_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS
|
EXTERNAL_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS
|
||||||
|
# added /usr/local/include due to Qt 5.7.0 bug on macOS
|
||||||
|
macx: EXTERNAL_INCLUDES += "/usr/local/include"
|
||||||
INCLUDEPATH += $$EXTERNAL_INCLUDES
|
INCLUDEPATH += $$EXTERNAL_INCLUDES
|
||||||
|
|
||||||
EXTERNAL_LIBS = @LDFLAGS@ @LIBS@
|
EXTERNAL_LIBS = @LDFLAGS@ @LIBS@
|
||||||
|
|||||||
98
configure
vendored
@@ -4257,6 +4257,17 @@ else
|
|||||||
$as_echo "no" >&6; }
|
$as_echo "no" >&6; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OS is macOS" >&5
|
||||||
|
$as_echo_n "checking whether OS is macOS... " >&6; }
|
||||||
|
if expr "$host_os" : ".*darwin.*" > /dev/null; then :
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
|
$as_echo "yes" >&6; }
|
||||||
|
enable_qt_dbus=no
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
fi
|
||||||
|
|
||||||
# Require 0.23 pkg-config
|
# Require 0.23 pkg-config
|
||||||
|
|
||||||
|
|
||||||
@@ -4493,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 :
|
||||||
@@ -4610,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 :
|
||||||
@@ -5033,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
|
||||||
@@ -5083,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. */
|
||||||
@@ -5090,7 +5030,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
boost::system::system_category
|
boost::system::error_category *a = 0;
|
||||||
;
|
;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,12 @@ AS_IF([expr "$host_os" : ".*freebsd.*" > /dev/null],
|
|||||||
LIBS="-lexecinfo $LIBS"],
|
LIBS="-lexecinfo $LIBS"],
|
||||||
[AC_MSG_RESULT([no])])
|
[AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether OS is macOS])
|
||||||
|
AS_IF([expr "$host_os" : ".*darwin.*" > /dev/null],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
enable_qt_dbus=no],
|
||||||
|
[AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
# Require 0.23 pkg-config
|
# Require 0.23 pkg-config
|
||||||
PKG_PROG_PKG_CONFIG([0.23])
|
PKG_PROG_PKG_CONFIG([0.23])
|
||||||
AS_IF([test "x$PKG_CONFIG" = "x"],
|
AS_IF([test "x$PKG_CONFIG" = "x"],
|
||||||
@@ -156,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.5</string>
|
<string>3.3.11</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>
|
||||||
|
|||||||
BIN
dist/qt-translations/qt_ar.qm
vendored
BIN
dist/qt-translations/qt_ca.qm
vendored
BIN
dist/qt-translations/qt_cs.qm
vendored
BIN
dist/qt-translations/qt_da.qm
vendored
BIN
dist/qt-translations/qt_de.qm
vendored
BIN
dist/qt-translations/qt_es.qm
vendored
BIN
dist/qt-translations/qt_fa.qm
vendored
Normal file
BIN
dist/qt-translations/qt_fi.qm
vendored
BIN
dist/qt-translations/qt_fr.qm
vendored
BIN
dist/qt-translations/qt_gl.qm
vendored
BIN
dist/qt-translations/qt_he.qm
vendored
BIN
dist/qt-translations/qt_hu.qm
vendored
BIN
dist/qt-translations/qt_it.qm
vendored
BIN
dist/qt-translations/qt_ja.qm
vendored
BIN
dist/qt-translations/qt_ko.qm
vendored
BIN
dist/qt-translations/qt_lt.qm
vendored
BIN
dist/qt-translations/qt_pl.qm
vendored
BIN
dist/qt-translations/qt_pt.qm
vendored
BIN
dist/qt-translations/qt_ru.qm
vendored
BIN
dist/qt-translations/qt_sk.qm
vendored
BIN
dist/qt-translations/qt_sl.qm
vendored
Normal file
BIN
dist/qt-translations/qt_sv.qm
vendored
BIN
dist/qt-translations/qt_uk.qm
vendored
BIN
dist/qt-translations/qt_zh_CN.qm
vendored
BIN
dist/qt-translations/qt_zh_TW.qm
vendored
BIN
dist/qt-translations/qtbase_ca.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_cs.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_de.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_fi.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_fr.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_he.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_hu.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_it.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_ja.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_ko.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_lv.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_pl.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_ru.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_sk.qm
vendored
Normal file
BIN
dist/qt-translations/qtbase_uk.qm
vendored
Normal file
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 |
9
dist/windows/README.txt
vendored
@@ -16,17 +16,13 @@ TRANSLATORS:
|
|||||||
PACKAGERS:
|
PACKAGERS:
|
||||||
|
|
||||||
You will need NSIS and upx to make the installer. You need a unicode version of NSIS.
|
You will need NSIS and upx to make the installer. You need a unicode version of NSIS.
|
||||||
I tested with NSIS 3.0a0.
|
I tested with NSIS 3.0 (final).
|
||||||
|
|
||||||
1. Open the options.nsi file in an editor and change line that contains
|
1. Open the options.nsi file in an editor and change line that contains
|
||||||
"!define PROG_VERSION "3.0.3"" to the version of qbittorrent you just built.
|
"!define PROG_VERSION "3.0.3"" to the version of qbittorrent you just built.
|
||||||
2. Extract the plugins found in the folder "nsis plugins" into your
|
2. Extract the plugins found in the folder "nsis plugins" into your
|
||||||
NSIS's unicode Plugin directory(usually C:\Program Files\NSIS\Plugins\x86-unicode).
|
NSIS's unicode Plugin directory(usually C:\Program Files\NSIS\Plugins\x86-unicode).
|
||||||
Only the *.dll files are needed. Don't use the .dll from UAC.zip, use the one from "UAC Unicode.zip".
|
Only the *.dll files are needed. Use the unicode version of the dlls.
|
||||||
NOTE: To build the unicode version of UAC with MSVC2008 you need:
|
|
||||||
a) the sources from UAC.zip
|
|
||||||
b) apply the util.cpp.diff from "UAC Unicode.zip" to util.cpp
|
|
||||||
c) in a msvc command prompt issue: cl.exe /O1s /GS- /GR- /EHs-c- /Zl /LD /DUNICODE RunAs.cpp uac.cpp util.cpp /link kernel32.lib user32.lib shell32.lib advapi32.lib ole32.lib /DLL /MANIFEST:NO /OUT:uac.dll
|
|
||||||
3. The script you need to compile is "qbittorrent.nsi". It includes all other necessary scripts.
|
3. The script you need to compile is "qbittorrent.nsi". It includes all other necessary scripts.
|
||||||
4. The script expects the following file tree:
|
4. The script expects the following file tree:
|
||||||
|
|
||||||
@@ -53,6 +49,7 @@ qbittorrent.exe
|
|||||||
qbittorrent.nsi
|
qbittorrent.nsi
|
||||||
qt.conf
|
qt.conf
|
||||||
translations.nsi
|
translations.nsi
|
||||||
|
UAC.nsh
|
||||||
uninstaller.nsi
|
uninstaller.nsi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
dist/windows/UAC.nsh
vendored
@@ -228,6 +228,8 @@ pop $_LOGICLIB_TEMP
|
|||||||
!undef _UAC_ParseDefineFlags_orin_this
|
!undef _UAC_ParseDefineFlags_orin_this
|
||||||
!ifdef _UAC_ParseDefineFlags_orin_f1
|
!ifdef _UAC_ParseDefineFlags_orin_f1
|
||||||
!undef _UAC_ParseDefineFlags_orin_f1
|
!undef _UAC_ParseDefineFlags_orin_f1
|
||||||
|
!endif
|
||||||
|
!ifdef _UAC_ParseDefineFlags_orin_f2
|
||||||
!undef _UAC_ParseDefineFlags_orin_f2
|
!undef _UAC_ParseDefineFlags_orin_f2
|
||||||
!endif
|
!endif
|
||||||
!macroend
|
!macroend
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ LangString inst_firewallinfo ${LANG_PORTUGUESE} "Adicionando regra à firewall d
|
|||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
LangString inst_warning ${LANG_PORTUGUESE} "O qBittorrent está a ser executado. Feche a aplicação antes de instalar esta versão."
|
LangString inst_warning ${LANG_PORTUGUESE} "O qBittorrent está a ser executado. Feche a aplicação antes de instalar esta versão."
|
||||||
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
||||||
LangString inst_uninstall_question ${LANG_PORTUGUESE} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
LangString inst_uninstall_question ${LANG_PORTUGUESE} "Uma antiga instalação foi encontrada.Essa mesma será desinstalada sem apagar as definições do usuário."
|
||||||
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
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."
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ LangString inst_firewallinfo ${LANG_PORTUGUESEBR} "Adicionando regra no firewall
|
|||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
LangString inst_warning ${LANG_PORTUGUESEBR} "qBittorrent está rodando. Por favor feche a aplicação antes de instalar."
|
LangString inst_warning ${LANG_PORTUGUESEBR} "qBittorrent está rodando. Por favor feche a aplicação antes de instalar."
|
||||||
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
||||||
LangString inst_uninstall_question ${LANG_PORTUGUESEBR} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
LangString inst_uninstall_question ${LANG_PORTUGUESEBR} "Uma instalação anterior foi detectada. Ela será desistalada sem deletar as configurações de usuário."
|
||||||
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
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."
|
||||||
|
|||||||
44
dist/windows/installer-translations/turkish.nsi
vendored
@@ -1,51 +1,51 @@
|
|||||||
;Installer strings
|
;Installer strings
|
||||||
|
|
||||||
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
|
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
|
||||||
LangString inst_qbt_req ${LANG_TURKISH} "qBittorrent (required)"
|
LangString inst_qbt_req ${LANG_TURKISH} "qBittorrent (zorunlu)"
|
||||||
;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
|
;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
|
||||||
LangString inst_dekstop ${LANG_TURKISH} "Create Desktop Shortcut"
|
LangString inst_dekstop ${LANG_TURKISH} "Masaüstü Kısayolu oluştur"
|
||||||
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
||||||
LangString inst_startmenu ${LANG_TURKISH} "Create Start Menu Shortcut"
|
LangString inst_startmenu ${LANG_TURKISH} "Başlangıç Menüsü Kısayolu oluştur"
|
||||||
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
||||||
LangString inst_torrent ${LANG_TURKISH} "Open .torrent files with qBittorrent"
|
LangString inst_torrent ${LANG_TURKISH} ".torrent dosyalarını qBittorrent ile aç"
|
||||||
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
||||||
LangString inst_magnet ${LANG_TURKISH} "Open magnet links with qBittorrent"
|
LangString inst_magnet ${LANG_TURKISH} "Magnet bağlantılarını qBittorrent ile aç"
|
||||||
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
||||||
LangString inst_firewall ${LANG_TURKISH} "Add Windows Firewall rule"
|
LangString inst_firewall ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekle"
|
||||||
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
||||||
LangString inst_firewallinfo ${LANG_TURKISH} "Adding Windows Firewall rule"
|
LangString inst_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı ekleniyor"
|
||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
LangString inst_warning ${LANG_TURKISH} "qBittorrent is running. Please close the application before installing."
|
LangString inst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen yüklemeden önce uygulamayı kapatın."
|
||||||
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
;LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
||||||
LangString inst_uninstall_question ${LANG_TURKISH} "A previous installation was detected. It will be uninstalled without deleting user settings."
|
LangString inst_uninstall_question ${LANG_TURKISH} "Önceki bir kurulum algılandı. Kullanıcı ayarları silinmeden kaldırılacaktır."
|
||||||
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
LangString inst_unist ${LANG_TURKISH} "Uninstalling previous version."
|
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} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_TURKISH} "qBittorrent'i çalıştır."
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
;Uninstaller strings
|
;Uninstaller strings
|
||||||
|
|
||||||
;LangString remove_files ${LANG_ENGLISH} "Remove files"
|
;LangString remove_files ${LANG_ENGLISH} "Remove files"
|
||||||
LangString remove_files ${LANG_TURKISH} "Remove files"
|
LangString remove_files ${LANG_TURKISH} "Dosyaları kaldır"
|
||||||
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
|
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
|
||||||
LangString remove_shortcuts ${LANG_TURKISH} "Remove shortcuts"
|
LangString remove_shortcuts ${LANG_TURKISH} "Kısayolları kaldır"
|
||||||
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
|
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
|
||||||
LangString remove_associations ${LANG_TURKISH} "Remove file associations"
|
LangString remove_associations ${LANG_TURKISH} "Dosya ilişkilendirmelerini kaldır"
|
||||||
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
|
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
|
||||||
LangString remove_registry ${LANG_TURKISH} "Remove registry keys"
|
LangString remove_registry ${LANG_TURKISH} "Kayıt defteri anahtarlarını kaldır"
|
||||||
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
|
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
|
||||||
LangString remove_conf ${LANG_TURKISH} "Remove configuration files"
|
LangString remove_conf ${LANG_TURKISH} "Yapılandırma dosyalarını kaldır"
|
||||||
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
|
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
|
||||||
LangString remove_firewall ${LANG_TURKISH} "Remove Windows Firewall rule"
|
LangString remove_firewall ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralını kaldır"
|
||||||
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
||||||
LangString remove_firewallinfo ${LANG_TURKISH} "Removing Windows Firewall rule"
|
LangString remove_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı kaldırılıyor"
|
||||||
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
||||||
LangString remove_cache ${LANG_TURKISH} "Remove torrents and cached data"
|
LangString remove_cache ${LANG_TURKISH} "Torrentleri ve önbelleklenen verileri kaldır"
|
||||||
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
||||||
LangString uninst_warning ${LANG_TURKISH} "qBittorrent is running. Please close the application before uninstalling."
|
LangString uninst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen kaldırmadan önce uygulamayı kapatın."
|
||||||
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
||||||
LangString uninst_tor_warn ${LANG_TURKISH} "Not removing .torrent association. It is associated with:"
|
LangString uninst_tor_warn ${LANG_TURKISH} ".torrent ilişkilendirmesi kaldırılmıyor. Şununla ilişkilendirildi:"
|
||||||
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
||||||
LangString uninst_mag_warn ${LANG_TURKISH} "Not removing magnet association. It is associated with:"
|
LangString uninst_mag_warn ${LANG_TURKISH} "Magnet ilişkilendirmesi kaldırılmıyor. Şununla ilişkilendirildi:"
|
||||||
|
|||||||
21
dist/windows/installer.nsi
vendored
@@ -30,12 +30,13 @@ Section $(inst_qbt_req) ;"qBittorrent (required)"
|
|||||||
File "qbittorrent.pdb"
|
File "qbittorrent.pdb"
|
||||||
File "qt.conf"
|
File "qt.conf"
|
||||||
File /oname=translations\qt_ar.qm "translations\qt_ar.qm"
|
File /oname=translations\qt_ar.qm "translations\qt_ar.qm"
|
||||||
|
File /oname=translations\qt_bg.qm "translations\qt_bg.qm"
|
||||||
File /oname=translations\qt_ca.qm "translations\qt_ca.qm"
|
File /oname=translations\qt_ca.qm "translations\qt_ca.qm"
|
||||||
File /oname=translations\qt_cs.qm "translations\qt_cs.qm"
|
File /oname=translations\qt_cs.qm "translations\qt_cs.qm"
|
||||||
File /oname=translations\qt_da.qm "translations\qt_da.qm"
|
File /oname=translations\qt_da.qm "translations\qt_da.qm"
|
||||||
File /oname=translations\qt_de.qm "translations\qt_de.qm"
|
File /oname=translations\qt_de.qm "translations\qt_de.qm"
|
||||||
File /oname=translations\qt_en.qm "translations\qt_en.qm"
|
|
||||||
File /oname=translations\qt_es.qm "translations\qt_es.qm"
|
File /oname=translations\qt_es.qm "translations\qt_es.qm"
|
||||||
|
File /oname=translations\qt_eu.qm "translations\qt_eu.qm"
|
||||||
File /oname=translations\qt_fa.qm "translations\qt_fa.qm"
|
File /oname=translations\qt_fa.qm "translations\qt_fa.qm"
|
||||||
File /oname=translations\qt_fi.qm "translations\qt_fi.qm"
|
File /oname=translations\qt_fi.qm "translations\qt_fi.qm"
|
||||||
File /oname=translations\qt_fr.qm "translations\qt_fr.qm"
|
File /oname=translations\qt_fr.qm "translations\qt_fr.qm"
|
||||||
@@ -46,15 +47,33 @@ Section $(inst_qbt_req) ;"qBittorrent (required)"
|
|||||||
File /oname=translations\qt_ja.qm "translations\qt_ja.qm"
|
File /oname=translations\qt_ja.qm "translations\qt_ja.qm"
|
||||||
File /oname=translations\qt_ko.qm "translations\qt_ko.qm"
|
File /oname=translations\qt_ko.qm "translations\qt_ko.qm"
|
||||||
File /oname=translations\qt_lt.qm "translations\qt_lt.qm"
|
File /oname=translations\qt_lt.qm "translations\qt_lt.qm"
|
||||||
|
File /oname=translations\qt_nl.qm "translations\qt_nl.qm"
|
||||||
File /oname=translations\qt_pl.qm "translations\qt_pl.qm"
|
File /oname=translations\qt_pl.qm "translations\qt_pl.qm"
|
||||||
File /oname=translations\qt_pt.qm "translations\qt_pt.qm"
|
File /oname=translations\qt_pt.qm "translations\qt_pt.qm"
|
||||||
|
File /oname=translations\qt_pt_BR.qm "translations\qt_pt_BR.qm"
|
||||||
File /oname=translations\qt_ru.qm "translations\qt_ru.qm"
|
File /oname=translations\qt_ru.qm "translations\qt_ru.qm"
|
||||||
File /oname=translations\qt_sk.qm "translations\qt_sk.qm"
|
File /oname=translations\qt_sk.qm "translations\qt_sk.qm"
|
||||||
File /oname=translations\qt_sl.qm "translations\qt_sl.qm"
|
File /oname=translations\qt_sl.qm "translations\qt_sl.qm"
|
||||||
File /oname=translations\qt_sv.qm "translations\qt_sv.qm"
|
File /oname=translations\qt_sv.qm "translations\qt_sv.qm"
|
||||||
|
File /oname=translations\qt_tr.qm "translations\qt_tr.qm"
|
||||||
File /oname=translations\qt_uk.qm "translations\qt_uk.qm"
|
File /oname=translations\qt_uk.qm "translations\qt_uk.qm"
|
||||||
File /oname=translations\qt_zh_CN.qm "translations\qt_zh_CN.qm"
|
File /oname=translations\qt_zh_CN.qm "translations\qt_zh_CN.qm"
|
||||||
File /oname=translations\qt_zh_TW.qm "translations\qt_zh_TW.qm"
|
File /oname=translations\qt_zh_TW.qm "translations\qt_zh_TW.qm"
|
||||||
|
File /oname=translations\qtbase_ca.qm "translations\qtbase_ca.qm"
|
||||||
|
File /oname=translations\qtbase_cs.qm "translations\qtbase_cs.qm"
|
||||||
|
File /oname=translations\qtbase_de.qm "translations\qtbase_de.qm"
|
||||||
|
File /oname=translations\qtbase_fi.qm "translations\qtbase_fi.qm"
|
||||||
|
File /oname=translations\qtbase_fr.qm "translations\qtbase_fr.qm"
|
||||||
|
File /oname=translations\qtbase_he.qm "translations\qtbase_he.qm"
|
||||||
|
File /oname=translations\qtbase_hu.qm "translations\qtbase_hu.qm"
|
||||||
|
File /oname=translations\qtbase_it.qm "translations\qtbase_it.qm"
|
||||||
|
File /oname=translations\qtbase_ja.qm "translations\qtbase_ja.qm"
|
||||||
|
File /oname=translations\qtbase_ko.qm "translations\qtbase_ko.qm"
|
||||||
|
File /oname=translations\qtbase_lv.qm "translations\qtbase_lv.qm"
|
||||||
|
File /oname=translations\qtbase_pl.qm "translations\qtbase_pl.qm"
|
||||||
|
File /oname=translations\qtbase_ru.qm "translations\qtbase_ru.qm"
|
||||||
|
File /oname=translations\qtbase_sk.qm "translations\qtbase_sk.qm"
|
||||||
|
File /oname=translations\qtbase_uk.qm "translations\qtbase_uk.qm"
|
||||||
|
|
||||||
; Write the installation path into the registry
|
; Write the installation path into the registry
|
||||||
WriteRegStr HKLM "Software\qBittorrent" "InstallLocation" "$INSTDIR"
|
WriteRegStr HKLM "Software\qBittorrent" "InstallLocation" "$INSTDIR"
|
||||||
|
|||||||
BIN
dist/windows/nsis plugins/UAC Unicode.zip
vendored
BIN
dist/windows/nsis plugins/UAC.zip
vendored
4
dist/windows/options.nsi
vendored
@@ -19,7 +19,7 @@ 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.5"
|
!define PROG_VERSION "3.3.11"
|
||||||
!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)
|
||||||
@@ -33,7 +33,7 @@ OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
|
|||||||
;Installer Version Information
|
;Installer Version Information
|
||||||
VIAddVersionKey "ProductName" "qBittorrent"
|
VIAddVersionKey "ProductName" "qBittorrent"
|
||||||
VIAddVersionKey "CompanyName" "The qBittorrent project"
|
VIAddVersionKey "CompanyName" "The qBittorrent project"
|
||||||
VIAddVersionKey "LegalCopyright" "Copyright ©2006-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}"
|
||||||
|
|
||||||
|
|||||||
21
dist/windows/uninstaller.nsi
vendored
@@ -6,12 +6,13 @@
|
|||||||
Delete "$INSTDIR\qbittorrent.pdb"
|
Delete "$INSTDIR\qbittorrent.pdb"
|
||||||
Delete "$INSTDIR\qt.conf"
|
Delete "$INSTDIR\qt.conf"
|
||||||
Delete "$INSTDIR\translations\qt_ar.qm"
|
Delete "$INSTDIR\translations\qt_ar.qm"
|
||||||
|
Delete "$INSTDIR\translations\qt_bg.qm"
|
||||||
Delete "$INSTDIR\translations\qt_ca.qm"
|
Delete "$INSTDIR\translations\qt_ca.qm"
|
||||||
Delete "$INSTDIR\translations\qt_cs.qm"
|
Delete "$INSTDIR\translations\qt_cs.qm"
|
||||||
Delete "$INSTDIR\translations\qt_da.qm"
|
Delete "$INSTDIR\translations\qt_da.qm"
|
||||||
Delete "$INSTDIR\translations\qt_de.qm"
|
Delete "$INSTDIR\translations\qt_de.qm"
|
||||||
Delete "$INSTDIR\translations\qt_en.qm"
|
|
||||||
Delete "$INSTDIR\translations\qt_es.qm"
|
Delete "$INSTDIR\translations\qt_es.qm"
|
||||||
|
Delete "$INSTDIR\translations\qt_eu.qm"
|
||||||
Delete "$INSTDIR\translations\qt_fa.qm"
|
Delete "$INSTDIR\translations\qt_fa.qm"
|
||||||
Delete "$INSTDIR\translations\qt_fi.qm"
|
Delete "$INSTDIR\translations\qt_fi.qm"
|
||||||
Delete "$INSTDIR\translations\qt_fr.qm"
|
Delete "$INSTDIR\translations\qt_fr.qm"
|
||||||
@@ -22,15 +23,33 @@
|
|||||||
Delete "$INSTDIR\translations\qt_ja.qm"
|
Delete "$INSTDIR\translations\qt_ja.qm"
|
||||||
Delete "$INSTDIR\translations\qt_ko.qm"
|
Delete "$INSTDIR\translations\qt_ko.qm"
|
||||||
Delete "$INSTDIR\translations\qt_lt.qm"
|
Delete "$INSTDIR\translations\qt_lt.qm"
|
||||||
|
Delete "$INSTDIR\translations\qt_nl.qm"
|
||||||
Delete "$INSTDIR\translations\qt_pl.qm"
|
Delete "$INSTDIR\translations\qt_pl.qm"
|
||||||
|
Delete "$INSTDIR\translations\qt_pt_BR.qm"
|
||||||
Delete "$INSTDIR\translations\qt_pt.qm"
|
Delete "$INSTDIR\translations\qt_pt.qm"
|
||||||
Delete "$INSTDIR\translations\qt_ru.qm"
|
Delete "$INSTDIR\translations\qt_ru.qm"
|
||||||
Delete "$INSTDIR\translations\qt_sk.qm"
|
Delete "$INSTDIR\translations\qt_sk.qm"
|
||||||
Delete "$INSTDIR\translations\qt_sl.qm"
|
Delete "$INSTDIR\translations\qt_sl.qm"
|
||||||
Delete "$INSTDIR\translations\qt_sv.qm"
|
Delete "$INSTDIR\translations\qt_sv.qm"
|
||||||
|
Delete "$INSTDIR\translations\qt_tr.qm"
|
||||||
Delete "$INSTDIR\translations\qt_uk.qm"
|
Delete "$INSTDIR\translations\qt_uk.qm"
|
||||||
Delete "$INSTDIR\translations\qt_zh_CN.qm"
|
Delete "$INSTDIR\translations\qt_zh_CN.qm"
|
||||||
Delete "$INSTDIR\translations\qt_zh_TW.qm"
|
Delete "$INSTDIR\translations\qt_zh_TW.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_ca.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_cs.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_de.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_fi.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_fr.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_he.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_hu.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_it.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_ja.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_ko.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_lv.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_pl.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_ru.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_sk.qm"
|
||||||
|
Delete "$INSTDIR\translations\qtbase_uk.qm"
|
||||||
Delete "$INSTDIR\uninst.exe"
|
Delete "$INSTDIR\uninst.exe"
|
||||||
|
|
||||||
; Remove directories used
|
; Remove directories used
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
# and this notice are preserved. This file is offered as-is, without any
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
# warranty.
|
# warranty.
|
||||||
|
|
||||||
#serial 17
|
#serial 18
|
||||||
|
|
||||||
AC_DEFUN([AX_BOOST_SYSTEM],
|
AC_DEFUN([AX_BOOST_SYSTEM],
|
||||||
[
|
[
|
||||||
@@ -68,9 +68,10 @@ AC_DEFUN([AX_BOOST_SYSTEM],
|
|||||||
ax_cv_boost_system,
|
ax_cv_boost_system,
|
||||||
[AC_LANG_PUSH([C++])
|
[AC_LANG_PUSH([C++])
|
||||||
CXXFLAGS_SAVE=$CXXFLAGS
|
CXXFLAGS_SAVE=$CXXFLAGS
|
||||||
|
CXXFLAGS=
|
||||||
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/system/error_code.hpp>]],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/system/error_code.hpp>]],
|
||||||
[[boost::system::system_category]])],
|
[[boost::system::error_category *a = 0;]])],
|
||||||
ax_cv_boost_system=yes, ax_cv_boost_system=no)
|
ax_cv_boost_system=yes, ax_cv_boost_system=no)
|
||||||
CXXFLAGS=$CXXFLAGS_SAVE
|
CXXFLAGS=$CXXFLAGS_SAVE
|
||||||
AC_LANG_POP([C++])
|
AC_LANG_POP([C++])
|
||||||
|
|||||||
@@ -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=""])
|
||||||
])
|
])
|
||||||
|
|||||||
20
macxconf.pri
@@ -34,6 +34,8 @@ qt_translations.files = \
|
|||||||
$$QT_LANG_PATH/qt_da.qm \
|
$$QT_LANG_PATH/qt_da.qm \
|
||||||
$$QT_LANG_PATH/qt_de.qm \
|
$$QT_LANG_PATH/qt_de.qm \
|
||||||
$$QT_LANG_PATH/qt_es.qm \
|
$$QT_LANG_PATH/qt_es.qm \
|
||||||
|
$$QT_LANG_PATH/qt_eu.qm \
|
||||||
|
$$QT_LANG_PATH/qt_fa.qm \
|
||||||
$$QT_LANG_PATH/qt_fi.qm \
|
$$QT_LANG_PATH/qt_fi.qm \
|
||||||
$$QT_LANG_PATH/qt_fr.qm \
|
$$QT_LANG_PATH/qt_fr.qm \
|
||||||
$$QT_LANG_PATH/qt_gl.qm \
|
$$QT_LANG_PATH/qt_gl.qm \
|
||||||
@@ -49,11 +51,27 @@ qt_translations.files = \
|
|||||||
$$QT_LANG_PATH/qt_pt_BR.qm \
|
$$QT_LANG_PATH/qt_pt_BR.qm \
|
||||||
$$QT_LANG_PATH/qt_ru.qm \
|
$$QT_LANG_PATH/qt_ru.qm \
|
||||||
$$QT_LANG_PATH/qt_sk.qm \
|
$$QT_LANG_PATH/qt_sk.qm \
|
||||||
|
$$QT_LANG_PATH/qt_sl.qm \
|
||||||
$$QT_LANG_PATH/qt_sv.qm \
|
$$QT_LANG_PATH/qt_sv.qm \
|
||||||
$$QT_LANG_PATH/qt_tr.qm \
|
$$QT_LANG_PATH/qt_tr.qm \
|
||||||
$$QT_LANG_PATH/qt_uk.qm \
|
$$QT_LANG_PATH/qt_uk.qm \
|
||||||
$$QT_LANG_PATH/qt_zh_CN.qm \
|
$$QT_LANG_PATH/qt_zh_CN.qm \
|
||||||
$$QT_LANG_PATH/qt_zh_TW.qm
|
$$QT_LANG_PATH/qt_zh_TW.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_ca.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_cs.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_de.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_fi.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_fr.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_he.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_hu.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_it.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_ja.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_ko.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_lv.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_pl.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_ru.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_sk.qm \
|
||||||
|
$$QT_LANG_PATH/qtbase_uk.qm
|
||||||
QMAKE_BUNDLE_DATA += qt_translations
|
QMAKE_BUNDLE_DATA += qt_translations
|
||||||
|
|
||||||
ICON = $$DIST_PATH/qbittorrent_mac.icns
|
ICON = $$DIST_PATH/qbittorrent_mac.icns
|
||||||
|
|||||||
@@ -161,10 +161,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)
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,7 @@
|
|||||||
#include "base/net/smtp.h"
|
#include "base/net/smtp.h"
|
||||||
#include "base/net/downloadmanager.h"
|
#include "base/net/downloadmanager.h"
|
||||||
#include "base/net/geoipmanager.h"
|
#include "base/net/geoipmanager.h"
|
||||||
|
#include "base/net/proxyconfigurationmanager.h"
|
||||||
#include "base/bittorrent/session.h"
|
#include "base/bittorrent/session.h"
|
||||||
#include "base/bittorrent/torrenthandle.h"
|
#include "base/bittorrent/torrenthandle.h"
|
||||||
|
|
||||||
@@ -261,9 +262,11 @@ void Application::runExternalProgram(BitTorrent::TorrentHandle *const torrent) c
|
|||||||
#if defined(Q_OS_UNIX)
|
#if defined(Q_OS_UNIX)
|
||||||
QProcess::startDetached(QLatin1String("/bin/sh"), {QLatin1String("-c"), program});
|
QProcess::startDetached(QLatin1String("/bin/sh"), {QLatin1String("-c"), program});
|
||||||
#elif defined(Q_OS_WIN) // test cmd: `echo "%F" > "c:\ab ba.txt"`
|
#elif defined(Q_OS_WIN) // test cmd: `echo "%F" > "c:\ab ba.txt"`
|
||||||
program.prepend(QLatin1String("cmd.exe /C "));
|
program.prepend(QLatin1String("\"")).append(QLatin1String("\""));
|
||||||
if (program.size() >= MAX_PATH) {
|
program.prepend(Utils::Misc::windowsSystemPath() + QLatin1String("\\cmd.exe /C "));
|
||||||
logger->addMessage(tr("Torrent: %1, run external program command too long (length > %2), execution failed.").arg(torrent->name()).arg(MAX_PATH), Log::CRITICAL);
|
const int cmdMaxLength = 32768; // max length (incl. terminate char) for `lpCommandLine` in `CreateProcessW()`
|
||||||
|
if ((program.size() + 1) > cmdMaxLength) {
|
||||||
|
logger->addMessage(tr("Torrent: %1, run external program command too long (length > %2), execution failed.").arg(torrent->name()).arg(cmdMaxLength), Log::CRITICAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,6 +396,7 @@ void Application::processParams(const QStringList ¶ms)
|
|||||||
|
|
||||||
int Application::exec(const QStringList ¶ms)
|
int Application::exec(const QStringList ¶ms)
|
||||||
{
|
{
|
||||||
|
Net::ProxyConfigurationManager::initInstance();
|
||||||
Net::DownloadManager::initInstance();
|
Net::DownloadManager::initInstance();
|
||||||
#ifdef DISABLE_GUI
|
#ifdef DISABLE_GUI
|
||||||
IconProvider::initInstance();
|
IconProvider::initInstance();
|
||||||
@@ -507,36 +511,27 @@ 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();
|
||||||
|
QLocale::setDefault(QLocale(localeStr));
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
@@ -619,11 +614,13 @@ void Application::cleanup()
|
|||||||
Net::GeoIPManager::freeInstance();
|
Net::GeoIPManager::freeInstance();
|
||||||
#endif
|
#endif
|
||||||
Net::DownloadManager::freeInstance();
|
Net::DownloadManager::freeInstance();
|
||||||
|
Net::ProxyConfigurationManager::freeInstance();
|
||||||
Preferences::freeInstance();
|
Preferences::freeInstance();
|
||||||
SettingsStorage::freeInstance();
|
SettingsStorage::freeInstance();
|
||||||
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
|
||||||
|
|||||||
@@ -135,6 +135,16 @@ int main(int argc, char *argv[])
|
|||||||
// We must save it here because QApplication constructor may change it
|
// We must save it here because QApplication constructor may change it
|
||||||
bool isOneArg = (argc == 2);
|
bool isOneArg = (argc == 2);
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
// On macOS 10.12 Sierra, Apple changed the behaviour of CFPreferencesSetValue() https://bugreports.qt.io/browse/QTBUG-56344
|
||||||
|
// Due to this, we have to move from native plist to IniFormat
|
||||||
|
macMigratePlists();
|
||||||
|
#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));
|
||||||
@@ -230,6 +240,17 @@ int main(int argc, char *argv[])
|
|||||||
qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1));
|
qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(Q_OS_MAC)
|
||||||
|
{
|
||||||
|
// Since Apple made difficult for users to set PATH, we set here for convenience.
|
||||||
|
// Users are supposed to install Homebrew Python for search function.
|
||||||
|
// For more info see issue #5571.
|
||||||
|
QByteArray path = "/usr/local/bin:";
|
||||||
|
path += qgetenv("PATH");
|
||||||
|
qputenv("PATH", path.constData());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
if (!upgrade()) return EXIT_FAILURE;
|
if (!upgrade()) return EXIT_FAILURE;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -15,78 +15,86 @@ static inline void print_stacktrace(FILE *out = stderr, unsigned int max_frames
|
|||||||
fprintf(out, "stack trace:\n");
|
fprintf(out, "stack trace:\n");
|
||||||
|
|
||||||
// storage array for stack trace address data
|
// storage array for stack trace address data
|
||||||
void* addrlist[max_frames+1];
|
void *addrlist[max_frames + 1];
|
||||||
|
|
||||||
// retrieve current stack addresses
|
// retrieve current stack addresses
|
||||||
int addrlen = backtrace(addrlist, sizeof(addrlist) / sizeof(void*));
|
int addrlen = backtrace(addrlist, sizeof(addrlist) / sizeof(void *));
|
||||||
|
|
||||||
if (addrlen == 0) {
|
if (addrlen == 0) {
|
||||||
fprintf(out, " <empty, possibly corrupt>\n");
|
fprintf(out, " <empty, possibly corrupt>\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// resolve addresses into strings containing "filename(function+address)",
|
// resolve addresses into strings containing "filename(function+address)",
|
||||||
// this array must be free()-ed
|
// this array must be free()-ed
|
||||||
char** symbollist = backtrace_symbols(addrlist, addrlen);
|
char * *symbollist = backtrace_symbols(addrlist, addrlen);
|
||||||
|
|
||||||
// allocate string which will be filled with the demangled function name
|
// allocate string which will be filled with the demangled function name
|
||||||
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) {
|
}
|
||||||
end_offset = p;
|
else if ((*p == ')') && begin_offset) {
|
||||||
break;
|
end_offset = p;
|
||||||
}
|
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';
|
|
||||||
|
|
||||||
// mangled name is now in [begin_name, begin_offset) and caller
|
// mangled name is now in [begin_name, begin_offset) and caller
|
||||||
// offset in [begin_offset, end_offset). now apply
|
// offset in [begin_offset, end_offset). now apply
|
||||||
// __cxa_demangle():
|
// __cxa_demangle():
|
||||||
|
|
||||||
int status;
|
int status;
|
||||||
char* ret = abi::__cxa_demangle(begin_name,
|
char *ret = abi::__cxa_demangle(begin_name,
|
||||||
funcname, &funcnamesize, &status);
|
funcname, &funcnamesize, &status);
|
||||||
if (status == 0) {
|
if (status == 0) {
|
||||||
funcname = ret; // use possibly realloc()-ed string
|
funcname = ret; // use possibly realloc()-ed string
|
||||||
fprintf(out, " %s : %s+%s %s\n",
|
fprintf(out, " %s : %s+%s %s\n",
|
||||||
symbollist[i], funcname, begin_offset, ++end_offset);
|
symbollist[i], funcname, begin_offset, ++end_offset);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// demangling failed. Output function name as a C function with
|
// demangling failed. Output function name as a C function with
|
||||||
// no arguments.
|
// no arguments.
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,24 +29,31 @@
|
|||||||
#ifndef UPGRADE_H
|
#ifndef UPGRADE_H
|
||||||
#define UPGRADE_H
|
#define UPGRADE_H
|
||||||
|
|
||||||
#include <libtorrent/lazy_entry.hpp>
|
#include <libtorrent/version.hpp>
|
||||||
#include <libtorrent/entry.hpp>
|
#if LIBTORRENT_VERSION_NUM >= 10100
|
||||||
|
#include <libtorrent/bdecode.hpp>
|
||||||
|
#endif
|
||||||
#include <libtorrent/bencode.hpp>
|
#include <libtorrent/bencode.hpp>
|
||||||
|
#include <libtorrent/entry.hpp>
|
||||||
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
|
#include <libtorrent/lazy_entry.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <QString>
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QRegExp>
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#endif
|
#endif
|
||||||
|
#include <QRegExp>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
#include "base/logger.h"
|
#include "base/logger.h"
|
||||||
#include "base/utils/fs.h"
|
#include "base/utils/fs.h"
|
||||||
#include "base/utils/misc.h"
|
#include "base/utils/misc.h"
|
||||||
#include "base/utils/string.h"
|
#include "base/utils/string.h"
|
||||||
#include "base/qinisettings.h"
|
|
||||||
#include "base/preferences.h"
|
#include "base/preferences.h"
|
||||||
|
#include "base/qinisettings.h"
|
||||||
|
|
||||||
bool userAcceptsUpgrade()
|
bool userAcceptsUpgrade()
|
||||||
{
|
{
|
||||||
@@ -86,10 +93,16 @@ bool upgradeResumeFile(const QString &filepath, const QVariantHash &oldTorrent =
|
|||||||
QByteArray data = file1.readAll();
|
QByteArray data = file1.readAll();
|
||||||
file1.close();
|
file1.close();
|
||||||
|
|
||||||
libtorrent::lazy_entry fastOld;
|
|
||||||
libtorrent::error_code ec;
|
libtorrent::error_code ec;
|
||||||
libtorrent::lazy_bdecode(data.constData(), data.constData() + data.size(), fastOld, ec);
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
if (ec || (fastOld.type() != libtorrent::lazy_entry::dict_t)) return false;
|
libtorrent::lazy_entry fastOld;
|
||||||
|
libtorrent::lazy_bdecode(data.constData(), data.constData() + data.size(), fastOld, ec);
|
||||||
|
if (ec || (fastOld.type() != libtorrent::lazy_entry::dict_t)) return false;
|
||||||
|
#else
|
||||||
|
libtorrent::bdecode_node fastOld;
|
||||||
|
libtorrent::bdecode(data.constData(), data.constData() + data.size(), fastOld, ec);
|
||||||
|
if (ec || (fastOld.type() != libtorrent::bdecode_node::dict_t)) return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
libtorrent::entry fastNew;
|
libtorrent::entry fastNew;
|
||||||
fastNew = fastOld;
|
fastNew = fastOld;
|
||||||
@@ -143,7 +156,12 @@ bool upgrade(bool ask = true)
|
|||||||
upgradeResumeFile(backupFolderDir.absoluteFilePath(backupFile));
|
upgradeResumeFile(backupFolderDir.absoluteFilePath(backupFile));
|
||||||
// ****************************************************************************************
|
// ****************************************************************************************
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
// native .plist
|
||||||
|
QSettings *oldResumeSettings = new QSettings("qBittorrent", "qBittorrent-resume");
|
||||||
|
#else
|
||||||
QIniSettings *oldResumeSettings = new QIniSettings("qBittorrent", "qBittorrent-resume");
|
QIniSettings *oldResumeSettings = new QIniSettings("qBittorrent", "qBittorrent-resume");
|
||||||
|
#endif
|
||||||
QString oldResumeFilename = oldResumeSettings->fileName();
|
QString oldResumeFilename = oldResumeSettings->fileName();
|
||||||
QVariantHash oldResumeData = oldResumeSettings->value("torrents").toHash();
|
QVariantHash oldResumeData = oldResumeSettings->value("torrents").toHash();
|
||||||
delete oldResumeSettings;
|
delete oldResumeSettings;
|
||||||
@@ -210,4 +228,50 @@ bool upgrade(bool ask = true)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
void migratePlistToIni(const QString &application)
|
||||||
|
{
|
||||||
|
QIniSettings iniFile("qBittorrent", application);
|
||||||
|
if (!iniFile.allKeys().isEmpty()) return; // We copy the contents of plist, only if inifile does not exist(is empty).
|
||||||
|
|
||||||
|
QSettings *plistFile = new QSettings("qBittorrent", application);
|
||||||
|
plistFile->setFallbacksEnabled(false);
|
||||||
|
const QStringList plist = plistFile->allKeys();
|
||||||
|
if (!plist.isEmpty()) {
|
||||||
|
foreach (const QString &key, plist)
|
||||||
|
iniFile.setValue(key, plistFile->value(key));
|
||||||
|
plistFile->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString plistPath = plistFile->fileName();
|
||||||
|
delete plistFile;
|
||||||
|
Utils::Fs::forceRemove(plistPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void macMigratePlists()
|
||||||
|
{
|
||||||
|
migratePlistToIni("qBittorrent-data");
|
||||||
|
migratePlistToIni("qBittorrent-rss");
|
||||||
|
migratePlistToIni("qBittorrent");
|
||||||
|
}
|
||||||
|
#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
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ net/downloadmanager.h
|
|||||||
net/geoipmanager.h
|
net/geoipmanager.h
|
||||||
net/portforwarder.h
|
net/portforwarder.h
|
||||||
net/private/geoipdatabase.h
|
net/private/geoipdatabase.h
|
||||||
|
net/proxyconfigurationmanager.h
|
||||||
net/reverseresolution.h
|
net/reverseresolution.h
|
||||||
net/smtp.h
|
net/smtp.h
|
||||||
rss/private/rssparser.h
|
rss/private/rssparser.h
|
||||||
@@ -88,6 +89,7 @@ net/downloadmanager.cpp
|
|||||||
net/geoipmanager.cpp
|
net/geoipmanager.cpp
|
||||||
net/portforwarder.cpp
|
net/portforwarder.cpp
|
||||||
net/private/geoipdatabase.cpp
|
net/private/geoipdatabase.cpp
|
||||||
|
net/proxyconfigurationmanager.cpp
|
||||||
net/reverseresolution.cpp
|
net/reverseresolution.cpp
|
||||||
net/smtp.cpp
|
net/smtp.cpp
|
||||||
rss/private/rssparser.cpp
|
rss/private/rssparser.cpp
|
||||||
@@ -115,24 +117,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)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ HEADERS += \
|
|||||||
$$PWD/qinisettings.h \
|
$$PWD/qinisettings.h \
|
||||||
$$PWD/logger.h \
|
$$PWD/logger.h \
|
||||||
$$PWD/settingsstorage.h \
|
$$PWD/settingsstorage.h \
|
||||||
|
$$PWD/settingvalue.h \
|
||||||
$$PWD/preferences.h \
|
$$PWD/preferences.h \
|
||||||
$$PWD/indexrange.h \
|
$$PWD/indexrange.h \
|
||||||
$$PWD/iconprovider.h \
|
$$PWD/iconprovider.h \
|
||||||
@@ -20,6 +21,7 @@ HEADERS += \
|
|||||||
$$PWD/net/downloadhandler.h \
|
$$PWD/net/downloadhandler.h \
|
||||||
$$PWD/net/geoipmanager.h \
|
$$PWD/net/geoipmanager.h \
|
||||||
$$PWD/net/portforwarder.h \
|
$$PWD/net/portforwarder.h \
|
||||||
|
$$PWD/net/proxyconfigurationmanager.h \
|
||||||
$$PWD/net/reverseresolution.h \
|
$$PWD/net/reverseresolution.h \
|
||||||
$$PWD/net/smtp.h \
|
$$PWD/net/smtp.h \
|
||||||
$$PWD/net/private/geoipdatabase.h \
|
$$PWD/net/private/geoipdatabase.h \
|
||||||
@@ -74,6 +76,7 @@ SOURCES += \
|
|||||||
$$PWD/net/downloadhandler.cpp \
|
$$PWD/net/downloadhandler.cpp \
|
||||||
$$PWD/net/geoipmanager.cpp \
|
$$PWD/net/geoipmanager.cpp \
|
||||||
$$PWD/net/portforwarder.cpp \
|
$$PWD/net/portforwarder.cpp \
|
||||||
|
$$PWD/net/proxyconfigurationmanager.cpp \
|
||||||
$$PWD/net/reverseresolution.cpp \
|
$$PWD/net/reverseresolution.cpp \
|
||||||
$$PWD/net/smtp.cpp \
|
$$PWD/net/smtp.cpp \
|
||||||
$$PWD/net/private/geoipdatabase.cpp \
|
$$PWD/net/private/geoipdatabase.cpp \
|
||||||
|
|||||||
@@ -31,13 +31,13 @@
|
|||||||
#include <QTime>
|
#include <QTime>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
|
||||||
|
#include "base/bittorrent/session.h"
|
||||||
#include "base/preferences.h"
|
#include "base/preferences.h"
|
||||||
#include "bandwidthscheduler.h"
|
#include "bandwidthscheduler.h"
|
||||||
|
|
||||||
BandwidthScheduler::BandwidthScheduler(QObject *parent)
|
BandwidthScheduler::BandwidthScheduler(QObject *parent)
|
||||||
: QTimer(parent)
|
: QTimer(parent)
|
||||||
{
|
{
|
||||||
Q_ASSERT(Preferences::instance()->isSchedulerEnabled());
|
|
||||||
// Single shot, we call start() again manually
|
// Single shot, we call start() again manually
|
||||||
setSingleShot(true);
|
setSingleShot(true);
|
||||||
// Connect Signals/Slots
|
// Connect Signals/Slots
|
||||||
@@ -47,8 +47,7 @@ BandwidthScheduler::BandwidthScheduler(QObject *parent)
|
|||||||
void BandwidthScheduler::start()
|
void BandwidthScheduler::start()
|
||||||
{
|
{
|
||||||
const Preferences* const pref = Preferences::instance();
|
const Preferences* const pref = Preferences::instance();
|
||||||
Q_ASSERT(pref->isSchedulerEnabled());
|
bool alt_bw_enabled = BitTorrent::Session::instance()->isAltGlobalSpeedLimitEnabled();
|
||||||
bool alt_bw_enabled = pref->isAltBandwidthEnabled();
|
|
||||||
|
|
||||||
QTime start = pref->getSchedulerStartTime();
|
QTime start = pref->getSchedulerStartTime();
|
||||||
QTime end = pref->getSchedulerEndTime();
|
QTime end = pref->getSchedulerEndTime();
|
||||||
|
|||||||
@@ -55,10 +55,10 @@ FilterParserThread::~FilterParserThread()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parser for eMule ip filter in DAT format
|
// Parser for eMule ip filter in DAT format
|
||||||
int FilterParserThread::parseDATFilterFile(QString m_filePath, libt::ip_filter &filter)
|
int FilterParserThread::parseDATFilterFile(QString filePath, libt::ip_filter &filter)
|
||||||
{
|
{
|
||||||
int ruleCount = 0;
|
int ruleCount = 0;
|
||||||
QFile file(m_filePath);
|
QFile file(filePath);
|
||||||
if (!file.exists()) return ruleCount;
|
if (!file.exists()) return ruleCount;
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
@@ -149,10 +149,10 @@ int FilterParserThread::parseDATFilterFile(QString m_filePath, libt::ip_filter &
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parser for PeerGuardian ip filter in p2p format
|
// Parser for PeerGuardian ip filter in p2p format
|
||||||
int FilterParserThread::parseP2PFilterFile(QString m_filePath, libt::ip_filter &filter)
|
int FilterParserThread::parseP2PFilterFile(QString filePath, libt::ip_filter &filter)
|
||||||
{
|
{
|
||||||
int ruleCount = 0;
|
int ruleCount = 0;
|
||||||
QFile file(m_filePath);
|
QFile file(filePath);
|
||||||
if (!file.exists()) return ruleCount;
|
if (!file.exists()) return ruleCount;
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
@@ -257,10 +257,10 @@ int FilterParserThread::getlineInStream(QDataStream &stream, std::string &name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parser for PeerGuardian ip filter in p2p format
|
// Parser for PeerGuardian ip filter in p2p format
|
||||||
int FilterParserThread::parseP2BFilterFile(QString m_filePath, libt::ip_filter &filter)
|
int FilterParserThread::parseP2BFilterFile(QString filePath, libt::ip_filter &filter)
|
||||||
{
|
{
|
||||||
int ruleCount = 0;
|
int ruleCount = 0;
|
||||||
QFile file(m_filePath);
|
QFile file(filePath);
|
||||||
if (!file.exists()) return ruleCount;
|
if (!file.exists()) return ruleCount;
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
@@ -369,7 +369,7 @@ int FilterParserThread::parseP2BFilterFile(QString m_filePath, libt::ip_filter &
|
|||||||
// * eMule IP list (DAT): http://wiki.phoenixlabs.org/wiki/DAT_Format
|
// * eMule IP list (DAT): http://wiki.phoenixlabs.org/wiki/DAT_Format
|
||||||
// * PeerGuardian Text (P2P): http://wiki.phoenixlabs.org/wiki/P2P_Format
|
// * PeerGuardian Text (P2P): http://wiki.phoenixlabs.org/wiki/P2P_Format
|
||||||
// * PeerGuardian Binary (P2B): http://wiki.phoenixlabs.org/wiki/P2B_Format
|
// * PeerGuardian Binary (P2B): http://wiki.phoenixlabs.org/wiki/P2B_Format
|
||||||
void FilterParserThread::processFilterFile(QString _filePath)
|
void FilterParserThread::processFilterFile(QString filePath)
|
||||||
{
|
{
|
||||||
if (isRunning()) {
|
if (isRunning()) {
|
||||||
// Already parsing a filter, m_abort first
|
// Already parsing a filter, m_abort first
|
||||||
@@ -378,27 +378,11 @@ void FilterParserThread::processFilterFile(QString _filePath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_abort = false;
|
m_abort = false;
|
||||||
m_filePath = _filePath;
|
m_filePath = filePath;
|
||||||
// Run it
|
// Run it
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilterParserThread::processFilterList(libt::session *s, const QStringList &IPs)
|
|
||||||
{
|
|
||||||
// First, import current filter
|
|
||||||
libt::ip_filter filter = s->get_ip_filter();
|
|
||||||
foreach (const QString &ip, IPs) {
|
|
||||||
qDebug("Manual ban of peer %s", ip.toLocal8Bit().constData());
|
|
||||||
boost::system::error_code ec;
|
|
||||||
libt::address addr = libt::address::from_string(ip.toLocal8Bit().constData(), ec);
|
|
||||||
Q_ASSERT(!ec);
|
|
||||||
if (!ec)
|
|
||||||
filter.add_rule(addr, addr, libt::ip_filter::blocked);
|
|
||||||
}
|
|
||||||
|
|
||||||
s->set_ip_filter(filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString FilterParserThread::cleanupIPAddress(QString _ip)
|
QString FilterParserThread::cleanupIPAddress(QString _ip)
|
||||||
{
|
{
|
||||||
_ip = _ip.trimmed();
|
_ip = _ip.trimmed();
|
||||||
|
|||||||
@@ -49,13 +49,7 @@ class FilterParserThread : public QThread
|
|||||||
public:
|
public:
|
||||||
FilterParserThread(libtorrent::session *s, QObject *parent = 0);
|
FilterParserThread(libtorrent::session *s, QObject *parent = 0);
|
||||||
~FilterParserThread();
|
~FilterParserThread();
|
||||||
|
void processFilterFile(QString filePath);
|
||||||
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);
|
|
||||||
static void processFilterList(libtorrent::session *s, const QStringList &IPs);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void IPFilterParsed(int ruleCount);
|
void IPFilterParsed(int ruleCount);
|
||||||
@@ -66,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;
|
||||||
|
|||||||
@@ -30,17 +30,23 @@
|
|||||||
#ifndef BITTORRENT_SESSION_H
|
#ifndef BITTORRENT_SESSION_H
|
||||||
#define BITTORRENT_SESSION_H
|
#define BITTORRENT_SESSION_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <libtorrent/version.hpp>
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QPointer>
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
#include <QVector>
|
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QWaitCondition>
|
#endif
|
||||||
#include <QNetworkConfigurationManager>
|
#include <QNetworkConfigurationManager>
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QReadWriteLock>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QVector>
|
||||||
|
#include <QWaitCondition>
|
||||||
|
|
||||||
#include <libtorrent/version.hpp>
|
#include "base/settingvalue.h"
|
||||||
|
|
||||||
#include "base/tristatebool.h"
|
#include "base/tristatebool.h"
|
||||||
#include "base/types.h"
|
#include "base/types.h"
|
||||||
#include "torrentinfo.h"
|
#include "torrentinfo.h"
|
||||||
@@ -52,19 +58,12 @@ namespace libtorrent
|
|||||||
class entry;
|
class entry;
|
||||||
struct add_torrent_params;
|
struct add_torrent_params;
|
||||||
struct pe_settings;
|
struct pe_settings;
|
||||||
struct session_settings;
|
|
||||||
struct session_status;
|
|
||||||
|
|
||||||
#if LIBTORRENT_VERSION_NUM < 10100
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
struct proxy_settings;
|
struct session_settings;
|
||||||
#else
|
#else
|
||||||
namespace aux
|
struct settings_pack;
|
||||||
{
|
|
||||||
struct proxy_settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef aux::proxy_settings proxy_settings;
|
|
||||||
#endif
|
#endif
|
||||||
|
struct session_status;
|
||||||
|
|
||||||
class alert;
|
class alert;
|
||||||
struct torrent_alert;
|
struct torrent_alert;
|
||||||
@@ -111,7 +110,6 @@ class FilterParserThread;
|
|||||||
class BandwidthScheduler;
|
class BandwidthScheduler;
|
||||||
class Statistics;
|
class Statistics;
|
||||||
class ResumeDataSavingManager;
|
class ResumeDataSavingManager;
|
||||||
class SettingsStorage;
|
|
||||||
|
|
||||||
enum MaxRatioAction
|
enum MaxRatioAction
|
||||||
{
|
{
|
||||||
@@ -172,13 +170,6 @@ namespace BitTorrent
|
|||||||
static void freeInstance();
|
static void freeInstance();
|
||||||
static Session *instance();
|
static Session *instance();
|
||||||
|
|
||||||
bool isDHTEnabled() const;
|
|
||||||
bool isLSDEnabled() const;
|
|
||||||
bool isPexEnabled() const;
|
|
||||||
bool isQueueingEnabled() const;
|
|
||||||
qreal globalMaxRatio() const;
|
|
||||||
bool isAppendExtensionEnabled() const;
|
|
||||||
|
|
||||||
QString defaultSavePath() const;
|
QString defaultSavePath() const;
|
||||||
void setDefaultSavePath(QString path);
|
void setDefaultSavePath(QString path);
|
||||||
QString tempPath() const;
|
QString tempPath() const;
|
||||||
@@ -219,8 +210,122 @@ namespace BitTorrent
|
|||||||
bool isDisableAutoTMMWhenCategorySavePathChanged() const;
|
bool isDisableAutoTMMWhenCategorySavePathChanged() const;
|
||||||
void setDisableAutoTMMWhenCategorySavePathChanged(bool value);
|
void setDisableAutoTMMWhenCategorySavePathChanged(bool value);
|
||||||
|
|
||||||
|
qreal globalMaxRatio() const;
|
||||||
|
void setGlobalMaxRatio(qreal ratio);
|
||||||
|
bool isDHTEnabled() const;
|
||||||
|
void setDHTEnabled(bool enabled);
|
||||||
|
bool isLSDEnabled() const;
|
||||||
|
void setLSDEnabled(bool enabled);
|
||||||
|
bool isPeXEnabled() const;
|
||||||
|
void setPeXEnabled(bool enabled);
|
||||||
bool isAddTorrentPaused() const;
|
bool isAddTorrentPaused() const;
|
||||||
void setAddTorrentPaused(bool value);
|
void setAddTorrentPaused(bool value);
|
||||||
|
bool isTrackerEnabled() const;
|
||||||
|
void setTrackerEnabled(bool enabled);
|
||||||
|
bool isAppendExtensionEnabled() const;
|
||||||
|
void setAppendExtensionEnabled(bool enabled);
|
||||||
|
uint refreshInterval() const;
|
||||||
|
void setRefreshInterval(uint value);
|
||||||
|
bool isPreallocationEnabled() const;
|
||||||
|
void setPreallocationEnabled(bool enabled);
|
||||||
|
QString torrentExportDirectory() const;
|
||||||
|
void setTorrentExportDirectory(QString path);
|
||||||
|
QString finishedTorrentExportDirectory() const;
|
||||||
|
void setFinishedTorrentExportDirectory(QString path);
|
||||||
|
|
||||||
|
int globalDownloadSpeedLimit() const;
|
||||||
|
void setGlobalDownloadSpeedLimit(int limit);
|
||||||
|
int globalUploadSpeedLimit() const;
|
||||||
|
void setGlobalUploadSpeedLimit(int limit);
|
||||||
|
int altGlobalDownloadSpeedLimit() const;
|
||||||
|
void setAltGlobalDownloadSpeedLimit(int limit);
|
||||||
|
int altGlobalUploadSpeedLimit() const;
|
||||||
|
void setAltGlobalUploadSpeedLimit(int limit);
|
||||||
|
int downloadSpeedLimit() const;
|
||||||
|
void setDownloadSpeedLimit(int limit);
|
||||||
|
int uploadSpeedLimit() const;
|
||||||
|
void setUploadSpeedLimit(int limit);
|
||||||
|
bool isAltGlobalSpeedLimitEnabled() const;
|
||||||
|
void setAltGlobalSpeedLimitEnabled(bool enabled);
|
||||||
|
bool isBandwidthSchedulerEnabled() const;
|
||||||
|
void setBandwidthSchedulerEnabled(bool enabled);
|
||||||
|
|
||||||
|
uint saveResumeDataInterval() const;
|
||||||
|
void setSaveResumeDataInterval(uint value);
|
||||||
|
int port() const;
|
||||||
|
void setPort(int port);
|
||||||
|
bool useRandomPort() const;
|
||||||
|
void setUseRandomPort(bool value);
|
||||||
|
QString networkInterface() const;
|
||||||
|
void setNetworkInterface(const QString &interface);
|
||||||
|
QString networkInterfaceName() const;
|
||||||
|
void setNetworkInterfaceName(const QString &name);
|
||||||
|
QString networkInterfaceAddress() const;
|
||||||
|
void setNetworkInterfaceAddress(const QString &address);
|
||||||
|
bool isIPv6Enabled() const;
|
||||||
|
void setIPv6Enabled(bool enabled);
|
||||||
|
int encryption() const;
|
||||||
|
void setEncryption(int state);
|
||||||
|
bool isForceProxyEnabled() const;
|
||||||
|
void setForceProxyEnabled(bool enabled);
|
||||||
|
bool isProxyPeerConnectionsEnabled() const;
|
||||||
|
void setProxyPeerConnectionsEnabled(bool enabled);
|
||||||
|
bool isAddTrackersEnabled() const;
|
||||||
|
void setAddTrackersEnabled(bool enabled);
|
||||||
|
QString additionalTrackers() const;
|
||||||
|
void setAdditionalTrackers(const QString &trackers);
|
||||||
|
bool isIPFilteringEnabled() const;
|
||||||
|
void setIPFilteringEnabled(bool enabled);
|
||||||
|
QString IPFilterFile() const;
|
||||||
|
void setIPFilterFile(QString path);
|
||||||
|
bool announceToAllTrackers() const;
|
||||||
|
void setAnnounceToAllTrackers(bool val);
|
||||||
|
uint diskCacheSize() const;
|
||||||
|
void setDiskCacheSize(uint size);
|
||||||
|
uint diskCacheTTL() const;
|
||||||
|
void setDiskCacheTTL(uint ttl);
|
||||||
|
bool useOSCache() const;
|
||||||
|
void setUseOSCache(bool use);
|
||||||
|
bool isAnonymousModeEnabled() const;
|
||||||
|
void setAnonymousModeEnabled(bool enabled);
|
||||||
|
bool isQueueingSystemEnabled() const;
|
||||||
|
void setQueueingSystemEnabled(bool enabled);
|
||||||
|
bool ignoreSlowTorrentsForQueueing() const;
|
||||||
|
void setIgnoreSlowTorrentsForQueueing(bool ignore);
|
||||||
|
uint outgoingPortsMin() const;
|
||||||
|
void setOutgoingPortsMin(uint min);
|
||||||
|
uint outgoingPortsMax() const;
|
||||||
|
void setOutgoingPortsMax(uint max);
|
||||||
|
bool ignoreLimitsOnLAN() const;
|
||||||
|
void setIgnoreLimitsOnLAN(bool ignore);
|
||||||
|
bool includeOverheadInLimits() const;
|
||||||
|
void setIncludeOverheadInLimits(bool include);
|
||||||
|
QString announceIP() const;
|
||||||
|
void setAnnounceIP(const QString &ip);
|
||||||
|
bool isSuperSeedingEnabled() const;
|
||||||
|
void setSuperSeedingEnabled(bool enabled);
|
||||||
|
int maxConnections() const;
|
||||||
|
void setMaxConnections(int max);
|
||||||
|
int maxHalfOpenConnections() const;
|
||||||
|
void setMaxHalfOpenConnections(int max);
|
||||||
|
int maxConnectionsPerTorrent() const;
|
||||||
|
void setMaxConnectionsPerTorrent(int max);
|
||||||
|
int maxUploads() const;
|
||||||
|
void setMaxUploads(int max);
|
||||||
|
int maxUploadsPerTorrent() const;
|
||||||
|
void setMaxUploadsPerTorrent(int max);
|
||||||
|
int maxActiveDownloads() const;
|
||||||
|
void setMaxActiveDownloads(int max);
|
||||||
|
int maxActiveUploads() const;
|
||||||
|
void setMaxActiveUploads(int max);
|
||||||
|
int maxActiveTorrents() const;
|
||||||
|
void setMaxActiveTorrents(int max);
|
||||||
|
bool isUTPEnabled() const;
|
||||||
|
void setUTPEnabled(bool enabled);
|
||||||
|
bool isUTPRateLimited() const;
|
||||||
|
void setUTPRateLimited(bool limited);
|
||||||
|
bool isTrackerFilteringEnabled() const;
|
||||||
|
void setTrackerFilteringEnabled(bool enabled);
|
||||||
|
|
||||||
TorrentHandle *findTorrent(const InfoHash &hash) const;
|
TorrentHandle *findTorrent(const InfoHash &hash) const;
|
||||||
QHash<InfoHash, TorrentHandle *> torrents() const;
|
QHash<InfoHash, TorrentHandle *> torrents() const;
|
||||||
@@ -231,19 +336,11 @@ namespace BitTorrent
|
|||||||
CacheStatus cacheStatus() const;
|
CacheStatus cacheStatus() const;
|
||||||
quint64 getAlltimeDL() const;
|
quint64 getAlltimeDL() const;
|
||||||
quint64 getAlltimeUL() const;
|
quint64 getAlltimeUL() const;
|
||||||
int downloadRateLimit() const;
|
|
||||||
int uploadRateLimit() const;
|
|
||||||
bool isListening() const;
|
bool isListening() const;
|
||||||
|
|
||||||
MaxRatioAction maxRatioAction() const;
|
MaxRatioAction maxRatioAction() const;
|
||||||
void setMaxRatioAction(MaxRatioAction act);
|
void setMaxRatioAction(MaxRatioAction act);
|
||||||
|
|
||||||
void changeSpeedLimitMode(bool alternative);
|
|
||||||
void setDownloadRateLimit(int rate);
|
|
||||||
void setUploadRateLimit(int rate);
|
|
||||||
void setGlobalMaxRatio(qreal ratio);
|
|
||||||
void enableIPFilter(const QString &filterPath, bool force = false);
|
|
||||||
void disableIPFilter();
|
|
||||||
void banIP(const QString &ip);
|
void banIP(const QString &ip);
|
||||||
|
|
||||||
bool isKnownTorrent(const InfoHash &hash) const;
|
bool isKnownTorrent(const InfoHash &hash) const;
|
||||||
@@ -304,7 +401,7 @@ namespace BitTorrent
|
|||||||
void trackerAuthenticationRequired(BitTorrent::TorrentHandle *const torrent);
|
void trackerAuthenticationRequired(BitTorrent::TorrentHandle *const torrent);
|
||||||
void recursiveTorrentDownloadPossible(BitTorrent::TorrentHandle *const torrent);
|
void recursiveTorrentDownloadPossible(BitTorrent::TorrentHandle *const torrent);
|
||||||
void speedLimitModeChanged(bool alternative);
|
void speedLimitModeChanged(bool alternative);
|
||||||
void ipFilterParsed(bool error, int ruleCount);
|
void IPFilterParsed(bool error, int ruleCount);
|
||||||
void trackersAdded(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
void trackersAdded(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
||||||
void trackersRemoved(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
void trackersRemoved(BitTorrent::TorrentHandle *const torrent, const QList<BitTorrent::TrackerEntry> &trackers);
|
||||||
void trackersChanged(BitTorrent::TorrentHandle *const torrent);
|
void trackersChanged(BitTorrent::TorrentHandle *const torrent);
|
||||||
@@ -316,7 +413,7 @@ namespace BitTorrent
|
|||||||
void subcategoriesSupportChanged();
|
void subcategoriesSupportChanged();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void configure();
|
void configureDeferred();
|
||||||
void readAlerts();
|
void readAlerts();
|
||||||
void refresh();
|
void refresh();
|
||||||
void processBigRatios();
|
void processBigRatios();
|
||||||
@@ -341,20 +438,24 @@ namespace BitTorrent
|
|||||||
void initResumeFolder();
|
void initResumeFolder();
|
||||||
|
|
||||||
// Session configuration
|
// Session configuration
|
||||||
void setSessionSettings();
|
Q_INVOKABLE void configure();
|
||||||
void setProxySettings(libtorrent::proxy_settings proxySettings);
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
void adjustLimits();
|
void configure(libtorrent::session_settings &sessionSettings);
|
||||||
void adjustLimits(libtorrent::session_settings &sessionSettings);
|
void adjustLimits(libtorrent::session_settings &sessionSettings);
|
||||||
|
#else
|
||||||
|
void configure(libtorrent::settings_pack &settingsPack);
|
||||||
|
void adjustLimits(libtorrent::settings_pack &settingsPack);
|
||||||
|
#endif
|
||||||
|
void adjustLimits();
|
||||||
|
void processBannedIPs();
|
||||||
const QStringList getListeningIPs();
|
const QStringList getListeningIPs();
|
||||||
void setListeningPort();
|
void configureListeningInterface();
|
||||||
void preAllocateAllFiles(bool b);
|
|
||||||
void setMaxConnectionsPerTorrent(int max);
|
|
||||||
void setMaxUploadsPerTorrent(int max);
|
|
||||||
void enableLSD(bool enable);
|
|
||||||
void enableDHT(bool enable);
|
|
||||||
void changeSpeedLimitMode_impl(bool alternative);
|
void changeSpeedLimitMode_impl(bool alternative);
|
||||||
|
void enableTracker(bool enable);
|
||||||
void setAppendExtension(bool append);
|
void enableBandwidthScheduler();
|
||||||
|
void populateAdditionalTrackers();
|
||||||
|
void enableIPFilter();
|
||||||
|
void disableIPFilter();
|
||||||
|
|
||||||
void startUpTorrents();
|
void startUpTorrents();
|
||||||
bool addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri,
|
bool addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri,
|
||||||
@@ -364,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);
|
||||||
@@ -389,35 +490,97 @@ namespace BitTorrent
|
|||||||
void saveResumeData();
|
void saveResumeData();
|
||||||
|
|
||||||
#if LIBTORRENT_VERSION_NUM < 10100
|
#if LIBTORRENT_VERSION_NUM < 10100
|
||||||
void dispatchAlerts(std::auto_ptr<libtorrent::alert> alertPtr);
|
void dispatchAlerts(libtorrent::alert *alertPtr);
|
||||||
#endif
|
#endif
|
||||||
void getPendingAlerts(std::vector<libtorrent::alert *> &out, ulong time = 0);
|
void getPendingAlerts(std::vector<libtorrent::alert *> &out, ulong time = 0);
|
||||||
|
|
||||||
SettingsStorage *m_settings;
|
|
||||||
|
|
||||||
// BitTorrent
|
// BitTorrent
|
||||||
libtorrent::session *m_nativeSession;
|
libtorrent::session *m_nativeSession;
|
||||||
|
|
||||||
bool m_LSDEnabled;
|
bool m_deferredConfigureScheduled;
|
||||||
bool m_DHTEnabled;
|
bool m_IPFilteringChanged;
|
||||||
bool m_PeXEnabled;
|
#if LIBTORRENT_VERSION_NUM >= 10100
|
||||||
bool m_queueingEnabled;
|
bool m_listenInterfaceChanged; // optimization
|
||||||
bool m_torrentExportEnabled;
|
#endif
|
||||||
bool m_finishedTorrentExportEnabled;
|
CachedSettingValue<bool> m_isDHTEnabled;
|
||||||
bool m_preAllocateAll;
|
CachedSettingValue<bool> m_isLSDEnabled;
|
||||||
qreal m_globalMaxRatio;
|
CachedSettingValue<bool> m_isPeXEnabled;
|
||||||
|
CachedSettingValue<bool> m_isIPFilteringEnabled;
|
||||||
|
CachedSettingValue<bool> m_isTrackerFilteringEnabled;
|
||||||
|
CachedSettingValue<QString> m_IPFilterFile;
|
||||||
|
CachedSettingValue<bool> m_announceToAllTrackers;
|
||||||
|
CachedSettingValue<uint> m_diskCacheSize;
|
||||||
|
CachedSettingValue<uint> m_diskCacheTTL;
|
||||||
|
CachedSettingValue<bool> m_useOSCache;
|
||||||
|
CachedSettingValue<bool> m_isAnonymousModeEnabled;
|
||||||
|
CachedSettingValue<bool> m_isQueueingEnabled;
|
||||||
|
CachedSettingValue<int> m_maxActiveDownloads;
|
||||||
|
CachedSettingValue<int> m_maxActiveUploads;
|
||||||
|
CachedSettingValue<int> m_maxActiveTorrents;
|
||||||
|
CachedSettingValue<bool> m_ignoreSlowTorrentsForQueueing;
|
||||||
|
CachedSettingValue<uint> m_outgoingPortsMin;
|
||||||
|
CachedSettingValue<uint> m_outgoingPortsMax;
|
||||||
|
CachedSettingValue<bool> m_ignoreLimitsOnLAN;
|
||||||
|
CachedSettingValue<bool> m_includeOverheadInLimits;
|
||||||
|
CachedSettingValue<QString> m_announceIP;
|
||||||
|
CachedSettingValue<bool> m_isSuperSeedingEnabled;
|
||||||
|
CachedSettingValue<int> m_maxConnections;
|
||||||
|
CachedSettingValue<int> m_maxHalfOpenConnections;
|
||||||
|
CachedSettingValue<int> m_maxUploads;
|
||||||
|
CachedSettingValue<int> m_maxConnectionsPerTorrent;
|
||||||
|
CachedSettingValue<int> m_maxUploadsPerTorrent;
|
||||||
|
CachedSettingValue<bool> m_isUTPEnabled;
|
||||||
|
CachedSettingValue<bool> m_isUTPRateLimited;
|
||||||
|
CachedSettingValue<bool> m_isAddTrackersEnabled;
|
||||||
|
CachedSettingValue<QString> m_additionalTrackers;
|
||||||
|
CachedSettingValue<qreal> m_globalMaxRatio;
|
||||||
|
CachedSettingValue<bool> m_isAddTorrentPaused;
|
||||||
|
CachedSettingValue<bool> m_isAppendExtensionEnabled;
|
||||||
|
CachedSettingValue<uint> m_refreshInterval;
|
||||||
|
CachedSettingValue<bool> m_isPreallocationEnabled;
|
||||||
|
CachedSettingValue<QString> m_torrentExportDirectory;
|
||||||
|
CachedSettingValue<QString> m_finishedTorrentExportDirectory;
|
||||||
|
CachedSettingValue<int> m_globalDownloadSpeedLimit;
|
||||||
|
CachedSettingValue<int> m_globalUploadSpeedLimit;
|
||||||
|
CachedSettingValue<int> m_altGlobalDownloadSpeedLimit;
|
||||||
|
CachedSettingValue<int> m_altGlobalUploadSpeedLimit;
|
||||||
|
CachedSettingValue<bool> m_isAltGlobalSpeedLimitEnabled;
|
||||||
|
CachedSettingValue<bool> m_isBandwidthSchedulerEnabled;
|
||||||
|
CachedSettingValue<uint> m_saveResumeDataInterval;
|
||||||
|
CachedSettingValue<int> m_port;
|
||||||
|
CachedSettingValue<bool> m_useRandomPort;
|
||||||
|
CachedSettingValue<QString> m_networkInterface;
|
||||||
|
CachedSettingValue<QString> m_networkInterfaceName;
|
||||||
|
CachedSettingValue<QString> m_networkInterfaceAddress;
|
||||||
|
CachedSettingValue<bool> m_isIPv6Enabled;
|
||||||
|
CachedSettingValue<int> m_encryption;
|
||||||
|
CachedSettingValue<bool> m_isForceProxyEnabled;
|
||||||
|
CachedSettingValue<bool> m_isProxyPeerConnectionsEnabled;
|
||||||
|
CachedSettingValue<QVariantMap> m_storedCategories;
|
||||||
|
CachedSettingValue<int> m_maxRatioAction;
|
||||||
|
CachedSettingValue<QString> m_defaultSavePath;
|
||||||
|
CachedSettingValue<QString> m_tempPath;
|
||||||
|
CachedSettingValue<bool> m_isSubcategoriesEnabled;
|
||||||
|
CachedSettingValue<bool> m_isTempPathEnabled;
|
||||||
|
CachedSettingValue<bool> m_isAutoTMMDisabledByDefault;
|
||||||
|
CachedSettingValue<bool> m_isDisableAutoTMMWhenCategoryChanged;
|
||||||
|
CachedSettingValue<bool> m_isDisableAutoTMMWhenDefaultSavePathChanged;
|
||||||
|
CachedSettingValue<bool> m_isDisableAutoTMMWhenCategorySavePathChanged;
|
||||||
|
CachedSettingValue<bool> m_isTrackerEnabled;
|
||||||
|
CachedSettingValue<QStringList> m_bannedIPs;
|
||||||
|
|
||||||
|
// Order is important. This needs to be declared after its CachedSettingsValue
|
||||||
|
// counterpart, because it uses it for initialization in the constructor
|
||||||
|
// initialization list.
|
||||||
|
const bool m_wasPexEnabled;
|
||||||
|
|
||||||
int m_numResumeData;
|
int m_numResumeData;
|
||||||
int m_extraLimit;
|
int m_extraLimit;
|
||||||
bool m_appendExtension;
|
QList<BitTorrent::TrackerEntry> m_additionalTrackerList;
|
||||||
uint m_refreshInterval;
|
|
||||||
MaxRatioAction m_maxRatioAction;
|
|
||||||
QList<BitTorrent::TrackerEntry> m_additionalTrackers;
|
|
||||||
QString m_defaultSavePath;
|
|
||||||
QString m_tempPath;
|
|
||||||
QString m_filterPath;
|
|
||||||
QString m_resumeFolderPath;
|
QString m_resumeFolderPath;
|
||||||
QFile m_resumeFolderLock;
|
QFile m_resumeFolderLock;
|
||||||
QHash<InfoHash, QString> m_savePathsToRemove;
|
QHash<InfoHash, QString> m_savePathsToRemove;
|
||||||
|
bool m_useProxy;
|
||||||
|
|
||||||
QTimer *m_refreshTimer;
|
QTimer *m_refreshTimer;
|
||||||
QTimer *m_bigRatioTimer;
|
QTimer *m_bigRatioTimer;
|
||||||
@@ -447,6 +610,8 @@ namespace BitTorrent
|
|||||||
|
|
||||||
QNetworkConfigurationManager m_networkManager;
|
QNetworkConfigurationManager m_networkManager;
|
||||||
|
|
||||||
|
mutable QReadWriteLock m_lock;
|
||||||
|
|
||||||
static Session *m_instance;
|
static Session *m_instance;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -192,6 +194,31 @@ 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)
|
||||||
@@ -485,8 +512,11 @@ bool TorrentHandle::needSaveResumeData() const
|
|||||||
SAFE_RETURN(bool, need_save_resume_data, false);
|
SAFE_RETURN(bool, need_save_resume_data, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::saveResumeData()
|
void TorrentHandle::saveResumeData(bool updateStatus)
|
||||||
{
|
{
|
||||||
|
if (updateStatus) // to update queue_position, see discussion in PR #6154
|
||||||
|
this->updateStatus();
|
||||||
|
|
||||||
SAFE_CALL(save_resume_data);
|
SAFE_CALL(save_resume_data);
|
||||||
m_needSaveResumeData = false;
|
m_needSaveResumeData = false;
|
||||||
}
|
}
|
||||||
@@ -752,7 +782,7 @@ void TorrentHandle::updateState()
|
|||||||
m_state = isSeed() ? TorrentState::PausedUploading : TorrentState::PausedDownloading;
|
m_state = isSeed() ? TorrentState::PausedUploading : TorrentState::PausedDownloading;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (m_session->isQueueingEnabled() && isQueued() && !isChecking()) {
|
if (m_session->isQueueingSystemEnabled() && isQueued() && !isChecking()) {
|
||||||
m_state = isSeed() ? TorrentState::QueuedUploading : TorrentState::QueuedDownloading;
|
m_state = isSeed() ? TorrentState::QueuedUploading : TorrentState::QueuedDownloading;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -915,26 +945,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1280,14 +1313,10 @@ 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));
|
||||||
// Create destination directory if necessary
|
|
||||||
// or move_storage() will fail...
|
|
||||||
QDir().mkpath(newPath);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Actually move the storage
|
// Actually move the storage
|
||||||
m_nativeHandle.move_storage(newPath.toUtf8().constData());
|
m_nativeHandle.move_storage(newPath.toUtf8().constData());
|
||||||
@@ -1316,7 +1345,7 @@ 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;
|
||||||
@@ -1351,7 +1380,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;
|
||||||
@@ -1371,13 +1400,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()();
|
||||||
}
|
}
|
||||||
@@ -1706,6 +1728,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)) {
|
||||||
@@ -1819,6 +1846,8 @@ void TorrentHandle::setDownloadLimit(int limit)
|
|||||||
void TorrentHandle::setSuperSeeding(bool enable)
|
void TorrentHandle::setSuperSeeding(bool enable)
|
||||||
{
|
{
|
||||||
SAFE_CALL(super_seeding, enable)
|
SAFE_CALL(super_seeding, enable)
|
||||||
|
if (superSeeding() != enable)
|
||||||
|
updateStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentHandle::flushCache()
|
void TorrentHandle::flushCache()
|
||||||
|
|||||||
@@ -351,7 +351,7 @@ namespace BitTorrent
|
|||||||
void handleTempPathChanged();
|
void handleTempPathChanged();
|
||||||
void handleCategorySavePathChanged();
|
void handleCategorySavePathChanged();
|
||||||
void handleAppendExtensionToggled();
|
void handleAppendExtensionToggled();
|
||||||
void saveResumeData();
|
void saveResumeData(bool updateStatus = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef boost::function<void ()> EventTrigger;
|
typedef boost::function<void ()> EventTrigger;
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ QVector<int> TorrentInfo::fileIndicesForPiece(int pieceIndex) const
|
|||||||
std::vector<libt::file_slice> files(
|
std::vector<libt::file_slice> files(
|
||||||
nativeInfo()->map_block(pieceIndex, 0, nativeInfo()->piece_size(pieceIndex)));
|
nativeInfo()->map_block(pieceIndex, 0, nativeInfo()->piece_size(pieceIndex)));
|
||||||
QVector<int> res;
|
QVector<int> res;
|
||||||
res.reserve(files.size());
|
res.reserve(int(files.size()));
|
||||||
std::transform(files.begin(), files.end(), std::back_inserter(res),
|
std::transform(files.begin(), files.end(), std::back_inserter(res),
|
||||||
[](const libt::file_slice &s) { return s.file_index; });
|
[](const libt::file_slice &s) { return s.file_index; });
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@
|
|||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
#endif
|
#endif
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QTemporaryFile>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "requestparser.h"
|
#include "requestparser.h"
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#else
|
#else
|
||||||
#include <QTcpSocket>
|
#include <QTcpSocket>
|
||||||
#endif
|
#endif
|
||||||
|
#include <QNetworkProxy>
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
@@ -45,6 +46,10 @@ Server::Server(IRequestHandler *requestHandler, QObject *parent)
|
|||||||
, m_https(false)
|
, m_https(false)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
setProxy(QNetworkProxy::NoProxy);
|
||||||
|
#ifndef QT_NO_OPENSSL
|
||||||
|
QSslSocket::setDefaultCiphers(safeCipherList());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Server::~Server()
|
Server::~Server()
|
||||||
@@ -84,14 +89,15 @@ void Server::incomingConnection(int socketDescriptor)
|
|||||||
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
|
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
|
||||||
#ifndef QT_NO_OPENSSL
|
#ifndef QT_NO_OPENSSL
|
||||||
if (m_https) {
|
if (m_https) {
|
||||||
static_cast<QSslSocket*>(serverSocket)->setProtocol(QSsl::SecureProtocols);
|
static_cast<QSslSocket *>(serverSocket)->setProtocol(QSsl::SecureProtocols);
|
||||||
static_cast<QSslSocket*>(serverSocket)->setPrivateKey(m_key);
|
static_cast<QSslSocket *>(serverSocket)->setPrivateKey(m_key);
|
||||||
#ifdef QBT_USES_QT5
|
#ifdef QBT_USES_QT5
|
||||||
static_cast<QSslSocket*>(serverSocket)->setLocalCertificateChain(m_certificates);
|
static_cast<QSslSocket *>(serverSocket)->setLocalCertificateChain(m_certificates);
|
||||||
#else
|
#else
|
||||||
static_cast<QSslSocket*>(serverSocket)->setLocalCertificate(m_certificates.first());
|
static_cast<QSslSocket *>(serverSocket)->setLocalCertificate(m_certificates.first());
|
||||||
#endif
|
#endif
|
||||||
static_cast<QSslSocket*>(serverSocket)->startServerEncryption();
|
static_cast<QSslSocket *>(serverSocket)->setPeerVerifyMode(QSslSocket::VerifyNone);
|
||||||
|
static_cast<QSslSocket *>(serverSocket)->startServerEncryption();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
new Connection(serverSocket, m_requestHandler, this);
|
new Connection(serverSocket, m_requestHandler, this);
|
||||||
@@ -100,3 +106,26 @@ void Server::incomingConnection(int socketDescriptor)
|
|||||||
serverSocket->deleteLater();
|
serverSocket->deleteLater();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_OPENSSL
|
||||||
|
QList<QSslCipher> Server::safeCipherList() const
|
||||||
|
{
|
||||||
|
const QStringList badCiphers = {"idea", "rc4"};
|
||||||
|
const QList<QSslCipher> allCiphers = QSslSocket::supportedCiphers();
|
||||||
|
QList<QSslCipher> safeCiphers;
|
||||||
|
foreach (const QSslCipher &cipher, allCiphers) {
|
||||||
|
bool isSafe = true;
|
||||||
|
foreach (const QString &badCipher, badCiphers) {
|
||||||
|
if (cipher.name().contains(badCipher, Qt::CaseInsensitive)) {
|
||||||
|
isSafe = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSafe)
|
||||||
|
safeCiphers += cipher;
|
||||||
|
}
|
||||||
|
|
||||||
|
return safeCiphers;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include <QTcpServer>
|
#include <QTcpServer>
|
||||||
#ifndef QT_NO_OPENSSL
|
#ifndef QT_NO_OPENSSL
|
||||||
#include <QSslCertificate>
|
#include <QSslCertificate>
|
||||||
|
#include <QSslCipher>
|
||||||
#include <QSslKey>
|
#include <QSslKey>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ namespace Http
|
|||||||
class IRequestHandler;
|
class IRequestHandler;
|
||||||
class Connection;
|
class Connection;
|
||||||
|
|
||||||
class Server : public QTcpServer
|
class Server: public QTcpServer
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_DISABLE_COPY(Server)
|
Q_DISABLE_COPY(Server)
|
||||||
@@ -53,25 +54,27 @@ namespace Http
|
|||||||
Server(IRequestHandler *requestHandler, QObject *parent = 0);
|
Server(IRequestHandler *requestHandler, QObject *parent = 0);
|
||||||
~Server();
|
~Server();
|
||||||
|
|
||||||
#ifndef QT_NO_OPENSSL
|
#ifndef QT_NO_OPENSSL
|
||||||
void enableHttps(const QList<QSslCertificate> &certificates, const QSslKey &key);
|
void enableHttps(const QList<QSslCertificate> &certificates, const QSslKey &key);
|
||||||
void disableHttps();
|
void disableHttps();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
|
||||||
#ifdef QBT_USES_QT5
|
|
||||||
void incomingConnection(qintptr socketDescriptor);
|
|
||||||
#else
|
|
||||||
void incomingConnection(int socketDescriptor);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IRequestHandler *m_requestHandler;
|
IRequestHandler *m_requestHandler;
|
||||||
#ifndef QT_NO_OPENSSL
|
|
||||||
|
#ifdef QBT_USES_QT5
|
||||||
|
void incomingConnection(qintptr socketDescriptor);
|
||||||
|
#else
|
||||||
|
void incomingConnection(int socketDescriptor);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_NO_OPENSSL
|
||||||
|
QList<QSslCipher> safeCipherList() const;
|
||||||
|
|
||||||
bool m_https;
|
bool m_https;
|
||||||
QList<QSslCertificate> m_certificates;
|
QList<QSslCertificate> m_certificates;
|
||||||
QSslKey m_key;
|
QSslKey m_key;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ namespace Http
|
|||||||
const QString HEADER_CONTENT_ENCODING = "Content-Encoding";
|
const QString HEADER_CONTENT_ENCODING = "Content-Encoding";
|
||||||
const QString HEADER_CONTENT_LENGTH = "Content-Length";
|
const QString HEADER_CONTENT_LENGTH = "Content-Length";
|
||||||
const QString HEADER_CACHE_CONTROL = "Cache-Control";
|
const QString HEADER_CACHE_CONTROL = "Cache-Control";
|
||||||
|
const QString HEADER_X_FRAME_OPTIONS = "X-Frame-Options";
|
||||||
|
const QString HEADER_X_XSS_PROTECTION = "X-XSS-Protection";
|
||||||
|
const QString HEADER_X_CONTENT_TYPE_OPTIONS = "X-Content-Type-Options";
|
||||||
|
const QString HEADER_CONTENT_SECURITY_POLICY = "Content-Security-Policy";
|
||||||
|
|
||||||
const QString CONTENT_TYPE_CSS = "text/css; charset=UTF-8";
|
const QString CONTENT_TYPE_CSS = "text/css; charset=UTF-8";
|
||||||
const QString CONTENT_TYPE_GIF = "image/gif";
|
const QString CONTENT_TYPE_GIF = "image/gif";
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include "base/utils/string.h"
|
||||||
|
|
||||||
Logger* Logger::m_instance = 0;
|
Logger* Logger::m_instance = 0;
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ void Logger::addMessage(const QString &message, const Log::MsgType &type)
|
|||||||
{
|
{
|
||||||
QWriteLocker locker(&lock);
|
QWriteLocker locker(&lock);
|
||||||
|
|
||||||
Log::Msg temp = { msgCounter++, QDateTime::currentMSecsSinceEpoch(), type, message };
|
Log::Msg temp = { msgCounter++, QDateTime::currentMSecsSinceEpoch(), type, Utils::String::toHtmlEscaped(message) };
|
||||||
m_messages.push_back(temp);
|
m_messages.push_back(temp);
|
||||||
|
|
||||||
if (m_messages.size() >= MAX_LOG_MESSAGES)
|
if (m_messages.size() >= MAX_LOG_MESSAGES)
|
||||||
@@ -49,7 +50,7 @@ void Logger::addPeer(const QString &ip, bool blocked, const QString &reason)
|
|||||||
{
|
{
|
||||||
QWriteLocker locker(&lock);
|
QWriteLocker locker(&lock);
|
||||||
|
|
||||||
Log::Peer temp = { peerCounter++, QDateTime::currentMSecsSinceEpoch(), ip, blocked, reason };
|
Log::Peer temp = { peerCounter++, QDateTime::currentMSecsSinceEpoch(), Utils::String::toHtmlEscaped(ip), blocked, Utils::String::toHtmlEscaped(reason) };
|
||||||
m_peers.push_back(temp);
|
m_peers.push_back(temp);
|
||||||
|
|
||||||
if (m_peers.size() >= MAX_LOG_MESSAGES)
|
if (m_peers.size() >= MAX_LOG_MESSAGES)
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ void DownloadHandler::init()
|
|||||||
|
|
||||||
bool DownloadHandler::saveToFile(const QByteArray &replyData, QString &filePath)
|
bool DownloadHandler::saveToFile(const QByteArray &replyData, QString &filePath)
|
||||||
{
|
{
|
||||||
QTemporaryFile *tmpfile = new QTemporaryFile;
|
QTemporaryFile *tmpfile = new QTemporaryFile(Utils::Fs::tempPath() + "XXXXXX");
|
||||||
if (!tmpfile->open()) {
|
if (!tmpfile->open()) {
|
||||||
delete tmpfile;
|
delete tmpfile;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -27,20 +27,21 @@
|
|||||||
* exception statement from your version.
|
* exception statement from your version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "downloadmanager.h"
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QNetworkRequest>
|
#include <QDebug>
|
||||||
#include <QNetworkProxy>
|
|
||||||
#include <QNetworkCookieJar>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QNetworkCookie>
|
#include <QNetworkCookie>
|
||||||
#include <QNetworkCookieJar>
|
#include <QNetworkCookieJar>
|
||||||
|
#include <QNetworkProxy>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QNetworkRequest>
|
||||||
#include <QSslError>
|
#include <QSslError>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
#include "base/preferences.h"
|
#include "base/preferences.h"
|
||||||
#include "downloadhandler.h"
|
#include "downloadhandler.h"
|
||||||
#include "downloadmanager.h"
|
#include "proxyconfigurationmanager.h"
|
||||||
|
|
||||||
// Spoof Firefox 38 user agent to avoid web server banning
|
// Spoof Firefox 38 user agent to avoid web server banning
|
||||||
const char DEFAULT_USER_AGENT[] = "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0";
|
const char DEFAULT_USER_AGENT[] = "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0";
|
||||||
@@ -208,16 +209,16 @@ bool DownloadManager::deleteCookie(const QNetworkCookie &cookie)
|
|||||||
|
|
||||||
void DownloadManager::applyProxySettings()
|
void DownloadManager::applyProxySettings()
|
||||||
{
|
{
|
||||||
|
auto proxyManager = ProxyConfigurationManager::instance();
|
||||||
|
ProxyConfiguration proxyConfig = proxyManager->proxyConfiguration();
|
||||||
QNetworkProxy proxy;
|
QNetworkProxy proxy;
|
||||||
const Preferences* const pref = Preferences::instance();
|
|
||||||
|
|
||||||
if (pref->isProxyEnabled() && !pref->isProxyOnlyForTorrents()) {
|
if (!proxyManager->isProxyOnlyForTorrents() && (proxyConfig.type != ProxyType::None)) {
|
||||||
// Proxy enabled
|
// Proxy enabled
|
||||||
proxy.setHostName(pref->getProxyIp());
|
proxy.setHostName(proxyConfig.ip);
|
||||||
proxy.setPort(pref->getProxyPort());
|
proxy.setPort(proxyConfig.port);
|
||||||
// Default proxy type is HTTP, we must change if it is SOCKS5
|
// Default proxy type is HTTP, we must change if it is SOCKS5
|
||||||
const int proxyType = pref->getProxyType();
|
if ((proxyConfig.type == ProxyType::SOCKS5) || (proxyConfig.type == ProxyType::SOCKS5_PW)) {
|
||||||
if ((proxyType == Proxy::SOCKS5) || (proxyType == Proxy::SOCKS5_PW)) {
|
|
||||||
qDebug() << Q_FUNC_INFO << "using SOCKS proxy";
|
qDebug() << Q_FUNC_INFO << "using SOCKS proxy";
|
||||||
proxy.setType(QNetworkProxy::Socks5Proxy);
|
proxy.setType(QNetworkProxy::Socks5Proxy);
|
||||||
}
|
}
|
||||||
@@ -226,10 +227,10 @@ void DownloadManager::applyProxySettings()
|
|||||||
proxy.setType(QNetworkProxy::HttpProxy);
|
proxy.setType(QNetworkProxy::HttpProxy);
|
||||||
}
|
}
|
||||||
// Authentication?
|
// Authentication?
|
||||||
if (pref->isProxyAuthEnabled()) {
|
if (proxyManager->isAuthenticationRequired()) {
|
||||||
qDebug("Proxy requires authentication, authenticating");
|
qDebug("Proxy requires authentication, authenticating");
|
||||||
proxy.setUser(pref->getProxyUsername());
|
proxy.setUser(proxyConfig.username);
|
||||||
proxy.setPassword(pref->getProxyPassword());
|
proxy.setPassword(proxyConfig.password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||