Compare commits
323 Commits
release-2.
...
release-2.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e46abe4294 | ||
![]() |
aaeb6b90ed | ||
![]() |
d124ada755 | ||
![]() |
31105aefe4 | ||
![]() |
44c258796e | ||
![]() |
26100120a9 | ||
![]() |
0db8ce891b | ||
![]() |
979aba5685 | ||
![]() |
396da6bd94 | ||
![]() |
1b0d86220f | ||
![]() |
957d2c0d1a | ||
![]() |
455657912a | ||
![]() |
e3da1902df | ||
![]() |
d0f8e9208f | ||
![]() |
de50346428 | ||
![]() |
c7ca51f950 | ||
![]() |
4522174555 | ||
![]() |
126230ad08 | ||
![]() |
6aa1f4156a | ||
![]() |
2726faa090 | ||
![]() |
230b84032d | ||
![]() |
9c4c5e2d1a | ||
![]() |
2bf8e2d2d7 | ||
![]() |
9bb05c8dea | ||
![]() |
2707aa2818 | ||
![]() |
93c644da88 | ||
![]() |
4a114c0fdc | ||
![]() |
f95108155d | ||
![]() |
75f75854c2 | ||
![]() |
e20c3cd0b6 | ||
![]() |
2273ea4099 | ||
![]() |
b115b0c6a3 | ||
![]() |
9d79a51f18 | ||
![]() |
db9005158e | ||
![]() |
4491999a8c | ||
![]() |
113a502a7e | ||
![]() |
7ad39003f4 | ||
![]() |
4b43871708 | ||
![]() |
aa8f7552a2 | ||
![]() |
19d94b53d2 | ||
![]() |
ca98a261e6 | ||
![]() |
535ec2ced6 | ||
![]() |
a300c236ba | ||
![]() |
b16c26b24c | ||
![]() |
1b1dde3fc8 | ||
![]() |
bd5880843f | ||
![]() |
abf35a31f3 | ||
![]() |
015638035a | ||
![]() |
8e27fe83f1 | ||
![]() |
ce4b105065 | ||
![]() |
37a7b79a6f | ||
![]() |
ef19e8aeef | ||
![]() |
f6886b4749 | ||
![]() |
8306959cb4 | ||
![]() |
d1918ee206 | ||
![]() |
b2b76f9e35 | ||
![]() |
a07fb264e8 | ||
![]() |
881f2d04d2 | ||
![]() |
e1b629df88 | ||
![]() |
eab6a194e1 | ||
![]() |
3733bc9148 | ||
![]() |
ae5746a636 | ||
![]() |
cb509cebb3 | ||
![]() |
511c4474c7 | ||
![]() |
d063aea977 | ||
![]() |
447efc52d8 | ||
![]() |
296acf820c | ||
![]() |
6ae49acb69 | ||
![]() |
af1b06c5be | ||
![]() |
4732c8565d | ||
![]() |
52dd1476db | ||
![]() |
63170b9214 | ||
![]() |
2203b399df | ||
![]() |
d80f7a6ef3 | ||
![]() |
88c56d8250 | ||
![]() |
fca24a8f84 | ||
![]() |
6d140a141a | ||
![]() |
a18e325c18 | ||
![]() |
c4d9c51e49 | ||
![]() |
27e980de28 | ||
![]() |
3c4906bb4d | ||
![]() |
da796c80c3 | ||
![]() |
7a2af0f506 | ||
![]() |
3e562e7450 | ||
![]() |
4fc777268b | ||
![]() |
037e57b687 | ||
![]() |
2b289655c1 | ||
![]() |
118ea6093d | ||
![]() |
cac6f7428c | ||
![]() |
ae6acc4ca2 | ||
![]() |
641c6f0132 | ||
![]() |
56dc8cad71 | ||
![]() |
7cc07d842c | ||
![]() |
baaadf07fa | ||
![]() |
719b32ba36 | ||
![]() |
af5c1096b5 | ||
![]() |
3008222b92 | ||
![]() |
5ef9faacd5 | ||
![]() |
ff65b6ea2f | ||
![]() |
4c8a087b81 | ||
![]() |
8f4bf93f02 | ||
![]() |
824b2f6fff | ||
![]() |
ba0c7334b7 | ||
![]() |
a1dd724220 | ||
![]() |
a7820e5f08 | ||
![]() |
1a2eee8060 | ||
![]() |
4a2713a9f0 | ||
![]() |
5ece0b4f70 | ||
![]() |
44e8ec2b37 | ||
![]() |
d7e5f4b895 | ||
![]() |
b0c7bdf82b | ||
![]() |
a239ac1a52 | ||
![]() |
99459dc55d | ||
![]() |
78ba99778a | ||
![]() |
96d3df3135 | ||
![]() |
cbe4bbac6a | ||
![]() |
f502e82ec4 | ||
![]() |
a5d8766a9e | ||
![]() |
55d8e3d76b | ||
![]() |
7b7fb4d278 | ||
![]() |
09c7c50ad3 | ||
![]() |
131250dc03 | ||
![]() |
130187723c | ||
![]() |
7bac95c9ad | ||
![]() |
add2475700 | ||
![]() |
533e402bca | ||
![]() |
b87a23037e | ||
![]() |
6d88bb5b83 | ||
![]() |
435801c893 | ||
![]() |
9d0577fa5c | ||
![]() |
f2891dae74 | ||
![]() |
a43a1f5b67 | ||
![]() |
ee9ca1ece7 | ||
![]() |
8271e20fac | ||
![]() |
132b1f7ffe | ||
![]() |
77b4d97069 | ||
![]() |
2168d5a30e | ||
![]() |
7ad90b1b80 | ||
![]() |
f60ef5dbd5 | ||
![]() |
4dc26d0a77 | ||
![]() |
551273b831 | ||
![]() |
d5a09674ae | ||
![]() |
907e620e9e | ||
![]() |
f96ec75eec | ||
![]() |
4d00db2b42 | ||
![]() |
db564b4521 | ||
![]() |
3f2076d195 | ||
![]() |
ed13c43e93 | ||
![]() |
b5a9fe71e1 | ||
![]() |
d0037d90f4 | ||
![]() |
e885ee0d35 | ||
![]() |
ff5e5d1062 | ||
![]() |
1bfadf5219 | ||
![]() |
4f9eca78d9 | ||
![]() |
7aa2994078 | ||
![]() |
1128b3ea83 | ||
![]() |
9d06947125 | ||
![]() |
14cc600a8b | ||
![]() |
4f3fd86f91 | ||
![]() |
e663717d64 | ||
![]() |
8b5d388e77 | ||
![]() |
22d781edd5 | ||
![]() |
4252832ba5 | ||
![]() |
fab58296af | ||
![]() |
e142877e10 | ||
![]() |
6f6e453ae4 | ||
![]() |
50e620daf2 | ||
![]() |
c334439df6 | ||
![]() |
2d9b4f273e | ||
![]() |
15c7099e85 | ||
![]() |
d2b1f6176f | ||
![]() |
8306d7931b | ||
![]() |
b07fbb726e | ||
![]() |
9586f0e61c | ||
![]() |
7d66c07cef | ||
![]() |
28ecb2fe1d | ||
![]() |
a9cafeaa76 | ||
![]() |
5fc69ccb73 | ||
![]() |
bc626e3512 | ||
![]() |
98561f9db9 | ||
![]() |
b56dee2a92 | ||
![]() |
885a7f592e | ||
![]() |
6965448a24 | ||
![]() |
475d63dad8 | ||
![]() |
c87a0bde0b | ||
![]() |
c1bc9886b7 | ||
![]() |
88f8437c5a | ||
![]() |
411a1c641d | ||
![]() |
dc0ad73eca | ||
![]() |
04e008afa0 | ||
![]() |
a6207f70d5 | ||
![]() |
b8a30be7bc | ||
![]() |
67d60766c1 | ||
![]() |
97c0b28a98 | ||
![]() |
c61aded388 | ||
![]() |
1fd57b5d63 | ||
![]() |
755b8dec30 | ||
![]() |
ecd5c1fcc3 | ||
![]() |
db5402385a | ||
![]() |
09ef3073a1 | ||
![]() |
6dd3833e0f | ||
![]() |
d4762a4d8d | ||
![]() |
38cc55ea09 | ||
![]() |
5d60295db3 | ||
![]() |
18bd3b855c | ||
![]() |
868d423c82 | ||
![]() |
edb6857de0 | ||
![]() |
ed803fb994 | ||
![]() |
83d83a364d | ||
![]() |
690bb92154 | ||
![]() |
8e39eef7aa | ||
![]() |
1923a51c59 | ||
![]() |
3dc1107b40 | ||
![]() |
dd22e9009c | ||
![]() |
c7ccf39abf | ||
![]() |
af166f53d3 | ||
![]() |
21eb26a374 | ||
![]() |
e2aaf5d1de | ||
![]() |
0b7ca15c4f | ||
![]() |
07ee2a4aff | ||
![]() |
141d3b6737 | ||
![]() |
e2c3e6dbaa | ||
![]() |
b1126556c0 | ||
![]() |
69cb8d1398 | ||
![]() |
094d979ce6 | ||
![]() |
92dd669597 | ||
![]() |
32a8dec0e7 | ||
![]() |
2dd5bccd49 | ||
![]() |
18d0283463 | ||
![]() |
9fe807b6f1 | ||
![]() |
84f00bf3f6 | ||
![]() |
d3687fd863 | ||
![]() |
d1a549a6cc | ||
![]() |
c1552ff254 | ||
![]() |
54a396bc6e | ||
![]() |
ed732bca63 | ||
![]() |
02a4464e8f | ||
![]() |
7f97df4462 | ||
![]() |
9d20af02a2 | ||
![]() |
cbaef050f0 | ||
![]() |
148139c2c4 | ||
![]() |
793f8a103d | ||
![]() |
ffa48b64ac | ||
![]() |
59a8e651f9 | ||
![]() |
fb9f2a01b5 | ||
![]() |
944e25a5d8 | ||
![]() |
ad597c72d2 | ||
![]() |
abbbf1e562 | ||
![]() |
d2dd29c35a | ||
![]() |
906f2bab1e | ||
![]() |
bb6468005d | ||
![]() |
a2423e97eb | ||
![]() |
ed1d75ecb1 | ||
![]() |
1e4200345a | ||
![]() |
be11f4e039 | ||
![]() |
22ec528cdf | ||
![]() |
ebf341a6de | ||
![]() |
68ba6322e1 | ||
![]() |
968a5f3017 | ||
![]() |
8df1708491 | ||
![]() |
da51ce1b71 | ||
![]() |
95a6de9b00 | ||
![]() |
269bbdf01d | ||
![]() |
df03b042d6 | ||
![]() |
3ec118d59b | ||
![]() |
bce575ee68 | ||
![]() |
83da56b0eb | ||
![]() |
fa2891c225 | ||
![]() |
c4bf42524c | ||
![]() |
a096105f18 | ||
![]() |
51f842aaef | ||
![]() |
76c4466fb6 | ||
![]() |
facd02a7ec | ||
![]() |
ed8da2ef66 | ||
![]() |
998352f9f1 | ||
![]() |
8c1a135d16 | ||
![]() |
b976d39207 | ||
![]() |
f0a18ec1f5 | ||
![]() |
f9a5afe446 | ||
![]() |
b13c7abca0 | ||
![]() |
1f104f62f5 | ||
![]() |
f8f7729e77 | ||
![]() |
eca262f5f4 | ||
![]() |
df5f5a943b | ||
![]() |
497cb07852 | ||
![]() |
10ab8f107c | ||
![]() |
3a6ff19418 | ||
![]() |
ab317a3a62 | ||
![]() |
617724c2b1 | ||
![]() |
422c03b4ec | ||
![]() |
4af05dc63c | ||
![]() |
ac92287b43 | ||
![]() |
c7634b3828 | ||
![]() |
5d1d26b285 | ||
![]() |
644fea69a1 | ||
![]() |
4dc8959f67 | ||
![]() |
63be5ffc74 | ||
![]() |
c5a9e27cb3 | ||
![]() |
ecf48b3a7b | ||
![]() |
63e5339690 | ||
![]() |
d8c27ac8c4 | ||
![]() |
925597c43a | ||
![]() |
ba8fd62900 | ||
![]() |
3f61e176f0 | ||
![]() |
542338972a | ||
![]() |
fe91599eb4 | ||
![]() |
d9817795ed | ||
![]() |
6ede368f63 | ||
![]() |
6885f46f4b | ||
![]() |
9323660c79 | ||
![]() |
88b77a63ed | ||
![]() |
4d1ef40f6e | ||
![]() |
9a68e0cc25 | ||
![]() |
396427e3b6 | ||
![]() |
e460f1c365 | ||
![]() |
b9531c8245 | ||
![]() |
27aff04f11 | ||
![]() |
08fe5814c5 | ||
![]() |
5af8b7c0e2 | ||
![]() |
c1acbda38f | ||
![]() |
afa5213c94 | ||
![]() |
17b8ba27b3 | ||
![]() |
3f9b74430a |
20
AUTHORS
@@ -12,10 +12,9 @@ Code from other projects:
|
||||
copyright: Malte Starostik <malte@kde.org>
|
||||
license: LGPL
|
||||
|
||||
GeoIP database author:
|
||||
* files: src/geoip/GeoIP.dat
|
||||
copyright: MaxMind, Inc (http://maxmind.com/)
|
||||
license: Open Data License (see src/geoip/LICENSE.txt)
|
||||
* files src/search_engine/socks.py
|
||||
copyright: Dan Haim <negativeiq@users.sourceforge.net>
|
||||
license: BSD
|
||||
|
||||
Images Authors:
|
||||
* files: src/Icons/*.png
|
||||
@@ -62,7 +61,7 @@ Translations authors:
|
||||
copyright:
|
||||
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
||||
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
||||
- Catalan: Gekko Dam Beer (gekko04@users.sourceforge.net)
|
||||
- Catalan: Francisco Luque Contreras (frannoe@ya.com)
|
||||
- Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
|
||||
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
||||
- Czech: Jirka Vilim (web@tets.cz)
|
||||
@@ -72,19 +71,20 @@ Translations authors:
|
||||
- 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)
|
||||
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net) and Stephanos Antaris (santaris@csd.auth.gr)
|
||||
- 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)
|
||||
- Japanese: Nardog (alphisation@gmail.com)
|
||||
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
||||
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
|
||||
- Polish: Jarek Smieja (ajep9691@wp.pl)
|
||||
- Polish: Mariusz Fik (fisiu@opensuse.org)
|
||||
- Portuguese: Nick Marinho (nickmarinho@gmail.com)
|
||||
- Romanian: Obada Denis (obadadenis@users.sourceforge.net)
|
||||
- Russian: Nick Khazov (m2k3d0n at users.sourceforge.net)
|
||||
- Serbian: Anaximandar Milet (anaximandar at operamail.com)
|
||||
- Slovak: helix84
|
||||
- Spanish: Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net)
|
||||
- Spanish: Francisco Luque Contreras (frannoe@ya.com)
|
||||
- Swedish: Daniel Nylander (po@danielnylander.se)
|
||||
- Turkish: Erdem Bingöl (erdem84@gmail.com)
|
||||
- Turkish: Hasan Yilmaz (iletisim@hedefturkce.com)
|
||||
- Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
|
||||
license: GPLv2
|
||||
|
142
Changelog
@@ -1,10 +1,96 @@
|
||||
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v2.0.0
|
||||
* Mon Jan 18 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.0
|
||||
- FEATURE: Graphical User Interface can be disabled at compilation time (headless running)
|
||||
- FEATURE: Torrents can be labeled/categorized
|
||||
- FEATURE: Labeled torrent can be downloaded corresponding subfolders
|
||||
- FEATURE: Disk cache size can be set from preferences
|
||||
- FEATURE: Peer Exchange (PeX) can be disabled from preferences
|
||||
- FEATURE: Append !.qB extension to incomplete files option (libtorrent >= v0.15 only)
|
||||
- FEATURE: Torrent files/folders can be renamed (torrent addition dialog or files properties)
|
||||
- FEATURE: uTorrent compatible tracker list support (use torrentz.com url as a default)
|
||||
- FEATURE: Better proxy support and preferences remodeling
|
||||
- FEATURE: qBittorrent can identify itself as uTorrent, Vuze or KTorrent (Any stable version)
|
||||
- FEATURE: Torrents can be renamed in transfer list
|
||||
- FEATURE: Display torrent addition dialog for magnet links too
|
||||
- FEATURE: Files contained in a torrent are opened on double click (files panel)
|
||||
- FEATURE: Added support for magnet links in search engine
|
||||
- FEATURE: Added vertor.com and torrentdownloads.net search plugins
|
||||
- FEATURE: Search engine can now use a SOCKS5 proxy
|
||||
- FEATURE: HTTP proxy support for peer communication
|
||||
- BUGFIX: Search engine loads new proxy settings without program restart
|
||||
- BUGFIX: Use XDG folders (.cache, .local) instead of .qbittorrent
|
||||
- BUGFIX: Added legal notice on startup that the user must accept
|
||||
- BUGFIX: Protect Web UI authentication against brute forcing
|
||||
- BUGFIX: Use HTTP digest mode for Web UI authentication (instead of Basic)
|
||||
- BUGFIX: Properly display torrents with one file in subfolder(s)
|
||||
- BUGFIX: Display Web UI favicon
|
||||
- BUGFIX: File priority can be set for finished torrents that have filtered files
|
||||
- COSMETIC: Use checkboxes to filter torrent content instead of comboboxes
|
||||
- COSMETIC: Use alternating row colors in transfer list (set in program preferences)
|
||||
- COSMETIC: Added a spin box to speed limiting dialog for manual input
|
||||
|
||||
* Mon Jan 11 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.0.7
|
||||
- BUGFIX: Fix 'Add in pause' setting in torrent addition dialog
|
||||
- BUGFIX: Update RSS feed as soon as feed downloader is enabled
|
||||
- BUGFIX: RSS Feed downloader ignores articles above maximum number of articles
|
||||
- BUGFIX: Fix possible bug when deleting a RSS folder
|
||||
- BUGFIX: Remove persistant data when a RSS feed is deleted
|
||||
- BUGFIX: RSS filters are now alphabetically sorted
|
||||
- BUGFIX: Fix crash when renaming currently displayed RSS filter
|
||||
- BUGFIX: Remove overwriting confirmation when exporting RSS filters since Qt takes care of it
|
||||
|
||||
* Tue Jan 5 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.0.6
|
||||
- BUGFIX: Fix detection of invalid torrent files
|
||||
- BUGFIX: Stop catching signals once one has been caught to avoid possible infinite loop
|
||||
- BUGFIX: Force data recheck whenever a torrent is moved
|
||||
- BUGFIX: Detect existing torrent data even if incomplete torrents are saved to a different folder
|
||||
- COSMETIC: Improve torrent deletion confirmation dialog so that the text that not get truncated
|
||||
|
||||
* Thu Dec 31 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.5
|
||||
- BUGFIX: Fix crash with downloaded/availability bars when the torrent has too many pieces
|
||||
|
||||
* Wed Dec 30 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.4
|
||||
- BUGFIX: Fix PeerGuardian .p2b binary filter support
|
||||
- BUGFIX: Fix possible crash when closing a search engine tab
|
||||
- BUGFIX: Make sure service port does not change
|
||||
- BUGFIX: Fix possible DHT port saving issue
|
||||
- BUGFIX: Fix communication between qBittorrent and Web UI (Qt 4.6)
|
||||
- BUGFIX: Use Wildcard matching instead of full regex in RSS feed downloader
|
||||
- BUGFIX: Fix code for listening on a random port whenever it failed to listen on the one defined
|
||||
- BUGFIX: Use global maximum transfer rates as maximum values in per-torrent speed limiting dialogs
|
||||
- BUGFIX: Fix global download rate limiting from Web UI
|
||||
- COSMETIC: Display a disconnected icon in status bar whenever qBittorrent failed to listen on the port defined
|
||||
|
||||
* Wed Dec 23 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.3
|
||||
- BUGFIX: Minor cosmetic fix to program preferences
|
||||
- BUGFIX: Fix "Temp path" button in program preferences
|
||||
- BUGFIX: Handle paths with [~, ., ..] properly
|
||||
- BUGFIX: Trackers are now displayed for torrents without metadata
|
||||
- BUGFIX: Fix issue with speed limiting (unlimited was not handled properly)
|
||||
- BUGFIX: Use the save path set in program preferences as a default in torrent addition dialog
|
||||
|
||||
* Fri Dec 18 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.2
|
||||
- BUGFIX: Fix .qbittorrent folder not being created (critical bug introduced in v2.0.1 that makes qBittorrent unusuable for new users)
|
||||
- BUGFIX: Fix RSS Feed downloader for some feeds
|
||||
- BUGFIX: Do not use home folder as a fallback when the save path is not accessible
|
||||
- BUGFIX: Fix Mininova, ThePirateBay search engine plugins
|
||||
- BUGFIX: Read RSS articles are remembered on restart for feeds with no torrents attached
|
||||
|
||||
* Sun Dec 13 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.1
|
||||
- BUGFIX: µTorrent user-agent is now spoofed correctly
|
||||
- BUGFIX: Fix column hiding behavior when queueing system is disabled
|
||||
- BUGFIX: Fix link to plugins.qbittorrent.org in plugins dialog
|
||||
- BUGFIX: ~/qBT_dir is created only when it is actually used
|
||||
- BUGFIX: Fix possible missing slot message (toggleSelectedTorrentsSuperSeeding)
|
||||
- BUGFIX: Fix possible crash in torrent properties (files)
|
||||
- BUGFIX: Added Hex Magnet Links support (Thanks Haypo)
|
||||
|
||||
* Thu Dec 10 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.0
|
||||
- FEATURE: Added program option to disable splash screen
|
||||
- FEATURE: Dropped dependency on libcurl and libzzip
|
||||
- FEATURE: Display more information regarding the torrent in its properties
|
||||
- FEATURE: Various optimizations to save CPU and memory
|
||||
- FEATURE: Folder scanning now works with CIFS and NFS mounted folders
|
||||
- FEATURE: Speed up qBittorrent startup
|
||||
- FEATURE: Speed up qBittorrent startup and shutdown
|
||||
- FEATURE: Display per-torrent peer list
|
||||
- FEATURE: Make sure torrent files are always sorted by name
|
||||
- FEATURE: Seeds and Peers columns are now sortable
|
||||
@@ -21,6 +107,9 @@
|
||||
- FEATURE: Dropped Qt 4.3 support (Qt >= 4.4 is now required)
|
||||
- FEATURE: Display close tab button into the tabs in search engine (Qt >= 4.5 only)
|
||||
- FEATURE: Show official documentation when pressing F1 key
|
||||
- FEATURE: Search engine plugins now handle HTTP protocol gzip compression
|
||||
- FEATURE: Enabled lazy bitfield as a counter-measure for ISP speed throttling
|
||||
- FEATURE: Fall back to a random port if qBittorrent could not listen on the chosen port
|
||||
- FEATURE: Announce to all trackers specified for a torrent (µTorrent behavior) (libtorrent >= v0.15 only)
|
||||
- FEATURE: Added per-torrent super seeding mode (libtorrent >= v0.15 only)
|
||||
- FEATURE: Support for storing symbolic links in .torrent files (libtorrent >= v0.15 only)
|
||||
@@ -34,10 +123,16 @@
|
||||
- FEATURE: Include DHT traffic in the rate limiter (libtorrent >= v0.15 only)
|
||||
- FEATURE: Support for bitcomet padding files (libtorrent >= v0.15 only)
|
||||
- FEATURE: Option to skip file checking and start seeding immediately in torrent addition dialog (Stephanos Antaris) (libtorrent >= v0.15 only)
|
||||
- BUGFIX: Made sure qBittorrent does not scrape the tracker too frequently (libtorrent >= 0.15 only)
|
||||
- BUGFIX: Fix Paste action in search engine field
|
||||
- BUGFIX: Fix possible double free in search engine destructor
|
||||
- BUGFIX: Properly handle trackers error messages
|
||||
- WEB UI: Remodeled Web UI to match new qBittorrent UI (Properties and preferences available)
|
||||
- WEB UI: Added internationalization support
|
||||
- WEB UI: Reduced computation in Javascript (do this one server side instead)
|
||||
- WEB UI: Fixed Transfer list flickering
|
||||
- WEB UI: Password is now stored as md5
|
||||
- I18N: Added Serbian translation (By Anaximandar Milet)
|
||||
- COSMETIC: Merged download / upload lists
|
||||
- COSMETIC: Torrents can be filtered based on their status
|
||||
- COSMETIC: Torrent properties are now displayed in main window
|
||||
@@ -50,6 +145,49 @@
|
||||
- COSMETIC: New torrent status icons by Mateusz Tolola
|
||||
- COSMETIC: Make use of libnotify if available for system notifications (Ubuntu, ...)
|
||||
|
||||
* Tue Nov 17 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.6
|
||||
- BUGFIX: RSS feed articles can now be displayed using keyboard arrows
|
||||
- BUGFIX: RSS feed downloader can only process unread articles now
|
||||
- BUGFIX: Fixed memory leak in RSS parser
|
||||
- BUGFIX: Fixed possible crash in search autocompletion
|
||||
- BUGFIX: Improved ETA calculation for big torrents
|
||||
- BUGFIX: Fixed per-torrent speed limiting
|
||||
|
||||
* Wed Nov 4 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.5
|
||||
- BUGFIX: Fixed man page
|
||||
- BUGFIX: Fix crash on torrent addition (if libtorrent-rasterbar has debug enabled)
|
||||
- BUGFIX: Fix trackers addition to torrents (bug introduced in v1.5.4)
|
||||
- BUGFIX: Suppress compilation warning regarding sortNewsList() not being used
|
||||
- BUGFIX: Make sure scan folder is different than qBittorrent backup directory to avoid torrents deletion
|
||||
- BUGFIX: Added safety mecanism which adds the torrents back to the list in case qbittorrent-resume.conf gets deleted or corrupted.
|
||||
|
||||
* Sun Oct 25 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.4
|
||||
- BUGFIX: Updated man page
|
||||
- BUGFIX: Fixed possible crash with torrents containing unicode characters
|
||||
- BUGFIX: Fixed problem when disabling systray integration and starting minimized
|
||||
- BUGFIX: Fixed PirateBay search plugin
|
||||
- BUGFIX: Using Download button in search results list now downloads the right torrents
|
||||
- BUGFIX: The search results list is no longer sorted automatically when a row color is updated
|
||||
|
||||
* Wed Sep 30 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.3
|
||||
- BUGFIX: Fix a possible crash when pausing then deleting a torrent quickly
|
||||
- BUGFIX: Fix a race condition in folder scanning and torrent downloader
|
||||
- BUGFIX: Hide download url column in search results
|
||||
- BUGFIX: Fix a crash when scanned directory does not exist
|
||||
- BUGFIX: Fix compilation on Mac OS
|
||||
- BUGFIX: Added a command line parameter to disable splash screen
|
||||
- BUGFIX: Ignore permanent deletion button when no torrent is selected
|
||||
- BUGFIX: When a selected torrent is deleted, select next suitable torrent
|
||||
|
||||
* Sun Sep 20 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.2
|
||||
- BUGFIX: Some torrents were pausing for no reason
|
||||
- I18N: Updated Korean translation
|
||||
|
||||
* Thu Sep 7 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.1
|
||||
- BUGFIX: Fix crash in torrent addition dialog when save path does not exist (closes #425227)
|
||||
- BUGFIX: Fix downloading from URL (broken in v1.5.0)
|
||||
- BUGFIX: Pause torrents in error state
|
||||
|
||||
* Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
|
||||
- FEATURE: Added Magnet URI support
|
||||
- FEATURE: Search engine supports category-based requests
|
||||
|
54
INSTALL
@@ -1,27 +1,51 @@
|
||||
qBittorrent - A BitTorrent client in C++ / Qt4
|
||||
------------------------------------------
|
||||
|
||||
./configure
|
||||
make && make install
|
||||
qbittorrent
|
||||
1) Compile and install qBittorrent with Qt4 Graphical Interface
|
||||
|
||||
will install and execute qBittorrent hopefully without any problems.
|
||||
$ ./configure
|
||||
$ make && make install
|
||||
$ qbittorrent
|
||||
|
||||
Dependencies:
|
||||
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
||||
will install and execute qBittorrent hopefully without any problems.
|
||||
|
||||
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.0 REQUIRED, >= v0.15.0 ADVISED)
|
||||
-> http://www.qbittorrent.org/download.php (advised)
|
||||
-> http://www.libtorrent.net
|
||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||
Dependencies:
|
||||
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
||||
|
||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
||||
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, >= v0.15.0 ADVISED)
|
||||
-> http://www.libtorrent.net
|
||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||
|
||||
- python >= 2.3 (needed by search engine)
|
||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
||||
|
||||
- python >= 2.3 (needed by search engine)
|
||||
* Run time only dependency
|
||||
|
||||
- libnotify >= 0.4.2, glib-2.0 (optional)
|
||||
* Can be used for system notifications to replace standard Qt notifications
|
||||
so that it integrates better into the Desktop
|
||||
|
||||
- geoip-database (optional)
|
||||
* If qBittorrent cannot find this database, it will try to resolve countries using the Internet but it will be a lot slower.
|
||||
* Run time only dependency
|
||||
|
||||
2) Compile and install qBittorrent without Qt4 Graphical interface
|
||||
|
||||
$ ./configure --disable-gui
|
||||
$ make && make install
|
||||
$ qbittorrent
|
||||
|
||||
will install and execute qBittorrent hopefully without any problems.
|
||||
|
||||
Dependencies:
|
||||
- Qt >= 4.4.0 (libqt-devel, libqtcore, libqtnetwork, libqtxml)
|
||||
|
||||
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.0 REQUIRED, >= v0.15.0 ADVISED)
|
||||
-> http://www.libtorrent.net
|
||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||
|
||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
||||
|
||||
- libnotify >= 0.4.2, glib-2.0 (optional)
|
||||
* Can be used for system notifications to replace standard Qt notifications
|
||||
so that it integrates better into the Desktop
|
||||
|
||||
DOCUMENTATION:
|
||||
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
||||
|
82
configure
vendored
@@ -18,8 +18,14 @@ Main options:
|
||||
--help This help text.
|
||||
|
||||
Dependency options:
|
||||
--with-libboost-inc=[path] Path to libboost include files
|
||||
--disable-libnotify Disable use of libnotify
|
||||
--disable-gui Disable qBittorrent Graphical user
|
||||
interface for headless running
|
||||
--with-libboost-inc=[path] Path to libboost include files
|
||||
--disable-libnotify Disable use of libnotify
|
||||
--disable-geoip-database Disable use of geoip-database
|
||||
--with-geoip-database-embedded Geoip Database will be embedded in
|
||||
qBittorrent executable (please follow
|
||||
instructions in src/geoip/README)
|
||||
|
||||
EOT
|
||||
}
|
||||
@@ -136,6 +142,11 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
;;
|
||||
|
||||
--disable-gui)
|
||||
QC_DISABLE_GUI="Y"
|
||||
shift
|
||||
;;
|
||||
|
||||
--with-libboost-inc=*)
|
||||
QC_WITH_LIBBOOST_INC=$optarg
|
||||
shift
|
||||
@@ -146,6 +157,16 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
;;
|
||||
|
||||
--disable-geoip-database)
|
||||
QC_DISABLE_geoip_database="Y"
|
||||
shift
|
||||
;;
|
||||
|
||||
--with-geoip-database-embedded)
|
||||
QC_WITH_GEOIP_DATABASE_EMBEDDED="Y"
|
||||
shift
|
||||
;;
|
||||
|
||||
--verbose)
|
||||
QC_VERBOSE="Y"
|
||||
shift
|
||||
@@ -167,8 +188,11 @@ echo PREFIX=$PREFIX
|
||||
echo BINDIR=$BINDIR
|
||||
echo DATADIR=$DATADIR
|
||||
echo EX_QTDIR=$EX_QTDIR
|
||||
echo QC_DISABLE_GUI=$QC_DISABLE_GUI
|
||||
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
|
||||
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
|
||||
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
|
||||
echo QC_WITH_GEOIP_DATABASE_EMBEDDED=$QC_WITH_GEOIP_DATABASE_EMBEDDED
|
||||
echo
|
||||
fi
|
||||
|
||||
@@ -274,6 +298,7 @@ cat >$1/modules.cpp <<EOT
|
||||
/*
|
||||
-----BEGIN QCMOD-----
|
||||
name: Qt >= 4.4
|
||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
||||
-----END QCMOD-----
|
||||
*/
|
||||
class qc_qt4 : public ConfObj
|
||||
@@ -284,6 +309,9 @@ public:
|
||||
QString shortname() const { return "Qt 4.4"; }
|
||||
bool exec()
|
||||
{
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
conf->addDefine("DISABLE_GUI");
|
||||
}
|
||||
if(QT_VERSION >= 0x040500) {
|
||||
conf->addDefine("QT_4_5");
|
||||
}
|
||||
@@ -302,11 +330,11 @@ class qc_libtorrent_rasterbar : public ConfObj
|
||||
{
|
||||
public:
|
||||
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||
QString name() const { return "libtorrent-rasterbar >= 0.14.0 (>= 0.15.0 advised)"; }
|
||||
QString name() const { return "libtorrent-rasterbar >= 0.14.4"; }
|
||||
QString shortname() const { return "libtorrent-rasterbar"; }
|
||||
bool exec(){
|
||||
QStringList incs;
|
||||
QString req_ver = "0.14.0";
|
||||
QString req_ver = "0.14.4";
|
||||
QString adv_ver = "0.15.0";
|
||||
QString version, libs, other;
|
||||
VersionMode mode = VersionMin;
|
||||
@@ -317,7 +345,7 @@ public:
|
||||
if(!libs.isEmpty())
|
||||
conf->addLib(libs);
|
||||
if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected.\nAlthough it will compile and run, you will be missing some features. Please consider updating to v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected.\nSome feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
||||
else
|
||||
conf->addDefine("LIBTORRENT_0_15");
|
||||
return true;
|
||||
@@ -394,6 +422,10 @@ public:
|
||||
QString name() const { return "libnotify >= 0.4.2 (optional)"; }
|
||||
QString shortname() const { return "libnotify"; }
|
||||
bool exec(){
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
printf("\nNot Required");
|
||||
return true;
|
||||
}
|
||||
QStringList incs;
|
||||
QString req_ver = "0.4.2";
|
||||
QString version, libs, other;
|
||||
@@ -422,6 +454,40 @@ public:
|
||||
return true;
|
||||
}
|
||||
};
|
||||
#line 1 "geoip-database.qcm"
|
||||
/*
|
||||
-----BEGIN QCMOD-----
|
||||
name: geoip-database
|
||||
arg: with-geoip-database-embedded, Geoip Database will be embedded in qBittorrent executable (please follow instructions in src/geoip/README)
|
||||
-----END QCMOD-----
|
||||
*/
|
||||
// see Conf::findPkgConfig
|
||||
class qc_geoip_database : public ConfObj
|
||||
{
|
||||
public:
|
||||
qc_geoip_database(Conf *c) : ConfObj(c) {}
|
||||
QString name() const { return "GeoIP Database (optional)"; }
|
||||
QString shortname() const { return "GeoIP Database"; }
|
||||
bool exec() {
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
printf("\nNot Required");
|
||||
return true;
|
||||
}
|
||||
#ifdef Q_WS_X11
|
||||
if(!conf->getenv("QC_WITH_GEOIP_DATABASE_EMBEDDED").isEmpty()) {
|
||||
#endif
|
||||
conf->addDefine("WITH_GEOIP_EMBEDDED");
|
||||
printf(" embedded and");
|
||||
return true;
|
||||
#ifdef Q_WS_X11
|
||||
}
|
||||
if(QFile::exists("/usr/share/GeoIP/GeoIP.dat") || QFile::exists("/usr/local/share/GeoIP/GeoIP.dat") || QFile::exists("/var/lib/GeoIP/GeoIP.dat"))
|
||||
return true;
|
||||
printf("\nWarning: GeoIP database was not found at /usr/share/GeoIP/GeoIP.dat or /var/lib/GeoIP/GeoIP.dat\nCountry resolution will be slow.");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
EOT
|
||||
cat >$1/modules_new.cpp <<EOT
|
||||
@@ -437,6 +503,9 @@ cat >$1/modules_new.cpp <<EOT
|
||||
o = new qc_libnotify(conf);
|
||||
o->required = false;
|
||||
o->disabled = false;
|
||||
o = new qc_geoip_database(conf);
|
||||
o->required = false;
|
||||
o->disabled = false;
|
||||
|
||||
EOT
|
||||
cat >$1/conf4.h <<EOT
|
||||
@@ -1382,8 +1451,11 @@ export PREFIX
|
||||
export BINDIR
|
||||
export DATADIR
|
||||
export EX_QTDIR
|
||||
export QC_DISABLE_GUI
|
||||
export QC_WITH_LIBBOOST_INC
|
||||
export QC_DISABLE_libnotify
|
||||
export QC_DISABLE_geoip_database
|
||||
export QC_WITH_GEOIP_DATABASE_EMBEDDED
|
||||
export QC_VERBOSE
|
||||
rm -rf .qconftemp
|
||||
(
|
||||
|
44
doc/qbittorrent-nox.1
Normal file
@@ -0,0 +1,44 @@
|
||||
.\" 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\-NOX" "1" "January 16th 2010" "Command line Bittorrent client written in C++ / Qt4" ""
|
||||
|
||||
.SH "NAME"
|
||||
qBittorrent\-nox \- a command line Bittorrent client written in C++ / Qt4
|
||||
|
||||
.SH "SYNOPSIS"
|
||||
|
||||
\fBqbittorrent\-nox\fR [\-\-webui-port=x] [TORRENT_FILE | URL]...
|
||||
|
||||
\fBqbittorrent\-nox\fR \-\-help
|
||||
|
||||
\fBqbittorrent\-nox\fR \-\-version
|
||||
|
||||
.PP
|
||||
.SH "DESCRIPTION"
|
||||
|
||||
\fBqBittorrent-nox\fR is an advanced command-line Bittorrent client written in C++ / Qt4,
|
||||
using the \fBlibtorrent-rasterbar\fR library by Arvid Norberg. qBittorrent\-nox aims
|
||||
to be a good alternative to other command line bittorrent clients and provides features similar to popular graphical clients.
|
||||
|
||||
qBittorrent\-nox is fast, stable, light and it supports unicode.
|
||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Vuze compatible),
|
||||
FAST extension (mainline) and PeX support (utorrent compatible).
|
||||
|
||||
qBittorrent\-nox is meant to be controlled via its feature-rich Web UI which is accessible as a default on http://localhost:8080. The Web UI access is secured and the default account user name is "admin" with "adminadmin" as a password.
|
||||
|
||||
.SH "OPTIONS"
|
||||
|
||||
\fB--help\fR Prints the command line options.
|
||||
|
||||
\fB--version\fR Prints qbittorrent program version number.
|
||||
|
||||
\fB--webui-port=x\fR Changes Web UI port to x (default: 8080).
|
||||
|
||||
.SH "BUGS"
|
||||
|
||||
If you find a bug, please report it at http://bugs.qbittorrent.org
|
||||
|
||||
.SH "AUTHOR"
|
||||
|
||||
Christophe Dumez <chris@qbittorrent.org>
|
@@ -1,14 +1,14 @@
|
||||
.\" 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 30th 2009" "Bittorrent client written in C++ / Qt4" ""
|
||||
.TH "QBITTORRENT" "1" "January 16th 2010" "Bittorrent client written in C++ / Qt4" ""
|
||||
|
||||
.SH "NAME"
|
||||
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
||||
|
||||
.SH "SYNOPSIS"
|
||||
|
||||
\fBqbittorrent\fR [\-\-no-splash] [TORRENT_FILE | URL]...
|
||||
\fBqbittorrent\fR [\-\-no-splash] [\-\-webui-port=x] [TORRENT_FILE | URL]...
|
||||
|
||||
\fBqbittorrent\fR \-\-help
|
||||
|
||||
@@ -18,10 +18,9 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4
|
||||
.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
|
||||
using the \fBlibtorrent-rasterbar\fR library by Arvid Norberg. qBittorrent is similar to uTorrent. 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),
|
||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Vuze compatible),
|
||||
FAST extension (mainline) and PeX support (utorrent compatible).
|
||||
|
||||
.SH "OPTIONS"
|
||||
@@ -32,6 +31,8 @@ FAST extension (mainline) and PeX support (utorrent compatible).
|
||||
|
||||
\fB--no-splash\fR Disables splash screen on startup.
|
||||
|
||||
\fB--webui-port=x\fR Changes Web UI port to x (default: 8080).
|
||||
|
||||
.SH "BUGS"
|
||||
|
||||
If you find a bug, please report it at http://bugs.qbittorrent.org
|
||||
|
@@ -14,4 +14,6 @@
|
||||
</dep>
|
||||
<dep type='libnotify'>
|
||||
</dep>
|
||||
<dep type='geoip-database'>
|
||||
</dep>
|
||||
</qconf>
|
||||
|
33
qcm/geoip-database.qcm
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
-----BEGIN QCMOD-----
|
||||
name: geoip-database
|
||||
arg: with-geoip-database-embedded, Geoip Database will be embedded in qBittorrent executable (please follow instructions in src/geoip/README)
|
||||
-----END QCMOD-----
|
||||
*/
|
||||
// see Conf::findPkgConfig
|
||||
class qc_geoip_database : public ConfObj
|
||||
{
|
||||
public:
|
||||
qc_geoip_database(Conf *c) : ConfObj(c) {}
|
||||
QString name() const { return "GeoIP Database (optional)"; }
|
||||
QString shortname() const { return "GeoIP Database"; }
|
||||
bool exec() {
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
printf("\nNot Required");
|
||||
return true;
|
||||
}
|
||||
#ifdef Q_WS_X11
|
||||
if(!conf->getenv("QC_WITH_GEOIP_DATABASE_EMBEDDED").isEmpty()) {
|
||||
#endif
|
||||
conf->addDefine("WITH_GEOIP_EMBEDDED");
|
||||
printf(" embedded and");
|
||||
return true;
|
||||
#ifdef Q_WS_X11
|
||||
}
|
||||
if(QFile::exists("/usr/share/GeoIP/GeoIP.dat") || QFile::exists("/usr/local/share/GeoIP/GeoIP.dat") || QFile::exists("/var/lib/GeoIP/GeoIP.dat"))
|
||||
return true;
|
||||
printf("\nWarning: GeoIP database was not found at /usr/share/GeoIP/GeoIP.dat or /var/lib/GeoIP/GeoIP.dat\nCountry resolution will be slow.");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
};
|
@@ -11,6 +11,10 @@ public:
|
||||
QString name() const { return "libnotify >= 0.4.2 (optional)"; }
|
||||
QString shortname() const { return "libnotify"; }
|
||||
bool exec(){
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
printf("\nNot Required");
|
||||
return true;
|
||||
}
|
||||
QStringList incs;
|
||||
QString req_ver = "0.4.2";
|
||||
QString version, libs, other;
|
||||
|
@@ -8,11 +8,11 @@ class qc_libtorrent_rasterbar : public ConfObj
|
||||
{
|
||||
public:
|
||||
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||
QString name() const { return "libtorrent-rasterbar >= 0.14.0 (>= 0.15.0 advised)"; }
|
||||
QString name() const { return "libtorrent-rasterbar >= 0.14.4"; }
|
||||
QString shortname() const { return "libtorrent-rasterbar"; }
|
||||
bool exec(){
|
||||
QStringList incs;
|
||||
QString req_ver = "0.14.0";
|
||||
QString req_ver = "0.14.4";
|
||||
QString adv_ver = "0.15.0";
|
||||
QString version, libs, other;
|
||||
VersionMode mode = VersionMin;
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
if(!libs.isEmpty())
|
||||
conf->addLib(libs);
|
||||
if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected.\nAlthough it will compile and run, you will be missing some features. Please consider updating to v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected.\nSome feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
||||
else
|
||||
conf->addDefine("LIBTORRENT_0_15");
|
||||
return true;
|
||||
|
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
-----BEGIN QCMOD-----
|
||||
name: Qt >= 4.4
|
||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
||||
-----END QCMOD-----
|
||||
*/
|
||||
class qc_qt4 : public ConfObj
|
||||
@@ -11,6 +12,9 @@ public:
|
||||
QString shortname() const { return "Qt 4.4"; }
|
||||
bool exec()
|
||||
{
|
||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
conf->addDefine("DISABLE_GUI");
|
||||
}
|
||||
if(QT_VERSION >= 0x040500) {
|
||||
conf->addDefine("QT_4_5");
|
||||
}
|
||||
|
68
src/GUI.cpp
@@ -60,6 +60,8 @@
|
||||
#include "speedlimitdlg.h"
|
||||
#include "preferences.h"
|
||||
#include "console_imp.h"
|
||||
#include "trackerlist.h"
|
||||
#include "peerlistwidget.h"
|
||||
#include "torrentpersistentdata.h"
|
||||
#include "transferlistfilterswidget.h"
|
||||
#include "propertieswidget.h"
|
||||
@@ -78,6 +80,7 @@ using namespace libtorrent;
|
||||
// Constructor
|
||||
GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), displaySpeedInTitle(false), force_exit(false) {
|
||||
setupUi(this);
|
||||
|
||||
setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION)));
|
||||
// Setting icons
|
||||
this->setWindowIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent32.png")));
|
||||
@@ -185,6 +188,15 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
readSettings();
|
||||
properties->readSettings();
|
||||
|
||||
// Limit status filters list height
|
||||
int cur_height = 80;
|
||||
do {
|
||||
transferListFilters->getStatusFilters()->setFixedHeight(cur_height);
|
||||
cur_height += 10;
|
||||
transferListFilters->getStatusFilters()->scrollToBottom();
|
||||
}while(transferListFilters->getStatusFilters()->verticalScrollBar()->sliderPosition() > 0);
|
||||
transferListFilters->getStatusFilters()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
if(Preferences::startMinimized()) {
|
||||
setWindowState(Qt::WindowMinimized);
|
||||
}
|
||||
@@ -196,17 +208,24 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
GUI::~GUI() {
|
||||
qDebug("GUI destruction");
|
||||
hide();
|
||||
// Async deletion of Bittorrent session as early as possible
|
||||
// in order to speed up exit
|
||||
session_proxy sp = BTSession->asyncDeletion();
|
||||
// Some saving
|
||||
properties->saveSettings();
|
||||
disconnect(tabs, SIGNAL(currentChanged(int)), this, SLOT(tab_changed(int)));
|
||||
// Delete other GUI objects
|
||||
delete status_bar;
|
||||
delete transferList;
|
||||
delete guiUpdater;
|
||||
|
||||
if(rssWidget)
|
||||
delete rssWidget;
|
||||
delete searchEngine;
|
||||
delete transferListFilters;
|
||||
delete properties;
|
||||
delete transferList;
|
||||
delete hSplitter;
|
||||
delete vSplitter;
|
||||
delete guiUpdater;
|
||||
qDebug("1");
|
||||
if(systrayCreator) {
|
||||
delete systrayCreator;
|
||||
}
|
||||
@@ -214,19 +233,21 @@ GUI::~GUI() {
|
||||
delete systrayIcon;
|
||||
delete myTrayIconMenu;
|
||||
}
|
||||
qDebug("2");
|
||||
localServer->close();
|
||||
delete localServer;
|
||||
delete tabs;
|
||||
qDebug("3");
|
||||
// Keyboard shortcuts
|
||||
delete switchSearchShortcut;
|
||||
delete switchSearchShortcut2;
|
||||
delete switchTransferShortcut;
|
||||
delete switchRSSShortcut;
|
||||
qDebug("4");
|
||||
// Delete BTSession objects
|
||||
delete BTSession;
|
||||
qDebug("5");
|
||||
// May freeze for a few seconds after the next line
|
||||
// because the Bittorrent session proxy will
|
||||
// actually be deleted now and destruction
|
||||
// becomes synchronous
|
||||
qDebug("Exiting GUI destructor...");
|
||||
}
|
||||
|
||||
void GUI::displayRSSTab(bool enable) {
|
||||
@@ -641,8 +662,12 @@ void GUI::processParams(const QStringList& params) {
|
||||
BTSession->downloadFromUrl(param);
|
||||
}else{
|
||||
if(param.startsWith("magnet:", Qt::CaseInsensitive)) {
|
||||
// FIXME: Possibily skipped torrent addition dialog
|
||||
BTSession->addMagnetUri(param);
|
||||
if(useTorrentAdditionDialog) {
|
||||
torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
|
||||
dialog->showLoadMagnetURI(param);
|
||||
} else {
|
||||
BTSession->addMagnetUri(param);
|
||||
}
|
||||
} else {
|
||||
if(useTorrentAdditionDialog) {
|
||||
torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
|
||||
@@ -715,7 +740,10 @@ void GUI::loadPreferences(bool configure_session) {
|
||||
}
|
||||
unsigned int new_refreshInterval = Preferences::getRefreshInterval();
|
||||
transferList->setRefreshInterval(new_refreshInterval);
|
||||
|
||||
transferList->setAlternatingRowColors(Preferences::useAlternatingRowColors());
|
||||
properties->getFilesList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
|
||||
properties->getTrackerList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
|
||||
properties->getPeerList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
|
||||
// Queueing System
|
||||
if(Preferences::isQueueingSystemEnabled()) {
|
||||
if(!configure_session || !BTSession->isQueueingEnabled()) {
|
||||
@@ -740,7 +768,7 @@ void GUI::loadPreferences(bool configure_session) {
|
||||
// RSS
|
||||
if(Preferences::isRSSEnabled()) {
|
||||
displayRSSTab(true);
|
||||
rssWidget->updateRefreshInterval(Preferences::getRefreshInterval());
|
||||
rssWidget->updateRefreshInterval(Preferences::getRSSRefreshInterval());
|
||||
} else {
|
||||
displayRSSTab(false);
|
||||
}
|
||||
@@ -803,11 +831,12 @@ void GUI::showNotificationBaloon(QString title, QString msg) const {
|
||||
if (notify_init ("summary-body")) {
|
||||
NotifyNotification* notification;
|
||||
notification = notify_notification_new (title.toLocal8Bit().data(), msg.toLocal8Bit().data(), "qbittorrent", 0);
|
||||
GError* error = 0;
|
||||
gboolean success = notify_notification_show (notification, &error);
|
||||
gboolean success = notify_notification_show (notification, NULL);
|
||||
g_object_unref(G_OBJECT(notification));
|
||||
notify_uninit ();
|
||||
if(success)
|
||||
if(success) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if(systrayIcon)
|
||||
@@ -822,9 +851,16 @@ void GUI::showNotificationBaloon(QString title, QString msg) const {
|
||||
*****************************************************/
|
||||
|
||||
void GUI::downloadFromURLList(const QStringList& url_list) {
|
||||
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
|
||||
bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool();
|
||||
foreach(const QString url, url_list) {
|
||||
if(url.startsWith("magnet:", Qt::CaseInsensitive)) {
|
||||
BTSession->addMagnetUri(url);
|
||||
if(useTorrentAdditionDialog) {
|
||||
torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
|
||||
dialog->showLoadMagnetURI(url);
|
||||
} else {
|
||||
BTSession->addMagnetUri(url);
|
||||
}
|
||||
} else {
|
||||
BTSession->downloadFromUrl(url);
|
||||
}
|
||||
@@ -903,6 +939,6 @@ void GUI::on_actionOptions_triggered() {
|
||||
// an url
|
||||
void GUI::on_actionDownload_from_URL_triggered() {
|
||||
downloadFromURL *downloadFromURLDialog = new downloadFromURL(this);
|
||||
connect(downloadFromURLDialog, SIGNAL(urlsReadyToBeDownloaded(const QStringList&)), BTSession, SLOT(downloadFromURLList(const QStringList&)));
|
||||
connect(downloadFromURLDialog, SIGNAL(urlsReadyToBeDownloaded(const QStringList&)), this, SLOT(downloadFromURLList(const QStringList&)));
|
||||
}
|
||||
|
||||
|
187
src/GUI.h
@@ -59,104 +59,105 @@ class StatusBar;
|
||||
class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
// Bittorrent
|
||||
Bittorrent *BTSession;
|
||||
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
|
||||
// GUI related
|
||||
QTimer *guiUpdater;
|
||||
QTabWidget *tabs;
|
||||
StatusBar *status_bar;
|
||||
QPointer<options_imp> options;
|
||||
QPointer<QSystemTrayIcon> systrayIcon;
|
||||
QPointer<QTimer> systrayCreator;
|
||||
QMenu *myTrayIconMenu;
|
||||
TransferListWidget *transferList;
|
||||
TransferListFiltersWidget *transferListFilters;
|
||||
PropertiesWidget *properties;
|
||||
bool displaySpeedInTitle;
|
||||
bool force_exit;
|
||||
// Keyboard shortcuts
|
||||
QShortcut *switchSearchShortcut;
|
||||
QShortcut *switchSearchShortcut2;
|
||||
QShortcut *switchTransferShortcut;
|
||||
QShortcut *switchRSSShortcut;
|
||||
// Widgets
|
||||
QAction *prioSeparator;
|
||||
QAction *prioSeparator2;
|
||||
QSplitter *hSplitter;
|
||||
QSplitter *vSplitter;
|
||||
// Search
|
||||
SearchEngine *searchEngine;
|
||||
// RSS
|
||||
QPointer<RSSImp> rssWidget;
|
||||
// Misc
|
||||
QLocalServer *localServer;
|
||||
private:
|
||||
// Bittorrent
|
||||
Bittorrent *BTSession;
|
||||
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
|
||||
// GUI related
|
||||
QTimer *guiUpdater;
|
||||
QTabWidget *tabs;
|
||||
StatusBar *status_bar;
|
||||
QPointer<options_imp> options;
|
||||
QPointer<QSystemTrayIcon> systrayIcon;
|
||||
QPointer<QTimer> systrayCreator;
|
||||
QMenu *myTrayIconMenu;
|
||||
TransferListWidget *transferList;
|
||||
TransferListFiltersWidget *transferListFilters;
|
||||
PropertiesWidget *properties;
|
||||
bool displaySpeedInTitle;
|
||||
bool force_exit;
|
||||
// Keyboard shortcuts
|
||||
QShortcut *switchSearchShortcut;
|
||||
QShortcut *switchSearchShortcut2;
|
||||
QShortcut *switchTransferShortcut;
|
||||
QShortcut *switchRSSShortcut;
|
||||
// Widgets
|
||||
QAction *prioSeparator;
|
||||
QAction *prioSeparator2;
|
||||
QSplitter *hSplitter;
|
||||
QSplitter *vSplitter;
|
||||
// Search
|
||||
SearchEngine *searchEngine;
|
||||
// RSS
|
||||
QPointer<RSSImp> rssWidget;
|
||||
// Misc
|
||||
QLocalServer *localServer;
|
||||
|
||||
protected slots:
|
||||
// GUI related slots
|
||||
void dropEvent(QDropEvent *event);
|
||||
void dragEnterEvent(QDragEnterEvent *event);
|
||||
void toggleVisibility(QSystemTrayIcon::ActivationReason e);
|
||||
void on_actionAbout_triggered();
|
||||
void on_actionCreate_torrent_triggered();
|
||||
void on_actionWebsite_triggered() const;
|
||||
void on_actionBugReport_triggered() const;
|
||||
void on_actionShow_console_triggered();
|
||||
void readParamsOnSocket();
|
||||
void acceptConnection();
|
||||
void balloonClicked();
|
||||
void writeSettings();
|
||||
void readSettings();
|
||||
void on_actionExit_triggered();
|
||||
void createTrayIcon();
|
||||
void fullDiskError(QTorrentHandle& h, QString msg) const;
|
||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||
void createSystrayDelayed();
|
||||
void tab_changed(int);
|
||||
// Keyboard shortcuts
|
||||
void createKeyboardShortcuts();
|
||||
void displayTransferTab() const;
|
||||
void displaySearchTab() const;
|
||||
void displayRSSTab() const;
|
||||
// Torrent actions
|
||||
void on_actionSet_global_upload_limit_triggered();
|
||||
void on_actionSet_global_download_limit_triggered();
|
||||
void on_actionDocumentation_triggered() const;
|
||||
void on_actionOpen_triggered();
|
||||
void updateGUI();
|
||||
void loadPreferences(bool configure_session=true);
|
||||
void processParams(const QStringList& params);
|
||||
void addTorrent(QString path);
|
||||
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
||||
void processDownloadedFiles(QString path, QString url);
|
||||
void downloadFromURLList(const QStringList& urls);
|
||||
void finishedTorrent(QTorrentHandle& h) const;
|
||||
// Options slots
|
||||
void on_actionOptions_triggered();
|
||||
void optionsSaved();
|
||||
// HTTP slots
|
||||
void on_actionDownload_from_URL_triggered();
|
||||
protected slots:
|
||||
// GUI related slots
|
||||
void dropEvent(QDropEvent *event);
|
||||
void dragEnterEvent(QDragEnterEvent *event);
|
||||
void toggleVisibility(QSystemTrayIcon::ActivationReason e);
|
||||
void on_actionAbout_triggered();
|
||||
void on_actionCreate_torrent_triggered();
|
||||
void on_actionWebsite_triggered() const;
|
||||
void on_actionBugReport_triggered() const;
|
||||
void on_actionShow_console_triggered();
|
||||
void readParamsOnSocket();
|
||||
void acceptConnection();
|
||||
void balloonClicked();
|
||||
void writeSettings();
|
||||
void readSettings();
|
||||
void on_actionExit_triggered();
|
||||
void createTrayIcon();
|
||||
void fullDiskError(QTorrentHandle& h, QString msg) const;
|
||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||
void createSystrayDelayed();
|
||||
void tab_changed(int);
|
||||
// Keyboard shortcuts
|
||||
void createKeyboardShortcuts();
|
||||
void displayTransferTab() const;
|
||||
void displaySearchTab() const;
|
||||
void displayRSSTab() const;
|
||||
// Torrent actions
|
||||
void on_actionSet_global_upload_limit_triggered();
|
||||
void on_actionSet_global_download_limit_triggered();
|
||||
void on_actionDocumentation_triggered() const;
|
||||
void on_actionOpen_triggered();
|
||||
void updateGUI();
|
||||
void loadPreferences(bool configure_session=true);
|
||||
void processParams(const QStringList& params);
|
||||
void addTorrent(QString path);
|
||||
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
||||
void processDownloadedFiles(QString path, QString url);
|
||||
void finishedTorrent(QTorrentHandle& h) const;
|
||||
// Options slots
|
||||
void on_actionOptions_triggered();
|
||||
void optionsSaved();
|
||||
// HTTP slots
|
||||
void on_actionDownload_from_URL_triggered();
|
||||
|
||||
|
||||
public slots:
|
||||
void trackerAuthenticationRequired(QTorrentHandle& h);
|
||||
void setTabText(int index, QString text) const;
|
||||
void showNotificationBaloon(QString title, QString msg) const;
|
||||
public slots:
|
||||
void trackerAuthenticationRequired(QTorrentHandle& h);
|
||||
void setTabText(int index, QString text) const;
|
||||
void showNotificationBaloon(QString title, QString msg) const;
|
||||
void downloadFromURLList(const QStringList& urls);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *);
|
||||
void showEvent(QShowEvent *);
|
||||
bool event(QEvent * event);
|
||||
void displayRSSTab(bool enable);
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *);
|
||||
void showEvent(QShowEvent *);
|
||||
bool event(QEvent * event);
|
||||
void displayRSSTab(bool enable);
|
||||
|
||||
public:
|
||||
// Construct / Destruct
|
||||
GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
|
||||
~GUI();
|
||||
// Methods
|
||||
int getCurrentTabIndex() const;
|
||||
QPoint screenCenter() const;
|
||||
public:
|
||||
// Construct / Destruct
|
||||
GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
|
||||
~GUI();
|
||||
// Methods
|
||||
int getCurrentTabIndex() const;
|
||||
QPoint screenCenter() const;
|
||||
TransferListWidget* getTransferList() const { return transferList; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Before Width: | Height: | Size: 185 B After Width: | Height: | Size: 459 B |
Before Width: | Height: | Size: 743 B |
Before Width: | Height: | Size: 659 B |
BIN
src/Icons/oxygen/feed-subscribe.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
src/Icons/oxygen/folder-documents.png
Normal file
After Width: | Height: | Size: 409 B |
BIN
src/Icons/oxygen/services.png
Normal file
After Width: | Height: | Size: 722 B |
@@ -1,6 +1,6 @@
|
||||
[Desktop Entry]
|
||||
Categories=Qt;Network;P2P;
|
||||
Comment=V2.0.0
|
||||
Comment=V2.1.0
|
||||
Exec=qbittorrent %f
|
||||
GenericName=Bittorrent client
|
||||
GenericName[bg]=Торент клиент
|
||||
@@ -21,6 +21,7 @@ GenericName[pt_BR]=Cliente Bittorrent
|
||||
GenericName[ro]=Client Bittorrent
|
||||
GenericName[ru]=клиент Bittorrent
|
||||
GenericName[sk]=Klient siete Bittorrent
|
||||
GenericName[sr]=Bittorrent-клијент
|
||||
GenericName[sv]=Bittorrent-klient
|
||||
GenericName[tr]=Bittorrent istemcisi
|
||||
GenericName[uk]=Bittorrent-клієнт
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
BIN
src/Icons/skin/disconnected.png
Executable file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |