Compare commits
481 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1efd03cd0 | ||
|
|
36eae88a5a | ||
|
|
c01fd75c92 | ||
|
|
103f2d0720 | ||
|
|
037c46b587 | ||
|
|
0879f2c0ca | ||
|
|
a65cd5c39c | ||
|
|
d219e7afeb | ||
|
|
892bb4c432 | ||
|
|
45b9c6335c | ||
|
|
78e643039c | ||
|
|
04e993c674 | ||
|
|
c3132fc1b0 | ||
|
|
b1c73cb401 | ||
|
|
ac6eb8c6bc | ||
|
|
8a64412cb5 | ||
|
|
56885cc914 | ||
|
|
cdd1f9b86c | ||
|
|
139360cf76 | ||
|
|
2931d51add | ||
|
|
aa0bec41b4 | ||
|
|
b32b42b53e | ||
|
|
06c4c717bd | ||
|
|
a3ed44baec | ||
|
|
0cbb4a7074 | ||
|
|
af2e487ef5 | ||
|
|
28fdfdfef1 | ||
|
|
c95cca6436 | ||
|
|
86024c6c74 | ||
|
|
75290cf715 | ||
|
|
321b76a72a | ||
|
|
95ecaec11e | ||
|
|
0e7c16901c | ||
|
|
43dcbf776b | ||
|
|
e21c28e9d2 | ||
|
|
918c1507d3 | ||
|
|
a189e4403d | ||
|
|
563291a2e8 | ||
|
|
9156c9ac8f | ||
|
|
f0049f1dae | ||
|
|
a622152747 | ||
|
|
8440e9982f | ||
|
|
602d73fa82 | ||
|
|
c32ebb8d9f | ||
|
|
deeead4008 | ||
|
|
937a491409 | ||
|
|
79d5ae18a6 | ||
|
|
5cce0c53bf | ||
|
|
681b8c14ad | ||
|
|
443567486e | ||
|
|
c10ebc3086 | ||
|
|
42a2acefd3 | ||
|
|
c781545609 | ||
|
|
ba06affec7 | ||
|
|
6140d69fcb | ||
|
|
71a81fd1b7 | ||
|
|
4e05b62bbe | ||
|
|
9d366c8c7d | ||
|
|
940744b0bf | ||
|
|
6c2518a704 | ||
|
|
ef51fabf63 | ||
|
|
1aedd97d4d | ||
|
|
ff26ea94f5 | ||
|
|
c7a289d183 | ||
|
|
2a70c8f4d8 | ||
|
|
e27b08d970 | ||
|
|
48ec57604f | ||
|
|
db1bbea26a | ||
|
|
7bbb2f542b | ||
|
|
5563e24781 | ||
|
|
f131f6210f | ||
|
|
0356fa4538 | ||
|
|
b9c4a434c9 | ||
|
|
a4318cc060 | ||
|
|
d6e7161eff | ||
|
|
e428489ebc | ||
|
|
fa4cffe3d4 | ||
|
|
a355a87ec5 | ||
|
|
39749620a4 | ||
|
|
e7674bfaf8 | ||
|
|
3e8ad9eb83 | ||
|
|
6a95f9170c | ||
|
|
cc4a542e9d | ||
|
|
fed63b0b85 | ||
|
|
bf7b11d87d | ||
|
|
bb959ba465 | ||
|
|
b77e28fb12 | ||
|
|
261f981a9a | ||
|
|
93ad7e889e | ||
|
|
b79e2906e8 | ||
|
|
99e8ac3d36 | ||
|
|
badd36e81e | ||
|
|
c835502692 | ||
|
|
4fe7fd537d | ||
|
|
88ea548eaf | ||
|
|
360c8500bb | ||
|
|
7a925f15ba | ||
|
|
15ce9a7369 | ||
|
|
4b8532ea2d | ||
|
|
8e7d0f4dc1 | ||
|
|
de0ac5cda4 | ||
|
|
9a9fd4e2d1 | ||
|
|
4be0cbd2e4 | ||
|
|
5fef86ec18 | ||
|
|
1acd05794a | ||
|
|
5a61b7543b | ||
|
|
b6b74752a5 | ||
|
|
27a71ba123 | ||
|
|
20ae3d997c | ||
|
|
b73d0548c8 | ||
|
|
ca118697e9 | ||
|
|
600308aaa1 | ||
|
|
9b1ea66659 | ||
|
|
d29cc3325b | ||
|
|
9f6e28b741 | ||
|
|
4c5f349f49 | ||
|
|
9a321adfb1 | ||
|
|
e233f27d1c | ||
|
|
1cadf73a40 | ||
|
|
77c97b5b43 | ||
|
|
0054a330fb | ||
|
|
8ba05c57b0 | ||
|
|
284b1c7f87 | ||
|
|
8bc470e427 | ||
|
|
8e5190ffc8 | ||
|
|
a8298b6c9a | ||
|
|
b5928aa2e3 | ||
|
|
0a9462aa63 | ||
|
|
7b8be9e15c | ||
|
|
2a41223ce1 | ||
|
|
214151b57b | ||
|
|
ba8afb6bdc | ||
|
|
dbc00a66f0 | ||
|
|
8dfc68e196 | ||
|
|
2dee67edbd | ||
|
|
f6cc600b94 | ||
|
|
de334d32b1 | ||
|
|
44c86053ca | ||
|
|
efebf8e0c3 | ||
|
|
06dd495915 | ||
|
|
5b0857c01d | ||
|
|
523b86e28e | ||
|
|
4e28aa1031 | ||
|
|
166c5b252e | ||
|
|
112ca10f32 | ||
|
|
649a8e0418 | ||
|
|
c9631c2a3f | ||
|
|
7b65998c72 | ||
|
|
6a1db644de | ||
|
|
fcf430eb7b | ||
|
|
d916bfd73e | ||
|
|
949678a4d3 | ||
|
|
322e9e3ccf | ||
|
|
6098bfebf8 | ||
|
|
3758c98d5e | ||
|
|
dca80c3006 | ||
|
|
95bad03321 | ||
|
|
cecd1e11b1 | ||
|
|
c6fd400fa5 | ||
|
|
2711794770 | ||
|
|
505baf4eed | ||
|
|
0e09ce1dd3 | ||
|
|
6f13325e76 | ||
|
|
adda3a2d34 | ||
|
|
f22c2f8c7b | ||
|
|
981d7fd5ce | ||
|
|
80cd14e730 | ||
|
|
a28de2fa21 | ||
|
|
f143596b91 | ||
|
|
d32813ed1f | ||
|
|
7f44ef75c4 | ||
|
|
478c9a871c | ||
|
|
296bd07e52 | ||
|
|
7ced943b88 | ||
|
|
1d235b2953 | ||
|
|
516f4dad48 | ||
|
|
edc04292f7 | ||
|
|
cb7e48b2e8 | ||
|
|
56d80118b7 | ||
|
|
711699e200 | ||
|
|
fc931d8c88 | ||
|
|
d26bebfbe2 | ||
|
|
7463552dcd | ||
|
|
ec5325ed3c | ||
|
|
8b814c724c | ||
|
|
ce627de39d | ||
|
|
5c054223e8 | ||
|
|
133007c451 | ||
|
|
b17c8b84d1 | ||
|
|
f6210d5857 | ||
|
|
6926b3f7a0 | ||
|
|
1a56141430 | ||
|
|
ffa10adecf | ||
|
|
b69a8a0709 | ||
|
|
4dece85483 | ||
|
|
8deb18fa9d | ||
|
|
5af8bddc16 | ||
|
|
0dd84c37a1 | ||
|
|
1be6333601 | ||
|
|
20552ea157 | ||
|
|
71a92bbb63 | ||
|
|
e9865c42bd | ||
|
|
9172985173 | ||
|
|
54bf7e61f7 | ||
|
|
8422cb395a | ||
|
|
313b9b9bc0 | ||
|
|
9d3fcb10d5 | ||
|
|
34725dc26b | ||
|
|
8b576fcc50 | ||
|
|
1b7449ef4e | ||
|
|
596ec6ae4c | ||
|
|
569b69689a | ||
|
|
07c195f475 | ||
|
|
5e86c8a14d | ||
|
|
85796d9c2c | ||
|
|
f4120088c6 | ||
|
|
8d1f1512b0 | ||
|
|
c6abdacadd | ||
|
|
fa00d745b2 | ||
|
|
1e1313dffc | ||
|
|
00b3677867 | ||
|
|
8a9a23866f | ||
|
|
91328de30f | ||
|
|
204d9ff496 | ||
|
|
5d64373798 | ||
|
|
699d4b1161 | ||
|
|
0fe9d68be1 | ||
|
|
b2f9394d6e | ||
|
|
56965d444a | ||
|
|
07d7a44731 | ||
|
|
f85aa72c72 | ||
|
|
2f5b4a190e | ||
|
|
aada4f3c03 | ||
|
|
9540d45c1d | ||
|
|
cfd7a1bf0b | ||
|
|
3e13bd1381 | ||
|
|
3af23ae8a9 | ||
|
|
f1aa1f993d | ||
|
|
82b1b29906 | ||
|
|
14882fe38f | ||
|
|
82f60f1b89 | ||
|
|
dab617458a | ||
|
|
1832d518d6 | ||
|
|
5ed8517cde | ||
|
|
b2950afd5c | ||
|
|
a84c686090 | ||
|
|
efb8315a38 | ||
|
|
56b018fb95 | ||
|
|
731438a19a | ||
|
|
fd4ce53eb1 | ||
|
|
b4f0fbdbc4 | ||
|
|
26ae2af198 | ||
|
|
bdb625a615 | ||
|
|
f68c5114b2 | ||
|
|
83282bf835 | ||
|
|
054351e3a4 | ||
|
|
a5dac03956 | ||
|
|
a760913482 | ||
|
|
f3c8889865 | ||
|
|
b24a1e9123 | ||
|
|
c4b7622a17 | ||
|
|
f7fa66c65d | ||
|
|
a91d2028d8 | ||
|
|
adea644c04 | ||
|
|
31679f0d6d | ||
|
|
0d90ad8f7c | ||
|
|
8ab6aeafcc | ||
|
|
a56baf5b58 | ||
|
|
61eb921e44 | ||
|
|
8ecf79e91c | ||
|
|
349e58fa22 | ||
|
|
436f5bbd7e | ||
|
|
64bfdf930c | ||
|
|
8858518a14 | ||
|
|
def19ef88b | ||
|
|
4f989b674f | ||
|
|
f0ef21e409 | ||
|
|
6b0ae4f575 | ||
|
|
3926b0d787 | ||
|
|
a721e6d943 | ||
|
|
9c05148a24 | ||
|
|
725ef52cfe | ||
|
|
7982011d0b | ||
|
|
0a3bb0cfcd | ||
|
|
f75501f781 | ||
|
|
70f8a00c20 | ||
|
|
2691677650 | ||
|
|
be34bed61a | ||
|
|
721ef1d236 | ||
|
|
c8b944508b | ||
|
|
f3f3f2822b | ||
|
|
3ef0c82a8c | ||
|
|
b8200fd7b2 | ||
|
|
9e62780a6d | ||
|
|
58c78fa6f6 | ||
|
|
5484ec923d | ||
|
|
54225cd42f | ||
|
|
dc651ffed3 | ||
|
|
476a7d7be0 | ||
|
|
c580285fe8 | ||
|
|
5b6166ee15 | ||
|
|
18ee43225e | ||
|
|
b47073901f | ||
|
|
d45c44868e | ||
|
|
4401b60d51 | ||
|
|
0ce114a7f8 | ||
|
|
38ca306499 | ||
|
|
6cb636f85d | ||
|
|
7563b09ead | ||
|
|
76783c819c | ||
|
|
42312b982b | ||
|
|
a329a59719 | ||
|
|
82e548a2fd | ||
|
|
5bbdb9e119 | ||
|
|
68cbcaeab9 | ||
|
|
3c88657e0f | ||
|
|
f836be6736 | ||
|
|
85fe900afe | ||
|
|
052ccf2302 | ||
|
|
ae384da609 | ||
|
|
0fc2d289eb | ||
|
|
9ca02aad88 | ||
|
|
8ea34135e4 | ||
|
|
b66be5b64b | ||
|
|
ebc738e3a5 | ||
|
|
713474bc43 | ||
|
|
265a8cada8 | ||
|
|
138af31ef9 | ||
|
|
a5f6663e65 | ||
|
|
1519bca46d | ||
|
|
03719cbb87 | ||
|
|
98825613fa | ||
|
|
47abadfc67 | ||
|
|
a220e01e2e | ||
|
|
dea9237aa0 | ||
|
|
6099544da5 | ||
|
|
902116cbc8 | ||
|
|
96a6f450d0 | ||
|
|
6ed565a06b | ||
|
|
1fbbee794c | ||
|
|
bfab6389b5 | ||
|
|
26a4040003 | ||
|
|
e7ac721b3c | ||
|
|
48f5436f6f | ||
|
|
f754e34e35 | ||
|
|
9bb18e1a07 | ||
|
|
0245bbf5ab | ||
|
|
0a0c1f3529 | ||
|
|
be94c86350 | ||
|
|
a26333bc65 | ||
|
|
4c862597ae | ||
|
|
937d45d850 | ||
|
|
20b6579392 | ||
|
|
4f25e6c769 | ||
|
|
ce3b8733d1 | ||
|
|
b0140fbdbe | ||
|
|
abcd2b7600 | ||
|
|
f9998957cd | ||
|
|
acb8d5679f | ||
|
|
c3d3156ec7 | ||
|
|
09abd303bd | ||
|
|
0678e2e2bd | ||
|
|
00dbf7ba38 | ||
|
|
42cacabccd | ||
|
|
3d04a944b6 | ||
|
|
b02e2c2f9b | ||
|
|
5c0f17bf31 | ||
|
|
ac9a81985f | ||
|
|
a46c63d883 | ||
|
|
09a696fc27 | ||
|
|
dedc54d26f | ||
|
|
c0ffb8fa5c | ||
|
|
3e350c5935 | ||
|
|
da244d7ef2 | ||
|
|
2fc7039cc7 | ||
|
|
654497cd4a | ||
|
|
bdf50483df | ||
|
|
8a0681744e | ||
|
|
2699c76afd | ||
|
|
773064a081 | ||
|
|
7718403419 | ||
|
|
26b4d31810 | ||
|
|
f8dfda0893 | ||
|
|
e8897ae159 | ||
|
|
2f71f9f51a | ||
|
|
fc595f49d8 | ||
|
|
92444fccf4 | ||
|
|
6d0aebe9cb | ||
|
|
ef7af6bad6 | ||
|
|
c1a8a58080 | ||
|
|
76047f4ef2 | ||
|
|
9062266a84 | ||
|
|
9cdcd53234 | ||
|
|
419b94f042 | ||
|
|
3cb34ed7ee | ||
|
|
925ecb3464 | ||
|
|
488bd90303 | ||
|
|
c478ba59ac | ||
|
|
fe7c0db425 | ||
|
|
b2bf7047d9 | ||
|
|
e943449b42 | ||
|
|
69e2355ff4 | ||
|
|
b7ea2fb51a | ||
|
|
4c880fea09 | ||
|
|
a0e895641c | ||
|
|
484f1c36c9 | ||
|
|
982ce5c0ad | ||
|
|
7ac5da0acc | ||
|
|
9733716136 | ||
|
|
eebdc26e5a | ||
|
|
1f8b9378a3 | ||
|
|
b99b838827 | ||
|
|
c4d143c2c0 | ||
|
|
db1bd53f44 | ||
|
|
07dc182053 | ||
|
|
563055e891 | ||
|
|
b3de2ccc72 | ||
|
|
f4d5ceb3c4 | ||
|
|
70beef9f94 | ||
|
|
47c1908519 | ||
|
|
e1ead940be | ||
|
|
862d24ac48 | ||
|
|
078c80c81d | ||
|
|
6ba4588e62 | ||
|
|
cd70843ee9 | ||
|
|
cb8ecb74bf | ||
|
|
9f36d521a4 | ||
|
|
2c2c1093c3 | ||
|
|
0e81f3731f | ||
|
|
f1114387ae | ||
|
|
54516ac231 | ||
|
|
913f93ba82 | ||
|
|
11c7255da6 | ||
|
|
69fa916e26 | ||
|
|
d86335a58e | ||
|
|
24dced2411 | ||
|
|
1b71a4a4a4 | ||
|
|
ffedffcead | ||
|
|
1f64e14195 | ||
|
|
d6a5b1d321 | ||
|
|
792101731f | ||
|
|
3e783873ec | ||
|
|
ffb262f0a1 | ||
|
|
4727c1bdca | ||
|
|
1f1e37ce76 | ||
|
|
f40337d2e3 | ||
|
|
ecc5106f07 | ||
|
|
1b93f4eaf1 | ||
|
|
685ceafc5b | ||
|
|
cf6128a222 | ||
|
|
f78c74c1b5 | ||
|
|
faeee49517 | ||
|
|
1918969e28 | ||
|
|
fa9e3bf564 | ||
|
|
8eac154c05 | ||
|
|
ff12c76a62 | ||
|
|
2c27f952e2 | ||
|
|
e3214a9b6a | ||
|
|
4a02d171b4 | ||
|
|
7a16a1d8f1 | ||
|
|
ecc41fbc60 | ||
|
|
0125a2b521 | ||
|
|
d328b93c1a | ||
|
|
ab588b741e | ||
|
|
1588cd5d3d | ||
|
|
a597f067e2 | ||
|
|
0778f2a19e | ||
|
|
6c0d4b9439 | ||
|
|
98d91f7697 | ||
|
|
f7ac4ec652 | ||
|
|
43b96ea4f2 | ||
|
|
91bd5f1d8e | ||
|
|
f0edd7dcf7 | ||
|
|
e3f2480fe5 | ||
|
|
26e5785754 | ||
|
|
db12fb292a | ||
|
|
798ee52de1 | ||
|
|
b1f562d7c0 | ||
|
|
41daeb4c19 | ||
|
|
d66b788e5f | ||
|
|
ff4ab915a2 |
70
AUTHORS
@@ -1,5 +1,73 @@
|
|||||||
Author:
|
Author:
|
||||||
* Christophe Dumez <chris@qbittorrent.org>
|
* Christophe Dumez <chris@qbittorrent.org>
|
||||||
|
|
||||||
Other developers:
|
Contributors:
|
||||||
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
||||||
|
* Ishan Arora <ishan@qbittorrent.org>
|
||||||
|
* Grigis Gaëtan <cipher16@gmail.com>
|
||||||
|
|
||||||
|
Images Authors:
|
||||||
|
* files: src/Icons/*.png
|
||||||
|
copyright: Gnome Icon Theme
|
||||||
|
license: GPLv2
|
||||||
|
url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
|
||||||
|
|
||||||
|
* files: src/Icons/flags/*.png
|
||||||
|
copyright: Open Clip Art Library
|
||||||
|
license: Creative Commons Public Domain Dedication
|
||||||
|
url: http://www.openclipart.org
|
||||||
|
|
||||||
|
* files: src/Icons/skins/*.png
|
||||||
|
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||||
|
license: GPLv2
|
||||||
|
|
||||||
|
* files: src/menuicons/YYxYY/*.png
|
||||||
|
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||||
|
license: GPLv2
|
||||||
|
|
||||||
|
* file: src/search_engine/engines/btjunkie.png
|
||||||
|
copyright: Downloaded from btjunkie.org
|
||||||
|
|
||||||
|
* file: src/search_engine/engines/isohunt.png
|
||||||
|
copyright: Downloaded from isohunt.com
|
||||||
|
|
||||||
|
* file: src/search_engine/engines/mininova.png
|
||||||
|
copyright: Downloaded from mininova.org
|
||||||
|
|
||||||
|
* file: src/search_engine/engines/piratebay.png
|
||||||
|
copyright: Downloaded from thepiratebay.org
|
||||||
|
|
||||||
|
* file: src/search_engine/engines/torrentreactor.png
|
||||||
|
copyright: Downloaded from torrentreactor.net
|
||||||
|
|
||||||
|
Translations authors:
|
||||||
|
* files: src/lang/*.ts
|
||||||
|
copyright:
|
||||||
|
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
||||||
|
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
||||||
|
- Catalan: Gekko Dam Beer (gekko04@users.sourceforge.net)
|
||||||
|
- Chinese (Simplified): Guo Yue (guoyue0418@hotmail.com)
|
||||||
|
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
||||||
|
- Czech: Jirka Vilim (web@tets.cz)
|
||||||
|
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
||||||
|
- Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)
|
||||||
|
- English: Christophe Dumez (chris@qbittorrent.org)
|
||||||
|
- Finnish: Niklas Laxström (nikerabbit@users.sourceforge.net)
|
||||||
|
- French: Christophe Dumez (chris@qbittorrent.org)
|
||||||
|
- German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
|
||||||
|
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net)
|
||||||
|
- Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
|
||||||
|
- Italian: Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)
|
||||||
|
- Japanese: Nardog (nardog@e2umail.com)
|
||||||
|
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
||||||
|
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
|
||||||
|
- Polish: Jarek Smieja (ajep9691@wp.pl)
|
||||||
|
- Portuguese: Nick Marinho (nickmarinho@gmail.com)
|
||||||
|
- Romanian: Obada Denis (obadadenis@users.sourceforge.net)
|
||||||
|
- Russian: Nick Khazov (m2k3d0n at users.sourceforge.net)
|
||||||
|
- Slovak: helix84
|
||||||
|
- Spanish: Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net)
|
||||||
|
- Swedish: Daniel Nylander (po@danielnylander.se)
|
||||||
|
- Turkish: Erdem Bingöl (erdem84@gmail.com)
|
||||||
|
- Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
|
||||||
|
license: GPLv2
|
||||||
|
|||||||
90
Changelog
@@ -1,10 +1,82 @@
|
|||||||
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v1.0.0
|
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v1.2.0
|
||||||
|
- FEATURE: Torrent queueing system (with priorities)
|
||||||
|
- FEATURE: The number of DHT nodes is displayed
|
||||||
|
- FEATURE: RSS can now be disabled from program preferences
|
||||||
|
- FEATURE: Added collapse/expand all buttons in addition dialog
|
||||||
|
- FEATURE: Can have different proxies for Bittorrent and search engine
|
||||||
|
- FEATURE: Allow multiple item selection in Web UI transfer list
|
||||||
|
- FEATURE: Moved uploads to a separate list in Web UI
|
||||||
|
- BUGFIX: Totally rewritten Web UI list refresh system (fixed memory leak)
|
||||||
|
- BUGFIX: Disable ETA calculation when ETA column is hidden
|
||||||
|
- BUGFIX: Removed "disconnected" connection state, detection was far from perfect
|
||||||
|
- COSMETIC: Transfer speed, ratio, connection status and DHT nodes are displayed in status bar
|
||||||
|
- COSMETIC: RSS Tab is now hidden as a default
|
||||||
|
- COSMETIC: Allow to hide or display top toolbar
|
||||||
|
- COSMETIC: Log is now in a separate dialog
|
||||||
|
|
||||||
|
* Sun Sept 14 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.4
|
||||||
|
- FEATURE: DHT is no longer used as fallback only
|
||||||
|
- FEATURE: Ported WebUI to Mootools v1.2
|
||||||
|
- BUGFIX: Fixed 'start seeding after torrent creation' feature
|
||||||
|
- BUGFIX: Fixed compilation with boost v1.36
|
||||||
|
- BUGFIX: Some code optimization
|
||||||
|
- BUGFIX: Fixed memory leak in Web UI
|
||||||
|
- BUGFIX: Fixed problems with column sorting
|
||||||
|
- BUGFIX: Improved code for pausing torrents on startup
|
||||||
|
- BUGFIX: Torrent addition dialog is now disabled for downloads from WebUI
|
||||||
|
- BUGFIX: Give focus to input field in WebUI download dialog
|
||||||
|
|
||||||
|
* Tue Aug 26 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.3
|
||||||
|
- BUGFIX: Fixed ratio saving for seeding torrents
|
||||||
|
- I18N: Added czech and traditional chinese translations
|
||||||
|
|
||||||
|
* Sun Aug 17 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.2
|
||||||
|
- BUGFIX: Fixed progress calculation
|
||||||
|
- BUGFIX: Fixed finished torrent detection
|
||||||
|
|
||||||
|
* Fri Aug 01 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.1
|
||||||
|
- BUGFIX: Fixed bad resource file for icons
|
||||||
|
|
||||||
|
* Fri Aug 01 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.0
|
||||||
|
- FEATURE: Web interface to control qbittorrent (Ishan Arora)
|
||||||
|
- FEATURE: Can spoof Azureus peer id to avoid ban
|
||||||
|
- FEATURE: Allow to hide/show some columns in download and seeding lists
|
||||||
|
- FEATURE: Option to start qBittorrent minimized in systray
|
||||||
|
- FEATURE: Multi-tab support in search engine (Grigis Gaëtan)
|
||||||
|
- FEATURE: Allow to define double-click actions in torrents lists
|
||||||
|
- FEATURE: Allow to open torrent destination folder
|
||||||
|
- FEATURE: Real progress bar in torrent properties that displays downloaded pieces
|
||||||
|
- FEATURE: Allow to buy downloads using ShareMonkey
|
||||||
|
- FEATURE: Display if UPnP/NAT-PMP was successful or not
|
||||||
|
- FEATURE: Threadified torrent creation
|
||||||
|
- FEATURE: Improved eMule DAT ip filter parser
|
||||||
|
- FEATURE: Added support for PeerGuardian p2p filters (text)
|
||||||
|
- FEATURE: Added support for PeerGuardian p2b filters (binary)
|
||||||
|
- FEATURE: Allow to customize folder scan interval
|
||||||
|
- FEATURE: Allow to add several trackers at once
|
||||||
|
- BUGFIX: Allow to run one instance of qBittorrent per user
|
||||||
|
- BUGFIX: Do not display seeds number in seeding list (always 0)
|
||||||
|
- BUGFIX: Threadified IP filter file parser to avoid GUI freeze
|
||||||
|
- BUGFIX: Ask if we want to redownload if content was deleted from hard drive
|
||||||
|
- BUGFIX: Added missing copyright/licensing information for some files
|
||||||
|
- BUGFIX: qBittorrent is no longer conflicting with rTorrent (libtorrent renamed to libtorrent-rasterbar)
|
||||||
|
- COSMETIC: Do not display progress bar in seeding list (always 100%)
|
||||||
|
- COSMETIC: Added a progress bar for torrent creation
|
||||||
|
- COSMETIC: Display tracker errors in a cleaner way
|
||||||
|
- COSMETIC: Display "unpaused/total_torrent" in download/upload tabs
|
||||||
|
- COSMETIC: Allow to resize RSS column
|
||||||
|
- COSMETIC: Global UP/DL speeds and ratio are displayed above tabs
|
||||||
|
- COSMETIC: Use infinity symbol for ETA when time is infinite
|
||||||
|
|
||||||
|
* Fri Apr 11 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.0.0
|
||||||
- FEATURE: Based on new libtorrent v0.13
|
- FEATURE: Based on new libtorrent v0.13
|
||||||
- FEATURE: Added UPnP / NAT-PMP port forwarding support
|
- FEATURE: Added UPnP / NAT-PMP port forwarding support
|
||||||
- FEATURE: Added encryption support (compatible with Azureus)
|
- FEATURE: Added encryption support (compatible with Azureus)
|
||||||
- FEATURE: Bittorrent FAST extension support
|
- FEATURE: Bittorrent FAST extension support
|
||||||
- FEATURE: Added RSS support
|
- FEATURE: Added RSS support
|
||||||
- FEATURE: Support files prioritizing in a torrent
|
- FEATURE: Support files prioritizing in a torrent
|
||||||
|
- FEATURE: Brand new search engine plugins system
|
||||||
|
- FEATURE: Filtered files don't appear on hard disk anymore
|
||||||
- FEATURE: Finished torrents are now moved to another tab for seeding
|
- FEATURE: Finished torrents are now moved to another tab for seeding
|
||||||
- FEATURE: Display more infos about the torrent in its properties
|
- FEATURE: Display more infos about the torrent in its properties
|
||||||
- FEATURE: Allow the user to edit torrents' trackers
|
- FEATURE: Allow the user to edit torrents' trackers
|
||||||
@@ -30,6 +102,15 @@
|
|||||||
- FEATURE: User is now warned when fast resume data was rejected
|
- FEATURE: User is now warned when fast resume data was rejected
|
||||||
- FEATURE: Url seeds are now displayed in torrent properties and are editable
|
- FEATURE: Url seeds are now displayed in torrent properties and are editable
|
||||||
- FEATURE: Allow to drag 'n drop urls on the main window
|
- FEATURE: Allow to drag 'n drop urls on the main window
|
||||||
|
- FEATURE: Improved search engine (multipage support in all plugins)
|
||||||
|
- FEATURE: Added BTJunkie search engine plugin
|
||||||
|
- FEATURE: Added an option to force full disk allocation for all torrents
|
||||||
|
- FEATURE: Added an option to add torrents in paused state
|
||||||
|
- FEATURE: Added an option to set the max number of connections per torrent
|
||||||
|
- FEATURE: Added an option to set the max number of uploads per torrent
|
||||||
|
- FEATURE: Added an option to automatically delete torrents when they reach a given ratio (>= 1.0)
|
||||||
|
- FEATURE: Added an option to display current transfer speeds in title bar
|
||||||
|
- FEATURE: Torrent content is now displayed as a tree
|
||||||
- I18N: Added Hungarian translation
|
- I18N: Added Hungarian translation
|
||||||
- I18N: Added Brazilian translation
|
- I18N: Added Brazilian translation
|
||||||
- BUGFIX: Progress of paused torrents is now correct on restart
|
- BUGFIX: Progress of paused torrents is now correct on restart
|
||||||
@@ -52,11 +133,16 @@
|
|||||||
- BUGFIX: Made torrent deletion from hard-drive safer
|
- BUGFIX: Made torrent deletion from hard-drive safer
|
||||||
- BUGFIX: Prevent downloadFromUrl flooding
|
- BUGFIX: Prevent downloadFromUrl flooding
|
||||||
- BUGFIX: ETA was wrong for torrents with filtered files
|
- BUGFIX: ETA was wrong for torrents with filtered files
|
||||||
|
- BUGFIX: Fixed drag'n drop on non-KDE systems
|
||||||
|
- BUGFIX: Removed build dependency on Python
|
||||||
|
- BUGFIX: Catching DHT exception in case there is a problem
|
||||||
- COSMETIC: Redesigned torrent properties a little
|
- COSMETIC: Redesigned torrent properties a little
|
||||||
- COSMETIC: Redesigned options a little
|
- COSMETIC: Totally redesigned program preferences
|
||||||
- COSMETIC: Display more logs messages concerning features
|
- COSMETIC: Display more logs messages concerning features
|
||||||
- COSMETIC: Improved lists renderers
|
- COSMETIC: Improved lists renderers
|
||||||
- COSMETIC: Use a different icon for torrents being checked and for connecting ones
|
- COSMETIC: Use a different icon for torrents being checked and for connecting ones
|
||||||
|
- COSMETIC: Improved some icons
|
||||||
|
- COSMETIC: Improved systray tooltip style
|
||||||
|
|
||||||
* Mon May 07 2007 - Christophe Dumez <chris@qbittorrent.org> - v0.9.3
|
* Mon May 07 2007 - Christophe Dumez <chris@qbittorrent.org> - v0.9.3
|
||||||
- BUGFIX: Fixed pause toggle on double-click in download list
|
- BUGFIX: Fixed pause toggle on double-click in download list
|
||||||
|
|||||||
26
INSTALL
@@ -1,4 +1,4 @@
|
|||||||
qBittorrent - A BitTorrent client in C++ / Qt4.2
|
qBittorrent - A BitTorrent client in C++ / Qt4
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
*** Necessary if qt3 is default on your system ***
|
*** Necessary if qt3 is default on your system ***
|
||||||
@@ -14,25 +14,29 @@ qbittorrent
|
|||||||
will install and execute qBittorrent hopefully without any problems.
|
will install and execute qBittorrent hopefully without any problems.
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
- Qt >= 4.2 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
- Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
||||||
|
Qt >= 4.4.0 is advised
|
||||||
|
|
||||||
- libtorrent by Arvid Norberg (>= v0.13 REQUIRED)
|
- libtorrent-rasterbar by Arvid Norberg (>= v0.13.1 REQUIRED)
|
||||||
|
-> http://www.qbittorrent.org/download.php (advised)
|
||||||
-> http://www.libtorrent.net
|
-> http://www.libtorrent.net
|
||||||
Be carefull: another library (the one used by rtorrent) use the same name.
|
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||||
These are TWO different libraries and qBittorrent will only work with the one provided
|
|
||||||
on sourceforge (created by Arvid Norberg). The two libraries conflicts with each other.
|
|
||||||
|
|
||||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
||||||
|
|
||||||
- libcommoncpp2
|
- libcurl
|
||||||
|
|
||||||
- python >= 2.3 (previous might work - not tested): needed by search engine.
|
- python >= 2.3 (needed by search engine)
|
||||||
|
|
||||||
- libmagick++ (advised, not required)
|
- libmagick++ (advised, not required)
|
||||||
|
* Needed for favicons support (RSS / Search plugins)
|
||||||
|
|
||||||
NOTE FOR GNOME USERS:
|
- libzzip (advised, not required)
|
||||||
- qt4-qtconfig package is advised when using Plastique style (default)
|
* Needed for zip support (Search plugins)
|
||||||
or just change qBittorrent style to Cleanlooks (GNOME like)
|
|
||||||
|
NOTE FOR NON-KDE USERS:
|
||||||
|
- qt4-qtconfig package is advised when using other systems than KDE.
|
||||||
|
You can also change qBittorrent style to Cleanlooks (GNOME like)
|
||||||
|
|
||||||
DOCUMENTATION:
|
DOCUMENTATION:
|
||||||
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
||||||
|
|||||||
14
README
@@ -3,30 +3,30 @@ qBittorrent - A BitTorrent client in Qt4
|
|||||||
|
|
||||||
Description:
|
Description:
|
||||||
********************************
|
********************************
|
||||||
qBittorrent is a bittorrent client programmed in C++ / Qt4 that use
|
qBittorrent is a bittorrent client programmed in C++ / Qt4 that uses
|
||||||
libtorrent (sometimes called rb_libtorrent) by Arvid Norberg.
|
libtorrent (sometimes called rblibtorrent) by Arvid Norberg.
|
||||||
|
|
||||||
It aims to be a good alternative to all other bittorrent clients
|
It aims to be a good alternative to all other bittorrent clients
|
||||||
out there. qBittorrent is fast, stable and provides unicode
|
out there. qBittorrent is fast, stable and provides unicode
|
||||||
support.
|
support as well as many features.
|
||||||
|
|
||||||
Installation:
|
Installation:
|
||||||
********************************
|
********************************
|
||||||
For installation follow the instructions from INSTALL file, but simple
|
For installation, follow the instructions from INSTALL file, but simple:
|
||||||
|
|
||||||
./configure
|
./configure
|
||||||
make && make install
|
make && make install
|
||||||
qbittorrent
|
qbittorrent
|
||||||
|
|
||||||
will install and execute qBittorrent hopefully without any problems.
|
will install and execute qBittorrent hopefully without any problem.
|
||||||
|
|
||||||
For more information please visit:
|
For more information please visit:
|
||||||
http://www.qbittorrent.org
|
http://www.qbittorrent.org
|
||||||
|
|
||||||
Please report any bug (or feature requests) to:
|
Please report any bug (or feature request) to:
|
||||||
http://bugs.qbittorrent.org
|
http://bugs.qbittorrent.org
|
||||||
|
|
||||||
You can also meet me on IRC:
|
You can also meet me (chris-qBT) on IRC:
|
||||||
#qbittorrent on irc.freenode.net
|
#qbittorrent on irc.freenode.net
|
||||||
|
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|||||||
98
TODO
@@ -1,98 +1,4 @@
|
|||||||
// Easy
|
See https://blueprints.launchpad.net/qbittorrent/
|
||||||
- Translations into as many languages as possible
|
|
||||||
- Improve man page
|
|
||||||
- Use Launchpad/Rosetta for translations once it supports TS files
|
|
||||||
|
|
||||||
// Intermediate
|
|
||||||
- Port on MacOS, Windows (and create an installer for Windows) - Progressing slowly
|
|
||||||
- Add some transparency (menus,...), improve look
|
|
||||||
|
|
||||||
// Harder
|
|
||||||
- Display a progress bar that really displays the pieces we have (like in eMule)
|
|
||||||
|
|
||||||
// Waiting for libtorrent
|
|
||||||
- File selection in a torrent in compact mode
|
|
||||||
- Allow to prioritize torrents
|
|
||||||
|
|
||||||
// Unsure
|
|
||||||
- Azureus spoofing to prevent ban from trackers?
|
|
||||||
- Option to shutdown computer when downloads are finished
|
|
||||||
- Add a torrent scheduler
|
|
||||||
- Make use of dbus on Linux for the single instance instead of socket communication?
|
|
||||||
(http://techbase.kde.org/Development/Tutorials/D-Bus/Accessing_Interfaces)
|
|
||||||
- search engines customizing
|
|
||||||
|
|
||||||
// in v1.2.0
|
// in v1.2.0
|
||||||
- Allow user to organize the downloads into categories/folders
|
- Split download and uploads in Web UI (Ishan Ahora)
|
||||||
|
|
||||||
// in v1.1.0
|
|
||||||
- Tabs support in search
|
|
||||||
- Allow to hide columns?
|
|
||||||
- Allow to scan multiple directories? (useful?)
|
|
||||||
- Web interface (turbogears? php?)
|
|
||||||
- improve and test tracker authentication code (remember login/pass) (need a tracker to test this)
|
|
||||||
- support zipped torrents? (useful?)
|
|
||||||
- Add option for RSS customization (refresh interval, max news per RSS...)
|
|
||||||
- Allow to disable UPnP/NAT-PMP/LSD in options?
|
|
||||||
- Allow to automatically delete torrents when they reach a given ratio (in options) : easy
|
|
||||||
- Allow to limit the number of downloading torrents simultaneously (other are paused until a download finishes)
|
|
||||||
- Add "Mark all as read" feature for RSS
|
|
||||||
- Allow to customize lists refreshing interval (in options)
|
|
||||||
- Use search engines as plugins (split them, load them dynamically) to allow the user to add some
|
|
||||||
|
|
||||||
// in v1.0.0 (partial) - WIP
|
|
||||||
- Check storage st creation + hasher in torrent creation
|
|
||||||
- Fix all (or almost all) opened bugs in bug tracker
|
|
||||||
- update sorting when a new torrent is added?
|
|
||||||
- Keep documention up to date
|
|
||||||
- Windows port (Chris - Peerkoel)
|
|
||||||
- write patches libtorrent for file_priority(int index), actual_size() ?
|
|
||||||
- valgrind --tool=memcheck --leak-check=full src/qbittorrent (Looks ok)
|
|
||||||
- 128m 29m 16m S 4.8 2.9 0:02.28 qbittorrent
|
|
||||||
* beta 6
|
|
||||||
- Translations update (IN PROGRESS)
|
|
||||||
- Wait for some bug fixes in libtorrent :
|
|
||||||
- Number of seeds non null for finished torrent (Ticket #122)
|
|
||||||
|
|
||||||
LANGUAGES UPDATED:
|
|
||||||
- French *BETA3*
|
|
||||||
- English *BETA3*
|
|
||||||
- Japanese *BETA3*
|
|
||||||
- Swedish *BETA3*
|
|
||||||
- Slovak *BETA3*
|
|
||||||
- Ukrainian *BETA3*
|
|
||||||
- Chinese (simplified) *BETA4*
|
|
||||||
- Hungarian *BETA4*
|
|
||||||
- Italian *BETA5*
|
|
||||||
- Polish *BETA5*
|
|
||||||
- Portuguese *BETA5*
|
|
||||||
- Brazilian *BETA5*
|
|
||||||
- Spanish *BETA5*
|
|
||||||
- German *BETA5*
|
|
||||||
- Russian *BETA5*
|
|
||||||
- Korean *BETA5*
|
|
||||||
- Greek *BETA6*
|
|
||||||
- Dutch *BETA6*
|
|
||||||
- Romanian *BETA6*
|
|
||||||
|
|
||||||
beta5->beta6 changelog:
|
|
||||||
- FEATURE: Split download tab from GUI class and cleaned up code
|
|
||||||
- FEATURE: A lot of code optimization (CPU & memory usage)
|
|
||||||
- FEATURE: Added support for .ico format (useful for RSS favicons)
|
|
||||||
- FEATURE: Replaced Meganova search engine by TorrentReactor
|
|
||||||
- I18N: Updated Greek, Dutch and Romanian translation
|
|
||||||
- I18N: Removed no longer maintained Traditional chinese translation
|
|
||||||
- BUGFIX: Made torrent deletion from hard-drive safer
|
|
||||||
- BUGFIX: Fixed a bug when switching from finished to downloading list
|
|
||||||
- BUGFIX: Showing checking progress for paused torrents too
|
|
||||||
- BUGFIX: Fixed progress column sorting on startup
|
|
||||||
- BUGFIX: Prevent downloadFromUrl flooding
|
|
||||||
- BUGFIX: Fixed pause state toggle for paused and checking torrents
|
|
||||||
- BUGFIX: Made finished list context menu more similar to the download list one
|
|
||||||
- BUGFIX: Fixed Pause/Start action in lists context menus
|
|
||||||
- BUGFIX: Improved ETA calculation
|
|
||||||
- BUGFIX: ETA was wrong for torrents with filtered files
|
|
||||||
- BUGFIX: Display the torrent that are being checked as 'checking' in seeding list
|
|
||||||
- BUGFIX: Fixed file preview and improved previewable files detection
|
|
||||||
- BUGFIX: Do not store and calculate ETA values for finished/paused torrents
|
|
||||||
- BUGFIX: Fixed memory leak in GUI
|
|
||||||
|
|||||||
249
configure
vendored
@@ -18,15 +18,20 @@ Main options:
|
|||||||
--help This help text.
|
--help This help text.
|
||||||
|
|
||||||
Dependency options:
|
Dependency options:
|
||||||
--with-libtorrent-inc=[path] Path to libtorrent include files
|
--with-libtorrent-inc=[path] Path to libtorrent-rasterbar include
|
||||||
--with-libtorrent-lib=[path] Path to libtorrent library files
|
files
|
||||||
--with-libtorrent-static-lib=[path] Path to libtorrent .a file
|
--with-libtorrent-lib=[path] Path to libtorrent-rasterbar library
|
||||||
|
files
|
||||||
|
--with-libtorrent-static-lib=[path] Path to libtorrent-rasterbar .a file
|
||||||
--with-libboost-inc=[path] Path to libboost include files
|
--with-libboost-inc=[path] Path to libboost include files
|
||||||
--with-libcommoncpp2-inc=[path] Path to libcommoncpp2 include files
|
--with-libcurl-inc=[path] Path to libcurl include files
|
||||||
--with-libcommoncpp2-lib=[path] Path to libcommoncpp2 library files
|
--with-libcurl-lib=[path] Path to libcurl library files
|
||||||
--disable-libmagick Disable use of libmagick
|
--disable-libmagick Disable use of libmagick
|
||||||
--with-libmagick-inc=[path] Path to libmagick++ include files
|
--with-libmagick-inc=[path] Path to libmagick++ include files
|
||||||
--with-libmagick-lib=[path] Path to libmagick++ library files
|
--with-libmagick-lib=[path] Path to libmagick++ library files
|
||||||
|
--disable-libzzip Disable use of libzzip
|
||||||
|
--with-libzzip-inc=[path] Path to libzzip++ include files
|
||||||
|
--with-libzzip-lib=[path] Path to libzzip++ library files
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
}
|
}
|
||||||
@@ -163,13 +168,13 @@ while [ $# -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--with-libcommoncpp2-inc=*)
|
--with-libcurl-inc=*)
|
||||||
QC_WITH_LIBCOMMONCPP2_INC=$optarg
|
QC_WITH_LIBCURL_INC=$optarg
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--with-libcommoncpp2-lib=*)
|
--with-libcurl-lib=*)
|
||||||
QC_WITH_LIBCOMMONCPP2_LIB=$optarg
|
QC_WITH_LIBCURL_LIB=$optarg
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -188,6 +193,21 @@ while [ $# -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--disable-libzzip)
|
||||||
|
QC_DISABLE_libzzip="Y"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
|
--with-libzzip-inc=*)
|
||||||
|
QC_WITH_LIBZZIP_INC=$optarg
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
|
--with-libzzip-lib=*)
|
||||||
|
QC_WITH_LIBZZIP_LIB=$optarg
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
--verbose)
|
--verbose)
|
||||||
QC_VERBOSE="Y"
|
QC_VERBOSE="Y"
|
||||||
shift
|
shift
|
||||||
@@ -213,11 +233,14 @@ echo QC_WITH_LIBTORRENT_INC=$QC_WITH_LIBTORRENT_INC
|
|||||||
echo QC_WITH_LIBTORRENT_LIB=$QC_WITH_LIBTORRENT_LIB
|
echo QC_WITH_LIBTORRENT_LIB=$QC_WITH_LIBTORRENT_LIB
|
||||||
echo QC_WITH_LIBTORRENT_STATIC_LIB=$QC_WITH_LIBTORRENT_STATIC_LIB
|
echo QC_WITH_LIBTORRENT_STATIC_LIB=$QC_WITH_LIBTORRENT_STATIC_LIB
|
||||||
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
|
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
|
||||||
echo QC_WITH_LIBCOMMONCPP2_INC=$QC_WITH_LIBCOMMONCPP2_INC
|
echo QC_WITH_LIBCURL_INC=$QC_WITH_LIBCURL_INC
|
||||||
echo QC_WITH_LIBCOMMONCPP2_LIB=$QC_WITH_LIBCOMMONCPP2_LIB
|
echo QC_WITH_LIBCURL_LIB=$QC_WITH_LIBCURL_LIB
|
||||||
echo QC_DISABLE_libmagick=$QC_DISABLE_libmagick
|
echo QC_DISABLE_libmagick=$QC_DISABLE_libmagick
|
||||||
echo QC_WITH_LIBMAGICK_INC=$QC_WITH_LIBMAGICK_INC
|
echo QC_WITH_LIBMAGICK_INC=$QC_WITH_LIBMAGICK_INC
|
||||||
echo QC_WITH_LIBMAGICK_LIB=$QC_WITH_LIBMAGICK_LIB
|
echo QC_WITH_LIBMAGICK_LIB=$QC_WITH_LIBMAGICK_LIB
|
||||||
|
echo QC_DISABLE_libzzip=$QC_DISABLE_libzzip
|
||||||
|
echo QC_WITH_LIBZZIP_INC=$QC_WITH_LIBZZIP_INC
|
||||||
|
echo QC_WITH_LIBZZIP_LIB=$QC_WITH_LIBZZIP_LIB
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -319,38 +342,42 @@ fi
|
|||||||
|
|
||||||
gen_files() {
|
gen_files() {
|
||||||
cat >$1/modules.cpp <<EOT
|
cat >$1/modules.cpp <<EOT
|
||||||
#line 1 "qt42.qcm"
|
#line 1 "qt4.qcm"
|
||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: Qt >= 4.2
|
name: Qt >= 4.3
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_qt42 : public ConfObj
|
class qc_qt4 : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_qt42(Conf *c) : ConfObj(c) {}
|
qc_qt4(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "Qt >= 4.2"; }
|
QString name() const { return "Qt >= 4.3"; }
|
||||||
QString shortname() const { return "qt42"; }
|
QString shortname() const { return "Qt 4.3"; }
|
||||||
bool exec()
|
bool exec()
|
||||||
{
|
{
|
||||||
return(QT_VERSION >= 0x040200);
|
if(QT_VERSION >= 0x040400) {
|
||||||
|
conf->addDefine("QT_4_4");
|
||||||
|
}
|
||||||
|
return(QT_VERSION >= 0x040300);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#line 1 "libtorrent.qcm"
|
#line 1 "libtorrent-rasterbar.qcm"
|
||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: libtorrent
|
name: libtorrent-rasterbar
|
||||||
arg: with-libtorrent-inc=[path], Path to libtorrent include files
|
arg: with-libtorrent-inc=[path], Path to libtorrent-rasterbar include files
|
||||||
arg: with-libtorrent-lib=[path], Path to libtorrent library files
|
arg: with-libtorrent-lib=[path], Path to libtorrent-rasterbar library files
|
||||||
arg: with-libtorrent-static-lib=[path], Path to libtorrent .a file
|
arg: with-libtorrent-static-lib=[path], Path to libtorrent-rasterbar .a file
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_libtorrent : public ConfObj
|
class qc_libtorrent_rasterbar : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libtorrent(Conf *c) : ConfObj(c) {}
|
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "libtorrent >= 0.13"; }
|
QString name() const { return "libtorrent-rasterbar >= 0.13"; }
|
||||||
QString shortname() const { return "libtorrent"; }
|
QString shortname() const { return "libtorrent-rasterbar"; }
|
||||||
bool exec(){
|
bool exec(){
|
||||||
QString s;
|
QString s;
|
||||||
s = conf->getenv("QC_WITH_LIBTORRENT_INC");
|
s = conf->getenv("QC_WITH_LIBTORRENT_INC");
|
||||||
@@ -384,17 +411,19 @@ public:
|
|||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBTORRENT_LIB");
|
s = conf->getenv("QC_WITH_LIBTORRENT_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!conf->checkLibrary(s, "torrent")) {
|
if(!conf->checkLibrary(s, "torrent-rasterbar")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(conf->checkLibrary(s, "torrent")){
|
if(conf->checkLibrary(s, "torrent-rasterbar")){
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -402,16 +431,6 @@ public:
|
|||||||
if(!found) return false;
|
if(!found) return false;
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}
|
}
|
||||||
// BUGFIX for Fedora (doesn't support pkg-config?)
|
|
||||||
QFile issue_file("/etc/issue");
|
|
||||||
if(issue_file.open(QIODevice::ReadOnly | QIODevice::Text)){
|
|
||||||
QString content = issue_file.readAll();
|
|
||||||
issue_file.close();
|
|
||||||
if(content.indexOf("Fedora") != -1){
|
|
||||||
qWarning("Fedora detected. WORKAROUND for Fedora pkg-config problem enabled");
|
|
||||||
conf->addLib("-lssl -lcrypto -lboost_date_time -lboost_filesystem -lboost_thread -lz -ltorrent");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -472,25 +491,25 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#line 1 "libcommoncpp2.qcm"
|
#line 1 "libcurl.qcm"
|
||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: libcommoncpp2
|
name: libcommoncpp2
|
||||||
arg: with-libcommoncpp2-inc=[path], Path to libcommoncpp2 include files
|
arg: with-libcurl-inc=[path], Path to libcurl include files
|
||||||
arg: with-libcommoncpp2-lib=[path], Path to libcommoncpp2 library files
|
arg: with-libcurl-lib=[path], Path to libcurl library files
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_libcommoncpp2 : public ConfObj
|
class qc_libcurl : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libcommoncpp2(Conf *c) : ConfObj(c) {}
|
qc_libcurl(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "GNU Common C++ library (libcommoncpp2)"; }
|
QString name() const { return "libcurl"; }
|
||||||
QString shortname() const { return "libcommoncpp2"; }
|
QString shortname() const { return "libcurl"; }
|
||||||
bool exec(){
|
bool exec(){
|
||||||
QString s;
|
QString s;
|
||||||
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_INC");
|
s = conf->getenv("QC_WITH_LIBCURL_INC");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!conf->checkHeader(s, "cc++/url.h")) {
|
if(!conf->checkHeader(s, "curl/curl.h")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -499,7 +518,7 @@ public:
|
|||||||
sl << "/usr/local/include";
|
sl << "/usr/local/include";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(conf->checkHeader(s, "cc++/url.h")){
|
if(conf->checkHeader(s, "curl/curl.h")){
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -510,39 +529,27 @@ public:
|
|||||||
}
|
}
|
||||||
conf->addIncludePath(s);
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_LIB");
|
s = conf->getenv("QC_WITH_LIBCURL_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!QFile::exists(s+QString("libccext2.so")))
|
if(!QFile::exists(s+QString("/libcurl.so")))
|
||||||
return false;
|
return false;
|
||||||
if(!QFile::exists(s+QString("libccgnu2.so")))
|
|
||||||
return false;
|
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(QFile::exists(s+QString("libccext2.so"))){
|
if(QFile::exists(s+QString("libcurl.so"))){
|
||||||
if(QFile::exists(s+QString("libccgnu2.so"))){
|
found = true;
|
||||||
found = true;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!found) return false;
|
if(!found) return false;
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}
|
}
|
||||||
// BUGFIX for Fedora (doesn't support pkg-config?)
|
|
||||||
QFile issue_file("/etc/issue");
|
|
||||||
if(issue_file.open(QIODevice::ReadOnly | QIODevice::Text)){
|
|
||||||
QString content = issue_file.readAll();
|
|
||||||
issue_file.close();
|
|
||||||
if(content.indexOf("Fedora") != -1){
|
|
||||||
qWarning("Fedora detected. WORKAROUND for Fedora pkg-config problem enabled");
|
|
||||||
conf->addLib("-pthread -lccext2 -lz -lccgnu2 -ldl -lrt");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -593,18 +600,20 @@ public:
|
|||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBMAGICK_LIB");
|
s = conf->getenv("QC_WITH_LIBMAGICK_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!QFile::exists(s+QString("libMagick++.so"))){
|
if(!conf->checkLibrary(s, "Magick++")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(QFile::exists(s+QString("libMagick++.so"))){
|
if(conf->checkLibrary(s, "Magick++")) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!found)
|
if(!found)
|
||||||
@@ -618,51 +627,104 @@ public:
|
|||||||
magickConfig.waitForStarted();
|
magickConfig.waitForStarted();
|
||||||
magickConfig.waitForFinished();
|
magickConfig.waitForFinished();
|
||||||
QByteArray result = magickConfig.readAll();
|
QByteArray result = magickConfig.readAll();
|
||||||
|
result = result.replace("\n", "");
|
||||||
conf->addLib(result.data());
|
conf->addLib(result.data());
|
||||||
conf->addDefine("HAVE_MAGICK");
|
conf->addDefine("HAVE_MAGICK");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#line 1 "python.qcm"
|
#line 1 "libzzip.qcm"
|
||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: python
|
name: libzzip
|
||||||
|
arg: with-libzzip-inc=[path], Path to libzzip++ include files
|
||||||
|
arg: with-libzzip-lib=[path], Path to libzzip++ library files
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_python : public ConfObj
|
#include <QProcess>
|
||||||
|
class qc_libzzip : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_python(Conf *c) : ConfObj(c) {}
|
qc_libzzip(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "python >= 2.3"; }
|
QString name() const { return "Zzip library (libzzip)"; }
|
||||||
QString shortname() const { return "python"; }
|
QString shortname() const { return "libzzip"; }
|
||||||
|
QString checkString() const {
|
||||||
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
|
return "";
|
||||||
|
return ConfObj::checkString();
|
||||||
|
}
|
||||||
bool exec(){
|
bool exec(){
|
||||||
int r = conf->doCommand("python testpython.py");
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
if(r == 0)
|
return false;
|
||||||
return true;
|
QString s;
|
||||||
else
|
s = conf->getenv("QC_WITH_LIBZZIP_INC");
|
||||||
return false;
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "zzip/zzip.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "zzip/zzip.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBZZIP_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libzzip.so"))){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libzzip.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
conf->addLib("-lzzip");
|
||||||
|
conf->addDefine("HAVE_ZZIP");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
cat >$1/modules_new.cpp <<EOT
|
cat >$1/modules_new.cpp <<EOT
|
||||||
o = new qc_qt42(conf);
|
o = new qc_qt4(conf);
|
||||||
o->required = true;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_libtorrent(conf);
|
o = new qc_libtorrent_rasterbar(conf);
|
||||||
o->required = true;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_libboost(conf);
|
o = new qc_libboost(conf);
|
||||||
o->required = true;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_libcommoncpp2(conf);
|
o = new qc_libcurl(conf);
|
||||||
o->required = true;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_libmagick(conf);
|
o = new qc_libmagick(conf);
|
||||||
o->required = false;
|
o->required = false;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_python(conf);
|
o = new qc_libzzip(conf);
|
||||||
o->required = true;
|
o->required = false;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
@@ -1613,11 +1675,14 @@ export QC_WITH_LIBTORRENT_INC
|
|||||||
export QC_WITH_LIBTORRENT_LIB
|
export QC_WITH_LIBTORRENT_LIB
|
||||||
export QC_WITH_LIBTORRENT_STATIC_LIB
|
export QC_WITH_LIBTORRENT_STATIC_LIB
|
||||||
export QC_WITH_LIBBOOST_INC
|
export QC_WITH_LIBBOOST_INC
|
||||||
export QC_WITH_LIBCOMMONCPP2_INC
|
export QC_WITH_LIBCURL_INC
|
||||||
export QC_WITH_LIBCOMMONCPP2_LIB
|
export QC_WITH_LIBCURL_LIB
|
||||||
export QC_DISABLE_libmagick
|
export QC_DISABLE_libmagick
|
||||||
export QC_WITH_LIBMAGICK_INC
|
export QC_WITH_LIBMAGICK_INC
|
||||||
export QC_WITH_LIBMAGICK_LIB
|
export QC_WITH_LIBMAGICK_LIB
|
||||||
|
export QC_DISABLE_libzzip
|
||||||
|
export QC_WITH_LIBZZIP_INC
|
||||||
|
export QC_WITH_LIBZZIP_LIB
|
||||||
export QC_VERBOSE
|
export QC_VERBOSE
|
||||||
rm -rf .qconftemp
|
rm -rf .qconftemp
|
||||||
(
|
(
|
||||||
|
|||||||
28
doc/qbittorrent.1
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
.\" This manpage has been automatically generated by docbook2man
|
||||||
|
.\" from a DocBook document. This tool can be found at:
|
||||||
|
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
|
||||||
|
.TH "QBITTORRENT" "1" "September 1st 2007" "Bittorrent client written in C++ / Qt4" ""
|
||||||
|
|
||||||
|
.SH NAME
|
||||||
|
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
||||||
|
.SH SYNOPSIS
|
||||||
|
|
||||||
|
\fBqbittorrent\fR [FILE | URL] [FILE | URL...]
|
||||||
|
|
||||||
|
\fBqbittorrent\fR \-\-help
|
||||||
|
|
||||||
|
\fBqbittorrent\fR \-\-version
|
||||||
|
.PP
|
||||||
|
.SH "DESCRIPTION"
|
||||||
|
|
||||||
|
\fBqBittorrent\fR is an advanced Bittorrent client written in C++ / Qt4,
|
||||||
|
using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
|
||||||
|
to be a good alternative to all other bittorrent clients out there. qBittorrent
|
||||||
|
is fast, stable, light, it supports unicode and it provides a good integrated search engine.
|
||||||
|
It also comes with UPnP port forwarding / NAT-PMP, encryption (Azureus compatible), FAST extension (mainline) and PeX support (utorrent compatible).
|
||||||
|
|
||||||
|
Please report any problem to http://bugs.qbittorrent.org
|
||||||
|
.PP
|
||||||
|
.SH "AUTHOR"
|
||||||
|
|
||||||
|
Christophe Dumez <chris@qbittorrent.org>
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
qbittorrent (0.6.1-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Disabled debug mode
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Mon, 28 Aug 2006 21:22:48 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.6.1-0) unstable; urgency=low
|
|
||||||
* BUGFIX: Fixed possible segfaults when using context menus
|
|
||||||
* BUGFIX: Cleanup up context menus code
|
|
||||||
* BUGFIX: Used best gzip compressing for manpage
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 24 Aug 2006 19:53:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.6.0) unstable; urgency=low
|
|
||||||
* FEATURE: Rewritten the download list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the search results list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the torrent properties list from scratch (more flexible)
|
|
||||||
* FEATURE: Improved and cleaned up search engine code
|
|
||||||
* FEATURE: Search results are now displayed in real time (not sequentially)
|
|
||||||
* FEATURE: Added two command lines parameters (--version, --help)
|
|
||||||
* FEATURE: Added a popup menu for download list
|
|
||||||
* FEATURE: Double-click on an item now toggles the paused state of a download
|
|
||||||
* FEATURE: Improved code to be more portable (Windows & MacOS versions should arrive soon)
|
|
||||||
* FEATURE: Allow to toggle selected state of a file within a torrent using double-click
|
|
||||||
* FEATURE: Remember columns width in download and search results lists
|
|
||||||
* BUGFIX: Don't use pkg-config for libcurl anymore (easier to compile)
|
|
||||||
* BUGFIX: Fixed ETA calculation when downloading while connecting
|
|
||||||
* BUGFIX: Download progress is now displayed correctly during first seconds of execution (was 0% before)
|
|
||||||
* BUGFIX: Code cleanup & optimization
|
|
||||||
* BUGFIX: Fixed sorting in download list
|
|
||||||
* BUGFIX: Fixed sorting in search results list
|
|
||||||
* BUGFIX: Fixed Parameters passing between instances
|
|
||||||
* BUGFIX: Fixed missing icon for clear action in infoBar popup menu
|
|
||||||
* BUGFIX: Fixed truncated lines in search results
|
|
||||||
* BUGFIX: Don't refresh download list when user is in search tab (save CPU)
|
|
||||||
* BUGFIX: Don't update Progress/DL Speed/ETA for finished downloads (save CPU)
|
|
||||||
* BUGFIX: Save selected search engines only when they have changed (faster program exit)
|
|
||||||
* COSMETIC: Increased icon size in toolbar from 24px to 32px
|
|
||||||
* COSMETIC: Display a progress bar to visualize each download progress
|
|
||||||
* COSMETIC: Size of each result in search are displayed in user friendly units
|
|
||||||
* COSMETIC: Display a progress bar to visualize each file progress within a torrent
|
|
||||||
* COSMETIC: Renamed 'ratio' to 'Session ratio' (makes more sense)
|
|
||||||
* COSMETIC: Improved layout of torrent properties window when maximized
|
|
||||||
* COSMETIC: Now number of search results is updated in real time
|
|
||||||
* COSMETIC: Remember last window size
|
|
||||||
* COSMETIC: Improved splash screen look
|
|
||||||
* COSMETIC: Improved default width of columns in download and search results lists
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 22 Aug 2006 10:42:37 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.5.0) unstable; urgency=low
|
|
||||||
* Improved "Download from url" feature (now supports https, ftp & redirections)
|
|
||||||
* Added a torrent creation tool
|
|
||||||
* Display progress for each file within a torrent
|
|
||||||
* Based on new libtorrent v0.10 (lot of improvements)
|
|
||||||
* Now possible to clear log textbox (popup menu)
|
|
||||||
* Added two search engines (isohunt, torrentreactor)
|
|
||||||
* Now Display share ratio on main window
|
|
||||||
* Use OSD (On Screen Display) when a download or a search is finished
|
|
||||||
* Allow only one instance of qBittorrent (and add new parameters to download list)
|
|
||||||
* Remember last selected search engines in search tab
|
|
||||||
* Improved search engines status output (Aborted, timed out, finished, no results)
|
|
||||||
* qBittorrent can now update search plugin from qbittorrent.org
|
|
||||||
* Added Slovak, Italian, Portuguese, Romanian and Traditional Chinese languages
|
|
||||||
* Fixed ThePirateBay parser for search engine (website had changed)
|
|
||||||
* Fixed filenames for results from ThePirateBay search engine
|
|
||||||
* Fixed unicode support for ThePirateBay search engine
|
|
||||||
* Now search results are sorted by seeds
|
|
||||||
* Overwrite nova.py search plugin only if it is outdated
|
|
||||||
* Fixed possible division by 0 in ETA calculation
|
|
||||||
* Improved ETA calculation precision
|
|
||||||
* Fixed default tab in options
|
|
||||||
* When saving options, reconnect only when listening ports changed
|
|
||||||
* qBittorrent has now its own new logo
|
|
||||||
* Display status "downloading" if DL Speed > 0 (even when tracker is down)
|
|
||||||
* Added a splashscreen
|
|
||||||
* qBittorrent has new cute icons
|
|
||||||
* Display number of results in search tab
|
|
||||||
* Added icons for each item in download list according to its state
|
|
||||||
* Redesigned Locale settings
|
|
||||||
* Fixed search engines names width (were cut on the right)
|
|
||||||
* Moved search engines to the left of the window (better ui)
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 2 Aug 2006 19:46:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.1) unstable; urgency=low
|
|
||||||
* Not counting "protocol chatter" in UP/DL speed anymore
|
|
||||||
* Download speed is now 0 when download is finished
|
|
||||||
* Paused torrents remain paused when qbittorrent is re-started
|
|
||||||
* Added option "go to systray when minimizing"
|
|
||||||
* Added option "Clear finished downloads on exit"
|
|
||||||
* Added option "Ask user for confirmation on exit"
|
|
||||||
* Added "Stalled" status for downloads (colored in orange, paused are in red and finished in green)
|
|
||||||
* Fixed Search window layout on maximizing
|
|
||||||
* Fixed a bug that caused upload limit not to be always applied
|
|
||||||
* Added Bulgarian translation
|
|
||||||
* Updated Translations
|
|
||||||
* Code optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 22 Jun 2006 20:14:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.0) unstable; urgency=low
|
|
||||||
|
|
||||||
* Added a search engine (supports Mininova & thepiratebay websites)
|
|
||||||
* Fixed critical bug: some options were not applied correctly to BT session
|
|
||||||
* Possibility to download a torrent file from an URL
|
|
||||||
* Added confirmation dialog on qbittorrent exit
|
|
||||||
* Enabled sorting in Download list
|
|
||||||
* Added Ukrainian translation
|
|
||||||
* Support urls as program parameters
|
|
||||||
* Added more actions to trayicon menu
|
|
||||||
* Fixed exception catching when retrieving fastresume data
|
|
||||||
* use Binary prefix standards from IEC 60027-2 for units (B, KiB, MiB, GiB, TiB)
|
|
||||||
* Iconification to systray when minimizing
|
|
||||||
* Code Cleanup & optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 14 Jun 2006 14:47:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.3.1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Fixed toolbar layout (spacing).
|
|
||||||
* Added Russian translation.
|
|
||||||
* Resume also finished files on startup (for seeding).
|
|
||||||
* Added colors corresponding to download state.
|
|
||||||
* Fixed a segfault when deleting a download (if no scan dir is set).
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 6 Jun 2006 21:36:27 +0200
|
|
||||||
|
|
||||||
|
|
||||||
qbittorrent (0.3) unstable; urgency=low
|
|
||||||
|
|
||||||
* Initial Release.
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 3 Jun 2006 21:57:27 +0200
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
4
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
Source: qbittorrent
|
|
||||||
Section: net
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
Build-Depends: debhelper (>= 4.0.0), autotools-dev, libqt4-core (>= 4.1.0), libqt4-dev (>= 4.1.0), libqt4-gui (>= 4.1.0), rb-libtorrent (>= 0.10), libcurl3-dev
|
|
||||||
Standards-Version: 3.6.2
|
|
||||||
|
|
||||||
Package: qbittorrent
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, rb-libtorrent (>= 0.10), python (>= 2.3)
|
|
||||||
Description: Bittorrent client in Qt4.1 / C++
|
|
||||||
qBittorrent is a bittorrent client programmed in C++ / Qt4.1
|
|
||||||
using rb_libtorrent by Arvid Norberg. It aims to be a good
|
|
||||||
alternative to other bittorrent client out there. It is fast,
|
|
||||||
stable and provides unicode support.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
This is qbittorrent, written and maintained by Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
on Sat, 3 Jun 2006 21:57:27 +0200.
|
|
||||||
|
|
||||||
The original source can always be found at:
|
|
||||||
ftp://ftp.debian.org/dists/unstable/main/source/
|
|
||||||
|
|
||||||
Copyright (C) 2006 Christophe Dumez
|
|
||||||
|
|
||||||
License:
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this package; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
On Debian systems, the complete text of the GNU General
|
|
||||||
Public License can be found in `/usr/share/common-licenses/GPL'.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/sbin
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
NEWS
|
|
||||||
README
|
|
||||||
TODO
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
# Sample debian/rules that uses debhelper.
|
|
||||||
# This file was originally written by Joey Hess and Craig Small.
|
|
||||||
# As a special exception, when this file is copied by dh-make into a
|
|
||||||
# dh-make output file, you may use that output file without restriction.
|
|
||||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
|
|
||||||
# These are used for cross-compiling and for saving the configure script
|
|
||||||
# from having to guess our platform (since we know it already)
|
|
||||||
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
|
||||||
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -Wall
|
|
||||||
|
|
||||||
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
|
|
||||||
CFLAGS += -O0
|
|
||||||
else
|
|
||||||
CFLAGS += -O2
|
|
||||||
endif
|
|
||||||
|
|
||||||
config.status: configure
|
|
||||||
dh_testdir
|
|
||||||
# Add here commands to configure the package.
|
|
||||||
CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure --prefix=/usr
|
|
||||||
|
|
||||||
|
|
||||||
build: build-stamp
|
|
||||||
|
|
||||||
build-stamp: config.status
|
|
||||||
dh_testdir
|
|
||||||
|
|
||||||
# Add here commands to compile the package.
|
|
||||||
$(MAKE)
|
|
||||||
#docbook-to-man debian/qbittorrent.sgml > qbittorrent.1
|
|
||||||
|
|
||||||
touch build-stamp
|
|
||||||
|
|
||||||
clean:
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
rm -f build-stamp
|
|
||||||
|
|
||||||
# Add here commands to clean up after the build process.
|
|
||||||
-$(MAKE) distclean
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
|
|
||||||
cp -f /usr/share/misc/config.sub config.sub
|
|
||||||
endif
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
|
|
||||||
cp -f /usr/share/misc/config.guess config.guess
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
dh_clean
|
|
||||||
|
|
||||||
install: build
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_clean -k
|
|
||||||
dh_installdirs
|
|
||||||
|
|
||||||
# Add here commands to install the package into debian/qbittorrent.
|
|
||||||
$(MAKE) install INSTALL_ROOT=$(CURDIR)/debian/qbittorrent
|
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
|
||||||
binary-indep: build install
|
|
||||||
# We have nothing to do by default.
|
|
||||||
|
|
||||||
# Build architecture-dependent files here.
|
|
||||||
binary-arch: build install
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_installchangelogs Changelog
|
|
||||||
dh_installdocs
|
|
||||||
dh_installexamples
|
|
||||||
# dh_install
|
|
||||||
# dh_installmenu
|
|
||||||
# dh_installdebconf
|
|
||||||
# dh_installlogrotate
|
|
||||||
# dh_installemacsen
|
|
||||||
# dh_installpam
|
|
||||||
# dh_installmime
|
|
||||||
# dh_installinit
|
|
||||||
# dh_installcron
|
|
||||||
# dh_installinfo
|
|
||||||
dh_installman
|
|
||||||
dh_link
|
|
||||||
dh_strip
|
|
||||||
dh_compress
|
|
||||||
dh_fixperms
|
|
||||||
# dh_perl
|
|
||||||
# dh_python
|
|
||||||
# dh_makeshlibs
|
|
||||||
dh_installdeb
|
|
||||||
dh_shlibdeps
|
|
||||||
dh_gencontrol
|
|
||||||
dh_md5sums
|
|
||||||
dh_builddeb
|
|
||||||
|
|
||||||
binary: binary-indep binary-arch
|
|
||||||
.PHONY: build clean binary-indep binary-arch binary install
|
|
||||||
@@ -1,249 +0,0 @@
|
|||||||
|
|
||||||
%define name qbittorrent
|
|
||||||
%define major 0
|
|
||||||
%define minor 6
|
|
||||||
%define patch 1
|
|
||||||
%define version %{major}.%{minor}.%{patch}
|
|
||||||
%define release %mkrel 2
|
|
||||||
%define _iconsdir %{_datadir}/icons
|
|
||||||
%define _mandir %_datadir/man
|
|
||||||
|
|
||||||
Name: %{name}
|
|
||||||
Summary: A Bittorrent Client using C++ / Qt4
|
|
||||||
Version: %{version}
|
|
||||||
Release: %{release}
|
|
||||||
Source0: http://sourceforge.net/projects/qbittorrent/%{name}-%{version}.tar.gz
|
|
||||||
URL: http://sourceforge.net/projects/qbittorrent
|
|
||||||
Vendor: http://qbittorrent.sourceforge.net/
|
|
||||||
Group: Internet/File Transfer
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
|
|
||||||
License: GPL
|
|
||||||
BuildRequires: libqt4-devel >= 4.1.2, libqtgui4 >= 4.1.2, libqtcore4 >= 4.1.2, libqtxml4 >= 4.1.2, libqtnetwork4 >= 4.1.2, rb_libtorrent-devel >= 0.10-3, libcurl3-devel
|
|
||||||
Requires: libqtgui4 >= 4.1.2, libqtcore4 >= 4.1.2, libqtxml4 >= 4.1.2, libqtnetwork4 >= 4.1.2, librb_libtorrent0 >= 0.10-3, python >= 2.3, libcurl3
|
|
||||||
|
|
||||||
%description
|
|
||||||
A Bittorrent client using C++ / libtorrent and a Qt4 Graphical User Interface.
|
|
||||||
It aims to be as fast as possible and to provide multi-OS, unicode support.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup
|
|
||||||
|
|
||||||
%build
|
|
||||||
# Export the Environment variables
|
|
||||||
export QTDIR=%_prefix/%_lib/qt4
|
|
||||||
export KDEDIR=%_prefix
|
|
||||||
export LD_LIBRARY_PATH=$QTDIR/%_lib:$KDEDIR/%_lib:$LD_LIBRARY_PATH
|
|
||||||
export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH
|
|
||||||
|
|
||||||
|
|
||||||
# Change to the Source directory and configure
|
|
||||||
#cd src
|
|
||||||
CFLAGS="%optflags" CXXFLAGS="%optflags" \
|
|
||||||
./configure --prefix=%{buildroot}%{_prefix}
|
|
||||||
|
|
||||||
# Necessary to remove old compiled files.. if they exist
|
|
||||||
make clean
|
|
||||||
|
|
||||||
%make
|
|
||||||
|
|
||||||
%install
|
|
||||||
%makeinstall --directory=src
|
|
||||||
|
|
||||||
|
|
||||||
# Create the menu directory
|
|
||||||
install -d %{buildroot}%{_menudir}
|
|
||||||
|
|
||||||
# Build the Menu
|
|
||||||
#<package> <section> <file_in> <file_out> [requires] [title]
|
|
||||||
kdedesktop2mdkmenu.pl %{name} "%{group}" %{buildroot}%{_datadir}/applications/qBittorrent.desktop %{buildroot}%{_menudir}/%{name}
|
|
||||||
|
|
||||||
%clean
|
|
||||||
%{__rm} -rf %{buildroot}
|
|
||||||
|
|
||||||
%post
|
|
||||||
/sbin/ldconfig
|
|
||||||
%{update_menus}
|
|
||||||
|
|
||||||
%postun
|
|
||||||
/sbin/ldconfig
|
|
||||||
%{clean_menus}
|
|
||||||
|
|
||||||
|
|
||||||
%files
|
|
||||||
%defattr(-,root,root)
|
|
||||||
%doc README INSTALL NEWS COPYING AUTHORS TODO Changelog
|
|
||||||
%doc %{_mandir}/man1/*.bz2
|
|
||||||
|
|
||||||
|
|
||||||
# The binaries
|
|
||||||
%_bindir/*
|
|
||||||
|
|
||||||
|
|
||||||
# Icon files
|
|
||||||
# Hi and Lo colour icons various sizes
|
|
||||||
%_iconsdir/hicolor/128x128/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/16x16/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/192x192/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/22x22/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/24x24/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/32x32/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/36x36/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/48x48/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/64x64/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/72x72/apps/qbittorrent.png
|
|
||||||
%_iconsdir/hicolor/96x96/apps/qbittorrent.png
|
|
||||||
## %_iconsdir/hicolor/scalable/apps/qbittorrent.svgz
|
|
||||||
|
|
||||||
|
|
||||||
# Desktop Link
|
|
||||||
%_datadir/applications/qBittorrent.desktop
|
|
||||||
|
|
||||||
# The qbittorrent Menu directory
|
|
||||||
%dir %{_menudir}
|
|
||||||
%{_menudir}/%{name}
|
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
|
|
||||||
* Wed Aug 23 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.6.0-0.1.2006mdk
|
|
||||||
- FEATURE: Rewritten the download list from scratch (more flexible)
|
|
||||||
- FEATURE: Rewritten the search results list from scratch (more flexible)
|
|
||||||
- FEATURE: Rewritten the torrent properties list from scratch (more flexible)
|
|
||||||
- FEATURE: Improved and cleaned up search engine code
|
|
||||||
- FEATURE: Search results are now displayed in real time (not sequentially)
|
|
||||||
- FEATURE: Added two command lines parameters (--version, --help)
|
|
||||||
- FEATURE: Added a popup menu for download list
|
|
||||||
- FEATURE: Double-click on an item now toggles the paused state of a download
|
|
||||||
- FEATURE: Improved code to be more portable (Windows & MacOS versions should arrive soon)
|
|
||||||
- FEATURE: Allow to toggle selected state of a file within a torrent using double-click
|
|
||||||
- FEATURE: Remember columns width in download and search results lists
|
|
||||||
- BUGFIX: Don't use pkg-config for libcurl anymore (easier to compile)
|
|
||||||
- BUGFIX: Fixed ETA calculation when downloading while connecting
|
|
||||||
- BUGFIX: Download progress is now displayed correctly during first seconds of execution (was 0% before)
|
|
||||||
- BUGFIX: Code cleanup & optimization
|
|
||||||
- BUGFIX: Fixed sorting in download list
|
|
||||||
- BUGFIX: Fixed sorting in search results list
|
|
||||||
- BUGFIX: Fixed Parameters passing between instances
|
|
||||||
- BUGFIX: Fixed missing icon for clear action in infoBar popup menu
|
|
||||||
- BUGFIX: Fixed truncated lines in search results
|
|
||||||
- BUGFIX: Don't refresh download list when user is in search tab (save CPU)
|
|
||||||
- BUGFIX: Don't update Progress/DL Speed/ETA for finished downloads (save CPU)
|
|
||||||
- BUGFIX: Save selected search engines only when they have changed (faster program exit)
|
|
||||||
- COSMETIC: Increased icon size in toolbar from 24px to 32px
|
|
||||||
- COSMETIC: Display a progress bar to visualize each download progress
|
|
||||||
- COSMETIC: Size of each result in search are displayed in user friendly units
|
|
||||||
- COSMETIC: Display a progress bar to visualize each file progress within a torrent
|
|
||||||
- COSMETIC: Renamed 'ratio' to 'Session ratio' (makes more sense)
|
|
||||||
- COSMETIC: Improved layout of torrent properties window when maximized
|
|
||||||
- COSMETIC: Now number of search results is updated in real time
|
|
||||||
- COSMETIC: Remember last window size
|
|
||||||
- COSMETIC: Improved splash screen look
|
|
||||||
- COSMETIC: Improved default width of columns in download and search results lists
|
|
||||||
|
|
||||||
* Tue Aug 08 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.5.0-0.1.20060mdk
|
|
||||||
- FEATURE: Improved "Download from url" feature (now supports https, ftp & redirections)
|
|
||||||
- FEATURE: Added a torrent creation tool
|
|
||||||
- FEATURE: Display progress for each file within a torrent
|
|
||||||
- FEATURE: Based on new libtorrent v0.10 (lot of improvements)
|
|
||||||
- FEATURE: Now possible to clear log textbox (popup menu)
|
|
||||||
- FEATURE: Added two search engines (isohunt, torrentreactor)
|
|
||||||
- FEATURE: Now Display share ratio on main window
|
|
||||||
- FEATURE: Use OSD (On Screen Display) when a download or a search is finished
|
|
||||||
- FEATURE: Allow only one instance of qBittorrent (and add new parameters to download list)
|
|
||||||
- FEATURE: Remember last selected search engines in search tab
|
|
||||||
- FEATURE: Improved search engines status output (Aborted, timed out, finished, no results)
|
|
||||||
- FEATURE: qBittorrent can now update search plugin from qbittorrent.org
|
|
||||||
- I18N: Added Slovak, Italian, Portuguese, Romanian and Traditional Chinese languages
|
|
||||||
- BUGFIX: Fixed ThePirateBay parser for search engine (website had changed)
|
|
||||||
- BUGFIX: Fixed filenames for results from ThePirateBay search engine
|
|
||||||
- BUGFIX: Fixed unicode support for ThePirateBay search engine
|
|
||||||
- BUGFIX: Now search results are sorted by seeds
|
|
||||||
- BUGFIX: Overwrite nova.py search plugin only if it is outdated
|
|
||||||
- BUGFIX: Fixed possible division by 0 in ETA calculation
|
|
||||||
- BUGFIX: Improved ETA calculation precision
|
|
||||||
- BUGFIX: Fixed default tab in options
|
|
||||||
- BUGFIX: When saving options, reconnect only when listening ports changed
|
|
||||||
- COSMETIC: qBittorrent has now its own new logo
|
|
||||||
- COSMETIC: Display status "downloading" if DL Speed > 0 (even when tracker is down)
|
|
||||||
- COSMETIC: Added a splashscreen
|
|
||||||
- COSMETIC: qBittorrent has new cute icons
|
|
||||||
- COSMETIC: Display number of results in search tab
|
|
||||||
- COSMETIC: Added icons for each item in download list according to its state
|
|
||||||
- COSMETIC: Redesigned Locale settings
|
|
||||||
- COSMETIC: Fixed search engines names width (were cut on the right)
|
|
||||||
- COSMETIC: Moved search engines to the left of the window (better ui)
|
|
||||||
|
|
||||||
* Fri Jun 23 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.4.1-0.1.20060mdk
|
|
||||||
- Not counting "protocol chatter" in UP/DL speed anymore
|
|
||||||
- Download speed is now 0 when download is finished
|
|
||||||
- Paused torrents remain paused when qbittorrent is re-started
|
|
||||||
- Added option "go to systray when minimizing"
|
|
||||||
- Added option "Clear finished downloads on exit"
|
|
||||||
- Added option "Ask user for confirmation on exit"
|
|
||||||
- Added "Stalled" status for downloads (colored in orange, paused are in red and finished in green)
|
|
||||||
- Fixed Search window layout on maximizing
|
|
||||||
- Fixed a bug that caused upload limit not to be always applied
|
|
||||||
- Added Bulgarian translation
|
|
||||||
- Updated Translations
|
|
||||||
- Code optimization
|
|
||||||
|
|
||||||
* Tue Jun 13 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.4.0-0.1.20060mdk
|
|
||||||
- Added a search engine (supports Mininova & thepiratebay websites)
|
|
||||||
- Fixed critical bug: some options were not applied correctly to BT session
|
|
||||||
- Possibility to download a torrent file from an URL
|
|
||||||
- Added confirmation dialog on qbittorrent exit
|
|
||||||
- Enabled sorting in Download list
|
|
||||||
- Added Ukrainian translation
|
|
||||||
- Support urls as program parameters
|
|
||||||
- Added more actions to trayicon menu
|
|
||||||
- Fixed exception catching when retrieving fastresume data
|
|
||||||
- use Binary prefix standards from IEC 60027-2 for units (B, KiB, MiB, GiB, TiB)
|
|
||||||
- Iconification to systray when minimizing
|
|
||||||
- Code Cleanup & optimization
|
|
||||||
|
|
||||||
* Tue Jun 06 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.3.1-0.1.20060mdk
|
|
||||||
- Fixed toolbar layout (spacing)
|
|
||||||
- Added Russian translation
|
|
||||||
- Resume also finished files on startup (for seeding)
|
|
||||||
- Added colors corresponding to download state
|
|
||||||
- Fixed a segfault when deleting a download (if no scan dir is set)
|
|
||||||
|
|
||||||
* Mon Jun 05 2006 - Christophe Dumez <chris@qbittorrent.org> - 0.3-0.1.20060mdk
|
|
||||||
- Fixed auto-resume (worked only once)
|
|
||||||
- Fixed BT_Backup dir creation on first startup (thanks Peter)
|
|
||||||
- Now min port and max port are inverted if (min port > max port)
|
|
||||||
- Fixed memory leaks
|
|
||||||
- Added qbittorrent man page
|
|
||||||
- Allow to disable max connections limit (default is disabled)
|
|
||||||
- Disable upload limit by default
|
|
||||||
- Added Menu Entry with icon (thanks Peter)
|
|
||||||
- Restructured directory, now Makefile is in main directory (not src/)
|
|
||||||
- Updated README / INSTALL
|
|
||||||
|
|
||||||
* Fri Jun 02 2006 - Christophe Dumez <chris@qbittorrent.org> 0.2.3-0.1.20060mdk
|
|
||||||
- Fixed ports checking function (user couldn't type the value he wanted)
|
|
||||||
- Check tracker errors list size and clear it if it becomes too big.
|
|
||||||
- qBittorrent does not remove .torrent file from scanned directory anymore
|
|
||||||
- Small cosmetic change
|
|
||||||
|
|
||||||
* Wed May 31 2006 Christophe Dumez <chris@qbittorrent.org> 0.2.2-0.1.20060mdk
|
|
||||||
- Fixed missing icons
|
|
||||||
|
|
||||||
* Sat May 27 2006 Jeffery Fernandez <developer@jefferyfernandez.id.au> 0.2.1-0.1.20060mdk
|
|
||||||
- Initial Build for Mandriva Linux
|
|
||||||
|
|
||||||
* Thu May 25 2006 Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
- Fixed "make install" rule
|
|
||||||
- Disabled debug mode
|
|
||||||
|
|
||||||
* Thu May 25 2006 Christophe Dumez <chris@qbittorrent.org> - v0.2
|
|
||||||
- Fixed a compatibility problem with some versions of qmake
|
|
||||||
- Added translations : Greek, Swedish
|
|
||||||
- Fixed Polish translation selection
|
|
||||||
- Fixed come warning because of two unexisting slots
|
|
||||||
- Improved "Apply" button behaviour in options
|
|
||||||
- Windows are now resizable
|
|
||||||
|
|
||||||
* Tue May 16 2006 Christophe Dumez <chris@qbittorrent.org> - v0.1
|
|
||||||
- Initial release (lack features & still need a lot of improvements)
|
|
||||||
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
|
|
||||||
%define package_name rb_libtorrent
|
|
||||||
%define orig_name libtorrent
|
|
||||||
%define major 0
|
|
||||||
%define minor .10
|
|
||||||
%define patch .1
|
|
||||||
%define version %{major}%{minor}
|
|
||||||
%define candidate -rc1
|
|
||||||
%define lib_name %mklibname %{package_name} %{major}
|
|
||||||
%define release %mkrel 4
|
|
||||||
|
|
||||||
Summary : libtorrent is a C++ bittorrent library.
|
|
||||||
Name : %{package_name}
|
|
||||||
Version : %{version}
|
|
||||||
Release : %{release}
|
|
||||||
License : GPL
|
|
||||||
Group : Development/C++
|
|
||||||
Source0 : http://www.rasterbar.com/products/libtorrent/libtorrent-%{version}.tar.gz
|
|
||||||
URL : http://www.rasterbar.com
|
|
||||||
BuildRequires : boost >= 1.33.1
|
|
||||||
BuildRoot : %{_tmppath}/%{orig_name}-%{version}-%{release}-root
|
|
||||||
Patch0 : file_progress_arvid.patch.bz2
|
|
||||||
|
|
||||||
%description
|
|
||||||
libtorrent is a C++ library that aims to be a good alternative
|
|
||||||
to all the other bittorrent implementations around.
|
|
||||||
|
|
||||||
|
|
||||||
%package -n %{package_name}-devel
|
|
||||||
Group : Development/C++
|
|
||||||
Summary : Development files for %{package_name}
|
|
||||||
Conflicts : libtorrent7-devel
|
|
||||||
|
|
||||||
%description -n %{package_name}-devel
|
|
||||||
Development files for %{package_name}
|
|
||||||
|
|
||||||
%package -n %{lib_name}
|
|
||||||
Group : Development/C++
|
|
||||||
Summary : Library files for %{package_name}
|
|
||||||
Conflicts : libtorrent7
|
|
||||||
|
|
||||||
%description -n %{lib_name}
|
|
||||||
Library files for %{package_name}
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup -n %{orig_name}-%{version}
|
|
||||||
|
|
||||||
%build
|
|
||||||
%configure --prefix=%{_prefix}
|
|
||||||
%make
|
|
||||||
|
|
||||||
|
|
||||||
%install
|
|
||||||
%makeinstall
|
|
||||||
|
|
||||||
# Create directories for the package
|
|
||||||
install -d %{buildroot}%{_includedir}/%{orig_name}
|
|
||||||
install -d %{buildroot}%{_libdir}/pkgconfig
|
|
||||||
|
|
||||||
%clean
|
|
||||||
rm -rf %{buildroot}
|
|
||||||
|
|
||||||
# The binaries
|
|
||||||
%files %(orig_name)
|
|
||||||
%defattr(0644, root, root, 0755)
|
|
||||||
%{_bindir}/*
|
|
||||||
|
|
||||||
# Documentation
|
|
||||||
%defattr(-, root, root)
|
|
||||||
%doc README AUTHORS INSTALL COPYING ChangeLog NEWS
|
|
||||||
%doc docs/*
|
|
||||||
|
|
||||||
|
|
||||||
# Devel Package
|
|
||||||
%files -n %{package_name}-devel
|
|
||||||
%defattr(-,root,root,-)
|
|
||||||
%dir %{_includedir}/%{orig_name}/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/detail/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/impl/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/ip/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/ip/detail/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/ssl/
|
|
||||||
%dir %{_includedir}/%{orig_name}/asio/ssl/detail/
|
|
||||||
%{_includedir}/%{orig_name}/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/detail/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/impl/*.ipp
|
|
||||||
%{_includedir}/%{orig_name}/asio/ip/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/ip/detail/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/ssl/*.hpp
|
|
||||||
%{_includedir}/%{orig_name}/asio/ssl/detail/*.hpp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%{_libdir}/%{orig_name}.a
|
|
||||||
%{_libdir}/%{orig_name}.la
|
|
||||||
%{_libdir}/%{orig_name}.so
|
|
||||||
%{_libdir}/pkgconfig/libtorrent.pc
|
|
||||||
|
|
||||||
|
|
||||||
# Library Package
|
|
||||||
%files -n %{lib_name}
|
|
||||||
%defattr(-,root,root,-)
|
|
||||||
%_libdir/%{orig_name}.so.*
|
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
|
|
||||||
* Wed Aug 23 2006 Christophe Dumez <chris@qbittorrent.org> 10.0.1-2006mdk
|
|
||||||
- Added patch for Torrent Properties crash fix
|
|
||||||
|
|
||||||
* Sat Jul 1 2006 %{packager} %{version}-%{release}
|
|
||||||
- fixed a bug where the requested number of peers in a tracker request could
|
|
||||||
be too big.
|
|
||||||
- fixed a bug where empty files were not created in full allocation mode.
|
|
||||||
- fixed a bug in storage that would, in rare cases, fail to do a
|
|
||||||
complete check.
|
|
||||||
- exposed more settings for tweaking parameters in the piece-picker,
|
|
||||||
downloader and uploader (http_settings replaced by session_settings).
|
|
||||||
- tweaked default settings to improve high bandwidth transfers.
|
|
||||||
- improved the piece picker performance and made it possible to download
|
|
||||||
popular pieces in sequence to improve disk performance.
|
|
||||||
- added the possibility to control upload and download limits per peer.
|
|
||||||
- fixed problem with re-requesting skipped pieces when peer was sending pieces
|
|
||||||
out of fifo-order.
|
|
||||||
- added support for http seeding (the GetRight protocol)
|
|
||||||
- renamed identifiers called 'id' in the public interface to support linking
|
|
||||||
with Objective.C++
|
|
||||||
- changed the extensions protocol to use the new one, which is also
|
|
||||||
implemented by uTorrent.
|
|
||||||
- factorized the peer_connection and added web_peer_connection which is
|
|
||||||
able to download from http-sources.
|
|
||||||
- converted the network code to use asio (resulted in slight api changes
|
|
||||||
dealing with network addresses).
|
|
||||||
- made libtorrent build in vc7 (patches from Allen Zhao)
|
|
||||||
- fixed bug caused when binding outgoing connections to a non-local interface.
|
|
||||||
- add_torrent() will now throw if called while the session object is
|
|
||||||
being closed.
|
|
||||||
- added the ability to limit the number of simultaneous half-open
|
|
||||||
TCP connections. Flags in peer_info has been added.
|
|
||||||
|
|
||||||
|
|
||||||
* Thu Jun 1 2006 %{packager} %{version}-%{release}
|
|
||||||
- Initial Build for Mandriva Linux
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
qbittorrent (0.6.1-0ubuntu2) dapper; urgency=low
|
|
||||||
|
|
||||||
* Disabled debug mode
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Mon, 28 Aug 2006 19:29:17 +0000
|
|
||||||
|
|
||||||
qbittorrent (0.6.1-0ubuntu1) dapper; urgency=low
|
|
||||||
* BUGFIX: Fixed possible segfaults when using context menus
|
|
||||||
* BUGFIX: Cleanup up context menus code
|
|
||||||
* BUGFIX: Used best gzip compressing for manpage
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 24 Aug 2006 19:53:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.6.0) dapper; urgency=low
|
|
||||||
* FEATURE: Rewritten the download list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the search results list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the torrent properties list from scratch (more flexible)
|
|
||||||
* FEATURE: Improved and cleaned up search engine code
|
|
||||||
* FEATURE: Search results are now displayed in real time (not sequentially)
|
|
||||||
* FEATURE: Added two command lines parameters (--version, --help)
|
|
||||||
* FEATURE: Added a popup menu for download list
|
|
||||||
* FEATURE: Double-click on an item now toggles the paused state of a download
|
|
||||||
* FEATURE: Improved code to be more portable (Windows & MacOS versions should arrive soon)
|
|
||||||
* FEATURE: Allow to toggle selected state of a file within a torrent using double-click
|
|
||||||
* FEATURE: Remember columns width in download and search results lists
|
|
||||||
* BUGFIX: Don't use pkg-config for libcurl anymore (easier to compile)
|
|
||||||
* BUGFIX: Fixed ETA calculation when downloading while connecting
|
|
||||||
* BUGFIX: Download progress is now displayed correctly during first seconds of execution (was 0% before)
|
|
||||||
* BUGFIX: Code cleanup & optimization
|
|
||||||
* BUGFIX: Fixed sorting in download list
|
|
||||||
* BUGFIX: Fixed sorting in search results list
|
|
||||||
* BUGFIX: Fixed Parameters passing between instances
|
|
||||||
* BUGFIX: Fixed missing icon for clear action in infoBar popup menu
|
|
||||||
* BUGFIX: Fixed truncated lines in search results
|
|
||||||
* BUGFIX: Don't refresh download list when user is in search tab (save CPU)
|
|
||||||
* BUGFIX: Don't update Progress/DL Speed/ETA for finished downloads (save CPU)
|
|
||||||
* BUGFIX: Save selected search engines only when they have changed (faster program exit)
|
|
||||||
* COSMETIC: Increased icon size in toolbar from 24px to 32px
|
|
||||||
* COSMETIC: Display a progress bar to visualize each download progress
|
|
||||||
* COSMETIC: Size of each result in search are displayed in user friendly units
|
|
||||||
* COSMETIC: Display a progress bar to visualize each file progress within a torrent
|
|
||||||
* COSMETIC: Renamed 'ratio' to 'Session ratio' (makes more sense)
|
|
||||||
* COSMETIC: Improved layout of torrent properties window when maximized
|
|
||||||
* COSMETIC: Now number of search results is updated in real time
|
|
||||||
* COSMETIC: Remember last window size
|
|
||||||
* COSMETIC: Improved splash screen look
|
|
||||||
* COSMETIC: Improved default width of columns in download and search results lists
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 22 Aug 2006 10:42:37 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.5.0) dapper; urgency=low
|
|
||||||
* Improved "Download from url" feature (now supports https, ftp & redirections)
|
|
||||||
* Added a torrent creation tool
|
|
||||||
* Display progress for each file within a torrent
|
|
||||||
* Based on new libtorrent v0.10 (lot of improvements)
|
|
||||||
* Now possible to clear log textbox (popup menu)
|
|
||||||
* Added two search engines (isohunt, torrentreactor)
|
|
||||||
* Now Display share ratio on main window
|
|
||||||
* Use OSD (On Screen Display) when a download or a search is finished
|
|
||||||
* Allow only one instance of qBittorrent (and add new parameters to download list)
|
|
||||||
* Remember last selected search engines in search tab
|
|
||||||
* Improved search engines status output (Aborted, timed out, finished, no results)
|
|
||||||
* qBittorrent can now update search plugin from qbittorrent.org
|
|
||||||
* Added Slovak, Italian, Portuguese, Romanian and Traditional Chinese languages
|
|
||||||
* Fixed ThePirateBay parser for search engine (website had changed)
|
|
||||||
* Fixed filenames for results from ThePirateBay search engine
|
|
||||||
* Fixed unicode support for ThePirateBay search engine
|
|
||||||
* Now search results are sorted by seeds
|
|
||||||
* Overwrite nova.py search plugin only if it is outdated
|
|
||||||
* Fixed possible division by 0 in ETA calculation
|
|
||||||
* Improved ETA calculation precision
|
|
||||||
* Fixed default tab in options
|
|
||||||
* When saving options, reconnect only when listening ports changed
|
|
||||||
* qBittorrent has now its own new logo
|
|
||||||
* Display status "downloading" if DL Speed > 0 (even when tracker is down)
|
|
||||||
* Added a splashscreen
|
|
||||||
* qBittorrent has new cute icons
|
|
||||||
* Display number of results in search tab
|
|
||||||
* Added icons for each item in download list according to its state
|
|
||||||
* Redesigned Locale settings
|
|
||||||
* Fixed search engines names width (were cut on the right)
|
|
||||||
* Moved search engines to the left of the window (better ui)
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 2 Aug 2006 19:46:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.1) dapper; urgency=low
|
|
||||||
* Not counting "protocol chatter" in UP/DL speed anymore
|
|
||||||
* Download speed is now 0 when download is finished
|
|
||||||
* Paused torrents remain paused when qbittorrent is re-started
|
|
||||||
* Added option "go to systray when minimizing"
|
|
||||||
* Added option "Clear finished downloads on exit"
|
|
||||||
* Added option "Ask user for confirmation on exit"
|
|
||||||
* Added "Stalled" status for downloads (colored in orange, paused are in red and finished in green)
|
|
||||||
* Fixed Search window layout on maximizing
|
|
||||||
* Fixed a bug that caused upload limit not to be always applied
|
|
||||||
* Added Bulgarian translation
|
|
||||||
* Updated Translations
|
|
||||||
* Code optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 22 Jun 2006 20:14:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.0) dapper; urgency=low
|
|
||||||
|
|
||||||
* Added a search engine (supports Mininova & thepiratebay websites)
|
|
||||||
* Fixed critical bug: some options were not applied correctly to BT session
|
|
||||||
* Possibility to download a torrent file from an URL
|
|
||||||
* Added confirmation dialog on qbittorrent exit
|
|
||||||
* Enabled sorting in Download list
|
|
||||||
* Added Ukrainian translation
|
|
||||||
* Support urls as program parameters
|
|
||||||
* Added more actions to trayicon menu
|
|
||||||
* Fixed exception catching when retrieving fastresume data
|
|
||||||
* use Binary prefix standards from IEC 60027-2 for units (B, KiB, MiB, GiB, TiB)
|
|
||||||
* Iconification to systray when minimizing
|
|
||||||
* Code Cleanup & optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 14 Jun 2006 14:47:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.3.1) dapper; urgency=low
|
|
||||||
|
|
||||||
* Fixed toolbar layout (spacing).
|
|
||||||
* Added Russian translation.
|
|
||||||
* Resume also finished files on startup (for seeding).
|
|
||||||
* Added colors corresponding to download state.
|
|
||||||
* Fixed a segfault when deleting a download (if no scan dir is set).
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 6 Jun 2006 21:36:27 +0200
|
|
||||||
|
|
||||||
|
|
||||||
qbittorrent (0.3) dapper; urgency=low
|
|
||||||
|
|
||||||
* Initial Release.
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 3 Jun 2006 21:57:27 +0200
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
4
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
Source: qbittorrent
|
|
||||||
Section: net
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
Build-Depends: debhelper (>= 4.0.0), autotools-dev, libqt4-core (>= 4.1.0), libqt4-dev (>= 4.1.0), libqt4-gui (>= 4.1.0), rb-libtorrent (>= 0.10), libcurl3-dev
|
|
||||||
Standards-Version: 3.6.2
|
|
||||||
|
|
||||||
Package: qbittorrent
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, rb-libtorrent (>= 0.10), python (>= 2.3)
|
|
||||||
Description: Bittorrent client in Qt4.1 / C++
|
|
||||||
qBittorrent is a bittorrent client programmed in C++ / Qt4.1
|
|
||||||
using rb_libtorrent by Arvid Norberg. It aims to be a good
|
|
||||||
alternative to other bittorrent client out there. It is fast,
|
|
||||||
stable and provides unicode support.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
This is qbittorrent, written and maintained by Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
on Sat, 3 Jun 2006 21:57:27 +0200.
|
|
||||||
|
|
||||||
The original source can always be found at:
|
|
||||||
ftp://ftp.debian.org/dists/unstable/main/source/
|
|
||||||
|
|
||||||
Copyright (C) 2006 Christophe Dumez
|
|
||||||
|
|
||||||
License:
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this package; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
On Debian systems, the complete text of the GNU General
|
|
||||||
Public License can be found in `/usr/share/common-licenses/GPL'.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/sbin
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
NEWS
|
|
||||||
README
|
|
||||||
TODO
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
qbittorrent_0.6.1-0ubuntu2_i386.deb net optional
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
shlibs:Depends=libboost-date-time1.33.1, libboost-filesystem1.33.1, libboost-thread1.33.1, libc6 (>= 2.3.4-1), libcurl3 (>= 7.15.0-1), libgcc1 (>= 1:4.0.2), libqt4-core (>= 4.1.2), libqt4-gui (>= 4.1.2), libstdc++6 (>= 4.0.2-4), libx11-6, libxext6, zlib1g (>= 1:1.2.1)
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
# Sample debian/rules that uses debhelper.
|
|
||||||
# This file was originally written by Joey Hess and Craig Small.
|
|
||||||
# As a special exception, when this file is copied by dh-make into a
|
|
||||||
# dh-make output file, you may use that output file without restriction.
|
|
||||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
|
|
||||||
# These are used for cross-compiling and for saving the configure script
|
|
||||||
# from having to guess our platform (since we know it already)
|
|
||||||
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
|
||||||
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -Wall
|
|
||||||
|
|
||||||
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
|
|
||||||
CFLAGS += -O0
|
|
||||||
else
|
|
||||||
CFLAGS += -O2
|
|
||||||
endif
|
|
||||||
|
|
||||||
config.status: configure
|
|
||||||
dh_testdir
|
|
||||||
# Add here commands to configure the package.
|
|
||||||
CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure --prefix=/usr
|
|
||||||
|
|
||||||
|
|
||||||
build: build-stamp
|
|
||||||
|
|
||||||
build-stamp: config.status
|
|
||||||
dh_testdir
|
|
||||||
|
|
||||||
# Add here commands to compile the package.
|
|
||||||
$(MAKE)
|
|
||||||
#docbook-to-man debian/qbittorrent.sgml > qbittorrent.1
|
|
||||||
|
|
||||||
touch build-stamp
|
|
||||||
|
|
||||||
clean:
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
rm -f build-stamp
|
|
||||||
|
|
||||||
# Add here commands to clean up after the build process.
|
|
||||||
-$(MAKE) distclean
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
|
|
||||||
cp -f /usr/share/misc/config.sub config.sub
|
|
||||||
endif
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
|
|
||||||
cp -f /usr/share/misc/config.guess config.guess
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
dh_clean
|
|
||||||
|
|
||||||
install: build
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_clean -k
|
|
||||||
dh_installdirs
|
|
||||||
|
|
||||||
# Add here commands to install the package into debian/qbittorrent.
|
|
||||||
$(MAKE) install INSTALL_ROOT=$(CURDIR)/debian/qbittorrent
|
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
|
||||||
binary-indep: build install
|
|
||||||
# We have nothing to do by default.
|
|
||||||
|
|
||||||
# Build architecture-dependent files here.
|
|
||||||
binary-arch: build install
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_installchangelogs Changelog
|
|
||||||
dh_installdocs
|
|
||||||
dh_installexamples
|
|
||||||
# dh_install
|
|
||||||
# dh_installmenu
|
|
||||||
# dh_installdebconf
|
|
||||||
# dh_installlogrotate
|
|
||||||
# dh_installemacsen
|
|
||||||
# dh_installpam
|
|
||||||
# dh_installmime
|
|
||||||
# dh_installinit
|
|
||||||
# dh_installcron
|
|
||||||
# dh_installinfo
|
|
||||||
dh_installman
|
|
||||||
dh_link
|
|
||||||
dh_strip
|
|
||||||
dh_compress
|
|
||||||
dh_fixperms
|
|
||||||
# dh_perl
|
|
||||||
# dh_python
|
|
||||||
# dh_makeshlibs
|
|
||||||
dh_installdeb
|
|
||||||
dh_shlibdeps
|
|
||||||
dh_gencontrol
|
|
||||||
dh_md5sums
|
|
||||||
dh_builddeb
|
|
||||||
|
|
||||||
binary: binary-indep binary-arch
|
|
||||||
.PHONY: build clean binary-indep binary-arch binary install
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
qbittorrent (0.6.1-0ubuntu2) edgy; urgency=low
|
|
||||||
|
|
||||||
* Disabled debug mode
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Mon, 28 Aug 2006 21:22:48 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.6.1-0ubuntu1) edgy; urgency=low
|
|
||||||
* BUGFIX: Fixed possible segfaults when using context menus
|
|
||||||
* BUGFIX: Cleanup up context menus code
|
|
||||||
* BUGFIX: Used best gzip compressing for manpage
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 24 Aug 2006 19:53:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.6.0) edgy; urgency=low
|
|
||||||
* FEATURE: Rewritten the download list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the search results list from scratch (more flexible)
|
|
||||||
* FEATURE: Rewritten the torrent properties list from scratch (more flexible)
|
|
||||||
* FEATURE: Improved and cleaned up search engine code
|
|
||||||
* FEATURE: Search results are now displayed in real time (not sequentially)
|
|
||||||
* FEATURE: Added two command lines parameters (--version, --help)
|
|
||||||
* FEATURE: Added a popup menu for download list
|
|
||||||
* FEATURE: Double-click on an item now toggles the paused state of a download
|
|
||||||
* FEATURE: Improved code to be more portable (Windows & MacOS versions should arrive soon)
|
|
||||||
* FEATURE: Allow to toggle selected state of a file within a torrent using double-click
|
|
||||||
* FEATURE: Remember columns width in download and search results lists
|
|
||||||
* BUGFIX: Don't use pkg-config for libcurl anymore (easier to compile)
|
|
||||||
* BUGFIX: Fixed ETA calculation when downloading while connecting
|
|
||||||
* BUGFIX: Download progress is now displayed correctly during first seconds of execution (was 0% before)
|
|
||||||
* BUGFIX: Code cleanup & optimization
|
|
||||||
* BUGFIX: Fixed sorting in download list
|
|
||||||
* BUGFIX: Fixed sorting in search results list
|
|
||||||
* BUGFIX: Fixed Parameters passing between instances
|
|
||||||
* BUGFIX: Fixed missing icon for clear action in infoBar popup menu
|
|
||||||
* BUGFIX: Fixed truncated lines in search results
|
|
||||||
* BUGFIX: Don't refresh download list when user is in search tab (save CPU)
|
|
||||||
* BUGFIX: Don't update Progress/DL Speed/ETA for finished downloads (save CPU)
|
|
||||||
* BUGFIX: Save selected search engines only when they have changed (faster program exit)
|
|
||||||
* COSMETIC: Increased icon size in toolbar from 24px to 32px
|
|
||||||
* COSMETIC: Display a progress bar to visualize each download progress
|
|
||||||
* COSMETIC: Size of each result in search are displayed in user friendly units
|
|
||||||
* COSMETIC: Display a progress bar to visualize each file progress within a torrent
|
|
||||||
* COSMETIC: Renamed 'ratio' to 'Session ratio' (makes more sense)
|
|
||||||
* COSMETIC: Improved layout of torrent properties window when maximized
|
|
||||||
* COSMETIC: Now number of search results is updated in real time
|
|
||||||
* COSMETIC: Remember last window size
|
|
||||||
* COSMETIC: Improved splash screen look
|
|
||||||
* COSMETIC: Improved default width of columns in download and search results lists
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 22 Aug 2006 10:42:37 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.5.0) edgy; urgency=low
|
|
||||||
* Improved "Download from url" feature (now supports https, ftp & redirections)
|
|
||||||
* Added a torrent creation tool
|
|
||||||
* Display progress for each file within a torrent
|
|
||||||
* Based on new libtorrent v0.10 (lot of improvements)
|
|
||||||
* Now possible to clear log textbox (popup menu)
|
|
||||||
* Added two search engines (isohunt, torrentreactor)
|
|
||||||
* Now Display share ratio on main window
|
|
||||||
* Use OSD (On Screen Display) when a download or a search is finished
|
|
||||||
* Allow only one instance of qBittorrent (and add new parameters to download list)
|
|
||||||
* Remember last selected search engines in search tab
|
|
||||||
* Improved search engines status output (Aborted, timed out, finished, no results)
|
|
||||||
* qBittorrent can now update search plugin from qbittorrent.org
|
|
||||||
* Added Slovak, Italian, Portuguese, Romanian and Traditional Chinese languages
|
|
||||||
* Fixed ThePirateBay parser for search engine (website had changed)
|
|
||||||
* Fixed filenames for results from ThePirateBay search engine
|
|
||||||
* Fixed unicode support for ThePirateBay search engine
|
|
||||||
* Now search results are sorted by seeds
|
|
||||||
* Overwrite nova.py search plugin only if it is outdated
|
|
||||||
* Fixed possible division by 0 in ETA calculation
|
|
||||||
* Improved ETA calculation precision
|
|
||||||
* Fixed default tab in options
|
|
||||||
* When saving options, reconnect only when listening ports changed
|
|
||||||
* qBittorrent has now its own new logo
|
|
||||||
* Display status "downloading" if DL Speed > 0 (even when tracker is down)
|
|
||||||
* Added a splashscreen
|
|
||||||
* qBittorrent has new cute icons
|
|
||||||
* Display number of results in search tab
|
|
||||||
* Added icons for each item in download list according to its state
|
|
||||||
* Redesigned Locale settings
|
|
||||||
* Fixed search engines names width (were cut on the right)
|
|
||||||
* Moved search engines to the left of the window (better ui)
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 2 Aug 2006 19:46:32 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.1) edgy; urgency=low
|
|
||||||
* Not counting "protocol chatter" in UP/DL speed anymore
|
|
||||||
* Download speed is now 0 when download is finished
|
|
||||||
* Paused torrents remain paused when qbittorrent is re-started
|
|
||||||
* Added option "go to systray when minimizing"
|
|
||||||
* Added option "Clear finished downloads on exit"
|
|
||||||
* Added option "Ask user for confirmation on exit"
|
|
||||||
* Added "Stalled" status for downloads (colored in orange, paused are in red and finished in green)
|
|
||||||
* Fixed Search window layout on maximizing
|
|
||||||
* Fixed a bug that caused upload limit not to be always applied
|
|
||||||
* Added Bulgarian translation
|
|
||||||
* Updated Translations
|
|
||||||
* Code optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Thu, 22 Jun 2006 20:14:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.4.0) edgy; urgency=low
|
|
||||||
|
|
||||||
* Added a search engine (supports Mininova & thepiratebay websites)
|
|
||||||
* Fixed critical bug: some options were not applied correctly to BT session
|
|
||||||
* Possibility to download a torrent file from an URL
|
|
||||||
* Added confirmation dialog on qbittorrent exit
|
|
||||||
* Enabled sorting in Download list
|
|
||||||
* Added Ukrainian translation
|
|
||||||
* Support urls as program parameters
|
|
||||||
* Added more actions to trayicon menu
|
|
||||||
* Fixed exception catching when retrieving fastresume data
|
|
||||||
* use Binary prefix standards from IEC 60027-2 for units (B, KiB, MiB, GiB, TiB)
|
|
||||||
* Iconification to systray when minimizing
|
|
||||||
* Code Cleanup & optimization
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Wed, 14 Jun 2006 14:47:27 +0200
|
|
||||||
|
|
||||||
qbittorrent (0.3.1) edgy; urgency=low
|
|
||||||
|
|
||||||
* Fixed toolbar layout (spacing).
|
|
||||||
* Added Russian translation.
|
|
||||||
* Resume also finished files on startup (for seeding).
|
|
||||||
* Added colors corresponding to download state.
|
|
||||||
* Fixed a segfault when deleting a download (if no scan dir is set).
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 6 Jun 2006 21:36:27 +0200
|
|
||||||
|
|
||||||
|
|
||||||
qbittorrent (0.3) edgy; urgency=low
|
|
||||||
|
|
||||||
* Initial Release.
|
|
||||||
|
|
||||||
-- Christophe Dumez <chris@qbittorrent.org> Sat, 3 Jun 2006 21:57:27 +0200
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
4
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
Source: qbittorrent
|
|
||||||
Section: net
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
Build-Depends: debhelper (>= 4.0.0), autotools-dev, libqt4-core (>= 4.1.0), libqt4-dev (>= 4.1.0), libqt4-gui (>= 4.1.0), rb-libtorrent (>= 0.10), libcurl3-dev
|
|
||||||
Standards-Version: 3.6.2
|
|
||||||
|
|
||||||
Package: qbittorrent
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, rb-libtorrent (>= 0.10), python (>= 2.3)
|
|
||||||
Description: Bittorrent client in Qt4.1 / C++
|
|
||||||
qBittorrent is a bittorrent client programmed in C++ / Qt4.1
|
|
||||||
using rb_libtorrent by Arvid Norberg. It aims to be a good
|
|
||||||
alternative to other bittorrent client out there. It is fast,
|
|
||||||
stable and provides unicode support.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
This is qbittorrent, written and maintained by Christophe Dumez <chris@qbittorrent.org>
|
|
||||||
on Sat, 3 Jun 2006 21:57:27 +0200.
|
|
||||||
|
|
||||||
The original source can always be found at:
|
|
||||||
ftp://ftp.debian.org/dists/unstable/main/source/
|
|
||||||
|
|
||||||
Copyright (C) 2006 Christophe Dumez
|
|
||||||
|
|
||||||
License:
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this package; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
On Debian systems, the complete text of the GNU General
|
|
||||||
Public License can be found in `/usr/share/common-licenses/GPL'.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/sbin
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
NEWS
|
|
||||||
README
|
|
||||||
TODO
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
qbittorrent_0.6.1-0ubuntu2_i386.deb net optional
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
shlibs:Depends=libboost-date-time1.33.1, libboost-filesystem1.33.1, libboost-thread1.33.1, libc6 (>= 2.4-1), libcurl3 (>= 7.15.4-1), libgcc1 (>= 1:4.1.1-11ubuntu1), libqt4-core (>= 4.1.4), libqt4-gui (>= 4.1.4), libstdc++6 (>= 4.1.1-11ubuntu1), libx11-6, libxext6, zlib1g (>= 1:1.2.1)
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
# Sample debian/rules that uses debhelper.
|
|
||||||
# This file was originally written by Joey Hess and Craig Small.
|
|
||||||
# As a special exception, when this file is copied by dh-make into a
|
|
||||||
# dh-make output file, you may use that output file without restriction.
|
|
||||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
|
|
||||||
# These are used for cross-compiling and for saving the configure script
|
|
||||||
# from having to guess our platform (since we know it already)
|
|
||||||
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
|
||||||
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -Wall
|
|
||||||
|
|
||||||
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
|
|
||||||
CFLAGS += -O0
|
|
||||||
else
|
|
||||||
CFLAGS += -O2
|
|
||||||
endif
|
|
||||||
|
|
||||||
config.status: configure
|
|
||||||
dh_testdir
|
|
||||||
# Add here commands to configure the package.
|
|
||||||
CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure --prefix=/usr
|
|
||||||
|
|
||||||
|
|
||||||
build: build-stamp
|
|
||||||
|
|
||||||
build-stamp: config.status
|
|
||||||
dh_testdir
|
|
||||||
|
|
||||||
# Add here commands to compile the package.
|
|
||||||
$(MAKE)
|
|
||||||
#docbook-to-man debian/qbittorrent.sgml > qbittorrent.1
|
|
||||||
|
|
||||||
touch build-stamp
|
|
||||||
|
|
||||||
clean:
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
rm -f build-stamp
|
|
||||||
|
|
||||||
# Add here commands to clean up after the build process.
|
|
||||||
-$(MAKE) distclean
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
|
|
||||||
cp -f /usr/share/misc/config.sub config.sub
|
|
||||||
endif
|
|
||||||
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
|
|
||||||
cp -f /usr/share/misc/config.guess config.guess
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
dh_clean
|
|
||||||
|
|
||||||
install: build
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_clean -k
|
|
||||||
dh_installdirs
|
|
||||||
|
|
||||||
# Add here commands to install the package into debian/qbittorrent.
|
|
||||||
$(MAKE) install INSTALL_ROOT=$(CURDIR)/debian/qbittorrent
|
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
|
||||||
binary-indep: build install
|
|
||||||
# We have nothing to do by default.
|
|
||||||
|
|
||||||
# Build architecture-dependent files here.
|
|
||||||
binary-arch: build install
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_installchangelogs Changelog
|
|
||||||
dh_installdocs
|
|
||||||
dh_installexamples
|
|
||||||
# dh_install
|
|
||||||
# dh_installmenu
|
|
||||||
# dh_installdebconf
|
|
||||||
# dh_installlogrotate
|
|
||||||
# dh_installemacsen
|
|
||||||
# dh_installpam
|
|
||||||
# dh_installmime
|
|
||||||
# dh_installinit
|
|
||||||
# dh_installcron
|
|
||||||
# dh_installinfo
|
|
||||||
dh_installman
|
|
||||||
dh_link
|
|
||||||
dh_strip
|
|
||||||
dh_compress
|
|
||||||
dh_fixperms
|
|
||||||
# dh_perl
|
|
||||||
# dh_python
|
|
||||||
# dh_makeshlibs
|
|
||||||
dh_installdeb
|
|
||||||
dh_shlibdeps
|
|
||||||
dh_gencontrol
|
|
||||||
dh_md5sums
|
|
||||||
dh_builddeb
|
|
||||||
|
|
||||||
binary: binary-indep binary-arch
|
|
||||||
.PHONY: build clean binary-indep binary-arch binary install
|
|
||||||
@@ -94,13 +94,12 @@
|
|||||||
<includestyle>4</includestyle>
|
<includestyle>4</includestyle>
|
||||||
<designerintegration>ExternalDesigner</designerintegration>
|
<designerintegration>ExternalDesigner</designerintegration>
|
||||||
<root>/usr/lib/qt4</root>
|
<root>/usr/lib/qt4</root>
|
||||||
<qmake>/usr/bin/qmake-qt4</qmake>
|
<qmake>/usr/bin/qmake</qmake>
|
||||||
<designer>/usr/bin/designer-qt4</designer>
|
<designer>/usr/bin/designer</designer>
|
||||||
<designerpluginpaths/>
|
<designerpluginpaths/>
|
||||||
</qt>
|
</qt>
|
||||||
<references>
|
<references>
|
||||||
<pcs>automatic_%2Fhome%2Fchris%2Fqbittorrent_svn%2Ftrunk</pcs>
|
<pcs>automatic_%2Fhome%2Fishanarora%2Fprojects%2Fqbittorrent</pcs>
|
||||||
<pcs>Qt4</pcs>
|
|
||||||
</references>
|
</references>
|
||||||
<codecompletion>
|
<codecompletion>
|
||||||
<automaticCodeCompletion>true</automaticCodeCompletion>
|
<automaticCodeCompletion>true</automaticCodeCompletion>
|
||||||
@@ -149,14 +148,14 @@
|
|||||||
</kdevfilecreate>
|
</kdevfilecreate>
|
||||||
<kdevtrollproject>
|
<kdevtrollproject>
|
||||||
<general>
|
<general>
|
||||||
<activedir></activedir>
|
<activedir>src</activedir>
|
||||||
</general>
|
</general>
|
||||||
<run>
|
<run>
|
||||||
<directoryradio>executable</directoryradio>
|
<directoryradio>executable</directoryradio>
|
||||||
<mainprogram>/home/chris/qbittorrent_svn/trunk/src/qbittorrent</mainprogram>
|
<mainprogram>/home/ishanarora/projects/qbittorrent/src/qbittorrent</mainprogram>
|
||||||
<programargs/>
|
<programargs/>
|
||||||
<globaldebugarguments/>
|
<globaldebugarguments/>
|
||||||
<globalcwd>/home/chris/qbittorrent_svn/trunk</globalcwd>
|
<globalcwd>/home/ishanarora/projects/qbittorrent</globalcwd>
|
||||||
<useglobalprogram>true</useglobalprogram>
|
<useglobalprogram>true</useglobalprogram>
|
||||||
<terminal>false</terminal>
|
<terminal>false</terminal>
|
||||||
<autocompile>true</autocompile>
|
<autocompile>true</autocompile>
|
||||||
@@ -187,7 +186,7 @@
|
|||||||
</cppsupportpart>
|
</cppsupportpart>
|
||||||
<ctagspart>
|
<ctagspart>
|
||||||
<customArguments/>
|
<customArguments/>
|
||||||
<customTagfilePath>/home/chris/qbittorrent_svn/trunk/tags</customTagfilePath>
|
<customTagfilePath>/home/ishanarora/projects/qbittorrent/tags</customTagfilePath>
|
||||||
<activeTagsFiles/>
|
<activeTagsFiles/>
|
||||||
</ctagspart>
|
</ctagspart>
|
||||||
<kdevdocumentation>
|
<kdevdocumentation>
|
||||||
|
|||||||
@@ -3,20 +3,18 @@
|
|||||||
<profile>qbittorrent.pro</profile>
|
<profile>qbittorrent.pro</profile>
|
||||||
<moddir>qcm</moddir>
|
<moddir>qcm</moddir>
|
||||||
<datadir/>
|
<datadir/>
|
||||||
<dep type='qt42'>
|
<dep type='qt4'>
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='libtorrent'>
|
<dep type='libtorrent-rasterbar'>
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='libboost'>
|
<dep type='libboost'>
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='libcommoncpp2'>
|
<dep type='libcurl'>
|
||||||
<required/>
|
|
||||||
</dep>
|
|
||||||
<dep type='libmagick'/>
|
|
||||||
<dep type='python'>
|
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
|
<dep type='libmagick'/>
|
||||||
|
<dep type='libzzip'/>
|
||||||
</qconf>
|
</qconf>
|
||||||
|
|||||||
@@ -37,15 +37,17 @@ public:
|
|||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_LIB");
|
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!QFile::exists(s+QString("libccext2.so")))
|
if(!QFile::exists(s+QString("/libccext2.so")))
|
||||||
return false;
|
return false;
|
||||||
if(!QFile::exists(s+QString("libccgnu2.so")))
|
if(!QFile::exists(s+QString("/libccgnu2.so")))
|
||||||
return false;
|
return false;
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(QFile::exists(s+QString("libccext2.so"))){
|
if(QFile::exists(s+QString("libccext2.so"))){
|
||||||
@@ -58,16 +60,6 @@ public:
|
|||||||
if(!found) return false;
|
if(!found) return false;
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}
|
}
|
||||||
// BUGFIX for Fedora (doesn't support pkg-config?)
|
|
||||||
QFile issue_file("/etc/issue");
|
|
||||||
if(issue_file.open(QIODevice::ReadOnly | QIODevice::Text)){
|
|
||||||
QString content = issue_file.readAll();
|
|
||||||
issue_file.close();
|
|
||||||
if(content.indexOf("Fedora") != -1){
|
|
||||||
qWarning("Fedora detected. WORKAROUND for Fedora pkg-config problem enabled");
|
|
||||||
conf->addLib("-pthread -lccext2 -lz -lccgnu2 -ldl -lrt");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
61
qcm/libcurl.qcm
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: libcommoncpp2
|
||||||
|
arg: with-libcurl-inc=[path], Path to libcurl include files
|
||||||
|
arg: with-libcurl-lib=[path], Path to libcurl library files
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
class qc_libcurl : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_libcurl(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "libcurl"; }
|
||||||
|
QString shortname() const { return "libcurl"; }
|
||||||
|
bool exec(){
|
||||||
|
QString s;
|
||||||
|
s = conf->getenv("QC_WITH_LIBCURL_INC");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "curl/curl.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "curl/curl.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBCURL_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libcurl.so")))
|
||||||
|
return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libcurl.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -44,18 +44,20 @@ public:
|
|||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBMAGICK_LIB");
|
s = conf->getenv("QC_WITH_LIBMAGICK_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!QFile::exists(s+QString("libMagick++.so"))){
|
if(!conf->checkLibrary(s, "Magick++")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(QFile::exists(s+QString("libMagick++.so"))){
|
if(conf->checkLibrary(s, "Magick++")) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!found)
|
if(!found)
|
||||||
@@ -69,6 +71,7 @@ public:
|
|||||||
magickConfig.waitForStarted();
|
magickConfig.waitForStarted();
|
||||||
magickConfig.waitForFinished();
|
magickConfig.waitForFinished();
|
||||||
QByteArray result = magickConfig.readAll();
|
QByteArray result = magickConfig.readAll();
|
||||||
|
result = result.replace("\n", "");
|
||||||
conf->addLib(result.data());
|
conf->addLib(result.data());
|
||||||
conf->addDefine("HAVE_MAGICK");
|
conf->addDefine("HAVE_MAGICK");
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: libtorrent
|
name: libtorrent-rasterbar
|
||||||
arg: with-libtorrent-inc=[path], Path to libtorrent include files
|
arg: with-libtorrent-inc=[path], Path to libtorrent-rasterbar include files
|
||||||
arg: with-libtorrent-lib=[path], Path to libtorrent library files
|
arg: with-libtorrent-lib=[path], Path to libtorrent-rasterbar library files
|
||||||
arg: with-libtorrent-static-lib=[path], Path to libtorrent .a file
|
arg: with-libtorrent-static-lib=[path], Path to libtorrent-rasterbar .a file
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_libtorrent : public ConfObj
|
class qc_libtorrent_rasterbar : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libtorrent(Conf *c) : ConfObj(c) {}
|
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "libtorrent >= 0.13"; }
|
QString name() const { return "libtorrent-rasterbar >= 0.13"; }
|
||||||
QString shortname() const { return "libtorrent"; }
|
QString shortname() const { return "libtorrent-rasterbar"; }
|
||||||
bool exec(){
|
bool exec(){
|
||||||
QString s;
|
QString s;
|
||||||
s = conf->getenv("QC_WITH_LIBTORRENT_INC");
|
s = conf->getenv("QC_WITH_LIBTORRENT_INC");
|
||||||
@@ -45,17 +45,19 @@ public:
|
|||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBTORRENT_LIB");
|
s = conf->getenv("QC_WITH_LIBTORRENT_LIB");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!conf->checkLibrary(s, "torrent")) {
|
if(!conf->checkLibrary(s, "torrent-rasterbar")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}else{
|
}else{
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl << "/usr/lib/";
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
sl << "/usr/local/lib/";
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach(s, sl){
|
foreach(s, sl){
|
||||||
if(conf->checkLibrary(s, "torrent")){
|
if(conf->checkLibrary(s, "torrent-rasterbar")){
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -63,16 +65,6 @@ public:
|
|||||||
if(!found) return false;
|
if(!found) return false;
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
}
|
}
|
||||||
// BUGFIX for Fedora (doesn't support pkg-config?)
|
|
||||||
QFile issue_file("/etc/issue");
|
|
||||||
if(issue_file.open(QIODevice::ReadOnly | QIODevice::Text)){
|
|
||||||
QString content = issue_file.readAll();
|
|
||||||
issue_file.close();
|
|
||||||
if(content.indexOf("Fedora") != -1){
|
|
||||||
qWarning("Fedora detected. WORKAROUND for Fedora pkg-config problem enabled");
|
|
||||||
conf->addLib("-lssl -lcrypto -lboost_date_time -lboost_filesystem -lboost_thread -lz -ltorrent");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
71
qcm/libzzip.qcm
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: libzzip
|
||||||
|
arg: with-libzzip-inc=[path], Path to libzzip++ include files
|
||||||
|
arg: with-libzzip-lib=[path], Path to libzzip++ library files
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
#include <QProcess>
|
||||||
|
class qc_libzzip : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_libzzip(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "Zzip library (libzzip)"; }
|
||||||
|
QString shortname() const { return "libzzip"; }
|
||||||
|
QString checkString() const {
|
||||||
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
|
return "";
|
||||||
|
return ConfObj::checkString();
|
||||||
|
}
|
||||||
|
bool exec(){
|
||||||
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
|
return false;
|
||||||
|
QString s;
|
||||||
|
s = conf->getenv("QC_WITH_LIBZZIP_INC");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "zzip/zzip.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "zzip/zzip.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBZZIP_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libzzip.so"))){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libzzip.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
conf->addLib("-lzzip");
|
||||||
|
conf->addDefine("HAVE_ZZIP");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: python
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
class qc_python : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_python(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "python >= 2.3"; }
|
|
||||||
QString shortname() const { return "python"; }
|
|
||||||
bool exec(){
|
|
||||||
int r = conf->doCommand("python testpython.py");
|
|
||||||
if(r == 0)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
20
qcm/qt4.qcm
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: Qt >= 4.3
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
class qc_qt4 : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_qt4(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "Qt >= 4.3"; }
|
||||||
|
QString shortname() const { return "Qt 4.3"; }
|
||||||
|
bool exec()
|
||||||
|
{
|
||||||
|
if(QT_VERSION >= 0x040400) {
|
||||||
|
conf->addDefine("QT_4_4");
|
||||||
|
}
|
||||||
|
return(QT_VERSION >= 0x040300);
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
16
qcm/qt42.qcm
@@ -1,16 +0,0 @@
|
|||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: Qt >= 4.2
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
class qc_qt42 : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_qt42(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "Qt >= 4.2"; }
|
|
||||||
QString shortname() const { return "qt42"; }
|
|
||||||
bool exec()
|
|
||||||
{
|
|
||||||
return(QT_VERSION >= 0x040200);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -40,7 +40,8 @@
|
|||||||
#define SEEDSLEECH 5
|
#define SEEDSLEECH 5
|
||||||
#define RATIO 6
|
#define RATIO 6
|
||||||
#define ETA 7
|
#define ETA 7
|
||||||
#define HASH 8
|
#define PRIORITY 8
|
||||||
|
#define HASH 9
|
||||||
|
|
||||||
class DLListDelegate: public QItemDelegate {
|
class DLListDelegate: public QItemDelegate {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -83,11 +84,9 @@ class DLListDelegate: public QItemDelegate {
|
|||||||
newopt.maximum = 100;
|
newopt.maximum = 100;
|
||||||
newopt.minimum = 0;
|
newopt.minimum = 0;
|
||||||
newopt.state |= QStyle::State_Enabled;
|
newopt.state |= QStyle::State_Enabled;
|
||||||
newopt.textVisible = false;
|
newopt.textVisible = true;
|
||||||
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt,
|
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt,
|
||||||
painter);
|
painter);
|
||||||
painter->setPen(QColor("Black"));
|
|
||||||
painter->drawText(opt.rect, Qt::AlignCenter, newopt.text);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -34,10 +34,10 @@
|
|||||||
// Defines for download list list columns
|
// Defines for download list list columns
|
||||||
#define F_NAME 0
|
#define F_NAME 0
|
||||||
#define F_SIZE 1
|
#define F_SIZE 1
|
||||||
#define F_PROGRESS 2
|
#define F_UPSPEED 2
|
||||||
#define F_UPSPEED 3
|
#define F_LEECH 3
|
||||||
#define F_SEEDSLEECH 4
|
#define F_RATIO 4
|
||||||
#define F_RATIO 5
|
#define F_PRIORITY 5
|
||||||
#define F_HASH 6
|
#define F_HASH 6
|
||||||
|
|
||||||
class FinishedListDelegate: public QItemDelegate {
|
class FinishedListDelegate: public QItemDelegate {
|
||||||
@@ -67,22 +67,6 @@ class FinishedListDelegate: public QItemDelegate {
|
|||||||
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case F_PROGRESS:{
|
|
||||||
QStyleOptionProgressBarV2 newopt;
|
|
||||||
double progress = index.data().toDouble()*100.;
|
|
||||||
newopt.rect = opt.rect;
|
|
||||||
newopt.text = QString(QByteArray::number(progress, 'f', 1))+QString::fromUtf8("%");
|
|
||||||
newopt.progress = (int)progress;
|
|
||||||
newopt.maximum = 100;
|
|
||||||
newopt.minimum = 0;
|
|
||||||
newopt.state |= QStyle::State_Enabled;
|
|
||||||
newopt.textVisible = false;
|
|
||||||
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt,
|
|
||||||
painter);
|
|
||||||
painter->setPen(QColor("Black"));
|
|
||||||
painter->drawText(opt.rect, Qt::AlignCenter, newopt.text);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
QItemDelegate::paint(painter, option, index);
|
QItemDelegate::paint(painter, option, index);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,21 +31,25 @@
|
|||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : parent(parent), BTSession(BTSession), nbFinished(0){
|
FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : parent(parent), BTSession(BTSession), nbFinished(0){
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
actionStart->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/play.png")));
|
actionStart->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/play.png")));
|
||||||
actionPause->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/pause.png")));
|
actionPause->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/pause.png")));
|
||||||
connect(BTSession, SIGNAL(addedTorrent(QString, QTorrentHandle&, bool)), this, SLOT(torrentAdded(QString, QTorrentHandle&, bool)));
|
connect(BTSession, SIGNAL(addedTorrent(QTorrentHandle&)), this, SLOT(torrentAdded(QTorrentHandle&)));
|
||||||
finishedListModel = new QStandardItemModel(0,7);
|
finishedListModel = new QStandardItemModel(0,7);
|
||||||
finishedListModel->setHeaderData(F_NAME, Qt::Horizontal, tr("Name", "i.e: file name"));
|
finishedListModel->setHeaderData(F_NAME, Qt::Horizontal, tr("Name", "i.e: file name"));
|
||||||
finishedListModel->setHeaderData(F_SIZE, Qt::Horizontal, tr("Size", "i.e: file size"));
|
finishedListModel->setHeaderData(F_SIZE, Qt::Horizontal, tr("Size", "i.e: file size"));
|
||||||
finishedListModel->setHeaderData(F_PROGRESS, Qt::Horizontal, tr("Progress", "i.e: % downloaded"));
|
|
||||||
finishedListModel->setHeaderData(F_UPSPEED, Qt::Horizontal, tr("UP Speed", "i.e: Upload speed"));
|
finishedListModel->setHeaderData(F_UPSPEED, Qt::Horizontal, tr("UP Speed", "i.e: Upload speed"));
|
||||||
finishedListModel->setHeaderData(F_SEEDSLEECH, Qt::Horizontal, tr("Seeds/Leechs", "i.e: full/partial sources"));
|
finishedListModel->setHeaderData(F_LEECH, Qt::Horizontal, tr("Leechers", "i.e: full/partial sources"));
|
||||||
finishedListModel->setHeaderData(F_RATIO, Qt::Horizontal, tr("Ratio"));
|
finishedListModel->setHeaderData(F_RATIO, Qt::Horizontal, tr("Ratio"));
|
||||||
|
finishedListModel->setHeaderData(F_PRIORITY, Qt::Horizontal, tr("Priority"));
|
||||||
finishedList->setModel(finishedListModel);
|
finishedList->setModel(finishedListModel);
|
||||||
// Hide ETA & hash column
|
loadHiddenColumns();
|
||||||
|
// Hide priority column
|
||||||
|
finishedList->hideColumn(F_PRIORITY);
|
||||||
|
// Hide hash column
|
||||||
finishedList->hideColumn(F_HASH);
|
finishedList->hideColumn(F_HASH);
|
||||||
// Load last columns width for download list
|
// Load last columns width for download list
|
||||||
if(!loadColWidthFinishedList()){
|
if(!loadColWidthFinishedList()){
|
||||||
@@ -54,11 +58,14 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
|||||||
// Make download list header clickable for sorting
|
// Make download list header clickable for sorting
|
||||||
finishedList->header()->setClickable(true);
|
finishedList->header()->setClickable(true);
|
||||||
finishedList->header()->setSortIndicatorShown(true);
|
finishedList->header()->setSortIndicatorShown(true);
|
||||||
connect(finishedList->header(), SIGNAL(sectionPressed(int)), this, SLOT(sortFinishedList(int)));
|
connect(finishedList->header(), SIGNAL(sectionPressed(int)), this, SLOT(toggleFinishedListSortOrder(int)));
|
||||||
finishedListDelegate = new FinishedListDelegate(finishedList);
|
finishedListDelegate = new FinishedListDelegate(finishedList);
|
||||||
finishedList->setItemDelegate(finishedListDelegate);
|
finishedList->setItemDelegate(finishedListDelegate);
|
||||||
connect(finishedList, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedListMenu(const QPoint&)));
|
connect(finishedList, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedListMenu(const QPoint&)));
|
||||||
|
finishedList->header()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
connect(finishedList->header(), SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedHoSMenu(const QPoint&)));
|
||||||
connect(finishedList, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(notifyTorrentDoubleClicked(const QModelIndex&)));
|
connect(finishedList, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(notifyTorrentDoubleClicked(const QModelIndex&)));
|
||||||
|
connect(BTSession, SIGNAL(forceFinishedListUpdate()), this, SLOT(updateFinishedList()));
|
||||||
actionDelete->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete.png")));
|
actionDelete->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete.png")));
|
||||||
actionPreview_file->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/preview.png")));
|
actionPreview_file->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/preview.png")));
|
||||||
actionDelete_Permanently->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete_perm.png")));
|
actionDelete_Permanently->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete_perm.png")));
|
||||||
@@ -67,13 +74,25 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
|||||||
connect(actionPause, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPause_triggered()));
|
connect(actionPause, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPause_triggered()));
|
||||||
connect(actionStart, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionStart_triggered()));
|
connect(actionStart, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionStart_triggered()));
|
||||||
connect(actionDelete, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_triggered()));
|
connect(actionDelete, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_triggered()));
|
||||||
|
connect(actionIncreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionIncreasePriority_triggered()));
|
||||||
|
connect(actionDecreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDecreasePriority_triggered()));
|
||||||
connect(actionPreview_file, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPreview_file_triggered()));
|
connect(actionPreview_file, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPreview_file_triggered()));
|
||||||
connect(actionDelete_Permanently, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_Permanently_triggered()));
|
connect(actionDelete_Permanently, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_Permanently_triggered()));
|
||||||
|
connect(actionOpen_destination_folder, SIGNAL(triggered()), (GUI*)parent, SLOT(openDestinationFolder()));
|
||||||
|
connect(actionBuy_it, SIGNAL(triggered()), (GUI*)parent, SLOT(goBuyPage()));
|
||||||
connect(actionTorrent_Properties, SIGNAL(triggered()), this, SLOT(propertiesSelection()));
|
connect(actionTorrent_Properties, SIGNAL(triggered()), this, SLOT(propertiesSelection()));
|
||||||
|
|
||||||
|
connect(actionHOSColName, SIGNAL(triggered()), this, SLOT(hideOrShowColumnName()));
|
||||||
|
connect(actionHOSColSize, SIGNAL(triggered()), this, SLOT(hideOrShowColumnSize()));
|
||||||
|
connect(actionHOSColUpSpeed, SIGNAL(triggered()), this, SLOT(hideOrShowColumnUpSpeed()));
|
||||||
|
connect(actionHOSColLeechers, SIGNAL(triggered()), this, SLOT(hideOrShowColumnLeechers()));
|
||||||
|
connect(actionHOSColRatio, SIGNAL(triggered()), this, SLOT(hideOrShowColumnRatio()));
|
||||||
|
connect(actionHOSColPriority, SIGNAL(triggered()), this, SLOT(hideOrShowColumnPriority()));
|
||||||
}
|
}
|
||||||
|
|
||||||
FinishedTorrents::~FinishedTorrents(){
|
FinishedTorrents::~FinishedTorrents(){
|
||||||
saveColWidthFinishedList();
|
saveColWidthFinishedList();
|
||||||
|
saveHiddenColumns();
|
||||||
delete finishedListDelegate;
|
delete finishedListDelegate;
|
||||||
delete finishedListModel;
|
delete finishedListModel;
|
||||||
}
|
}
|
||||||
@@ -81,7 +100,15 @@ FinishedTorrents::~FinishedTorrents(){
|
|||||||
void FinishedTorrents::notifyTorrentDoubleClicked(const QModelIndex& index) {
|
void FinishedTorrents::notifyTorrentDoubleClicked(const QModelIndex& index) {
|
||||||
unsigned int row = index.row();
|
unsigned int row = index.row();
|
||||||
QString hash = getHashFromRow(row);
|
QString hash = getHashFromRow(row);
|
||||||
emit torrentDoubleClicked(hash);
|
emit torrentDoubleClicked(hash, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hidePriorityColumn(bool hide) {
|
||||||
|
finishedList->setColumnHidden(F_PRIORITY, hide);
|
||||||
|
if(hide)
|
||||||
|
getActionHoSCol(F_PRIORITY)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_cancel.png")));
|
||||||
|
else
|
||||||
|
getActionHoSCol(F_PRIORITY)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_ok.png")));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::addTorrent(QString hash){
|
void FinishedTorrents::addTorrent(QString hash){
|
||||||
@@ -97,10 +124,11 @@ void FinishedTorrents::addTorrent(QString hash){
|
|||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(h.name()));
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(h.name()));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_SIZE), QVariant((qlonglong)h.actual_size()));
|
finishedListModel->setData(finishedListModel->index(row, F_SIZE), QVariant((qlonglong)h.actual_size()));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)0.));
|
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)0.));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_SEEDSLEECH), QVariant("0/0"));
|
finishedListModel->setData(finishedListModel->index(row, F_LEECH), QVariant("0"));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(QString::fromUtf8(misc::toString(BTSession->getRealRatio(hash)).c_str())));
|
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(QString::fromUtf8(misc::toString(BTSession->getRealRatio(hash)).c_str())));
|
||||||
|
if(BTSession->isQueueingEnabled())
|
||||||
|
finishedListModel->setData(finishedListModel->index(row, F_PRIORITY), QVariant((int)BTSession->getUpTorrentPriority(hash)));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_HASH), QVariant(hash));
|
finishedListModel->setData(finishedListModel->index(row, F_HASH), QVariant(hash));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_PROGRESS), QVariant((double)1.));
|
|
||||||
if(h.is_paused()) {
|
if(h.is_paused()) {
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QIcon(":/Icons/skin/paused.png"), Qt::DecorationRole);
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QIcon(":/Icons/skin/paused.png"), Qt::DecorationRole);
|
||||||
setRowColor(row, "red");
|
setRowColor(row, "red");
|
||||||
@@ -111,9 +139,10 @@ void FinishedTorrents::addTorrent(QString hash){
|
|||||||
// Update the number of finished torrents
|
// Update the number of finished torrents
|
||||||
++nbFinished;
|
++nbFinished;
|
||||||
emit finishedTorrentsNumberChanged(nbFinished);
|
emit finishedTorrentsNumberChanged(nbFinished);
|
||||||
|
sortFinishedList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::torrentAdded(QString, QTorrentHandle& h, bool) {
|
void FinishedTorrents::torrentAdded(QTorrentHandle& h) {
|
||||||
QString hash = h.hash();
|
QString hash = h.hash();
|
||||||
if(BTSession->isFinished(hash)) {
|
if(BTSession->isFinished(hash)) {
|
||||||
addTorrent(hash);
|
addTorrent(hash);
|
||||||
@@ -122,7 +151,8 @@ void FinishedTorrents::torrentAdded(QString, QTorrentHandle& h, bool) {
|
|||||||
|
|
||||||
// Set the color of a row in data model
|
// Set the color of a row in data model
|
||||||
void FinishedTorrents::setRowColor(int row, QString color){
|
void FinishedTorrents::setRowColor(int row, QString color){
|
||||||
for(int i=0; i<finishedListModel->columnCount(); ++i){
|
unsigned int nbColumns = finishedListModel->columnCount()-1;
|
||||||
|
for(unsigned int i=0; i<nbColumns; ++i){
|
||||||
finishedListModel->setData(finishedListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
|
finishedListModel->setData(finishedListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -155,27 +185,60 @@ bool FinishedTorrents::loadColWidthFinishedList(){
|
|||||||
if(line.isEmpty())
|
if(line.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
QStringList width_list = line.split(' ');
|
QStringList width_list = line.split(' ');
|
||||||
if(width_list.size() != finishedListModel->columnCount()-1)
|
if(width_list.size() < finishedListModel->columnCount()-1)
|
||||||
return false;
|
return false;
|
||||||
unsigned int listSize = width_list.size();
|
unsigned int listSize = width_list.size();
|
||||||
for(unsigned int i=0; i<listSize; ++i){
|
for(unsigned int i=0; i<listSize; ++i){
|
||||||
finishedList->header()->resizeSection(i, width_list.at(i).toInt());
|
finishedList->header()->resizeSection(i, width_list.at(i).toInt());
|
||||||
}
|
}
|
||||||
|
loadLastSortedColumn();
|
||||||
qDebug("Finished list columns width loaded");
|
qDebug("Finished list columns width loaded");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::loadLastSortedColumn() {
|
||||||
|
// Loading last sorted column
|
||||||
|
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
|
||||||
|
QString sortedCol = settings.value(QString::fromUtf8("FinishedListSortedCol"), QString()).toString();
|
||||||
|
if(!sortedCol.isEmpty()) {
|
||||||
|
Qt::SortOrder sortOrder;
|
||||||
|
if(sortedCol.endsWith(QString::fromUtf8("d")))
|
||||||
|
sortOrder = Qt::DescendingOrder;
|
||||||
|
else
|
||||||
|
sortOrder = Qt::AscendingOrder;
|
||||||
|
sortedCol = sortedCol.left(sortedCol.size()-1);
|
||||||
|
int index = sortedCol.toInt();
|
||||||
|
sortFinishedList(index, sortOrder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save columns width in a file to remember them
|
// Save columns width in a file to remember them
|
||||||
// (finished list)
|
// (finished list)
|
||||||
void FinishedTorrents::saveColWidthFinishedList() const{
|
void FinishedTorrents::saveColWidthFinishedList() const{
|
||||||
qDebug("Saving columns width in finished list");
|
qDebug("Saving columns width in finished list");
|
||||||
QSettings settings("qBittorrent", "qBittorrent");
|
QSettings settings("qBittorrent", "qBittorrent");
|
||||||
QStringList width_list;
|
QStringList width_list;
|
||||||
unsigned int nbColumns = finishedListModel->columnCount()-1;
|
QStringList new_width_list;
|
||||||
for(unsigned int i=0; i<nbColumns; ++i){
|
short nbColumns = finishedListModel->columnCount()-1;
|
||||||
width_list << QString::fromUtf8(misc::toString(finishedList->columnWidth(i)).c_str());
|
|
||||||
|
QString line = settings.value("FinishedListColsWidth", QString()).toString();
|
||||||
|
if(!line.isEmpty()) {
|
||||||
|
width_list = line.split(' ');
|
||||||
}
|
}
|
||||||
settings.setValue("FinishedListColsWidth", width_list.join(" "));
|
for(short i=0; i<nbColumns; ++i){
|
||||||
|
if(finishedList->columnWidth(i)<1 && width_list.size() == finishedListModel->columnCount()-1 && width_list.at(i).toInt()>=1) {
|
||||||
|
// load the former width
|
||||||
|
new_width_list << width_list.at(i);
|
||||||
|
} else if(finishedList->columnWidth(i)>=1) {
|
||||||
|
// usual case, save the current width
|
||||||
|
new_width_list << QString::fromUtf8(misc::toString(finishedList->columnWidth(i)).c_str());
|
||||||
|
} else {
|
||||||
|
// default width
|
||||||
|
finishedList->resizeColumnToContents(i);
|
||||||
|
new_width_list << QString::fromUtf8(misc::toString(finishedList->columnWidth(i)).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings.setValue("FinishedListColsWidth", new_width_list.join(" "));
|
||||||
qDebug("Finished list columns width saved");
|
qDebug("Finished list columns width saved");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,29 +271,46 @@ void FinishedTorrents::updateFinishedList(){
|
|||||||
row = getRowFromHash(hash);
|
row = getRowFromHash(hash);
|
||||||
}
|
}
|
||||||
Q_ASSERT(row != -1);
|
Q_ASSERT(row != -1);
|
||||||
|
// Update priority
|
||||||
|
if(BTSession->isQueueingEnabled()) {
|
||||||
|
finishedListModel->setData(finishedListModel->index(row, F_PRIORITY), QVariant((int)BTSession->getUpTorrentPriority(hash)));
|
||||||
|
if(h.is_paused() && BTSession->isUploadQueued(hash)) {
|
||||||
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/skin/queued.png"))), Qt::DecorationRole);
|
||||||
|
setRowColor(row, QString::fromUtf8("grey"));
|
||||||
|
}
|
||||||
|
}
|
||||||
if(h.is_paused()) continue;
|
if(h.is_paused()) continue;
|
||||||
if(h.state() == torrent_status::downloading || (h.state() != torrent_status::checking_files && h.state() != torrent_status::queued_for_checking && h.progress() < 1.)) {
|
if(h.state() == torrent_status::downloading || (h.state() != torrent_status::checking_files && h.state() != torrent_status::queued_for_checking && !h.is_seed())) {
|
||||||
// What are you doing here? go back to download tab!
|
// What are you doing here? go back to download tab!
|
||||||
qDebug("Info: a torrent was moved from finished to download tab");
|
int reponse = QMessageBox::question(this, tr("Incomplete torrent in seeding list"), tr("It appears that the state of '%1' torrent changed from 'seeding' to 'downloading'. Would you like to move it back to download list? (otherwise the torrent will simply be deleted)").arg(h.name()), QMessageBox::Yes | QMessageBox::No);
|
||||||
deleteTorrent(hash);
|
if (reponse == QMessageBox::Yes) {
|
||||||
BTSession->setFinishedTorrent(hash);
|
qDebug("Info: a torrent was moved from finished to download tab");
|
||||||
emit torrentMovedFromFinishedList(hash);
|
deleteTorrent(hash);
|
||||||
|
BTSession->setUnfinishedTorrent(hash);
|
||||||
|
emit torrentMovedFromFinishedList(hash);
|
||||||
|
}
|
||||||
|
else if (reponse == QMessageBox::No) {
|
||||||
|
qDebug("Deleted from the finished");
|
||||||
|
BTSession->deleteTorrent(hash, true);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(h.state() == torrent_status::checking_files){
|
if(h.state() == torrent_status::checking_files){
|
||||||
if(BTSession->getTorrentsToPauseAfterChecking().indexOf(hash) == -1) {
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/time.png"))), Qt::DecorationRole);
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/time.png"))), Qt::DecorationRole);
|
setRowColor(row, QString::fromUtf8("grey"));
|
||||||
setRowColor(row, QString::fromUtf8("grey"));
|
|
||||||
}
|
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_PROGRESS), QVariant((double)h.progress()));
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
setRowColor(row, QString::fromUtf8("orange"));
|
setRowColor(row, QString::fromUtf8("orange"));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png"))), Qt::DecorationRole);
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png"))), Qt::DecorationRole);
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)h.upload_payload_rate()));
|
if(!finishedList->isColumnHidden(F_UPSPEED)) {
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_SEEDSLEECH), QVariant(misc::toQString(h.num_seeds(), true)+"/"+misc::toQString(h.num_peers() - h.num_seeds(), true)));
|
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)h.upload_payload_rate()));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(misc::toQString(BTSession->getRealRatio(hash))));
|
}
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_PROGRESS), QVariant((double)1.));
|
if(!finishedList->isColumnHidden(F_LEECH)) {
|
||||||
|
finishedListModel->setData(finishedListModel->index(row, F_LEECH), misc::toQString(h.num_peers() - h.num_seeds(), true));
|
||||||
|
}
|
||||||
|
if(!finishedList->isColumnHidden(F_RATIO)) {
|
||||||
|
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(misc::toQString(BTSession->getRealRatio(hash))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,10 +327,11 @@ int FinishedTorrents::getRowFromHash(QString hash) const{
|
|||||||
// Note: does not actually pause the torrent in BT Session
|
// Note: does not actually pause the torrent in BT Session
|
||||||
void FinishedTorrents::pauseTorrent(QString hash) {
|
void FinishedTorrents::pauseTorrent(QString hash) {
|
||||||
int row = getRowFromHash(hash);
|
int row = getRowFromHash(hash);
|
||||||
Q_ASSERT(row != -1);
|
if(row == -1)
|
||||||
|
return;
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)0.0));
|
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), QVariant((double)0.0));
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QIcon(QString::fromUtf8(":/Icons/skin/paused.png")), Qt::DecorationRole);
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QIcon(QString::fromUtf8(":/Icons/skin/paused.png")), Qt::DecorationRole);
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_SEEDSLEECH), QVariant(QString::fromUtf8("0/0")));
|
finishedListModel->setData(finishedListModel->index(row, F_LEECH), QVariant(QString::fromUtf8("0")));
|
||||||
setRowColor(row, QString::fromUtf8("red"));
|
setRowColor(row, QString::fromUtf8("red"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,11 +361,14 @@ void FinishedTorrents::deleteTorrent(QString hash){
|
|||||||
|
|
||||||
// Show torrent properties dialog
|
// Show torrent properties dialog
|
||||||
void FinishedTorrents::showProperties(const QModelIndex &index){
|
void FinishedTorrents::showProperties(const QModelIndex &index){
|
||||||
int row = index.row();
|
showPropertiesFromHash(finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString());
|
||||||
QString hash = finishedListModel->data(finishedListModel->index(row, F_HASH)).toString();
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::showPropertiesFromHash(QString hash){
|
||||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||||
properties *prop = new properties(this, BTSession, h);
|
properties *prop = new properties(this, BTSession, h);
|
||||||
connect(prop, SIGNAL(filteredFilesChanged(QString)), this, SLOT(updateFileSize(QString)));
|
connect(prop, SIGNAL(filteredFilesChanged(QString)), this, SLOT(updateFileSize(QString)));
|
||||||
|
connect(prop, SIGNAL(trackersChanged(QString)), BTSession, SLOT(saveTrackerFile(QString)));
|
||||||
prop->show();
|
prop->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,8 +394,6 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
|||||||
QModelIndex index;
|
QModelIndex index;
|
||||||
// Enable/disable pause/start action given the DL state
|
// Enable/disable pause/start action given the DL state
|
||||||
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
||||||
QSettings settings("qBittorrent", "qBittorrent");
|
|
||||||
QString previewProgram = settings.value("Options/Misc/PreviewProgram", QString()).toString();
|
|
||||||
bool has_pause = false, has_start = false, has_preview = false;
|
bool has_pause = false, has_start = false, has_preview = false;
|
||||||
foreach(index, selectedIndexes) {
|
foreach(index, selectedIndexes) {
|
||||||
if(index.column() == F_NAME) {
|
if(index.column() == F_NAME) {
|
||||||
@@ -331,7 +413,7 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
|||||||
has_pause = true;
|
has_pause = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!previewProgram.isEmpty() && BTSession->isFilePreviewPossible(hash) && !has_preview) {
|
if(BTSession->isFilePreviewPossible(hash) && !has_preview) {
|
||||||
myFinishedListMenu.addAction(actionPreview_file);
|
myFinishedListMenu.addAction(actionPreview_file);
|
||||||
has_preview = true;
|
has_preview = true;
|
||||||
}
|
}
|
||||||
@@ -344,30 +426,205 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
|||||||
myFinishedListMenu.addSeparator();
|
myFinishedListMenu.addSeparator();
|
||||||
myFinishedListMenu.addAction(actionSet_upload_limit);
|
myFinishedListMenu.addAction(actionSet_upload_limit);
|
||||||
myFinishedListMenu.addSeparator();
|
myFinishedListMenu.addSeparator();
|
||||||
|
myFinishedListMenu.addAction(actionOpen_destination_folder);
|
||||||
myFinishedListMenu.addAction(actionTorrent_Properties);
|
myFinishedListMenu.addAction(actionTorrent_Properties);
|
||||||
|
if(BTSession->isQueueingEnabled()) {
|
||||||
|
myFinishedListMenu.addSeparator();
|
||||||
|
myFinishedListMenu.addAction(actionIncreasePriority);
|
||||||
|
myFinishedListMenu.addAction(actionDecreasePriority);
|
||||||
|
}
|
||||||
|
myFinishedListMenu.addSeparator();
|
||||||
|
myFinishedListMenu.addAction(actionBuy_it);
|
||||||
|
|
||||||
// Call menu
|
// Call menu
|
||||||
// XXX: why mapToGlobal() is not enough?
|
// XXX: why mapToGlobal() is not enough?
|
||||||
myFinishedListMenu.exec(mapToGlobal(pos)+QPoint(10,55));
|
myFinishedListMenu.exec(mapToGlobal(pos)+QPoint(10,58));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hiding Columns functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
// hide/show columns menu
|
||||||
|
void FinishedTorrents::displayFinishedHoSMenu(const QPoint& pos){
|
||||||
|
QMenu hideshowColumn(this);
|
||||||
|
hideshowColumn.setTitle(tr("Hide or Show Column"));
|
||||||
|
int lastCol;
|
||||||
|
if(BTSession->isQueueingEnabled()) {
|
||||||
|
lastCol = F_PRIORITY;
|
||||||
|
} else {
|
||||||
|
lastCol = F_RATIO;
|
||||||
|
}
|
||||||
|
for(int i=0; i<=lastCol; i++) {
|
||||||
|
hideshowColumn.addAction(getActionHoSCol(i));
|
||||||
|
}
|
||||||
|
// Call menu
|
||||||
|
hideshowColumn.exec(mapToGlobal(pos)+QPoint(10,34));
|
||||||
|
}
|
||||||
|
|
||||||
|
// toggle hide/show a column
|
||||||
|
void FinishedTorrents::hideOrShowColumn(int index) {
|
||||||
|
unsigned int nbVisibleColumns = 0;
|
||||||
|
unsigned int nbCols = finishedListModel->columnCount();
|
||||||
|
// Count visible columns
|
||||||
|
for(unsigned int i=0; i<nbCols; ++i) {
|
||||||
|
if(!finishedList->isColumnHidden(i))
|
||||||
|
++nbVisibleColumns;
|
||||||
|
}
|
||||||
|
if(!finishedList->isColumnHidden(index)) {
|
||||||
|
// User wants to hide the column
|
||||||
|
// Is there at least one other visible column?
|
||||||
|
if(nbVisibleColumns <= 1) return;
|
||||||
|
// User can hide the column, do it.
|
||||||
|
finishedList->setColumnHidden(index, true);
|
||||||
|
getActionHoSCol(index)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_cancel.png")));
|
||||||
|
--nbVisibleColumns;
|
||||||
|
} else {
|
||||||
|
// User want to display the column
|
||||||
|
finishedList->setColumnHidden(index, false);
|
||||||
|
getActionHoSCol(index)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_ok.png")));
|
||||||
|
++nbVisibleColumns;
|
||||||
|
}
|
||||||
|
//resize all others non-hidden columns
|
||||||
|
for(unsigned int i=0; i<nbCols; ++i) {
|
||||||
|
if(!finishedList->isColumnHidden(i)) {
|
||||||
|
finishedList->setColumnWidth(i, (int)ceil(finishedList->columnWidth(i)+(finishedList->columnWidth(index)/nbVisibleColumns)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnName() {
|
||||||
|
hideOrShowColumn(F_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnSize() {
|
||||||
|
hideOrShowColumn(F_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnUpSpeed() {
|
||||||
|
hideOrShowColumn(F_UPSPEED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnLeechers() {
|
||||||
|
hideOrShowColumn(F_LEECH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnRatio() {
|
||||||
|
hideOrShowColumn(F_RATIO);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::hideOrShowColumnPriority() {
|
||||||
|
hideOrShowColumn(F_PRIORITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// load the previous settings, and hide the columns
|
||||||
|
bool FinishedTorrents::loadHiddenColumns() {
|
||||||
|
bool loaded = false;
|
||||||
|
QSettings settings("qBittorrent", "qBittorrent");
|
||||||
|
QString line = settings.value("FinishedListColsHoS", QString()).toString();
|
||||||
|
QStringList ishidden_list;
|
||||||
|
if(!line.isEmpty()) {
|
||||||
|
ishidden_list = line.split(' ');
|
||||||
|
if(ishidden_list.size() == finishedListModel->columnCount()-1) {
|
||||||
|
unsigned int listSize = ishidden_list.size();
|
||||||
|
for(unsigned int i=0; i<listSize; ++i){
|
||||||
|
finishedList->header()->resizeSection(i, ishidden_list.at(i).toInt());
|
||||||
|
}
|
||||||
|
loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0; i<finishedListModel->columnCount()-1; i++) {
|
||||||
|
if(loaded && ishidden_list.at(i) == "0") {
|
||||||
|
finishedList->setColumnHidden(i, true);
|
||||||
|
getActionHoSCol(i)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_cancel.png")));
|
||||||
|
} else {
|
||||||
|
getActionHoSCol(i)->setIcon(QIcon(QString::fromUtf8(":/Icons/button_ok.png")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the hidden columns in settings
|
||||||
|
void FinishedTorrents::saveHiddenColumns() {
|
||||||
|
QSettings settings("qBittorrent", "qBittorrent");
|
||||||
|
QStringList ishidden_list;
|
||||||
|
short nbColumns = finishedListModel->columnCount()-1;
|
||||||
|
|
||||||
|
for(short i=0; i<nbColumns; ++i){
|
||||||
|
if(finishedList->isColumnHidden(i)) {
|
||||||
|
ishidden_list << QString::fromUtf8(misc::toString(0).c_str());
|
||||||
|
} else {
|
||||||
|
ishidden_list << QString::fromUtf8(misc::toString(1).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings.setValue("FinishedListColsHoS", ishidden_list.join(" "));
|
||||||
|
}
|
||||||
|
|
||||||
|
// getter, return the action hide or show whose id is index
|
||||||
|
QAction* FinishedTorrents::getActionHoSCol(int index) {
|
||||||
|
switch(index) {
|
||||||
|
case F_NAME :
|
||||||
|
return actionHOSColName;
|
||||||
|
break;
|
||||||
|
case F_SIZE :
|
||||||
|
return actionHOSColSize;
|
||||||
|
break;
|
||||||
|
case F_UPSPEED :
|
||||||
|
return actionHOSColUpSpeed;
|
||||||
|
break;
|
||||||
|
case F_LEECH :
|
||||||
|
return actionHOSColLeechers;
|
||||||
|
break;
|
||||||
|
case F_RATIO :
|
||||||
|
return actionHOSColRatio;
|
||||||
|
break;
|
||||||
|
case F_PRIORITY :
|
||||||
|
return actionHOSColPriority;
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sorting functions
|
* Sorting functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void FinishedTorrents::sortFinishedList(int index){
|
void FinishedTorrents::toggleFinishedListSortOrder(int index) {
|
||||||
static Qt::SortOrder sortOrder = Qt::AscendingOrder;
|
Qt::SortOrder sortOrder = Qt::AscendingOrder;
|
||||||
if(finishedList->header()->sortIndicatorSection() == index){
|
if(finishedList->header()->sortIndicatorSection() == index){
|
||||||
if(sortOrder == Qt::AscendingOrder){
|
sortOrder = (Qt::SortOrder)!(bool)finishedList->header()->sortIndicatorOrder();
|
||||||
sortOrder = Qt::DescendingOrder;
|
|
||||||
}else{
|
|
||||||
sortOrder = Qt::AscendingOrder;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finishedList->header()->setSortIndicator(index, sortOrder);
|
switch(index) {
|
||||||
switch(index){
|
case F_SIZE:
|
||||||
|
case F_UPSPEED:
|
||||||
|
case F_PRIORITY:
|
||||||
|
sortFinishedListFloat(index, sortOrder);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sortFinishedListString(index, sortOrder);
|
||||||
|
}
|
||||||
|
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
|
||||||
|
QString sortOrderLetter;
|
||||||
|
if(sortOrder == Qt::AscendingOrder)
|
||||||
|
sortOrderLetter = QString::fromUtf8("a");
|
||||||
|
else
|
||||||
|
sortOrderLetter = QString::fromUtf8("d");
|
||||||
|
settings.setValue(QString::fromUtf8("FinishedListSortedCol"), misc::toQString(index)+sortOrderLetter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::sortFinishedList(int index, Qt::SortOrder sortOrder){
|
||||||
|
if(index == -1) {
|
||||||
|
index = finishedList->header()->sortIndicatorSection();
|
||||||
|
sortOrder = finishedList->header()->sortIndicatorOrder();
|
||||||
|
} else {
|
||||||
|
finishedList->header()->setSortIndicator(index, sortOrder);
|
||||||
|
}
|
||||||
|
switch(index) {
|
||||||
case F_SIZE:
|
case F_SIZE:
|
||||||
case F_UPSPEED:
|
case F_UPSPEED:
|
||||||
case F_PROGRESS:
|
|
||||||
sortFinishedListFloat(index, sortOrder);
|
sortFinishedListFloat(index, sortOrder);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
FinishedListDelegate *finishedListDelegate;
|
FinishedListDelegate *finishedListDelegate;
|
||||||
QStandardItemModel *finishedListModel;
|
QStandardItemModel *finishedListModel;
|
||||||
unsigned int nbFinished;
|
unsigned int nbFinished;
|
||||||
|
void hideOrShowColumn(int index);
|
||||||
|
bool loadHiddenColumns();
|
||||||
|
void saveHiddenColumns();
|
||||||
|
QAction* getActionHoSCol(int index);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FinishedTorrents(QObject *parent, bittorrent *BTSession);
|
FinishedTorrents(QObject *parent, bittorrent *BTSession);
|
||||||
@@ -53,15 +57,24 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
protected slots:
|
protected slots:
|
||||||
void showProperties(const QModelIndex &index);
|
void showProperties(const QModelIndex &index);
|
||||||
void displayFinishedListMenu(const QPoint&);
|
void displayFinishedListMenu(const QPoint&);
|
||||||
|
void displayFinishedHoSMenu(const QPoint&);
|
||||||
void setRowColor(int row, QString color);
|
void setRowColor(int row, QString color);
|
||||||
void saveColWidthFinishedList() const;
|
void saveColWidthFinishedList() const;
|
||||||
void sortFinishedList(int index);
|
void loadLastSortedColumn();
|
||||||
|
void toggleFinishedListSortOrder(int index);
|
||||||
|
void sortFinishedList(int index=-1, Qt::SortOrder sortOrder=Qt::AscendingOrder);
|
||||||
void sortFinishedListFloat(int index, Qt::SortOrder sortOrder);
|
void sortFinishedListFloat(int index, Qt::SortOrder sortOrder);
|
||||||
void sortFinishedListString(int index, Qt::SortOrder sortOrder);
|
void sortFinishedListString(int index, Qt::SortOrder sortOrder);
|
||||||
void updateFileSize(QString hash);
|
void updateFileSize(QString hash);
|
||||||
void torrentAdded(QString path, QTorrentHandle& h, bool fastResume);
|
void torrentAdded(QTorrentHandle& h);
|
||||||
void on_actionSet_upload_limit_triggered();
|
void on_actionSet_upload_limit_triggered();
|
||||||
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
||||||
|
void hideOrShowColumnName();
|
||||||
|
void hideOrShowColumnSize();
|
||||||
|
void hideOrShowColumnUpSpeed();
|
||||||
|
void hideOrShowColumnLeechers();
|
||||||
|
void hideOrShowColumnRatio();
|
||||||
|
void hideOrShowColumnPriority();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void addTorrent(QString hash);
|
void addTorrent(QString hash);
|
||||||
@@ -70,10 +83,12 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
void resumeTorrent(QString hash);
|
void resumeTorrent(QString hash);
|
||||||
void propertiesSelection();
|
void propertiesSelection();
|
||||||
void deleteTorrent(QString hash);
|
void deleteTorrent(QString hash);
|
||||||
|
void showPropertiesFromHash(QString hash);
|
||||||
|
void hidePriorityColumn(bool hide);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void torrentMovedFromFinishedList(QString);
|
void torrentMovedFromFinishedList(QString);
|
||||||
void torrentDoubleClicked(QString hash);
|
void torrentDoubleClicked(QString hash, bool finished);
|
||||||
void finishedTorrentsNumberChanged(unsigned int);
|
void finishedTorrentsNumberChanged(unsigned int);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
1014
src/GUI.cpp
60
src/GUI.h
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QPointer>
|
||||||
#include "ui_MainWindow.h"
|
#include "ui_MainWindow.h"
|
||||||
#include "qtorrenthandle.h"
|
#include "qtorrenthandle.h"
|
||||||
|
|
||||||
@@ -35,8 +35,13 @@ class DownloadingTorrents;
|
|||||||
class FinishedTorrents;
|
class FinishedTorrents;
|
||||||
class downloadFromURL;
|
class downloadFromURL;
|
||||||
class SearchEngine;
|
class SearchEngine;
|
||||||
class QTcpServer;
|
#ifdef QT_4_4
|
||||||
class QTcpSocket;
|
class QLocalServer;
|
||||||
|
class QLocalSocket;
|
||||||
|
#else
|
||||||
|
class QTcpServer;
|
||||||
|
class QTcpSocket;
|
||||||
|
#endif
|
||||||
class QCloseEvent;
|
class QCloseEvent;
|
||||||
class RSSImp;
|
class RSSImp;
|
||||||
class QShortcut;
|
class QShortcut;
|
||||||
@@ -46,6 +51,8 @@ class options_imp;
|
|||||||
class QTabWidget;
|
class QTabWidget;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
|
class HttpServer;
|
||||||
|
class QFrame;
|
||||||
|
|
||||||
class GUI : public QMainWindow, private Ui::MainWindow{
|
class GUI : public QMainWindow, private Ui::MainWindow{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -59,28 +66,46 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
QTabWidget *tabs;
|
QTabWidget *tabs;
|
||||||
options_imp *options;
|
options_imp *options;
|
||||||
QSystemTrayIcon *myTrayIcon;
|
QSystemTrayIcon *myTrayIcon;
|
||||||
|
QPointer<QTimer> systrayCreator;
|
||||||
QMenu *myTrayIconMenu;
|
QMenu *myTrayIconMenu;
|
||||||
DownloadingTorrents *downloadingTorrentTab;
|
DownloadingTorrents *downloadingTorrentTab;
|
||||||
FinishedTorrents *finishedTorrentTab;
|
FinishedTorrents *finishedTorrentTab;
|
||||||
QLabel *connecStatusLblIcon;
|
QLabel *connecStatusLblIcon;
|
||||||
bool systrayIntegration;
|
bool systrayIntegration;
|
||||||
|
bool displaySpeedInTitle;
|
||||||
bool force_exit;
|
bool force_exit;
|
||||||
|
unsigned int refreshInterval;
|
||||||
QTimer *refresher;
|
QTimer *refresher;
|
||||||
|
QLabel *dlSpeedLbl;
|
||||||
|
QLabel *upSpeedLbl;
|
||||||
|
QLabel *ratioLbl;
|
||||||
|
QLabel *DHTLbl;
|
||||||
|
QFrame *statusSep1;
|
||||||
|
QFrame *statusSep2;
|
||||||
|
QFrame *statusSep3;
|
||||||
|
QFrame *statusSep4;
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
QShortcut *switchSearchShortcut;
|
QShortcut *switchSearchShortcut;
|
||||||
QShortcut *switchSearchShortcut2;
|
QShortcut *switchSearchShortcut2;
|
||||||
QShortcut *switchDownShortcut;
|
QShortcut *switchDownShortcut;
|
||||||
QShortcut *switchUpShortcut;
|
QShortcut *switchUpShortcut;
|
||||||
QShortcut *switchRSSShortcut;
|
QShortcut *switchRSSShortcut;
|
||||||
// Preview
|
QAction *prioSeparator;
|
||||||
QProcess *previewProcess;
|
QAction *prioSeparator2;
|
||||||
// Search
|
// Search
|
||||||
SearchEngine *searchEngine;
|
SearchEngine *searchEngine;
|
||||||
// RSS
|
// RSS
|
||||||
RSSImp *rssWidget;
|
RSSImp *rssWidget;
|
||||||
|
// Web UI
|
||||||
|
QPointer<HttpServer> httpServer;
|
||||||
// Misc
|
// Misc
|
||||||
QTcpServer *tcpServer;
|
#ifdef QT_4_4
|
||||||
|
QLocalServer *localServer;
|
||||||
|
QLocalSocket *clientConnection;
|
||||||
|
#else
|
||||||
|
QTcpServer *localServer;
|
||||||
QTcpSocket *clientConnection;
|
QTcpSocket *clientConnection;
|
||||||
|
#endif
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
// GUI related slots
|
// GUI related slots
|
||||||
@@ -91,21 +116,25 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
void on_actionCreate_torrent_triggered();
|
void on_actionCreate_torrent_triggered();
|
||||||
void on_actionWebsite_triggered() const;
|
void on_actionWebsite_triggered() const;
|
||||||
void on_actionBugReport_triggered() const;
|
void on_actionBugReport_triggered() const;
|
||||||
|
void on_actionShow_console_triggered();
|
||||||
void readParamsOnSocket();
|
void readParamsOnSocket();
|
||||||
void acceptConnection();
|
void acceptConnection();
|
||||||
void togglePausedState(QString hash);
|
void togglePausedState(QString hash);
|
||||||
|
void torrentDoubleClicked(QString hash, bool finished);
|
||||||
void on_actionPreview_file_triggered();
|
void on_actionPreview_file_triggered();
|
||||||
void previewFile(QString filePath);
|
void previewFile(QString filePath);
|
||||||
void cleanTempPreviewFile(int, QProcess::ExitStatus) const;
|
|
||||||
void balloonClicked();
|
void balloonClicked();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void on_actionExit_triggered();
|
void on_actionExit_triggered();
|
||||||
void createTrayIcon();
|
void createTrayIcon();
|
||||||
|
void updateUnfinishedTorrentNumberCalc();
|
||||||
|
void updateFinishedTorrentNumberCalc();
|
||||||
void updateUnfinishedTorrentNumber(unsigned int nb);
|
void updateUnfinishedTorrentNumber(unsigned int nb);
|
||||||
void updateFinishedTorrentNumber(unsigned int nb);
|
void updateFinishedTorrentNumber(unsigned int nb);
|
||||||
void fullDiskError(QTorrentHandle& h) const;
|
void fullDiskError(QTorrentHandle& h) const;
|
||||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||||
|
void createSystrayDelayed();
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
void createKeyboardShortcuts();
|
void createKeyboardShortcuts();
|
||||||
void displayDownTab() const;
|
void displayDownTab() const;
|
||||||
@@ -127,16 +156,21 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
void checkConnectionStatus();
|
void checkConnectionStatus();
|
||||||
void configureSession(bool deleteOptions);
|
void configureSession(bool deleteOptions);
|
||||||
void processParams(const QStringList& params);
|
void processParams(const QStringList& params);
|
||||||
|
void addTorrent(QString path);
|
||||||
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
||||||
void processScannedFiles(const QStringList& params);
|
void processScannedFiles(const QStringList& params);
|
||||||
void processDownloadedFiles(QString path, QString url);
|
void processDownloadedFiles(QString path, QString url);
|
||||||
void downloadFromURLList(const QStringList& urls);
|
void downloadFromURLList(const QStringList& urls);
|
||||||
|
void deleteTorrent(QString hash);
|
||||||
void finishedTorrent(QTorrentHandle& h) const;
|
void finishedTorrent(QTorrentHandle& h) const;
|
||||||
void torrentChecked(QString hash) const;
|
|
||||||
void updateLists();
|
void updateLists();
|
||||||
|
bool initWebUi(QString username, QString password, int port);
|
||||||
|
void pauseTorrent(QString hash);
|
||||||
|
void on_actionIncreasePriority_triggered();
|
||||||
|
void on_actionDecreasePriority_triggered();
|
||||||
// Options slots
|
// Options slots
|
||||||
void on_actionOptions_triggered();
|
void on_actionOptions_triggered();
|
||||||
void OptionsSaved(QString info, bool deleteOptions);
|
void OptionsSaved(bool deleteOptions);
|
||||||
// HTTP slots
|
// HTTP slots
|
||||||
void on_actionDownload_from_URL_triggered();
|
void on_actionDownload_from_URL_triggered();
|
||||||
|
|
||||||
@@ -144,17 +178,21 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
public slots:
|
public slots:
|
||||||
void trackerAuthenticationRequired(QTorrentHandle& h);
|
void trackerAuthenticationRequired(QTorrentHandle& h);
|
||||||
void setTabText(int index, QString text) const;
|
void setTabText(int index, QString text) const;
|
||||||
|
void openDestinationFolder() const;
|
||||||
|
void goBuyPage() const;
|
||||||
|
void updateRatio();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
void hideEvent(QHideEvent *);
|
bool event(QEvent * event);
|
||||||
|
void displayRSSTab(bool enable);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Construct / Destruct
|
// Construct / Destruct
|
||||||
GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
|
GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
|
||||||
~GUI();
|
~GUI();
|
||||||
// Methods
|
// Methods
|
||||||
unsigned int getCurrentTabIndex() const;
|
int getCurrentTabIndex() const;
|
||||||
QPoint screenCenter() const;
|
QPoint screenCenter() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
BIN
src/Icons/bt_settings.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/Icons/configure.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 820 B |
BIN
src/Icons/download.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/Icons/edit_clear.png
Normal file
|
After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/file.png
Normal file
|
After Width: | Height: | Size: 704 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 998 B |
|
Before Width: | Height: | Size: 558 B |
BIN
src/Icons/flags/czech.png
Normal file
|
After Width: | Height: | Size: 455 B |
BIN
src/Icons/flags/taiwan.png
Normal file
|
After Width: | Height: | Size: 333 B |
BIN
src/Icons/folder.png
Normal file
|
After Width: | Height: | Size: 449 B |
BIN
src/Icons/gear.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/Icons/gnome-shutdown.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/money.png
Normal file
|
After Width: | Height: | Size: 813 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 532 B |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.2 KiB |
@@ -1,24 +1,25 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Categories=Qt;Application;Network;P2P
|
Categories=Qt;Network;P2P
|
||||||
Comment=V1.0.0
|
Comment=V1.2.0
|
||||||
Encoding=UTF-8
|
Exec=qbittorrent %f
|
||||||
Exec=qbittorrent
|
|
||||||
GenericName=Bittorrent client
|
GenericName=Bittorrent client
|
||||||
GenericName[fr]=Client Bittorrent
|
GenericName[bg]=Торент клиент
|
||||||
GenericName[nl]=Bittorrent client
|
GenericName[de]=Bittorren Client
|
||||||
|
GenericName[el]=Τορεντ πελάτης
|
||||||
GenericName[es]=Cliente Bittorrent
|
GenericName[es]=Cliente Bittorrent
|
||||||
|
GenericName[fr]=Client Bittorrent
|
||||||
|
GenericName[it]=Client Bittorrent
|
||||||
|
GenericName[ja]=Bittorrent クライアント
|
||||||
|
GenericName[ko]=비토렌트 클라이언트
|
||||||
|
GenericName[nl]=Bittorrent client
|
||||||
|
GenericName[pl]=Klient Bittorrent
|
||||||
|
GenericName[ru]=клиент Bittorrent
|
||||||
GenericName[sv]=Bittorrent-klient
|
GenericName[sv]=Bittorrent-klient
|
||||||
GenericName[tr]=Bittorrent istemcisi
|
GenericName[tr]=Bittorrent istemcisi
|
||||||
GenericName[de]=Bittorren Client
|
|
||||||
GenericName[pl]=Klient Bittorrent
|
|
||||||
GenericName[zh]=Bittorrent之用户
|
|
||||||
GenericName[ko]=비토렌트 클라이언트
|
|
||||||
GenericName[el]=Τορεντ πελάτης
|
|
||||||
GenericName[bg]=Торент клиент
|
|
||||||
GenericName[uk]=Bittorrent-клієнт
|
GenericName[uk]=Bittorrent-клієнт
|
||||||
GenericName[ru]=клиент Bittorrent
|
GenericName[zh]=Bittorrent之用户
|
||||||
Icon=qbittorrent
|
Icon=qbittorrent
|
||||||
MimeType=application/x-bittorrent
|
MimeType=application/x-bittorrent;
|
||||||
Name=qBittorrent
|
Name=qBittorrent
|
||||||
Name[ko]=큐비토런트
|
Name[ko]=큐비토런트
|
||||||
Terminal=false
|
Terminal=false
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 948 B |
|
Before Width: | Height: | Size: 2.2 KiB |
BIN
src/Icons/rss16.png
Normal file
|
After Width: | Height: | Size: 607 B |
BIN
src/Icons/rss32.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/skin/decrease.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
src/Icons/skin/increase.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
src/Icons/skin/queued.png
Normal file
|
After Width: | Height: | Size: 493 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
src/Icons/skin/tabs.gif
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 76 KiB |
BIN
src/Icons/star.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
src/Icons/subscribe.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/Icons/subscribe16.png
Normal file
|
After Width: | Height: | Size: 739 B |
|
Before Width: | Height: | Size: 513 B After Width: | Height: | Size: 856 B |
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
src/Icons/unsubscribe.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/Icons/unsubscribe16.png
Normal file
|
After Width: | Height: | Size: 765 B |
@@ -5,7 +5,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>849</width>
|
<width>914</width>
|
||||||
<height>563</height>
|
<height>563</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -16,22 +16,15 @@
|
|||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget" >
|
<widget class="QWidget" name="centralwidget" >
|
||||||
<layout class="QVBoxLayout" >
|
<layout class="QVBoxLayout" />
|
||||||
<property name="spacing" >
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="margin" >
|
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menubar" >
|
<widget class="QMenuBar" name="menubar" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>849</width>
|
<width>914</width>
|
||||||
<height>29</height>
|
<height>26</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menu_Edit" >
|
<widget class="QMenu" name="menu_Edit" >
|
||||||
@@ -48,6 +41,8 @@
|
|||||||
<addaction name="separator" />
|
<addaction name="separator" />
|
||||||
<addaction name="actionDelete" />
|
<addaction name="actionDelete" />
|
||||||
<addaction name="actionDelete_Permanently" />
|
<addaction name="actionDelete_Permanently" />
|
||||||
|
<addaction name="actionDecreasePriority" />
|
||||||
|
<addaction name="actionIncreasePriority" />
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_Help" >
|
<widget class="QMenu" name="menu_Help" >
|
||||||
<property name="title" >
|
<property name="title" >
|
||||||
@@ -63,6 +58,7 @@
|
|||||||
<string>Options</string>
|
<string>Options</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionOptions" />
|
<addaction name="actionOptions" />
|
||||||
|
<addaction name="actionShow_console" />
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_File" >
|
<widget class="QMenu" name="menu_File" >
|
||||||
<property name="title" >
|
<property name="title" >
|
||||||
@@ -97,8 +93,11 @@
|
|||||||
<height>32</height>
|
<height>32</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="floatable" >
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<attribute name="toolBarArea" >
|
<attribute name="toolBarArea" >
|
||||||
<number>4</number>
|
<enum>TopToolBarArea</enum>
|
||||||
</attribute>
|
</attribute>
|
||||||
<attribute name="toolBarBreak" >
|
<attribute name="toolBarBreak" >
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
@@ -118,9 +117,13 @@
|
|||||||
<addaction name="actionPause_All" />
|
<addaction name="actionPause_All" />
|
||||||
<addaction name="separator" />
|
<addaction name="separator" />
|
||||||
<addaction name="actionOptions" />
|
<addaction name="actionOptions" />
|
||||||
|
<addaction name="actionDecreasePriority" />
|
||||||
|
<addaction name="actionIncreasePriority" />
|
||||||
|
<addaction name="separator" />
|
||||||
<addaction name="actionExit" />
|
<addaction name="actionExit" />
|
||||||
<addaction name="separator" />
|
<addaction name="separator" />
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar" />
|
||||||
<action name="actionOpen" >
|
<action name="actionOpen" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>Open</string>
|
<string>Open</string>
|
||||||
@@ -231,7 +234,39 @@
|
|||||||
<string>Set global upload limit</string>
|
<string>Set global upload limit</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionDecreasePriority" >
|
||||||
|
<property name="icon" >
|
||||||
|
<iconset resource="icons.qrc" >:/Icons/skin/decrease.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Decrease priority</string>
|
||||||
|
</property>
|
||||||
|
<property name="visible" >
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionIncreasePriority" >
|
||||||
|
<property name="icon" >
|
||||||
|
<iconset resource="icons.qrc" >:/Icons/skin/increase.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Increase priority</string>
|
||||||
|
</property>
|
||||||
|
<property name="visible" >
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionShow_console" >
|
||||||
|
<property name="icon" >
|
||||||
|
<iconset resource="icons.qrc" >:/Icons/log.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Console</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources>
|
||||||
|
<include location="icons.qrc" />
|
||||||
|
</resources>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -61,10 +61,8 @@ class PreviewListDelegate: public QItemDelegate {
|
|||||||
newopt.maximum = 100;
|
newopt.maximum = 100;
|
||||||
newopt.minimum = 0;
|
newopt.minimum = 0;
|
||||||
newopt.state |= QStyle::State_Enabled;
|
newopt.state |= QStyle::State_Enabled;
|
||||||
newopt.textVisible = false;
|
newopt.textVisible = true;
|
||||||
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
||||||
painter->setPen(QColor("Black"));
|
|
||||||
painter->drawText(opt.rect, Qt::AlignCenter, newopt.text);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#define SIZE 1
|
#define SIZE 1
|
||||||
#define PROGRESS 2
|
#define PROGRESS 2
|
||||||
#define PRIORITY 3
|
#define PRIORITY 3
|
||||||
|
#define INDEX 4
|
||||||
|
|
||||||
#define IGNORED 0
|
#define IGNORED 0
|
||||||
#define NORMAL 1
|
#define NORMAL 1
|
||||||
@@ -74,10 +75,8 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
newopt.maximum = 100;
|
newopt.maximum = 100;
|
||||||
newopt.minimum = 0;
|
newopt.minimum = 0;
|
||||||
newopt.state |= QStyle::State_Enabled;
|
newopt.state |= QStyle::State_Enabled;
|
||||||
newopt.textVisible = false;
|
newopt.textVisible = true;
|
||||||
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
||||||
painter->setPen(QColor("Black"));
|
|
||||||
painter->drawText(opt.rect, Qt::AlignCenter, newopt.text);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PRIORITY:{
|
case PRIORITY:{
|
||||||
@@ -115,7 +114,6 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
|
|
||||||
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const {
|
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const {
|
||||||
if(index.column() != PRIORITY) return 0;
|
if(index.column() != PRIORITY) return 0;
|
||||||
if(onlyOneItem(index)) return 0;
|
|
||||||
QComboBox* editor = new QComboBox(parent);
|
QComboBox* editor = new QComboBox(parent);
|
||||||
editor->setFocusPolicy(Qt::StrongFocus);
|
editor->setFocusPolicy(Qt::StrongFocus);
|
||||||
editor->addItem(tr("Ignored"));
|
editor->addItem(tr("Ignored"));
|
||||||
@@ -128,6 +126,7 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
void setEditorData(QWidget *editor, const QModelIndex &index) const {
|
void setEditorData(QWidget *editor, const QModelIndex &index) const {
|
||||||
unsigned short val = index.model()->data(index, Qt::DisplayRole).toInt();
|
unsigned short val = index.model()->data(index, Qt::DisplayRole).toInt();
|
||||||
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
||||||
|
qDebug("Set Editor data: Prio is %d", val);
|
||||||
switch(val){
|
switch(val){
|
||||||
case IGNORED:
|
case IGNORED:
|
||||||
combobox->setCurrentIndex(0);
|
combobox->setCurrentIndex(0);
|
||||||
@@ -156,28 +155,11 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
return textRect.size();
|
return textRect.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool onlyOneItem(const QModelIndex& index) const {
|
|
||||||
const QAbstractItemModel *model = index.model();
|
|
||||||
unsigned int nbRows = model->rowCount();
|
|
||||||
if(nbRows == 1) return true;
|
|
||||||
for(unsigned int i=0; i<nbRows; ++i){
|
|
||||||
if((unsigned int)index.row() == i) continue;
|
|
||||||
if(model->data(model->index(i, PRIORITY)).toInt()) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
||||||
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
||||||
int value = combobox->currentIndex();
|
int value = combobox->currentIndex();
|
||||||
qDebug("Setting combobox value in index: %d", value);
|
qDebug("Setting combobox value in index: %d", value);
|
||||||
QString color;
|
|
||||||
if(value) {
|
|
||||||
color = QString::fromUtf8("green");
|
|
||||||
} else {
|
|
||||||
color = QString::fromUtf8("red");
|
|
||||||
}
|
|
||||||
unsigned short old_val = index.model()->data(index, Qt::DisplayRole).toInt();
|
unsigned short old_val = index.model()->data(index, Qt::DisplayRole).toInt();
|
||||||
switch(value){
|
switch(value){
|
||||||
case 0:
|
case 0:
|
||||||
@@ -185,20 +167,32 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
model->setData(index, QVariant(IGNORED));
|
model->setData(index, QVariant(IGNORED));
|
||||||
if(filteredFilesChanged != 0)
|
if(filteredFilesChanged != 0)
|
||||||
*filteredFilesChanged = true;
|
*filteredFilesChanged = true;
|
||||||
|
} else {
|
||||||
|
// XXX: hack to force the model to send the itemChanged() signal
|
||||||
|
model->setData(index, QVariant(NORMAL));
|
||||||
|
model->setData(index, QVariant(IGNORED));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if(old_val != NORMAL){
|
// if(old_val != NORMAL){
|
||||||
|
// model->setData(index, QVariant(NORMAL));
|
||||||
|
// if(filteredFilesChanged != 0)
|
||||||
|
// *filteredFilesChanged = true;
|
||||||
|
// } else {
|
||||||
|
model->setData(index, QVariant(HIGH));
|
||||||
model->setData(index, QVariant(NORMAL));
|
model->setData(index, QVariant(NORMAL));
|
||||||
if(filteredFilesChanged != 0)
|
if(filteredFilesChanged != 0)
|
||||||
*filteredFilesChanged = true;
|
*filteredFilesChanged = true;
|
||||||
}
|
// }
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if(old_val != HIGH){
|
if(old_val != HIGH){
|
||||||
model->setData(index, QVariant(HIGH));
|
model->setData(index, QVariant(HIGH));
|
||||||
if(filteredFilesChanged != 0)
|
if(filteredFilesChanged != 0)
|
||||||
*filteredFilesChanged = true;
|
*filteredFilesChanged = true;
|
||||||
|
} else {
|
||||||
|
model->setData(index, QVariant(NORMAL));
|
||||||
|
model->setData(index, QVariant(HIGH));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
@@ -206,6 +200,9 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
model->setData(index, QVariant(MAXIMUM));
|
model->setData(index, QVariant(MAXIMUM));
|
||||||
if(filteredFilesChanged != 0)
|
if(filteredFilesChanged != 0)
|
||||||
*filteredFilesChanged = true;
|
*filteredFilesChanged = true;
|
||||||
|
} else {
|
||||||
|
model->setData(index, QVariant(HIGH));
|
||||||
|
model->setData(index, QVariant(MAXIMUM));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -213,16 +210,17 @@ class PropListDelegate: public QItemDelegate {
|
|||||||
model->setData(index, QVariant(NORMAL));
|
model->setData(index, QVariant(NORMAL));
|
||||||
if(filteredFilesChanged != 0)
|
if(filteredFilesChanged != 0)
|
||||||
*filteredFilesChanged = true;
|
*filteredFilesChanged = true;
|
||||||
|
} else {
|
||||||
|
model->setData(index, QVariant(HIGH));
|
||||||
|
model->setData(index, QVariant(NORMAL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i=0; i<model->columnCount(); ++i){
|
|
||||||
model->setData(model->index(index.row(), i), QVariant(QColor(color)), Qt::ForegroundRole);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const {
|
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const {
|
||||||
editor->setGeometry(option.rect);
|
editor->setGeometry(option.rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
189
src/SearchTab.cpp
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QTreeView>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#include "SearchTab.h"
|
||||||
|
#include "SearchListDelegate.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "searchEngine.h"
|
||||||
|
|
||||||
|
#define SEARCH_NAME 0
|
||||||
|
#define SEARCH_SIZE 1
|
||||||
|
#define SEARCH_SEEDERS 2
|
||||||
|
#define SEARCH_LEECHERS 3
|
||||||
|
#define SEARCH_ENGINE 4
|
||||||
|
|
||||||
|
SearchTab::SearchTab(SearchEngine *parent) : QWidget()
|
||||||
|
{
|
||||||
|
box=new QVBoxLayout();
|
||||||
|
results_lbl=new QLabel();
|
||||||
|
resultsBrowser = new QTreeView();
|
||||||
|
resultsBrowser->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
box->addWidget(results_lbl);
|
||||||
|
box->addWidget(resultsBrowser);
|
||||||
|
|
||||||
|
setLayout(box);
|
||||||
|
// Set Search results list model
|
||||||
|
SearchListModel = new QStandardItemModel(0,5);
|
||||||
|
SearchListModel->setHeaderData(SEARCH_NAME, Qt::Horizontal, tr("Name", "i.e: file name"));
|
||||||
|
SearchListModel->setHeaderData(SEARCH_SIZE, Qt::Horizontal, tr("Size", "i.e: file size"));
|
||||||
|
SearchListModel->setHeaderData(SEARCH_SEEDERS, Qt::Horizontal, tr("Seeders", "i.e: Number of full sources"));
|
||||||
|
SearchListModel->setHeaderData(SEARCH_LEECHERS, Qt::Horizontal, tr("Leechers", "i.e: Number of partial sources"));
|
||||||
|
SearchListModel->setHeaderData(SEARCH_ENGINE, Qt::Horizontal, tr("Search engine"));
|
||||||
|
resultsBrowser->setModel(SearchListModel);
|
||||||
|
SearchDelegate = new SearchListDelegate();
|
||||||
|
resultsBrowser->setItemDelegate(SearchDelegate);
|
||||||
|
// Make search list header clickable for sorting
|
||||||
|
resultsBrowser->header()->setClickable(true);
|
||||||
|
resultsBrowser->header()->setSortIndicatorShown(true);
|
||||||
|
|
||||||
|
// Connect signals to slots (search part)
|
||||||
|
connect(resultsBrowser, SIGNAL(doubleClicked(const QModelIndex&)), parent, SLOT(downloadSelectedItem(const QModelIndex&)));
|
||||||
|
connect(resultsBrowser->header(), SIGNAL(sectionPressed(int)), this, SLOT(sortSearchList(int)));
|
||||||
|
|
||||||
|
// Load last columns width for search results list
|
||||||
|
if(!loadColWidthSearchList()){
|
||||||
|
resultsBrowser->header()->resizeSection(0, 275);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchTab::~SearchTab()
|
||||||
|
{
|
||||||
|
saveColWidthSearchList();
|
||||||
|
delete resultsBrowser;
|
||||||
|
delete SearchListModel;
|
||||||
|
delete SearchDelegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
QLabel* SearchTab::getCurrentLabel()
|
||||||
|
{
|
||||||
|
return results_lbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView* SearchTab::getCurrentTreeView()
|
||||||
|
{
|
||||||
|
return resultsBrowser;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItemModel* SearchTab::getCurrentSearchListModel()
|
||||||
|
{
|
||||||
|
return SearchListModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the color of a row in data model
|
||||||
|
void SearchTab::setRowColor(int row, QString color){
|
||||||
|
for(int i=0; i<SearchListModel->columnCount(); ++i){
|
||||||
|
SearchListModel->setData(SearchListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTab::sortSearchList(int index){
|
||||||
|
static Qt::SortOrder sortOrder = Qt::AscendingOrder;
|
||||||
|
if(resultsBrowser->header()->sortIndicatorSection() == index){
|
||||||
|
sortOrder = (sortOrder == Qt::DescendingOrder) ? Qt::AscendingOrder : Qt::DescendingOrder; ;
|
||||||
|
}
|
||||||
|
resultsBrowser->header()->setSortIndicator(index, sortOrder);
|
||||||
|
switch(index){
|
||||||
|
case SEEDERS:
|
||||||
|
case LEECHERS:
|
||||||
|
case SIZE:
|
||||||
|
sortSearchListInt(index, sortOrder);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sortSearchListString(index, sortOrder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTab::sortSearchListInt(int index, Qt::SortOrder sortOrder){
|
||||||
|
QList<QPair<int, qlonglong> > lines;
|
||||||
|
// Insertion sorting
|
||||||
|
for(int i=0; i<SearchListModel->rowCount(); ++i){
|
||||||
|
misc::insertSort(lines, QPair<int,qlonglong>(i, SearchListModel->data(SearchListModel->index(i, index)).toLongLong()), sortOrder);
|
||||||
|
}
|
||||||
|
// Insert items in new model, in correct order
|
||||||
|
int nbRows_old = lines.size();
|
||||||
|
for(int row=0; row<lines.size(); ++row){
|
||||||
|
SearchListModel->insertRow(SearchListModel->rowCount());
|
||||||
|
int sourceRow = lines[row].first;
|
||||||
|
for(int col=0; col<5; ++col){
|
||||||
|
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
|
||||||
|
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove old rows
|
||||||
|
SearchListModel->removeRows(0, nbRows_old);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTab::sortSearchListString(int index, Qt::SortOrder sortOrder){
|
||||||
|
QList<QPair<int, QString> > lines;
|
||||||
|
// Insetion sorting
|
||||||
|
for(int i=0; i<SearchListModel->rowCount(); ++i){
|
||||||
|
misc::insertSortString(lines, QPair<int, QString>(i, SearchListModel->data(SearchListModel->index(i, index)).toString()), sortOrder);
|
||||||
|
}
|
||||||
|
// Insert items in new model, in correct order
|
||||||
|
int nbRows_old = lines.size();
|
||||||
|
for(int row=0; row<nbRows_old; ++row){
|
||||||
|
SearchListModel->insertRow(SearchListModel->rowCount());
|
||||||
|
int sourceRow = lines[row].first;
|
||||||
|
for(int col=0; col<5; ++col){
|
||||||
|
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
|
||||||
|
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove old rows
|
||||||
|
SearchListModel->removeRows(0, nbRows_old);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save columns width in a file to remember them
|
||||||
|
// (download list)
|
||||||
|
void SearchTab::saveColWidthSearchList() const{
|
||||||
|
qDebug("Saving columns width in search list");
|
||||||
|
QSettings settings("qBittorrent", "qBittorrent");
|
||||||
|
QStringList width_list;
|
||||||
|
for(int i=0; i<SearchListModel->columnCount(); ++i){
|
||||||
|
width_list << misc::toQString(resultsBrowser->columnWidth(i));
|
||||||
|
}
|
||||||
|
settings.setValue("SearchListColsWidth", width_list.join(" "));
|
||||||
|
qDebug("Search list columns width saved");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load columns width in a file that were saved previously
|
||||||
|
// (search list)
|
||||||
|
bool SearchTab::loadColWidthSearchList(){
|
||||||
|
qDebug("Loading columns width for search list");
|
||||||
|
QSettings settings("qBittorrent", "qBittorrent");
|
||||||
|
QString line = settings.value("SearchListColsWidth", QString()).toString();
|
||||||
|
if(line.isEmpty())
|
||||||
|
return false;
|
||||||
|
QStringList width_list = line.split(' ');
|
||||||
|
if(width_list.size() != SearchListModel->columnCount())
|
||||||
|
return false;
|
||||||
|
for(int i=0; i<width_list.size(); ++i){
|
||||||
|
resultsBrowser->header()->resizeSection(i, width_list.at(i).toInt());
|
||||||
|
}
|
||||||
|
qDebug("Search list columns width loaded");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
59
src/SearchTab.h
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SEARCH_TAB_H
|
||||||
|
#define SEARCH_TAB_H
|
||||||
|
|
||||||
|
#include "ui_search.h"
|
||||||
|
|
||||||
|
class SearchListDelegate;
|
||||||
|
class SearchEngine;
|
||||||
|
class QTreeView;
|
||||||
|
class QStandardItemModel;
|
||||||
|
|
||||||
|
class SearchTab : public QWidget, public Ui::search_engine
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVBoxLayout *box;
|
||||||
|
QLabel *results_lbl;
|
||||||
|
QTreeView *resultsBrowser;
|
||||||
|
QStandardItemModel *SearchListModel;
|
||||||
|
SearchListDelegate *SearchDelegate;
|
||||||
|
public:
|
||||||
|
SearchTab(SearchEngine *parent);
|
||||||
|
~SearchTab();
|
||||||
|
bool loadColWidthSearchList();
|
||||||
|
QLabel * getCurrentLabel();
|
||||||
|
QStandardItemModel * getCurrentSearchListModel();
|
||||||
|
QTreeView * getCurrentTreeView();
|
||||||
|
void setRowColor(int row, QString color);
|
||||||
|
protected slots:
|
||||||
|
void sortSearchList(int index);
|
||||||
|
void sortSearchListInt(int index, Qt::SortOrder sortOrder);
|
||||||
|
void sortSearchListString(int index, Qt::SortOrder sortOrder);
|
||||||
|
void saveColWidthSearchList() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
53
src/TrackersAdditionDlg.h
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRACKERSADDITION_H
|
||||||
|
#define TRACKERSADDITION_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QStringList>
|
||||||
|
#include "ui_trackersAdd.h"
|
||||||
|
|
||||||
|
class TrackersAddDlg : public QDialog, private Ui::TrackersAdditionDlg{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TrackersAddDlg(QWidget *parent): QDialog(parent){
|
||||||
|
setupUi(this);
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
|
~TrackersAddDlg(){}
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void TrackersToAdd(QStringList trackers);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void on_buttonBox_accepted() {
|
||||||
|
QStringList trackers = trackers_list->toPlainText().trimmed().split("\n");
|
||||||
|
if(trackers.size()) {
|
||||||
|
emit TrackersToAdd(trackers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -44,9 +44,9 @@ class about : public QDialog, private Ui::AboutDlg{
|
|||||||
// Thanks
|
// Thanks
|
||||||
te_thanks->append(QString::fromUtf8("<a name='top'></a>"));
|
te_thanks->append(QString::fromUtf8("<a name='top'></a>"));
|
||||||
te_thanks->append(QString::fromUtf8("<ul><li>I would like to thank sourceforge.net for hosting qBittorrent project.</li>"));
|
te_thanks->append(QString::fromUtf8("<ul><li>I would like to thank sourceforge.net for hosting qBittorrent project.</li>"));
|
||||||
te_thanks->append(QString::fromUtf8("<li>I am happy that Arnaud Demaizière joined the project as a programmer. His help is greatly appreciated</li>"));
|
te_thanks->append(QString::fromUtf8("<li>I am happy that Ishan Arora and Arnaud Demaizière are contributing to the project as developers. Their help is greatly appreciated</li>"));
|
||||||
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, webdevelopper and RPM packager, for his help.</li>"));
|
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, RPM packager, for his help and support.</li>"));
|
||||||
te_thanks->append(QString::fromUtf8("<li>I am gratefull to Peter Koeleman (peter@qbittorrent.org) who is helping port qBittorrent to Windows.</li>"));
|
te_thanks->append(QString::fromUtf8("<li>I am grateful to Peter Koeleman (peter@qbittorrent.org) who is helping port qBittorrent to Windows.</li>"));
|
||||||
te_thanks->append(QString::fromUtf8("<li>Thanks a lot to our graphist Mateusz Toboła (tobejodok@qbittorrent.org) for his great work.</li></ul><br><br>"));
|
te_thanks->append(QString::fromUtf8("<li>Thanks a lot to our graphist Mateusz Toboła (tobejodok@qbittorrent.org) for his great work.</li></ul><br><br>"));
|
||||||
te_thanks->scrollToAnchor(QString::fromUtf8("top"));
|
te_thanks->scrollToAnchor(QString::fromUtf8("top"));
|
||||||
// Translation
|
// Translation
|
||||||
@@ -56,13 +56,15 @@ class about : public QDialog, private Ui::AboutDlg{
|
|||||||
"<i>- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
|
"<i>- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
|
||||||
- <u>Bulgarian:</u> Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)<br>\
|
- <u>Bulgarian:</u> Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)<br>\
|
||||||
- <u>Catalan:</u> Gekko Dam Beer (gekko04@users.sourceforge.net)<br>\
|
- <u>Catalan:</u> Gekko Dam Beer (gekko04@users.sourceforge.net)<br>\
|
||||||
- <u>Chinese (Simplified):</u> Guo Yue (guoyue0418@hotmail.com)<br>\
|
- <u>Chinese (Simplified):</u> Guo Yue (yue.guo0418@gmail.com)<br>\
|
||||||
|
- <u>Chinese (Traditional):</u> Yi-Shun Wang (dnextstep@gmail.com)<br>\
|
||||||
|
- <u>Czech:</u> Jirka Vilim (web@tets.cz)<br>\
|
||||||
- <u>Danish:</u> Mathias Nielsen (comoneo@gmail.com)<br>\
|
- <u>Danish:</u> Mathias Nielsen (comoneo@gmail.com)<br>\
|
||||||
- <u>Dutch:</u> Joost Schipper (heavyjoost@users.sourceforge.net)<br>\
|
- <u>Dutch:</u> Joost Schipper (heavyjoost@users.sourceforge.net) and Peter Koeleman (peter@peerweb.nl)<br>\
|
||||||
- <u>Finnish:</u> Niklas Laxström (nikerabbit@users.sourceforge.net)<br>\
|
- <u>Finnish:</u> Niklas Laxström (nikerabbit@users.sourceforge.net)<br>\
|
||||||
- <u>German:</u> Niels Hoffmann (zentralmaschine@users.sourceforge.net)<br>\
|
- <u>German:</u> Niels Hoffmann (zentralmaschine@users.sourceforge.net)<br>\
|
||||||
- <u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)<br>\
|
- <u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)<br>\
|
||||||
- <u>Hungarian:</u> Majoros Péter (majoros.j.p@t-online.hu)<br>\
|
- <u>Hungarian:</u> Majoros Péter (majoros.peterj@gmail.com)<br>\
|
||||||
- <u>Italian:</u> Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)<br>\
|
- <u>Italian:</u> Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)<br>\
|
||||||
- <u>Japanese:</u> Nardog (nardog@e2umail.com)<br>\
|
- <u>Japanese:</u> Nardog (nardog@e2umail.com)<br>\
|
||||||
- <u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)<br>\
|
- <u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)<br>\
|
||||||
@@ -70,9 +72,9 @@ class about : public QDialog, private Ui::AboutDlg{
|
|||||||
- <u>Polish:</u> Jarek Smieja (ajep9691@wp.pl)<br>\
|
- <u>Polish:</u> Jarek Smieja (ajep9691@wp.pl)<br>\
|
||||||
- <u>Portuguese:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
|
- <u>Portuguese:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
|
||||||
- <u>Romanian:</u> Obada Denis (obadadenis@users.sourceforge.net)<br>\
|
- <u>Romanian:</u> Obada Denis (obadadenis@users.sourceforge.net)<br>\
|
||||||
- <u>Russian:</u> Nick Khazov (m2k3d0n at users.sourceforge.net)<br>\
|
- <u>Russian:</u> Nick Khazov (m2k3d0n@users.sourceforge.net) and Alexey Morsov (samurai@ricom.ru)<br>\
|
||||||
- <u>Slovak:</u> helix84<br>\
|
- <u>Slovak:</u> helix84<br>\
|
||||||
- <u>Spanish:</u> Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net)<br>\
|
- <u>Spanish:</u> Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net) and Gabriel de Oliveira (deadloop@hotmail.com)<br>\
|
||||||
- <u>Swedish:</u> Daniel Nylander (po@danielnylander.se)<br>\
|
- <u>Swedish:</u> Daniel Nylander (po@danielnylander.se)<br>\
|
||||||
- <u>Turkish:</u> Erdem Bingöl (erdem84@gmail.com)<br>\
|
- <u>Turkish:</u> Erdem Bingöl (erdem84@gmail.com)<br>\
|
||||||
- <u>Ukrainian:</u> Andrey Shpachenko (masterfix@users.sourceforge.net)<br><br>"));
|
- <u>Ukrainian:</u> Andrey Shpachenko (masterfix@users.sourceforge.net)<br><br>"));
|
||||||
|
|||||||
@@ -5,20 +5,14 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>440</width>
|
<width>511</width>
|
||||||
<height>389</height>
|
<height>441</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle" >
|
<property name="windowTitle" >
|
||||||
<string>Torrent addition dialog</string>
|
<string>Torrent addition dialog</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" >
|
<layout class="QVBoxLayout" >
|
||||||
<property name="margin" >
|
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing" >
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="fileNameLbl" >
|
<widget class="QLabel" name="fileNameLbl" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
@@ -48,12 +42,21 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" >
|
<layout class="QHBoxLayout" >
|
||||||
<property name="margin" >
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing" >
|
<property name="spacing" >
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLineEdit" name="savePathTxt" />
|
<widget class="QLineEdit" name="savePathTxt" />
|
||||||
</item>
|
</item>
|
||||||
@@ -92,6 +95,50 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" >
|
||||||
|
<item>
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="collapseAllButton" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Collapse all</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="expandAllButton" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Expand All</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkIncrementalDL" >
|
<widget class="QCheckBox" name="checkIncrementalDL" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
@@ -108,12 +155,21 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" >
|
<layout class="QHBoxLayout" >
|
||||||
<property name="margin" >
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing" >
|
<property name="spacing" >
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<spacer>
|
<spacer>
|
||||||
<property name="orientation" >
|
<property name="orientation" >
|
||||||
|
|||||||
@@ -157,13 +157,13 @@ class BandwidthAllocationDialog : public QDialog, private Ui_bandwidth_dlg {
|
|||||||
s->set_upload_rate_limit(-1);
|
s->set_upload_rate_limit(-1);
|
||||||
else
|
else
|
||||||
s->set_upload_rate_limit(val*1024);
|
s->set_upload_rate_limit(val*1024);
|
||||||
settings.setValue(QString::fromUtf8("Options/Main/UPLimit"), val);
|
settings.setValue(QString::fromUtf8("Preferences/Connection/GlobalUPLimit"), val);
|
||||||
}else{
|
}else{
|
||||||
if(!val)
|
if(!val)
|
||||||
s->set_download_rate_limit(-1);
|
s->set_download_rate_limit(-1);
|
||||||
else
|
else
|
||||||
s->set_download_rate_limit(val*1024);
|
s->set_download_rate_limit(val*1024);
|
||||||
settings.setValue(QString::fromUtf8("Options/Main/DLLimit"), val);
|
settings.setValue(QString::fromUtf8("Preferences/Connection/GlobalDLLimit"), val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
|
|||||||