Compare commits
381 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e67fddab50 | ||
|
|
d6ca454bad | ||
|
|
e7581df394 | ||
|
|
65d763b30b | ||
|
|
16798879b9 | ||
|
|
74ce8fc87e | ||
|
|
7dde3423f7 | ||
|
|
4a960a289e | ||
|
|
aad78a92f6 | ||
|
|
edaad3f605 | ||
|
|
6ef317da16 | ||
|
|
4ba084e7d5 | ||
|
|
6732d2e3de | ||
|
|
8e5f0404a8 | ||
|
|
080965f0e5 | ||
|
|
cd9b6ec54e | ||
|
|
e01a87e644 | ||
|
|
e0cba78dac | ||
|
|
22ff0374d5 | ||
|
|
813f52f452 | ||
|
|
2dd376a5b1 | ||
|
|
16832d52c0 | ||
|
|
d128b734b0 | ||
|
|
9a300db87a | ||
|
|
54bfb7cda9 | ||
|
|
c6698cbf5a | ||
|
|
4c8ecf5459 | ||
|
|
aa18f19ab7 | ||
|
|
1a2fdc259c | ||
|
|
3ae783e9cb | ||
|
|
83cac18690 | ||
|
|
3b09203937 | ||
|
|
5c3f2f0aed | ||
|
|
e0ef409220 | ||
|
|
a12621e1c0 | ||
|
|
d9199ce836 | ||
|
|
d78a47ad30 | ||
|
|
60c3ccac7f | ||
|
|
1fbf7d42a1 | ||
|
|
4b73172105 | ||
|
|
ada5d2665b | ||
|
|
f1ca41a5c5 | ||
|
|
17e0700a52 | ||
|
|
cc77b2f578 | ||
|
|
85463e3910 | ||
|
|
7bd0dff802 | ||
|
|
4bc043146d | ||
|
|
fd78e0b5ce | ||
|
|
8565f1e61e | ||
|
|
4c6d6a35f3 | ||
|
|
fc79b7dc56 | ||
|
|
da11488ba1 | ||
|
|
968c3e1c3e | ||
|
|
68e30de763 | ||
|
|
573f00c66c | ||
|
|
ae81dbe088 | ||
|
|
2edbe66d91 | ||
|
|
f9f912906e | ||
|
|
7b4eee7a7d | ||
|
|
e799ac57ed | ||
|
|
30c93b9a4a | ||
|
|
03dc617874 | ||
|
|
bc29577a7b | ||
|
|
5509e94778 | ||
|
|
89330e11de | ||
|
|
c016c4bf66 | ||
|
|
3f1081b621 | ||
|
|
e3ae03c8a8 | ||
|
|
fbe292d06e | ||
|
|
1d294e43f1 | ||
|
|
d883ef27be | ||
|
|
be934837e5 | ||
|
|
956f97f6d6 | ||
|
|
de38ca3e23 | ||
|
|
1efaea46e3 | ||
|
|
2694a0947f | ||
|
|
f61d9d23f5 | ||
|
|
60dda258b3 | ||
|
|
c79a4a746f | ||
|
|
942b579d8e | ||
|
|
93bc6dca95 | ||
|
|
f36052351c | ||
|
|
d40c646561 | ||
|
|
9412ced722 | ||
|
|
7037b53ff8 | ||
|
|
adc72fb9a6 | ||
|
|
f0ca99ed6c | ||
|
|
e443aa75b7 | ||
|
|
282d0a4af6 | ||
|
|
25adf6b061 | ||
|
|
88f0ffe86d | ||
|
|
c786c42bb1 | ||
|
|
36bc2e96ba | ||
|
|
f9bf485ed7 | ||
|
|
c18103539c | ||
|
|
727f59f73f | ||
|
|
5d2d1dfa94 | ||
|
|
cf694d14f3 | ||
|
|
ec24fe2f49 | ||
|
|
a0b4e54410 | ||
|
|
c97bce4d61 | ||
|
|
afbfe1a96d | ||
|
|
2651ec5f0b | ||
|
|
330905da5e | ||
|
|
4c6359276c | ||
|
|
ff1fc527e0 | ||
|
|
d79cb6b66e | ||
|
|
0ac2554060 | ||
|
|
1d31e049a4 | ||
|
|
d5a4794610 | ||
|
|
29886acc01 | ||
|
|
f1ed7f06b9 | ||
|
|
a848538d66 | ||
|
|
b58046b1fc | ||
|
|
fe95e90e05 | ||
|
|
1544300616 | ||
|
|
028041f874 | ||
|
|
81f2d7ee4a | ||
|
|
66874fbd2f | ||
|
|
f47b3be0be | ||
|
|
87eee7029d | ||
|
|
713c80451e | ||
|
|
60889cac79 | ||
|
|
d398679c7e | ||
|
|
2e5330e54b | ||
|
|
1499138b9b | ||
|
|
2433a87445 | ||
|
|
d0de11909f | ||
|
|
3f5340523f | ||
|
|
cc5015773b | ||
|
|
cd260198f9 | ||
|
|
71e3061c18 | ||
|
|
6369401150 | ||
|
|
fa05441e74 | ||
|
|
81aac9ebcc | ||
|
|
7a1af536b6 | ||
|
|
45efcfce13 | ||
|
|
cddc3a0a43 | ||
|
|
c38a8a2bec | ||
|
|
1225d16413 | ||
|
|
384f3b23ee | ||
|
|
a3cfa6bba1 | ||
|
|
51638eddcc | ||
|
|
41c6a847b9 | ||
|
|
d57062a45a | ||
|
|
32f478a8c2 | ||
|
|
61dae1444b | ||
|
|
8ed40cc856 | ||
|
|
941b8c8d2a | ||
|
|
4f2a2dfab9 | ||
|
|
4a6ab376af | ||
|
|
1e37858cc4 | ||
|
|
668268b6b5 | ||
|
|
cfcd9b7eaf | ||
|
|
6a3dddd0cc | ||
|
|
dfb2046f82 | ||
|
|
3ae55b6a6f | ||
|
|
7e53d23e33 | ||
|
|
ce2294ee96 | ||
|
|
14646d0f9e | ||
|
|
717a4b00e1 | ||
|
|
fca3b66a25 | ||
|
|
1a861ef240 | ||
|
|
1590d9a98f | ||
|
|
112bcd7255 | ||
|
|
af29228cc9 | ||
|
|
b8c79e0b5f | ||
|
|
0d078f660a | ||
|
|
e7f89f256a | ||
|
|
cb693a0795 | ||
|
|
7b57345c4f | ||
|
|
90879386d5 | ||
|
|
3678aa4d23 | ||
|
|
e497789ec7 | ||
|
|
2134d404a5 | ||
|
|
e0707f6907 | ||
|
|
816f35cbab | ||
|
|
a73d3132df | ||
|
|
368c122dce | ||
|
|
c41d17043c | ||
|
|
3c17a1410b | ||
|
|
078110851d | ||
|
|
70725bdfe2 | ||
|
|
3c0a610a34 | ||
|
|
d5b74eecd0 | ||
|
|
1faf183c73 | ||
|
|
a1773a7cfd | ||
|
|
1af3515b00 | ||
|
|
70e2a5d3b3 | ||
|
|
78409570a9 | ||
|
|
5133931302 | ||
|
|
8326cebf5c | ||
|
|
ab46f11af2 | ||
|
|
91acb1a6ec | ||
|
|
c721fad54b | ||
|
|
2aea2a0032 | ||
|
|
3164337c3c | ||
|
|
b984c309ff | ||
|
|
cfbd06225b | ||
|
|
b0a0abd764 | ||
|
|
9618056b4e | ||
|
|
8b40e43432 | ||
|
|
01bc15d3f4 | ||
|
|
3282e1bcc9 | ||
|
|
e5b6a5605a | ||
|
|
9b67807926 | ||
|
|
f3729fbae6 | ||
|
|
0538c9c3e8 | ||
|
|
53a0e85b8d | ||
|
|
453dd93abf | ||
|
|
669cc2395a | ||
|
|
82706141cf | ||
|
|
c536f24d55 | ||
|
|
764b4e72ca | ||
|
|
19dd21062b | ||
|
|
2d24b468b6 | ||
|
|
2dc75cb98d | ||
|
|
5e3be25916 | ||
|
|
49e8bad7cc | ||
|
|
796aea19e6 | ||
|
|
dd35f1723b | ||
|
|
0177e1fee4 | ||
|
|
949eb2b5f5 | ||
|
|
2d59fe37bf | ||
|
|
b6f81c199e | ||
|
|
c2964dc340 | ||
|
|
8aebb93424 | ||
|
|
96c38f7be4 | ||
|
|
cf2abe45de | ||
|
|
88ac8adb30 | ||
|
|
b331478179 | ||
|
|
bfaa82ccba | ||
|
|
77f407724d | ||
|
|
2f5c2e6404 | ||
|
|
fbb2cdd1a9 | ||
|
|
63a4e06556 | ||
|
|
3d934b4a9c | ||
|
|
697c275d83 | ||
|
|
25b9601613 | ||
|
|
276dfd9df6 | ||
|
|
19f05f0a97 | ||
|
|
293aaefefe | ||
|
|
57cdf4ebd1 | ||
|
|
c4a0c8f100 | ||
|
|
306991e776 | ||
|
|
de2384e4a7 | ||
|
|
236dbcfb4a | ||
|
|
a1b133d883 | ||
|
|
4f8825e371 | ||
|
|
1aa0936c91 | ||
|
|
d5e22c523e | ||
|
|
6618e61a42 | ||
|
|
26283ec228 | ||
|
|
ed12f5c77e | ||
|
|
8e074a571a | ||
|
|
e2c7c973fd | ||
|
|
eec04761ef | ||
|
|
f73256e0ea | ||
|
|
fec1de6383 | ||
|
|
db35a7efb8 | ||
|
|
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 |
16
AUTHORS
@@ -6,6 +6,11 @@ Contributors:
|
|||||||
* Ishan Arora <ishan@qbittorrent.org>
|
* Ishan Arora <ishan@qbittorrent.org>
|
||||||
* Grigis Gaëtan <cipher16@gmail.com>
|
* Grigis Gaëtan <cipher16@gmail.com>
|
||||||
|
|
||||||
|
Code from other projects:
|
||||||
|
* files src/ico.cpp src/ico.h
|
||||||
|
copyright: Malte Starostik <malte@kde.org>
|
||||||
|
license: LGPL
|
||||||
|
|
||||||
Images Authors:
|
Images Authors:
|
||||||
* files: src/Icons/*.png
|
* files: src/Icons/*.png
|
||||||
copyright: Gnome Icon Theme
|
copyright: Gnome Icon Theme
|
||||||
@@ -17,13 +22,14 @@ Images Authors:
|
|||||||
license: Creative Commons Public Domain Dedication
|
license: Creative Commons Public Domain Dedication
|
||||||
url: http://www.openclipart.org
|
url: http://www.openclipart.org
|
||||||
|
|
||||||
* files: src/Icons/skins/*.png
|
* files: src/Icons/skin/*.png
|
||||||
|
files: src/menuicons/YYxYY/*.png
|
||||||
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||||
license: GPLv2
|
license: GPLv2
|
||||||
|
|
||||||
* files: src/menuicons/YYxYY/*.png
|
* file: src/Icons/skin/tabs.gif
|
||||||
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
copyright: Greg Houston <gregory.houston@gmail.com>
|
||||||
license: GPLv2
|
license: MIT
|
||||||
|
|
||||||
* file: src/search_engine/engines/btjunkie.png
|
* file: src/search_engine/engines/btjunkie.png
|
||||||
copyright: Downloaded from btjunkie.org
|
copyright: Downloaded from btjunkie.org
|
||||||
@@ -46,7 +52,7 @@ Translations authors:
|
|||||||
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
||||||
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
||||||
- Catalan: Gekko Dam Beer (gekko04@users.sourceforge.net)
|
- Catalan: Gekko Dam Beer (gekko04@users.sourceforge.net)
|
||||||
- Chinese (Simplified): Guo Yue (guoyue0418@hotmail.com)
|
- Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
|
||||||
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
||||||
- Czech: Jirka Vilim (web@tets.cz)
|
- Czech: Jirka Vilim (web@tets.cz)
|
||||||
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
||||||
|
|||||||
14
COPYING
@@ -1,3 +1,17 @@
|
|||||||
|
qBittorrent is licensed under the GNU General Public License version 2 with the
|
||||||
|
addition of the following special exception:
|
||||||
|
|
||||||
|
In addition, as a special exception, the copyright holders give permission to
|
||||||
|
link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
|
|||||||
75
Changelog
@@ -1,3 +1,78 @@
|
|||||||
|
* Sun Apr 5 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.3.3
|
||||||
|
- BUGFIX: Fixed Web UI torrent upload form
|
||||||
|
- BUGFIX: Fixed unicode support in search engine
|
||||||
|
- BUGFIX: Fixed search engine bug that prevented a torrent from appearing more than once among all tabs
|
||||||
|
- LICENSE: Added an exception to the license regarding OpenSSL.
|
||||||
|
- I18N: Updated Finnish translation
|
||||||
|
|
||||||
|
* Sat Mar 7 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.3.2
|
||||||
|
- BUGFIX: Fix top toolbar disabling
|
||||||
|
- BUGFIX: Fix building with Qt 4.5
|
||||||
|
- BUGFIX: RSS items read status is now remembered upon restart
|
||||||
|
|
||||||
|
* Mon Jan 26 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.3.1
|
||||||
|
- BUGFIX: Torrents paused due to an I/O error were displayed as queued
|
||||||
|
- BUGFIX: qBittorrent now prints backtrace in terminal when segfaulting
|
||||||
|
- BUGFIX: Fixed files progress display in torrent properties
|
||||||
|
- BUGFIX: Improved torrent ratio calculation
|
||||||
|
- BUGFIX: Fixed possible crash when parsing filter file
|
||||||
|
- BUGFIX: Made some code optimization
|
||||||
|
- BUGFIX: Fixed download/upload speed decrease problems
|
||||||
|
- I18N: Updated Finnish, Bulgarian and Greek translations
|
||||||
|
|
||||||
|
* Fri Jan 9 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.3.0
|
||||||
|
- FEATURE: Based on libtorrent-rasterbar v0.14.2
|
||||||
|
- FEATURE: Improved ratio calculation system
|
||||||
|
- FEATURE: Torrent creation code cleanup
|
||||||
|
- FEATURE: Allow to set maximum number of active seeds (queueing)
|
||||||
|
- FEATURE: Now seeds priorities are handled automatically by libtorrent-rasterbar (queueing)
|
||||||
|
- FEATURE: Code cleanup and optimization (save memory and cpu)
|
||||||
|
- FEATURE: ETA calculation now relies on average speed over all sessions
|
||||||
|
- FEATURE: Allow to force rechecking torrents
|
||||||
|
- FEATURE: Added support for 2 new extensions (uTorrent metadata and smart ban plugin)
|
||||||
|
- FEATURE: Allow to change the save path of torrents after addition
|
||||||
|
- FEATURE: Got rid of libmagick++ dependency
|
||||||
|
- FEATURE: Updated Web interface to MochaUI v0.9.5
|
||||||
|
- FEATURE: Added notification in WebUI when qBittorrent is not reachable
|
||||||
|
- FEATURE: Rewrote folder scanning code (Now uses a filesystem watcher)
|
||||||
|
- FEATURE: Added torrent deletion from hard drive function in Web UI
|
||||||
|
- FEATURE: Added queueing priority actions in Web UI
|
||||||
|
- FEATURE: Display progress using progress bars in Web UI
|
||||||
|
- BUGFIX: Made usage of fastresume data more reliable
|
||||||
|
- BUGFIX: qBittorrent shutdown is now faster
|
||||||
|
- BUGFIX: Fixed several memory leaks
|
||||||
|
- BUGFIX: WebUI is now working with IE7
|
||||||
|
- BUGFIX: Fixed spacing problem in toolbar when toggling its visibility
|
||||||
|
- BUGFIX: Fixed some compilation and Qt4 warnings
|
||||||
|
- BUGFIX: Do not use an addition dialog for torrents from folder scanning
|
||||||
|
- BUGFIX: Catch SIGTERM to exit cleanly (e.g. computer shutdown)
|
||||||
|
- BUGFIX: Improved proxy support code
|
||||||
|
- BUGFIX: Fixed systray icon tooltip on Windows
|
||||||
|
- BUGFIX: Proxy settings are now saved even if disabled
|
||||||
|
|
||||||
|
* Sun Nov 9 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.2.1
|
||||||
|
- BUGFIX: Fixed possible crash when deleting a torrent permanently
|
||||||
|
- BUGFIX: Queued_for_checking torrents were not displayed as checking in seeding list
|
||||||
|
- BUGFIX: Speed up startup time when having a lot of torrents
|
||||||
|
|
||||||
|
* Wed Oct 29th 2008 - 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 and properties dialogs
|
||||||
|
- 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
|
||||||
|
- BUGFIX: Torrents are no longer starting from scratch when changing default save path (when torrent addition dialog is disabled)
|
||||||
|
- BUGFIX: Single instance code is now more reliable on Qt >= 4.4
|
||||||
|
- 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
|
* Sun Sept 14 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.4
|
||||||
- FEATURE: DHT is no longer used as fallback only
|
- FEATURE: DHT is no longer used as fallback only
|
||||||
- FEATURE: Ported WebUI to Mootools v1.2
|
- FEATURE: Ported WebUI to Mootools v1.2
|
||||||
|
|||||||
3
INSTALL
@@ -17,7 +17,8 @@ Dependencies:
|
|||||||
- Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
- Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
||||||
Qt >= 4.4.0 is advised
|
Qt >= 4.4.0 is advised
|
||||||
|
|
||||||
- libtorrent-rasterbar by Arvid Norberg (>= v0.13.1 REQUIRED)
|
- libtorrent-rasterbar by Arvid Norberg (>= v0.14.0 REQUIRED)
|
||||||
|
-> http://www.qbittorrent.org/download.php (advised)
|
||||||
-> http://www.libtorrent.net
|
-> http://www.libtorrent.net
|
||||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||||
|
|
||||||
|
|||||||
31
TODO
@@ -1,22 +1,21 @@
|
|||||||
See https://blueprints.launchpad.net/qbittorrent/
|
See https://blueprints.launchpad.net/qbittorrent/
|
||||||
|
|
||||||
Translations updated in v1.1.0:
|
// translations done in v1.3.0
|
||||||
- French
|
|
||||||
- Chinese
|
|
||||||
- Polish
|
|
||||||
- Portuguese
|
|
||||||
- Brazilian
|
|
||||||
- Slovak
|
|
||||||
- Swedish
|
|
||||||
- Romanian
|
- Romanian
|
||||||
- Finnish
|
- Russian
|
||||||
- Italian
|
|
||||||
- Turkish
|
|
||||||
- Korean
|
|
||||||
- Hungarian
|
- Hungarian
|
||||||
- German
|
- German
|
||||||
- Spanish
|
- Chinese (traditional)
|
||||||
- Russian
|
- Chinese (simplified)
|
||||||
- Dutch
|
- Italian
|
||||||
- Bulgarian
|
- Swedish
|
||||||
|
- Turkish
|
||||||
|
- French
|
||||||
|
- Slovak
|
||||||
|
- Czech
|
||||||
|
- Korean
|
||||||
|
- Portuguese
|
||||||
|
- Brazilian
|
||||||
- Greek
|
- Greek
|
||||||
|
- Bulgarian
|
||||||
|
- Finnish
|
||||||
|
|||||||
113
configure
vendored
@@ -26,9 +26,6 @@ Dependency options:
|
|||||||
--with-libboost-inc=[path] Path to libboost include files
|
--with-libboost-inc=[path] Path to libboost include files
|
||||||
--with-libcurl-inc=[path] Path to libcurl include files
|
--with-libcurl-inc=[path] Path to libcurl include files
|
||||||
--with-libcurl-lib=[path] Path to libcurl library files
|
--with-libcurl-lib=[path] Path to libcurl library files
|
||||||
--disable-libmagick Disable use of libmagick
|
|
||||||
--with-libmagick-inc=[path] Path to libmagick++ include files
|
|
||||||
--with-libmagick-lib=[path] Path to libmagick++ library files
|
|
||||||
--disable-libzzip Disable use of libzzip
|
--disable-libzzip Disable use of libzzip
|
||||||
--with-libzzip-inc=[path] Path to libzzip++ include files
|
--with-libzzip-inc=[path] Path to libzzip++ include files
|
||||||
--with-libzzip-lib=[path] Path to libzzip++ library files
|
--with-libzzip-lib=[path] Path to libzzip++ library files
|
||||||
@@ -178,21 +175,6 @@ while [ $# -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--disable-libmagick)
|
|
||||||
QC_DISABLE_libmagick="Y"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
|
|
||||||
--with-libmagick-inc=*)
|
|
||||||
QC_WITH_LIBMAGICK_INC=$optarg
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
|
|
||||||
--with-libmagick-lib=*)
|
|
||||||
QC_WITH_LIBMAGICK_LIB=$optarg
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
|
|
||||||
--disable-libzzip)
|
--disable-libzzip)
|
||||||
QC_DISABLE_libzzip="Y"
|
QC_DISABLE_libzzip="Y"
|
||||||
shift
|
shift
|
||||||
@@ -235,9 +217,6 @@ 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_LIBCURL_INC=$QC_WITH_LIBCURL_INC
|
echo QC_WITH_LIBCURL_INC=$QC_WITH_LIBCURL_INC
|
||||||
echo QC_WITH_LIBCURL_LIB=$QC_WITH_LIBCURL_LIB
|
echo QC_WITH_LIBCURL_LIB=$QC_WITH_LIBCURL_LIB
|
||||||
echo QC_DISABLE_libmagick=$QC_DISABLE_libmagick
|
|
||||||
echo QC_WITH_LIBMAGICK_INC=$QC_WITH_LIBMAGICK_INC
|
|
||||||
echo QC_WITH_LIBMAGICK_LIB=$QC_WITH_LIBMAGICK_LIB
|
|
||||||
echo QC_DISABLE_libzzip=$QC_DISABLE_libzzip
|
echo QC_DISABLE_libzzip=$QC_DISABLE_libzzip
|
||||||
echo QC_WITH_LIBZZIP_INC=$QC_WITH_LIBZZIP_INC
|
echo QC_WITH_LIBZZIP_INC=$QC_WITH_LIBZZIP_INC
|
||||||
echo QC_WITH_LIBZZIP_LIB=$QC_WITH_LIBZZIP_LIB
|
echo QC_WITH_LIBZZIP_LIB=$QC_WITH_LIBZZIP_LIB
|
||||||
@@ -376,13 +355,13 @@ class qc_libtorrent_rasterbar : public ConfObj
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "libtorrent-rasterbar >= 0.13"; }
|
QString name() const { return "libtorrent-rasterbar >= 0.14"; }
|
||||||
QString shortname() const { return "libtorrent-rasterbar"; }
|
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");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!conf->checkHeader(s, "libtorrent/lsd.hpp")) {
|
if(!conf->checkHeader(s, "libtorrent/magnet_uri.hpp")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -391,7 +370,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, "libtorrent/lsd.hpp")){
|
if(conf->checkHeader(s, "libtorrent/magnet_uri.hpp")){
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -553,86 +532,6 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#line 1 "libmagick.qcm"
|
|
||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: libmagick
|
|
||||||
arg: with-libmagick-inc=[path], Path to libmagick++ include files
|
|
||||||
arg: with-libmagick-lib=[path], Path to libmagick++ library files
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
#include <QProcess>
|
|
||||||
class qc_libmagick : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_libmagick(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "ImageMagick library (libmagick++)"; }
|
|
||||||
QString shortname() const { return "libmagick++"; }
|
|
||||||
QString checkString() const {
|
|
||||||
if(!conf->getenv("QC_DISABLE_libmagick").isEmpty())
|
|
||||||
return "";
|
|
||||||
return ConfObj::checkString();
|
|
||||||
}
|
|
||||||
bool exec(){
|
|
||||||
if(!conf->getenv("QC_DISABLE_libmagick").isEmpty())
|
|
||||||
return false;
|
|
||||||
QString s;
|
|
||||||
s = conf->getenv("QC_WITH_LIBMAGICK_INC");
|
|
||||||
if(!s.isEmpty()) {
|
|
||||||
if(!conf->checkHeader(s, "Magick++.h")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
QStringList sl;
|
|
||||||
sl << "/usr/include";
|
|
||||||
sl << "/usr/local/include";
|
|
||||||
bool found = false;
|
|
||||||
foreach(s, sl){
|
|
||||||
if(conf->checkHeader(s, "Magick++.h")){
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
conf->addIncludePath(s);
|
|
||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBMAGICK_LIB");
|
|
||||||
if(!s.isEmpty()) {
|
|
||||||
if(!conf->checkLibrary(s, "Magick++")) {
|
|
||||||
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(conf->checkLibrary(s, "Magick++")) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
conf->addLib(QString("-L") + s);
|
|
||||||
QProcess magickConfig;
|
|
||||||
QStringList params;
|
|
||||||
params << "--libs";
|
|
||||||
magickConfig.start("Magick++-config", params, QIODevice::ReadOnly);
|
|
||||||
magickConfig.waitForStarted();
|
|
||||||
magickConfig.waitForFinished();
|
|
||||||
QByteArray result = magickConfig.readAll();
|
|
||||||
result = result.replace("\n", "");
|
|
||||||
conf->addLib(result.data());
|
|
||||||
conf->addDefine("HAVE_MAGICK");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#line 1 "libzzip.qcm"
|
#line 1 "libzzip.qcm"
|
||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
@@ -720,9 +619,6 @@ cat >$1/modules_new.cpp <<EOT
|
|||||||
o = new qc_libcurl(conf);
|
o = new qc_libcurl(conf);
|
||||||
o->required = true;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_libmagick(conf);
|
|
||||||
o->required = false;
|
|
||||||
o->disabled = false;
|
|
||||||
o = new qc_libzzip(conf);
|
o = new qc_libzzip(conf);
|
||||||
o->required = false;
|
o->required = false;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
@@ -1677,9 +1573,6 @@ export QC_WITH_LIBTORRENT_STATIC_LIB
|
|||||||
export QC_WITH_LIBBOOST_INC
|
export QC_WITH_LIBBOOST_INC
|
||||||
export QC_WITH_LIBCURL_INC
|
export QC_WITH_LIBCURL_INC
|
||||||
export QC_WITH_LIBCURL_LIB
|
export QC_WITH_LIBCURL_LIB
|
||||||
export QC_DISABLE_libmagick
|
|
||||||
export QC_WITH_LIBMAGICK_INC
|
|
||||||
export QC_WITH_LIBMAGICK_LIB
|
|
||||||
export QC_DISABLE_libzzip
|
export QC_DISABLE_libzzip
|
||||||
export QC_WITH_LIBZZIP_INC
|
export QC_WITH_LIBZZIP_INC
|
||||||
export QC_WITH_LIBZZIP_LIB
|
export QC_WITH_LIBZZIP_LIB
|
||||||
|
|||||||
@@ -15,6 +15,5 @@
|
|||||||
<dep type='libcurl'>
|
<dep type='libcurl'>
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='libmagick'/>
|
|
||||||
<dep type='libzzip'/>
|
<dep type='libzzip'/>
|
||||||
</qconf>
|
</qconf>
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: libcommoncpp2
|
|
||||||
arg: with-libcommoncpp2-inc=[path], Path to libcommoncpp2 include files
|
|
||||||
arg: with-libcommoncpp2-lib=[path], Path to libcommoncpp2 library files
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
class qc_libcommoncpp2 : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_libcommoncpp2(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "GNU Common C++ library (libcommoncpp2)"; }
|
|
||||||
QString shortname() const { return "libcommoncpp2"; }
|
|
||||||
bool exec(){
|
|
||||||
QString s;
|
|
||||||
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_INC");
|
|
||||||
if(!s.isEmpty()) {
|
|
||||||
if(!conf->checkHeader(s, "cc++/url.h")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
QStringList sl;
|
|
||||||
sl << "/usr/include";
|
|
||||||
sl << "/usr/local/include";
|
|
||||||
bool found = false;
|
|
||||||
foreach(s, sl){
|
|
||||||
if(conf->checkHeader(s, "cc++/url.h")){
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
conf->addIncludePath(s);
|
|
||||||
|
|
||||||
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_LIB");
|
|
||||||
if(!s.isEmpty()) {
|
|
||||||
if(!QFile::exists(s+QString("/libccext2.so")))
|
|
||||||
return false;
|
|
||||||
if(!QFile::exists(s+QString("/libccgnu2.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("libccext2.so"))){
|
|
||||||
if(QFile::exists(s+QString("libccgnu2.so"))){
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found) return false;
|
|
||||||
conf->addLib(QString("-L") + s);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -6,17 +6,18 @@ arg: with-libtorrent-lib=[path], Path to libtorrent-rasterbar library files
|
|||||||
arg: with-libtorrent-static-lib=[path], Path to libtorrent-rasterbar .a file
|
arg: with-libtorrent-static-lib=[path], Path to libtorrent-rasterbar .a file
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
|
// see Conf::findPkgConfig
|
||||||
class qc_libtorrent_rasterbar : public ConfObj
|
class qc_libtorrent_rasterbar : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "libtorrent-rasterbar >= 0.13"; }
|
QString name() const { return "libtorrent-rasterbar >= 0.14"; }
|
||||||
QString shortname() const { return "libtorrent-rasterbar"; }
|
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");
|
||||||
if(!s.isEmpty()) {
|
if(!s.isEmpty()) {
|
||||||
if(!conf->checkHeader(s, "libtorrent/lsd.hpp")) {
|
if(!conf->checkHeader(s, "libtorrent/magnet_uri.hpp")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -25,7 +26,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, "libtorrent/lsd.hpp")){
|
if(conf->checkHeader(s, "libtorrent/magnet_uri.hpp")){
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -40,7 +49,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
|
||||||
@@ -71,7 +81,10 @@ class DLListDelegate: public QItemDelegate {
|
|||||||
case RATIO:{
|
case RATIO:{
|
||||||
QItemDelegate::drawBackground(painter, opt, index);
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
double ratio = index.data().toDouble();
|
double ratio = index.data().toDouble();
|
||||||
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
if(ratio > 100.)
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString::fromUtf8("∞"));
|
||||||
|
else
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROGRESS:{
|
case PROGRESS:{
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -63,7 +72,10 @@ class FinishedListDelegate: public QItemDelegate {
|
|||||||
case F_RATIO:{
|
case F_RATIO:{
|
||||||
QItemDelegate::drawBackground(painter, opt, index);
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
double ratio = index.data().toDouble();
|
double ratio = index.data().toDouble();
|
||||||
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
if(ratio > 100.)
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString::fromUtf8("∞"));
|
||||||
|
else
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
#include "FinishedTorrents.h"
|
#include "FinishedTorrents.h"
|
||||||
@@ -37,7 +46,6 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
|||||||
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)));
|
|
||||||
finishedListModel = new QStandardItemModel(0,6);
|
finishedListModel = new QStandardItemModel(0,6);
|
||||||
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"));
|
||||||
@@ -61,7 +69,6 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
|||||||
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);
|
finishedList->header()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
connect(finishedList->header(), SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedHoSMenu(const QPoint&)));
|
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&)));
|
||||||
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")));
|
||||||
@@ -76,6 +83,7 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
|||||||
connect(actionOpen_destination_folder, SIGNAL(triggered()), (GUI*)parent, SLOT(openDestinationFolder()));
|
connect(actionOpen_destination_folder, SIGNAL(triggered()), (GUI*)parent, SLOT(openDestinationFolder()));
|
||||||
connect(actionBuy_it, SIGNAL(triggered()), (GUI*)parent, SLOT(goBuyPage()));
|
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(actionForce_recheck, SIGNAL(triggered()), this, SLOT(forceRecheck()));
|
||||||
|
|
||||||
connect(actionHOSColName, SIGNAL(triggered()), this, SLOT(hideOrShowColumnName()));
|
connect(actionHOSColName, SIGNAL(triggered()), this, SLOT(hideOrShowColumnName()));
|
||||||
connect(actionHOSColSize, SIGNAL(triggered()), this, SLOT(hideOrShowColumnSize()));
|
connect(actionHOSColSize, SIGNAL(triggered()), this, SLOT(hideOrShowColumnSize()));
|
||||||
@@ -98,9 +106,6 @@ void FinishedTorrents::notifyTorrentDoubleClicked(const QModelIndex& index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::addTorrent(QString hash){
|
void FinishedTorrents::addTorrent(QString hash){
|
||||||
if(!BTSession->isFinished(hash)){
|
|
||||||
BTSession->setFinishedTorrent(hash);
|
|
||||||
}
|
|
||||||
int row = getRowFromHash(hash);
|
int row = getRowFromHash(hash);
|
||||||
if(row != -1) return;
|
if(row != -1) return;
|
||||||
row = finishedListModel->rowCount();
|
row = finishedListModel->rowCount();
|
||||||
@@ -123,16 +128,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);
|
||||||
|
// Sort List
|
||||||
sortFinishedList();
|
sortFinishedList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::torrentAdded(QString, QTorrentHandle& h, bool) {
|
|
||||||
QString hash = h.hash();
|
|
||||||
if(BTSession->isFinished(hash)) {
|
|
||||||
addTorrent(hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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){
|
||||||
unsigned int nbColumns = finishedListModel->columnCount()-1;
|
unsigned int nbColumns = finishedListModel->columnCount()-1;
|
||||||
@@ -143,9 +142,8 @@ void FinishedTorrents::setRowColor(int row, QString color){
|
|||||||
|
|
||||||
QStringList FinishedTorrents::getSelectedTorrents(bool only_one) const{
|
QStringList FinishedTorrents::getSelectedTorrents(bool only_one) const{
|
||||||
QStringList res;
|
QStringList res;
|
||||||
QModelIndex index;
|
|
||||||
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
||||||
foreach(index, selectedIndexes) {
|
foreach(const QModelIndex &index, selectedIndexes) {
|
||||||
if(index.column() == F_NAME) {
|
if(index.column() == F_NAME) {
|
||||||
// Get the file hash
|
// Get the file hash
|
||||||
QString hash = finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
QString hash = finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
||||||
@@ -228,9 +226,8 @@ void FinishedTorrents::saveColWidthFinishedList() const{
|
|||||||
|
|
||||||
void FinishedTorrents::on_actionSet_upload_limit_triggered(){
|
void FinishedTorrents::on_actionSet_upload_limit_triggered(){
|
||||||
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
||||||
QModelIndex index;
|
|
||||||
QStringList hashes;
|
QStringList hashes;
|
||||||
foreach(index, selectedIndexes){
|
foreach(const QModelIndex &index, selectedIndexes){
|
||||||
if(index.column() == F_NAME){
|
if(index.column() == F_NAME){
|
||||||
// Get the file hash
|
// Get the file hash
|
||||||
hashes << finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
hashes << finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
||||||
@@ -239,15 +236,8 @@ void FinishedTorrents::on_actionSet_upload_limit_triggered(){
|
|||||||
new BandwidthAllocationDialog(this, true, BTSession, hashes);
|
new BandwidthAllocationDialog(this, true, BTSession, hashes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::updateFinishedList(){
|
void FinishedTorrents::updateTorrent(QTorrentHandle h) {
|
||||||
QString hash;
|
QString hash = h.hash();
|
||||||
QStringList finishedSHAs = BTSession->getFinishedTorrents();
|
|
||||||
foreach(hash, finishedSHAs){
|
|
||||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
|
||||||
if(!h.is_valid()){
|
|
||||||
qDebug("Problem: This torrent is not valid in finished list");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int row = getRowFromHash(hash);
|
int row = getRowFromHash(hash);
|
||||||
if(row == -1){
|
if(row == -1){
|
||||||
qDebug("Cannot find torrent in finished list, adding it");
|
qDebug("Cannot find torrent in finished list, adding it");
|
||||||
@@ -255,26 +245,24 @@ void FinishedTorrents::updateFinishedList(){
|
|||||||
row = getRowFromHash(hash);
|
row = getRowFromHash(hash);
|
||||||
}
|
}
|
||||||
Q_ASSERT(row != -1);
|
Q_ASSERT(row != -1);
|
||||||
if(h.is_paused()) continue;
|
if(h.is_paused()) return;
|
||||||
if(h.state() == torrent_status::downloading || (h.state() != torrent_status::checking_files && h.state() != torrent_status::queued_for_checking && h.progress() < 1.)) {
|
// Update queued torrent
|
||||||
// What are you doing here? go back to download tab!
|
if(BTSession->isQueueingEnabled() && h.is_queued()) {
|
||||||
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);
|
if(h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking){
|
||||||
if (reponse == QMessageBox::Yes) {
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/time.png"))), Qt::DecorationRole);
|
||||||
qDebug("Info: a torrent was moved from finished to download tab");
|
} else {
|
||||||
deleteTorrent(hash);
|
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/skin/queued.png"))), Qt::DecorationRole);
|
||||||
BTSession->setUnfinishedTorrent(hash);
|
}
|
||||||
emit torrentMovedFromFinishedList(hash);
|
// Reset upload speed and seeds/leech
|
||||||
}
|
finishedListModel->setData(finishedListModel->index(row, F_UPSPEED), 0.);
|
||||||
else if (reponse == QMessageBox::No) {
|
finishedListModel->setData(finishedListModel->index(row, F_LEECH), "0");
|
||||||
qDebug("Deleted from the finished");
|
setRowColor(row, QString::fromUtf8("grey"));
|
||||||
BTSession->deleteTorrent(hash, true);
|
return;
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if(h.state() == torrent_status::checking_files){
|
if(h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking){
|
||||||
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"));
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
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);
|
||||||
@@ -287,7 +275,6 @@ void FinishedTorrents::updateFinishedList(){
|
|||||||
if(!finishedList->isColumnHidden(F_RATIO)) {
|
if(!finishedList->isColumnHidden(F_RATIO)) {
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(misc::toQString(BTSession->getRealRatio(hash))));
|
finishedListModel->setData(finishedListModel->index(row, F_RATIO), QVariant(misc::toQString(BTSession->getRealRatio(hash))));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int FinishedTorrents::getRowFromHash(QString hash) const{
|
int FinishedTorrents::getRowFromHash(QString hash) const{
|
||||||
@@ -311,13 +298,6 @@ void FinishedTorrents::pauseTorrent(QString hash) {
|
|||||||
setRowColor(row, QString::fromUtf8("red"));
|
setRowColor(row, QString::fromUtf8("red"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishedTorrents::resumeTorrent(QString hash) {
|
|
||||||
int row = getRowFromHash(hash);
|
|
||||||
Q_ASSERT(row != -1);
|
|
||||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png"))), Qt::DecorationRole);
|
|
||||||
setRowColor(row, QString::fromUtf8("orange"));
|
|
||||||
}
|
|
||||||
|
|
||||||
QString FinishedTorrents::getHashFromRow(unsigned int row) const {
|
QString FinishedTorrents::getHashFromRow(unsigned int row) const {
|
||||||
Q_ASSERT(row < (unsigned int)finishedListModel->rowCount());
|
Q_ASSERT(row < (unsigned int)finishedListModel->rowCount());
|
||||||
return finishedListModel->data(finishedListModel->index(row, F_HASH)).toString();
|
return finishedListModel->data(finishedListModel->index(row, F_HASH)).toString();
|
||||||
@@ -357,21 +337,30 @@ void FinishedTorrents::updateFileSize(QString hash){
|
|||||||
// display properties of selected items
|
// display properties of selected items
|
||||||
void FinishedTorrents::propertiesSelection(){
|
void FinishedTorrents::propertiesSelection(){
|
||||||
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
||||||
QModelIndex index;
|
foreach(const QModelIndex &index, selectedIndexes){
|
||||||
foreach(index, selectedIndexes){
|
|
||||||
if(index.column() == F_NAME){
|
if(index.column() == F_NAME){
|
||||||
showProperties(index);
|
showProperties(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FinishedTorrents::forceRecheck(){
|
||||||
|
QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes();
|
||||||
|
foreach(const QModelIndex &index, selectedIndexes){
|
||||||
|
if(index.column() == F_NAME){
|
||||||
|
QString hash = finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
||||||
|
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||||
|
h.force_recheck();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
||||||
QMenu myFinishedListMenu(this);
|
QMenu myFinishedListMenu(this);
|
||||||
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();
|
||||||
bool has_pause = false, has_start = false, has_preview = false;
|
bool has_pause = false, has_start = false, has_preview = false;
|
||||||
foreach(index, selectedIndexes) {
|
foreach(const QModelIndex &index, selectedIndexes) {
|
||||||
if(index.column() == F_NAME) {
|
if(index.column() == F_NAME) {
|
||||||
// Get the file name
|
// Get the file name
|
||||||
QString hash = finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
QString hash = finishedListModel->data(finishedListModel->index(index.row(), F_HASH)).toString();
|
||||||
@@ -402,6 +391,8 @@ 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(actionForce_recheck);
|
||||||
|
myFinishedListMenu.addSeparator();
|
||||||
myFinishedListMenu.addAction(actionOpen_destination_folder);
|
myFinishedListMenu.addAction(actionOpen_destination_folder);
|
||||||
myFinishedListMenu.addAction(actionTorrent_Properties);
|
myFinishedListMenu.addAction(actionTorrent_Properties);
|
||||||
myFinishedListMenu.addSeparator();
|
myFinishedListMenu.addSeparator();
|
||||||
@@ -409,7 +400,7 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
|||||||
|
|
||||||
// Call menu
|
// Call menu
|
||||||
// XXX: why mapToGlobal() is not enough?
|
// XXX: why mapToGlobal() is not enough?
|
||||||
myFinishedListMenu.exec(mapToGlobal(pos)+QPoint(10,59));
|
myFinishedListMenu.exec(mapToGlobal(pos)+QPoint(10,58));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -421,11 +412,12 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
|||||||
void FinishedTorrents::displayFinishedHoSMenu(const QPoint& pos){
|
void FinishedTorrents::displayFinishedHoSMenu(const QPoint& pos){
|
||||||
QMenu hideshowColumn(this);
|
QMenu hideshowColumn(this);
|
||||||
hideshowColumn.setTitle(tr("Hide or Show Column"));
|
hideshowColumn.setTitle(tr("Hide or Show Column"));
|
||||||
for(int i=0; i<=F_RATIO; i++) {
|
int lastCol = F_RATIO;
|
||||||
|
for(int i=0; i<=lastCol; i++) {
|
||||||
hideshowColumn.addAction(getActionHoSCol(i));
|
hideshowColumn.addAction(getActionHoSCol(i));
|
||||||
}
|
}
|
||||||
// Call menu
|
// Call menu
|
||||||
hideshowColumn.exec(mapToGlobal(pos)+QPoint(10,32));
|
hideshowColumn.exec(mapToGlobal(pos)+QPoint(10,34));
|
||||||
}
|
}
|
||||||
|
|
||||||
// toggle hide/show a column
|
// toggle hide/show a column
|
||||||
@@ -558,6 +550,7 @@ void FinishedTorrents::toggleFinishedListSortOrder(int index) {
|
|||||||
switch(index) {
|
switch(index) {
|
||||||
case F_SIZE:
|
case F_SIZE:
|
||||||
case F_UPSPEED:
|
case F_UPSPEED:
|
||||||
|
case F_RATIO:
|
||||||
sortFinishedListFloat(index, sortOrder);
|
sortFinishedListFloat(index, sortOrder);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -60,13 +69,11 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
void displayFinishedHoSMenu(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 loadLastSortedColumn();
|
|
||||||
void toggleFinishedListSortOrder(int index);
|
void toggleFinishedListSortOrder(int index);
|
||||||
void sortFinishedList(int index=-1, Qt::SortOrder sortOrder=Qt::AscendingOrder);
|
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 on_actionSet_upload_limit_triggered();
|
void on_actionSet_upload_limit_triggered();
|
||||||
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
||||||
void hideOrShowColumnName();
|
void hideOrShowColumnName();
|
||||||
@@ -74,15 +81,16 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
void hideOrShowColumnUpSpeed();
|
void hideOrShowColumnUpSpeed();
|
||||||
void hideOrShowColumnLeechers();
|
void hideOrShowColumnLeechers();
|
||||||
void hideOrShowColumnRatio();
|
void hideOrShowColumnRatio();
|
||||||
|
void forceRecheck();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void addTorrent(QString hash);
|
void addTorrent(QString hash);
|
||||||
void updateFinishedList();
|
void updateTorrent(QTorrentHandle h);
|
||||||
void pauseTorrent(QString hash);
|
void pauseTorrent(QString hash);
|
||||||
void resumeTorrent(QString hash);
|
|
||||||
void propertiesSelection();
|
void propertiesSelection();
|
||||||
void deleteTorrent(QString hash);
|
void deleteTorrent(QString hash);
|
||||||
void showPropertiesFromHash(QString hash);
|
void showPropertiesFromHash(QString hash);
|
||||||
|
void loadLastSortedColumn();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void torrentMovedFromFinishedList(QString);
|
void torrentMovedFromFinishedList(QString);
|
||||||
|
|||||||
710
src/GUI.cpp
40
src/GUI.h
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -52,6 +61,7 @@ class QTabWidget;
|
|||||||
class QLabel;
|
class QLabel;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
class HttpServer;
|
class HttpServer;
|
||||||
|
class QFrame;
|
||||||
|
|
||||||
class GUI : public QMainWindow, private Ui::MainWindow{
|
class GUI : public QMainWindow, private Ui::MainWindow{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -63,7 +73,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers;
|
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers;
|
||||||
// GUI related
|
// GUI related
|
||||||
QTabWidget *tabs;
|
QTabWidget *tabs;
|
||||||
options_imp *options;
|
QPointer<options_imp> options;
|
||||||
QSystemTrayIcon *myTrayIcon;
|
QSystemTrayIcon *myTrayIcon;
|
||||||
QPointer<QTimer> systrayCreator;
|
QPointer<QTimer> systrayCreator;
|
||||||
QMenu *myTrayIconMenu;
|
QMenu *myTrayIconMenu;
|
||||||
@@ -75,12 +85,22 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
bool force_exit;
|
bool force_exit;
|
||||||
unsigned int refreshInterval;
|
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;
|
||||||
|
QAction *prioSeparator;
|
||||||
|
QAction *prioSeparator2;
|
||||||
// Search
|
// Search
|
||||||
SearchEngine *searchEngine;
|
SearchEngine *searchEngine;
|
||||||
// RSS
|
// RSS
|
||||||
@@ -105,6 +125,7 @@ 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);
|
||||||
@@ -144,18 +165,21 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
void processParams(const QStringList& params);
|
void processParams(const QStringList& params);
|
||||||
void addTorrent(QString path);
|
void addTorrent(QString path);
|
||||||
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
||||||
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 deleteTorrent(QString hash);
|
||||||
void deleteRatioTorrent(QString fileName);
|
|
||||||
void finishedTorrent(QTorrentHandle& h) const;
|
void finishedTorrent(QTorrentHandle& h) const;
|
||||||
void updateLists();
|
void addedTorrent(QTorrentHandle& h) const;
|
||||||
|
void checkedTorrent(QTorrentHandle& h) const;
|
||||||
|
void pausedTorrent(QTorrentHandle& h) const;
|
||||||
|
void resumedTorrent(QTorrentHandle& h) const;
|
||||||
|
void updateLists(bool force=false);
|
||||||
bool initWebUi(QString username, QString password, int port);
|
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();
|
||||||
|
|
||||||
@@ -169,7 +193,9 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
void hideEvent(QHideEvent *);
|
void showEvent(QShowEvent *);
|
||||||
|
bool event(QEvent * event);
|
||||||
|
void displayRSSTab(bool enable);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Construct / Destruct
|
// Construct / Destruct
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Categories=Qt;Network;P2P
|
Categories=Qt;Network;P2P
|
||||||
Comment=V1.1.4
|
Comment=V1.3.3
|
||||||
Exec=qbittorrent %f
|
Exec=qbittorrent %f
|
||||||
GenericName=Bittorrent client
|
GenericName=Bittorrent client
|
||||||
GenericName[bg]=Торент клиент
|
GenericName[bg]=Торент клиент
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 576 B |
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 |
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: 75 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,15 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||