1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-12 03:12:18 +02:00

Compare commits

...

257 Commits

Author SHA1 Message Date
Christophe Dumez
e46abe4294 Tagged v2.1.0 release 2010-01-18 19:02:07 +00:00
Christophe Dumez
aaeb6b90ed Updated Greek and Bulgarian translations 2010-01-18 18:33:54 +00:00
Christophe Dumez
d124ada755 - Make sure status bar is rendered properly when the font size is higher than default 2010-01-18 18:24:43 +00:00
Christophe Dumez
31105aefe4 - Updated configure file (libtorrent >= 0.14.4 is required) 2010-01-18 17:10:25 +00:00
Christophe Dumez
44c258796e - Bump to final, updated changelog (Release is nearing) 2010-01-18 17:06:42 +00:00
Christophe Dumez
26100120a9 Updated Portuguese and Brazilian translations 2010-01-17 23:18:41 +00:00
Christophe Dumez
0db8ce891b Updated czech translation 2010-01-17 23:09:44 +00:00
Christophe Dumez
979aba5685 Updated Serbian translation 2010-01-17 21:31:17 +00:00
Christophe Dumez
396da6bd94 - Fix to make sure that the filters list height is always sufficient to display all the filters (without the need for a scrollbar) 2010-01-17 21:27:08 +00:00
Christophe Dumez
1b0d86220f - Increased number of failed authentication attempts to 5 in Web UI 2010-01-17 09:09:57 +00:00
Christophe Dumez
957d2c0d1a Updated Korean translation 2010-01-17 02:15:17 +00:00
Christophe Dumez
455657912a Updated Simplified Chinese translation 2010-01-17 02:02:55 +00:00
Christophe Dumez
e3da1902df French translation fix 2010-01-17 01:27:20 +00:00
Christophe Dumez
d0f8e9208f - Fixed year in man pages 2010-01-16 16:34:37 +00:00
Christophe Dumez
de50346428 HTTP proxy support for peer communication 2010-01-15 16:41:39 +00:00
Christophe Dumez
c7ca51f950 Use HTTP digest mode for Web UI authentication (instead of Basic) 2010-01-15 14:20:20 +00:00
Christophe Dumez
4522174555 Updated spanish and catalan translations 2010-01-15 07:32:33 +00:00
Christophe Dumez
126230ad08 BUGFIX: Properly display torrents with one file in subfolder(s) 2010-01-14 22:53:59 +00:00
Christophe Dumez
6aa1f4156a - bump to rc7 2010-01-14 22:08:06 +00:00
Christophe Dumez
2726faa090 - Updated french translation 2010-01-14 20:49:01 +00:00
Christophe Dumez
230b84032d - Updated Changelog 2010-01-14 20:41:58 +00:00
Christophe Dumez
9c4c5e2d1a - Protect Web UI authentication against brute forcing (IP are banned after 3 failed attempts) 2010-01-14 20:40:06 +00:00
Christophe Dumez
2bf8e2d2d7 - file priority can be set for finished torrents that have filtered files 2010-01-14 20:01:30 +00:00
Christophe Dumez
9bb05c8dea - Patch by Mariusz Fik to fix font inconsistancy in program preferences 2010-01-14 15:38:07 +00:00
Christophe Dumez
2707aa2818 - Display favicon in Web UI 2010-01-14 12:37:19 +00:00
Christophe Dumez
93c644da88 - Make sure no scroll bar is displayed in filters list 2010-01-14 12:22:52 +00:00
Christophe Dumez
4a114c0fdc - Updated spanish and Catalan translations 2010-01-14 12:17:47 +00:00
Christophe Dumez
f95108155d - Maximum value for rate limiting in peer list is now taken from program preferences 2010-01-13 21:23:02 +00:00
Christophe Dumez
75f75854c2 - Use automatic width for context menu in Web UI 2010-01-13 19:28:38 +00:00
Christophe Dumez
e20c3cd0b6 Updated Polish translation 2010-01-13 18:58:59 +00:00
Christophe Dumez
2273ea4099 - Use Alternating row colors in {Peers, trackers, Files} lists too (if enabled) 2010-01-12 23:16:18 +00:00
Christophe Dumez
b115b0c6a3 Updated German translation 2010-01-12 21:16:00 +00:00
Christophe Dumez
9d79a51f18 - Fix compilation error with libtorrent v0.14.3 2010-01-12 08:23:18 +00:00
Christophe Dumez
db9005158e - Updated Korean translation 2010-01-12 08:22:12 +00:00
Christophe Dumez
4491999a8c - qBittorrent requires libtorrent-rasterbar >= 0.14.4 2010-01-11 22:09:56 +00:00
Christophe Dumez
113a502a7e - Bump to rc6 2010-01-11 20:23:28 +00:00
Christophe Dumez
7ad39003f4 - Fix error in torrent addition dialog when the label name is left empty 2010-01-11 20:09:32 +00:00
Christophe Dumez
4b43871708 - Bump to v2.1.0rc5
- Disabled debug mode
2010-01-11 14:53:56 +00:00
Christophe Dumez
aa8f7552a2 - RSS filters are now alphabetically sorted
- Fix crash when renaming currently displayed RSS filter
- Remove overwriting confirmation when exporting RSS filters since Qt takes care of it
2010-01-11 14:39:58 +00:00
Christophe Dumez
19d94b53d2 Updated Swedish translation 2010-01-11 07:59:56 +00:00
Christophe Dumez
ca98a261e6 Updated Serbian translation 2010-01-10 18:53:19 +00:00
Christophe Dumez
535ec2ced6 Updated Romania and traditiona chinese translations 2010-01-10 16:15:44 +00:00
Christophe Dumez
a300c236ba - Code cleanup 2010-01-09 23:33:45 +00:00
Christophe Dumez
b16c26b24c - Label list is now alphabetically sorted 2010-01-09 23:24:50 +00:00
Christophe Dumez
1b1dde3fc8 - Fix '!' support in label names 2010-01-09 22:09:20 +00:00
Christophe Dumez
bd5880843f - flush cache before file preview (libtorrent >= 0.15 only) 2010-01-09 21:39:17 +00:00
Christophe Dumez
abf35a31f3 Updated Finnish translation 2010-01-09 21:06:50 +00:00
Christophe Dumez
015638035a Updated Spanish and Catalan translation 2010-01-09 20:08:47 +00:00
Christophe Dumez
8e27fe83f1 Updated greek translation 2010-01-09 19:02:40 +00:00
Christophe Dumez
ce4b105065 Updated slovak translation 2010-01-09 17:53:54 +00:00
Christophe Dumez
37a7b79a6f - Translated legal notice into French 2010-01-09 15:32:58 +00:00
Christophe Dumez
ef19e8aeef - Added legal notice dialog on startup. The user must agree for the program to start. 2010-01-09 15:26:20 +00:00
Christophe Dumez
f6886b4749 - Compilation fix for Qt 4.4 2010-01-09 14:19:43 +00:00
Christophe Dumez
8306959cb4 - Make sure the application is not built against QtGui when the GUI is disabled 2010-01-09 13:55:24 +00:00
Christophe Dumez
d1918ee206 Updated Serbian translation 2010-01-09 09:33:01 +00:00
Christophe Dumez
b2b76f9e35 Updated Traditional Chinese translation 2010-01-09 08:53:59 +00:00
Christophe Dumez
a07fb264e8 Updated German translation 2010-01-08 22:51:14 +00:00
Christophe Dumez
881f2d04d2 - Updated french translation 2010-01-08 20:45:09 +00:00
Christophe Dumez
e1b629df88 - Bump to rc4
- Clean up project file
2010-01-08 20:33:54 +00:00
Christophe Dumez
eab6a194e1 - Updated AUTHORS file 2010-01-08 20:17:12 +00:00
Christophe Dumez
3733bc9148 FEATURE: Search engine can now use a SOCKS5 proxy
BUGFIX: Search engine loads new proxy settings without program restart
Fix a bug in HTTP communication proxy settings
2010-01-08 20:15:08 +00:00
Christophe Dumez
ae5746a636 - Updated Changelog 2010-01-07 21:12:11 +00:00
Christophe Dumez
cb509cebb3 - Updated search resource file 2010-01-07 21:11:07 +00:00
Christophe Dumez
511c4474c7 - Promoted torrentdownloads.net and vertor.com search plugins from unofficial plugins to official (in qBittorrent v2.1.0) 2010-01-07 21:08:58 +00:00
Christophe Dumez
d063aea977 - Double-clicking on folders in torrent content opens it in a file explorer 2010-01-07 20:48:52 +00:00
Christophe Dumez
447efc52d8 - Added SOCKS5 proxy for http connections to Web UI too 2010-01-07 20:40:39 +00:00
Christophe Dumez
296acf820c Fix to proxy settings
Added back SOCKS5 proxy support for HTTP communications
2010-01-07 20:35:12 +00:00
Christophe Dumez
6ae49acb69 - qbittorrent-nox no longer installs a desktop files, nor qbittorrent icons 2010-01-07 20:02:25 +00:00
Christophe Dumez
af1b06c5be - Fix several bugs in RSS plugin
* RSS downloader takes into consideration maximum number of articles per feed
  * Fix possible issue with RSS folder deletion
  * Clear persistant data whenever a RSS feed is deleted
2010-01-07 19:51:25 +00:00
Christophe Dumez
4732c8565d - Refresh RSS feed as soon as feed downloader is enabled 2010-01-07 18:42:47 +00:00
Christophe Dumez
52dd1476db - Fix addInPause setting in torrent addition dialog 2010-01-07 18:17:20 +00:00
Christophe Dumez
63170b9214 - Updated spanish and catalan translations 2010-01-07 07:37:51 +00:00
Christophe Dumez
2203b399df Updated Catalan and spanish translations 2010-01-07 07:34:41 +00:00
Christophe Dumez
d80f7a6ef3 - Updated Polish, Finnish, Catalan and spanish translations 2010-01-06 18:04:03 +00:00
Christophe Dumez
88c56d8250 - Added support for magnet links in search engine. Most search Web sites provides magnet links now and in the futures, they may provide only the magnet links. 2010-01-05 22:31:06 +00:00
Christophe Dumez
fca24a8f84 - Bump to rc3 2010-01-05 21:06:20 +00:00
Christophe Dumez
6d140a141a - Updated french translation 2010-01-05 21:05:37 +00:00
Christophe Dumez
a18e325c18 FEATURE: Files contained in a torrent are opened on double click (files panel) 2010-01-05 20:57:33 +00:00
Christophe Dumez
c4d9c51e49 - Never display a horizontal scrollbar in status filters list 2010-01-05 20:31:20 +00:00
Christophe Dumez
27e980de28 - Added buttons to change trackers priority (libtorrent v0.14 only) 2010-01-05 19:59:25 +00:00
Christophe Dumez
3c4906bb4d - Patch in last commit was wrong 2010-01-05 18:48:51 +00:00
Christophe Dumez
da796c80c3 - Forgot to move the torrent data when its label is deleted 2010-01-05 18:11:52 +00:00
Christophe Dumez
7a2af0f506 - Updated spanish and Catalan translation 2010-01-05 17:19:19 +00:00
Christophe Dumez
3e562e7450 - Updated French translation 2010-01-05 12:30:20 +00:00
Christophe Dumez
4fc777268b - Validate new file names to make sure they are allowed by the file system 2010-01-05 12:28:42 +00:00
Christophe Dumez
037e57b687 - Validate label names to make sure there is no character forbidden by the file system 2010-01-05 12:18:17 +00:00
Christophe Dumez
2b289655c1 - Fix torrent deletion confirmation dialog so that the text does not get cut on the right. (Fix by Elrond, Thanks!) 2010-01-04 22:40:20 +00:00
Christophe Dumez
118ea6093d - Rename GUI-less qBittorrent executable to "qbittorrent-nox", with its own man page 2010-01-04 22:29:48 +00:00
Christophe Dumez
cac6f7428c - When incomplete torrents are saved to a different path, check if content is already present at final location
- Automacillay force a data recheck every time a torrent is moved (because libtorrent does not take care of checking if the torrent data exists at the destination location)
2010-01-04 21:16:33 +00:00
Christophe Dumez
ae6acc4ca2 - Fix possible issue with label counts when deleting a torrent 2010-01-04 19:44:03 +00:00
Christophe Dumez
641c6f0132 - Updated slovak translation 2010-01-04 19:34:07 +00:00
Christophe Dumez
56dc8cad71 - Added ASSERT 2010-01-03 21:09:01 +00:00
Christophe Dumez
7cc07d842c - Put back the ASSERT (it should no longer be hit) 2010-01-03 19:03:05 +00:00
Christophe Dumez
baaadf07fa - Do not save currently selected label since we no longer restore it on startup 2010-01-03 18:52:43 +00:00
Christophe Dumez
719b32ba36 - Fix bugs with torrent labeling (Problems when adding a torrent when a filter was selected) 2010-01-03 18:51:24 +00:00
Christophe Dumez
af5c1096b5 - Fix crash on start introduced in last commit 2010-01-03 18:42:16 +00:00
Christophe Dumez
3008222b92 - Make sure QModelIndex is correct before using it 2010-01-03 18:34:37 +00:00
Christophe Dumez
5ef9faacd5 Updated french translation
Bump to rc2
2010-01-03 15:04:04 +00:00
Christophe Dumez
ff65b6ea2f - Adapt torrent addition dialog size when the torrent is a magnet link (since we don't display torrent content) 2010-01-03 14:59:14 +00:00
Christophe Dumez
4c8a087b81 - Fix signal bug introduced in last commit 2010-01-03 14:41:29 +00:00
Christophe Dumez
8f4bf93f02 - Fix defining a new label from torrent addition dialog
- Stop catching SIGABRT, SIGSEGV once one is received to avoid possible infinite loop
2010-01-03 14:38:59 +00:00
Christophe Dumez
824b2f6fff - Update changelog and language files 2010-01-03 14:24:05 +00:00
Christophe Dumez
ba0c7334b7 - Use torrent addition dialog for Magnet URIs too 2010-01-03 14:20:31 +00:00
Christophe Dumez
a1dd724220 - Fix issue with torrent label not being remembered on startup under certain circumstances 2010-01-03 13:15:26 +00:00
Christophe Dumez
a7820e5f08 - Make sure the torrent file is valid before loading it 2010-01-03 13:00:16 +00:00
Christophe Dumez
1a2eee8060 - Fix to spanish and Catalan translations 2010-01-03 12:47:40 +00:00
Christophe Dumez
4a2713a9f0 - Updated program usage translatable strings to make sure translators do not translate program parameters 2010-01-03 09:17:41 +00:00
Christophe Dumez
5ece0b4f70 - Spanish and Catalan translations are now complete 2010-01-03 09:08:07 +00:00
Christophe Dumez
44e8ec2b37 - Removed "Bullet" from translatable strings since it is not displayed 2010-01-03 01:19:37 +00:00
Christophe Dumez
d7e5f4b895 - Update Spanish and Catalan translations 2010-01-03 01:02:04 +00:00
Christophe Dumez
b0c7bdf82b - Made program usage message (help) translatable
- Bump to rc1
2010-01-02 23:40:57 +00:00
Christophe Dumez
a239ac1a52 - Removed debug 2010-01-02 23:12:40 +00:00
Christophe Dumez
99459dc55d - Fixing indentation
- Stop catching SIGINT and SIGTERM once the application has exiting
2010-01-02 23:03:46 +00:00
Christophe Dumez
78ba99778a - Fix crash when deleting a label 2010-01-02 22:53:27 +00:00
Christophe Dumez
96d3df3135 - Updated Changelog and INSTALL file 2010-01-02 22:29:36 +00:00
Christophe Dumez
cbe4bbac6a - Merged headless branch 2010-01-02 22:20:37 +00:00
Christophe Dumez
f502e82ec4 - Fix to Catalan translation 2010-01-02 15:09:35 +00:00
Christophe Dumez
a5d8766a9e Use XDG folders (.cache, .local) instead of .qbittorrent
old .qbittorrent is imported and moved to XDG folder by qBittorrent so that the user does not loose anything
2010-01-02 11:22:44 +00:00
Christophe Dumez
55d8e3d76b Updated Catalan translation 2010-01-02 09:10:51 +00:00
Christophe Dumez
7b7fb4d278 - Updated Spanish and Catalan translations 2010-01-01 20:34:32 +00:00
Christophe Dumez
09c7c50ad3 - qBittorrent can now identify itself as KTorrent too 2010-01-01 20:29:03 +00:00
Christophe Dumez
131250dc03 - Bump to beta4 2010-01-01 13:38:55 +00:00
Christophe Dumez
130187723c - Updated language files and french translation 2010-01-01 13:38:23 +00:00
Christophe Dumez
7bac95c9ad - Torrents can be renamed in transfer list 2010-01-01 13:25:59 +00:00
Christophe Dumez
add2475700 - Files / Folders can also be renamed directly from torrent addition dialog 2010-01-01 10:55:13 +00:00
Christophe Dumez
533e402bca - Updated Spanish translation 2009-12-31 18:23:06 +00:00
Christophe Dumez
b87a23037e - Fix crash in pieces downloaded/availability bars when the torrent has too many pieces 2009-12-31 16:34:56 +00:00
Christophe Dumez
6d88bb5b83 - Made sure the pixmap cannot be drawn with uninitialized data 2009-12-31 15:10:30 +00:00
Christophe Dumez
435801c893 - Added Peer id spoofing settings to Web UI 2009-12-30 17:47:10 +00:00
Christophe Dumez
9d0577fa5c - Display the correct DHT port in the console 2009-12-30 16:47:03 +00:00
Christophe Dumez
f2891dae74 - Another fix for global download rate limiting in Web UI 2009-12-30 16:40:52 +00:00
Christophe Dumez
a43a1f5b67 - Fix global download rate limiting (Web UI) 2009-12-30 16:37:34 +00:00
Christophe Dumez
ee9ca1ece7 - Use global maximum transfer rates as maximum values in per-torrent speed limiting dialogs (Web UI) 2009-12-30 16:32:19 +00:00
Christophe Dumez
8271e20fac - Started work on adding Peer ID spoofing settings for Web UI (incomplete) 2009-12-30 16:21:05 +00:00
Christophe Dumez
132b1f7ffe - Use global maximum transfer rates as maximum values in per-torrent speed limiting dialogs 2009-12-30 16:18:50 +00:00
Christophe Dumez
77b4d97069 - Display current version in fields when the combobox value is changed (Peer ID spoofing) 2009-12-30 15:55:21 +00:00
Christophe Dumez
2168d5a30e - qBittorrent no longer listens on a random port whenever it receives a listen_failed_alert (because it may correspond to another network interface)
- Display a "disconnected" icon in status bar whenever qBittorrent fails to listen on the selected port
2009-12-30 15:52:20 +00:00
Christophe Dumez
7ad90b1b80 - Fix Proxy type rank in enum (to be consistent with older qBittorrent versions)
- Added Proxy settings to Web UI
- Fix tiny bugs in proxy settings
2009-12-30 15:07:51 +00:00
Christophe Dumez
f60ef5dbd5 - Added a button to reset spoofed client version/build to latest
- Fix little bug when loading saved version/build for spoofed client
2009-12-30 13:26:35 +00:00
Christophe Dumez
4dc26d0a77 - FEATURE: qBittorrent can identify itself as uTorrent or Vuze (Any version) 2009-12-30 13:10:06 +00:00
Christophe Dumez
551273b831 - Updated language files 2009-12-30 10:56:08 +00:00
Christophe Dumez
d5a09674ae FEATURE: Better proxy support and preferences remodeling 2009-12-30 10:53:58 +00:00
Christophe Dumez
907e620e9e - Added console message for Web UI (with port)
- Updated language files
2009-12-30 09:49:56 +00:00
Christophe Dumez
f96ec75eec - Improve Web UI settings so that the HTTP server is reconstructed only when necessary 2009-12-30 09:46:06 +00:00
Christophe Dumez
4d00db2b42 - Encode correctly Float Type using QVariant/JSON (introduced in Qt 4.6) 2009-12-29 22:53:00 +00:00
Christophe Dumez
db564b4521 - wildcard matching for "do not match" tokens too 2009-12-29 21:42:31 +00:00
Christophe Dumez
3f2076d195 - Use Wildcard matching instead of full regex one (much simpler and seems to be what the user expects) in RSS feed downloader 2009-12-29 21:40:23 +00:00
Christophe Dumez
ed13c43e93 - Fix several issues with the files properties in Web UI (introduced recently) 2009-12-29 20:26:32 +00:00
Christophe Dumez
b5a9fe71e1 - Fix JSON communication between qBittorrent and Web UI 2009-12-29 20:09:46 +00:00
Christophe Dumez
d0037d90f4 FEATURE: uTorrent compatible tracker list support (use torrentz.com url as a default) 2009-12-29 16:36:36 +00:00
Christophe Dumez
e885ee0d35 - Fix some other DHT port issues 2009-12-29 10:04:41 +00:00
Christophe Dumez
ff5e5d1062 - Fix some other listen port issues 2009-12-29 09:59:32 +00:00
Christophe Dumez
1bfadf5219 - Little piece availability computation optimization 2009-12-28 21:45:34 +00:00
Christophe Dumez
4f9eca78d9 - Fix to port settings 2009-12-28 21:17:15 +00:00
Christophe Dumez
7aa2994078 - Fix possible crash when closing a search tab 2009-12-28 20:52:21 +00:00
Christophe Dumez
1128b3ea83 * Replace priority combo boxes by check boxes in Web UI as in Regular UI
* Prepare http server and preferences classes to add new settings to Web UI
  * Tabified Program preferences in Web UI since there will be a lot of settings soon
  * Started to add new settings to Web UI (PeX, LSD, Encryption, save path, temp path, scan dir, preallocateall, queueing, listen_port, upnp, nat-pmp, language, ip filter) -> Proxy is missing
  * Added a command line parameter to change the web ui port
  * Fix PeerGuardian .p2b binary filter support
2009-12-28 19:39:47 +00:00
Christophe Dumez
9d06947125 - Updated Catalan author name 2009-12-23 20:11:48 +00:00
Christophe Dumez
14cc600a8b - Updated Spanish and Catalan translations 2009-12-23 20:07:34 +00:00
Christophe Dumez
4f3fd86f91 - Bump to v2.1.0beta2 2009-12-23 09:01:06 +00:00
Christophe Dumez
e663717d64 - Update comment 2009-12-22 19:23:34 +00:00
Christophe Dumez
8b5d388e77 - Use the save path set in program preferences as a default in torrent addition dialog 2009-12-22 19:17:27 +00:00
Christophe Dumez
22d781edd5 - Updated Changelog 2009-12-22 17:41:12 +00:00
Christophe Dumez
4252832ba5 - Fix issue with speed limiting (Infinite value was not handled properly)
- Improved bandwith limiting dialog by adding a SpinBox so that the user can input the value manually
2009-12-22 17:39:12 +00:00
Christophe Dumez
fab58296af - Fix exception in tracker list when torrent has no metadata. The exeption was caught anyway but the trackers were not displayed 2009-12-22 15:37:48 +00:00
Christophe Dumez
e142877e10 - Fix little typo 2009-12-22 14:20:16 +00:00
Christophe Dumez
6f6e453ae4 - COSMETIC: Use alternating row colors in transfer list (set in program preferences) 2009-12-22 14:06:36 +00:00
Christophe Dumez
50e620daf2 - Handle paths with (~, ., ..) properly 2009-12-22 10:29:39 +00:00
Christophe Dumez
c334439df6 - Updated spanish translator name 2009-12-21 16:53:18 +00:00
Christophe Dumez
2d9b4f273e - Updated Spanish translation 2009-12-21 16:09:11 +00:00
Christophe Dumez
15c7099e85 - Fix "Browse" button in program preferences for "Temp path" 2009-12-19 20:39:38 +00:00
Christophe Dumez
d2b1f6176f - Fix to Serbian translation 2009-12-19 19:35:08 +00:00
Christophe Dumez
8306d7931b - Updated French translation 2009-12-19 19:14:39 +00:00
Christophe Dumez
b07fbb726e - Bump to beta1 2009-12-19 18:55:55 +00:00
Christophe Dumez
9586f0e61c - Use checkboxes for selective downloading instead of comboboxes 2009-12-19 18:55:04 +00:00
Christophe Dumez
7d66c07cef - Remove old folders after renaming 2009-12-19 16:53:27 +00:00
Christophe Dumez
28ecb2fe1d - Check if Folder name is already in use before renaming
- Made overwrite check case insensitive on Windows
2009-12-19 15:39:39 +00:00
Christophe Dumez
a9cafeaa76 - Torrent folders can also be renamed 2009-12-19 15:31:50 +00:00
Christophe Dumez
5fc69ccb73 - Torrent files can be renamed 2009-12-19 14:59:38 +00:00
Christophe Dumez
bc626e3512 - Updated Serbian translation 2009-12-19 07:48:08 +00:00
Christophe Dumez
98561f9db9 - Fix "Append .!qB extension" for torrents without metadata (Magnet Links) 2009-12-18 20:33:59 +00:00
Christophe Dumez
b56dee2a92 - Minor cosmetic changes to program preferences 2009-12-18 19:56:14 +00:00
Christophe Dumez
885a7f592e - Fix removal of !.qB extension when files get completed 2009-12-18 17:57:47 +00:00
Christophe Dumez
6965448a24 - Little cosmetic change in torrent addition dialog 2009-12-18 17:31:51 +00:00
Christophe Dumez
475d63dad8 - Fix "Append .!qB extension" feature. It appeared only for empty files (instead of incomplete ones) 2009-12-18 17:26:00 +00:00
Christophe Dumez
c87a0bde0b - Do not display .!qB incomplete files extension in files panel 2009-12-18 17:22:53 +00:00
Christophe Dumez
c1bc9886b7 - Fix "Append .!qB extension to incomplete files" feature 2009-12-18 17:18:43 +00:00
Christophe Dumez
88f8437c5a - Fix "Append .!qB extension to incomplete files" feature for torrents added from magnet links 2009-12-18 17:01:47 +00:00
Christophe Dumez
411a1c641d - Fix several bugs in new "Append label to save path" feature 2009-12-18 16:56:57 +00:00
Christophe Dumez
dc0ad73eca - Fix torrent Labeling from torrent addition dialog 2009-12-18 16:36:48 +00:00
Christophe Dumez
04e008afa0 - Fix new settings not being saved 2009-12-18 16:32:26 +00:00
Christophe Dumez
a6207f70d5 - Fix .qbittorrent folder not being created 2009-12-18 15:13:39 +00:00
Christophe Dumez
b8a30be7bc - Read RSS items are now remembered correctly on restart for feeds with no torrents attached 2009-12-18 14:45:07 +00:00
Christophe Dumez
67d60766c1 - Fix Mininova search engine plugin 2009-12-18 14:14:21 +00:00
Christophe Dumez
97c0b28a98 - Fix piratebay search plugin 2009-12-18 13:58:13 +00:00
Christophe Dumez
c61aded388 - Initial implementation of "Append .!qB extension to incomplete files" (untested)
- Update torrent save path when its label is changed and "Append label to save path" setting is set
2009-12-18 13:36:47 +00:00
Christophe Dumez
1fd57b5d63 - FEATURE: Labeled torrent can be downloaded corresponding subfolders 2009-12-17 20:28:30 +00:00
Christophe Dumez
755b8dec30 - Peer Exchange can be disabled from preferences 2009-12-17 18:00:21 +00:00
Christophe Dumez
ecd5c1fcc3 - Updated language files 2009-12-17 17:40:55 +00:00
Christophe Dumez
db5402385a FEATURE: Disk cache size can be set from preferences 2009-12-17 17:37:54 +00:00
Christophe Dumez
09ef3073a1 - Forgot to make "Label" string translatable 2009-12-17 10:01:01 +00:00
Christophe Dumez
6dd3833e0f - Added icons for label actions in context menu 2009-12-17 09:59:43 +00:00
Christophe Dumez
d4762a4d8d - Updated Changelog 2009-12-16 22:20:28 +00:00
Christophe Dumez
38cc55ea09 - Add hover effect of labels/categories to animate drag'n drop 2009-12-16 22:06:24 +00:00
Christophe Dumez
5d60295db3 - Drag'n drop to labels cleanup 2009-12-16 15:06:02 +00:00
Christophe Dumez
18bd3b855c - Added drag'n Drop from torrent list to labels (for torrent labeling)
- Fix label counters update in some cases
2009-12-16 14:55:07 +00:00
Christophe Dumez
868d423c82 - Use folder icon for labels 2009-12-16 13:20:38 +00:00
Christophe Dumez
edb6857de0 - Label counters are now properly updated (and labeling seems to work fine) 2009-12-16 13:09:30 +00:00
Christophe Dumez
ed803fb994 - Initiated work on torrent labeling/categorization (functional but not perfect yet 2009-12-15 19:52:43 +00:00
Christophe Dumez
83d83a364d - Added Frederic Lassabe to AUTHORS file 2009-12-15 13:08:34 +00:00
Christophe Dumez
690bb92154 - Catch CTRL+C and exit cleanly 2009-12-15 13:01:57 +00:00
Christophe Dumez
8e39eef7aa - Display console messages on Terminal
- Program seems to be working
2009-12-15 12:55:46 +00:00
Christophe Dumez
1923a51c59 - Prepare a little headlessloader class 2009-12-15 11:59:48 +00:00
Christophe Dumez
3dc1107b40 - Fix typo in src.pro that broke compilation with GUI enabled 2009-12-15 11:48:57 +00:00
Christophe Dumez
dd22e9009c - Added exit() function to headless loader class so that we have a way to return to prompt 2009-12-15 11:14:03 +00:00
Christophe Dumez
c7ccf39abf - Use QCoreApplication instead of QApplication when GUI is disabled 2009-12-15 11:10:47 +00:00
Christophe Dumez
af166f53d3 - Added headlessloader class to prepare Fred's work 2009-12-15 11:08:22 +00:00
Christophe Dumez
21eb26a374 - Commit changes to helpers.py (add referer to download_file() helper function) 2009-12-15 11:03:04 +00:00
Christophe Dumez
e2aaf5d1de - Edited project file in order not to compile UI classes when DISABLE_GUI is defined
- Added #ifndef directives to main.cpp in order to fix compilation when DISABLE_GUI is defined
2009-12-15 10:56:41 +00:00
Christophe Dumez
0b7ca15c4f - Added --disable-gui flag to configure file (adds DISABLE_GUI define) 2009-12-15 10:36:18 +00:00
Christophe Dumez
07ee2a4aff Branched for work on headless running 2009-12-15 10:23:41 +00:00
Christophe Dumez
141d3b6737 - Fix RSS Feed downloader for RSS with no torrent attachment (but articles link points to the torrent instead) 2009-12-14 18:42:21 +00:00
Christophe Dumez
e2c3e6dbaa - Better checking of based32 encoded Magnet Links to increase robustness 2009-12-13 10:13:41 +00:00
Christophe Dumez
b1126556c0 - Added Hex Magnet link support 2009-12-13 09:50:06 +00:00
Christophe Dumez
69cb8d1398 - Fix possible crash in torrent properties 2009-12-13 00:34:54 +00:00
Christophe Dumez
094d979ce6 - Fix "Object::connect: No such slot TransferListWidget::toggleSelectedTorrentsSuperSeeding()" warning when using libtorrent v0.14 2009-12-12 23:57:31 +00:00
Christophe Dumez
92dd669597 - Updated version number to v2.1.0alpha in trunk (new development focus) 2009-12-12 22:54:47 +00:00
Christophe Dumez
32a8dec0e7 - ~/qBT_dir is no longer created when it is not used 2009-12-12 22:34:16 +00:00
Christophe Dumez
2dd5bccd49 - BUGFIX: Fix link to plugins.qbittorrent.org in plugins dialog 2009-12-12 22:15:55 +00:00
Christophe Dumez
18d0283463 - Fix column hiding behavior when queueing system is disabled 2009-12-12 21:59:06 +00:00
Christophe Dumez
9fe807b6f1 - Removed useless debug 2009-12-11 12:23:53 +00:00
Christophe Dumez
84f00bf3f6 - uTorrent user agent is now spoofed correctly 2009-12-11 12:18:00 +00:00
Christophe Dumez
d3687fd863 - Store Web UI password as md5 2009-12-10 19:19:19 +00:00
Christophe Dumez
d1a549a6cc - Updated Korean translation
- Updated Changelog
2009-12-10 16:57:16 +00:00
Christophe Dumez
c1552ff254 - Updated Italian translation 2009-12-10 02:55:13 +00:00
Christophe Dumez
54a396bc6e - Updated Japanese translator's e-mail 2009-12-09 14:36:50 +00:00
Christophe Dumez
ed732bca63 - Updated Hungarian translation 2009-12-09 14:25:48 +00:00
Christophe Dumez
02a4464e8f - Updated Bulgarian translation 2009-12-09 13:43:17 +00:00
Christophe Dumez
7f97df4462 - Updated name of Turkish translation in AUTHORS file 2009-12-09 13:09:49 +00:00
Christophe Dumez
9d20af02a2 - Some fixes to Greek translation 2009-12-09 11:50:28 +00:00
Christophe Dumez
cbaef050f0 - Fixed Serbian language name in Serbian (Српски) 2009-12-08 22:01:26 +00:00
Christophe Dumez
148139c2c4 - Fixed serbian translation (forgot to embed it into qBittorrent executable) 2009-12-08 21:55:27 +00:00
Christophe Dumez
793f8a103d - Slovak and Serbian were inverted
- Updated Serbia flag (better resolution)
2009-12-08 21:48:14 +00:00
Christophe Dumez
ffa48b64ac - Updated language files 2009-12-08 21:44:34 +00:00
Christophe Dumez
59a8e651f9 - Updated Changelog
- Bump to rc7
2009-12-08 19:31:17 +00:00
Christophe Dumez
fb9f2a01b5 - Fix Paste action in search field 2009-12-08 19:24:14 +00:00
Christophe Dumez
944e25a5d8 - Remember torrent addition dialog size and position 2009-12-08 17:48:33 +00:00
Christophe Dumez
ad597c72d2 - Optimize torrent addition dialog vertical space usage 2009-12-08 17:26:43 +00:00
Christophe Dumez
abbbf1e562 - Torrent Addition Dialog: File priorities were not taken into consideration (Thanks Mariusz) 2009-12-08 17:20:28 +00:00
Christophe Dumez
d2dd29c35a - Suppress compilation warning when geoip is not embedded in qBittorrent executable 2009-12-08 17:16:29 +00:00
Christophe Dumez
906f2bab1e - Disable debug again 2009-12-08 16:43:48 +00:00
Christophe Dumez
bb6468005d - Fix torrent upload in Web UI (worked randomly) 2009-12-08 16:42:59 +00:00
Christophe Dumez
a2423e97eb - Fix download from MAGNET URI in regular UI 2009-12-08 08:06:42 +00:00
Christophe Dumez
ed1d75ecb1 - Also look in /var/lib/GeoIP/GeoIP.dat for GeoIP database (OpenSuse 11.2)
* Thanks to Mariusz Fik for his report and patch
2009-12-08 07:55:08 +00:00
Christophe Dumez
1e4200345a - Updated Serbian translation 2009-12-08 07:51:41 +00:00
Christophe Dumez
be11f4e039 - Clean up RSS preferences loading 2009-12-07 22:04:20 +00:00
Christophe Dumez
22ec528cdf - Fix regular refresh of RSS feeds 2009-12-07 21:58:26 +00:00
Christophe Dumez
ebf341a6de - Update INSTALL file to explain that geoip-database is a runtime-only dependency 2009-12-07 21:16:59 +00:00
154 changed files with 48727 additions and 20630 deletions

14
AUTHORS
View File

@@ -12,6 +12,10 @@ Code from other projects:
copyright: Malte Starostik <malte@kde.org>
license: LGPL
* files src/search_engine/socks.py
copyright: Dan Haim <negativeiq@users.sourceforge.net>
license: BSD
Images Authors:
* files: src/Icons/*.png
copyright: Gnome Icon Theme
@@ -57,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)
@@ -67,10 +71,10 @@ 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: Mariusz Fik (fisiu@opensuse.org)
@@ -79,8 +83,8 @@ Translations authors:
- 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

135
Changelog
View File

@@ -1,4 +1,90 @@
* 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
@@ -38,10 +124,14 @@
- 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
@@ -55,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

55
INSTALL
View File

@@ -1,30 +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
- 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
- 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
- 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.
DOCUMENTATION:
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.

31
configure vendored
View File

@@ -18,6 +18,8 @@ Main options:
--help This help text.
Dependency options:
--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
@@ -140,6 +142,11 @@ while [ $# -gt 0 ]; do
shift
;;
--disable-gui)
QC_DISABLE_GUI="Y"
shift
;;
--with-libboost-inc=*)
QC_WITH_LIBBOOST_INC=$optarg
shift
@@ -181,6 +188,7 @@ 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
@@ -290,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
@@ -300,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");
}
@@ -318,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;
@@ -333,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;
@@ -410,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;
@@ -453,6 +469,10 @@ public:
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
@@ -461,9 +481,9 @@ public:
return true;
#ifdef Q_WS_X11
}
if(QFile::exists("/usr/share/GeoIP/GeoIP.dat") || QFile::exists("/usr/local/share/GeoIP/GeoIP.dat"))
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\nCountry resolution will be slow.");
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
}
@@ -1431,6 +1451,7 @@ 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

44
doc/qbittorrent-nox.1 Normal file
View 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>

View File

@@ -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

View File

@@ -12,6 +12,10 @@ public:
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
@@ -20,9 +24,9 @@ public:
return true;
#ifdef Q_WS_X11
}
if(QFile::exists("/usr/share/GeoIP/GeoIP.dat") || QFile::exists("/usr/local/share/GeoIP/GeoIP.dat"))
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\nCountry resolution will be slow.");
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
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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");
}

View File

@@ -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);
}
@@ -650,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);
@@ -724,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()) {
@@ -749,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);
}
@@ -832,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);
}
@@ -913,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
View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 496 B

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

View File

@@ -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,7 +21,7 @@ GenericName[pt_BR]=Cliente Bittorrent
GenericName[ro]=Client Bittorrent
GenericName[ru]=клиент Bittorrent
GenericName[sk]=Klient siete Bittorrent
GenericName[sr]=БитТоррент клијент
GenericName[sr]=Bittorrent-клијент
GenericName[sv]=Bittorrent-klient
GenericName[tr]=Bittorrent istemcisi
GenericName[uk]=Bittorrent-клієнт

BIN
src/Icons/skin/disconnected.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -64,7 +64,7 @@ class about : public QDialog, private Ui::AboutDlg{
te_translation->append(QString::fromUtf8(
"<i>- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
- <u>Bulgarian:</u> Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)<br>\
- <u>Catalan:</u> Gekko Dam Beer (gekko04@users.sourceforge.net)<br>\
- <u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)<br>\
- <u>Chinese (Simplified):</u> Guo Yue (yue.guo0418@gmail.com)<br>\
- <u>Chinese (Traditional):</u> Yi-Shun Wang (dnextstep@gmail.com)<br>\
- <u>Czech:</u> Jirka Vilim (web@tets.cz)<br>\
@@ -75,7 +75,7 @@ class about : public QDialog, private Ui::AboutDlg{
- <u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)<br>\
- <u>Hungarian:</u> Majoros Péter (majoros.peterj@gmail.com)<br>\
- <u>Italian:</u> Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)<br>\
- <u>Japanese:</u> Nardog (nardog@e2umail.com)<br>\
- <u>Japanese:</u> Nardog (alphisation@gmail.com)<br>\
- <u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)<br>\
- <u>Norwegian:</u> Lars-Erik Labori (hamil@users.sourceforge.net)<br>\
- <u>Polish:</u> Mariusz Fik (fisiu@opensuse.org)<br>\
@@ -84,7 +84,7 @@ class about : public QDialog, private Ui::AboutDlg{
- <u>Russian:</u> Nick Khazov (m2k3d0n@users.sourceforge.net) and Alexey Morsov (samurai@ricom.ru)<br>\
- <u>Serbian:</u> Anaximandar Milet (anaximandar@operamail.com)<br>\
- <u>Slovak:</u> helix84<br>\
- <u>Spanish:</u> Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net) and Gabriel de Oliveira (deadloop@hotmail.com)<br>\
- <u>Spanish:</u> Francisco Luque Contreras (frannoe@ya.com)<br>\
- <u>Swedish:</u> Daniel Nylander (po@danielnylander.se)<br>\
- <u>Turkish:</u> Hasan YILMAZ (iletisim@hedefturkce.com) and Erdem Bingöl (erdem84@gmail.com)<br>\
- <u>Ukrainian:</u> Andrey Shpachenko (masterfix@users.sourceforge.net)<br><br>"));

File diff suppressed because it is too large Load Diff

View File

@@ -34,8 +34,12 @@
#include <QMap>
#include <QUrl>
#include <QStringList>
#ifdef DISABLE_GUI
#include <QCoreApplication>
#else
#include <QApplication>
#include <QPalette>
#endif
#include <QPointer>
#include <libtorrent/session.hpp>
@@ -107,12 +111,20 @@ private:
bool NATPMPEnabled;
bool LSDEnabled;
bool DHTEnabled;
int current_dht_port;
bool PeXEnabled;
bool queueingEnabled;
bool appendLabelToSavePath;
#ifdef LIBTORRENT_0_15
bool appendqBExtension;
#endif
QString defaultSavePath;
QString defaultTempPath;
// GeoIP
#ifndef DISABLE_GUI
bool resolve_countries;
bool geoipDBLoaded;
#endif
// ETA Computation
QPointer<QTimer> timerETA;
QHash<QString, QList<int> > ETA_samples;
@@ -194,10 +206,18 @@ public slots:
void setGlobalRatio(float ratio);
void setDeleteRatio(float ratio);
void setDHTPort(int dht_port);
void setProxySettings(proxy_settings proxySettings, bool trackers=true, bool peers=true, bool web_seeds=true, bool dht=true);
void setPeerProxySettings(proxy_settings proxySettings);
void setHTTPProxySettings(proxy_settings proxySettings);
void setSessionSettings(session_settings sessionSettings);
void startTorrentsInPause(bool b);
void setDefaultTempPath(QString temppath);
void setAppendLabelToSavePath(bool append);
void appendLabelToTorrentSavePath(QTorrentHandle h);
void changeLabelInTorrentSavePath(QTorrentHandle h, QString old_label, QString new_label);
#ifdef LIBTORRENT_0_15
void appendqBextensionToTorrent(QTorrentHandle h, bool append);
void setAppendqBExtension(bool append);
#endif
void applyEncryptionSettings(pe_settings se);
void setDownloadLimit(QString hash, long val);
void setUploadLimit(QString hash, long val);
@@ -205,7 +225,11 @@ public slots:
void enableNATPMP(bool b);
void enableLSD(bool b);
bool enableDHT(bool b);
#ifdef DISABLE_GUI
void addConsoleMessage(QString msg, QString color=QString::null);
#else
void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText));
#endif
void addPeerBanMessage(QString msg, bool from_ipfilter);
void processDownloadedFile(QString, QString);
void addMagnetSkipAddDlg(QString uri);
@@ -233,6 +257,8 @@ signals:
void downloadFromUrlFailure(QString url, QString reason);
void torrentFinishedChecking(QTorrentHandle& h);
void metadataReceived(QTorrentHandle &h);
void savePathChanged(QTorrentHandle &h);
void newConsoleMessage(QString msg);
};
#endif

View File

@@ -36,6 +36,7 @@
#include <QList>
#include <QPixmap>
#include <libtorrent/bitfield.hpp>
#include <math.h>
using namespace libtorrent;
#define BAR_HEIGHT 18
@@ -55,19 +56,46 @@ public:
void setProgress(bitfield pieces) {
if(pieces.empty()) {
// Empty bar
pixmap = QPixmap(1, 1);
QPainter painter(&pixmap);
painter.setPen(Qt::white);
painter.drawPoint(0,0);
QPixmap pix = QPixmap(1, 1);
pix.fill();
pixmap = pix;
} else {
pixmap = QPixmap(pieces.size(), 1);
QPainter painter(&pixmap);
for(uint i=0; i<pieces.size(); ++i) {
if(pieces[i])
painter.setPen(Qt::blue);
else
painter.setPen(Qt::white);
painter.drawPoint(i,0);
int nb_pieces = pieces.size();
// Reduce the number of pieces before creating the pixmap
// otherwise it can crash when there are too many pieces
if(nb_pieces > width()) {
int ratio = floor(nb_pieces/(double)width());
QVector<bool> scaled_pieces;
for(int i=0; i<nb_pieces; i+= ratio) {
bool have = true;
for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
if(!pieces[i]) { have = false; break; }
}
scaled_pieces << have;
}
QPixmap pix = QPixmap(scaled_pieces.size(), 1);
pix.fill();
QPainter painter(&pix);
for(int i=0; i<scaled_pieces.size(); ++i) {
if(scaled_pieces[i])
painter.setPen(Qt::blue);
else
painter.setPen(Qt::white);
painter.drawPoint(i,0);
}
pixmap = pix;
} else {
QPixmap pix = QPixmap(pieces.size(), 1);
pix.fill();
QPainter painter(&pix);
for(uint i=0; i<pieces.size(); ++i) {
if(pieces[i])
painter.setPen(Qt::blue);
else
painter.setPen(Qt::white);
painter.drawPoint(i,0);
}
pixmap = pix;
}
}
update();

View File

@@ -35,6 +35,8 @@
#include <QNetworkRequest>
#include <QNetworkProxy>
enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4, SOCKS4=5};
/** Download Thread **/
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
@@ -105,7 +107,7 @@ void downloadThread::applyProxySettings() {
qDebug("Using proxy: %s", (IP+QString(":")+port).toLocal8Bit().data());
proxy.setPort(port.toUShort());
// Default proxy type is HTTP, we must change if it is SOCKS5
if(intValue%2==0) {
if(intValue == SOCKS5 || intValue == SOCKS5_PW) {
qDebug("Proxy is SOCKS5, not HTTP");
proxy.setType(QNetworkProxy::Socks5Proxy);
} else {

View File

@@ -170,7 +170,7 @@ void engineSelectDlg::on_actionUninstall_triggered() {
}else {
// Proceed with uninstall
// remove it from hard drive
QDir enginesFolder(misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines");
QDir enginesFolder(misc::searchEngineLocation()+QDir::separator()+"engines");
QStringList filters;
filters << id+".*";
QStringList files = enginesFolder.entryList(filters, QDir::Files, QDir::Unsorted);
@@ -245,7 +245,7 @@ QTreeWidgetItem* engineSelectDlg::findItemWithID(QString id){
}
bool engineSelectDlg::isUpdateNeeded(QString plugin_name, float new_version) const {
float old_version = SearchEngine::getPluginVersion(misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py");
float old_version = SearchEngine::getPluginVersion(misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py");
qDebug("IsUpdate needed? tobeinstalled: %.2f, alreadyinstalled: %.2f", new_version, old_version);
return (new_version > old_version);
}
@@ -260,7 +260,7 @@ void engineSelectDlg::installPlugin(QString path, QString plugin_name) {
return;
}
// Process with install
QString dest_path = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py";
QString dest_path = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py";
bool update = false;
if(QFile::exists(dest_path)) {
// Backup in case install fails
@@ -324,12 +324,12 @@ void engineSelectDlg::addNewEngine(QString engine_name) {
setRowColor(pluginsTree->indexOfTopLevelItem(item), "red");
}
// Handle icon
QString iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".png";
QString iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".png";
if(QFile::exists(iconPath)) {
// Good, we already have the icon
item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
} else {
iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".ico";
iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".ico";
if(QFile::exists(iconPath)) { // ICO support
item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
} else {
@@ -427,9 +427,9 @@ void engineSelectDlg::processDownloadedFile(QString url, QString filePath) {
QFile icon(filePath);
icon.open(QIODevice::ReadOnly);
if(ICOHandler::canRead(&icon))
iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+id+".ico";
iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+id+".ico";
else
iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+id+".png";
iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+id+".png";
QFile::copy(filePath, iconPath);
item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
}

View File

@@ -33,12 +33,12 @@
#include "bittorrent.h"
#include "misc.h"
#include "preferences.h"
#include "proplistdelegate.h"
//#include "proplistdelegate.h"
#include "torrentpersistentdata.h"
#include <QDebug>
EventManager::EventManager(QObject *parent, Bittorrent *BTSession)
: QObject(parent), BTSession(BTSession)
: QObject(parent), BTSession(BTSession)
{
}
@@ -103,13 +103,9 @@ QList<QVariantMap> EventManager::getPropFilesInfo(QString hash) const {
int i=0;
for(fi=t.begin_files(); fi != t.end_files(); fi++) {
QVariantMap file;
if(h.num_files() == 1) {
file["name"] = h.name();
} else {
QString path = QDir::cleanPath(misc::toQString(fi->path.string()));
QString name = path.split('/').last();
file["name"] = name;
}
QString path = QDir::cleanPath(misc::toQString(fi->path.string()));
QString name = path.split('/').last();
file["name"] = name;
file["size"] = misc::friendlyUnit((double)fi->size);
if(fi->size > 0)
file["progress"] = fp[i]/(double)fi->size;
@@ -122,14 +118,162 @@ QList<QVariantMap> EventManager::getPropFilesInfo(QString hash) const {
return files;
}
void EventManager::setGlobalPreferences(QVariantMap m) const {
// UI
if(m.contains("locale"))
Preferences::setLocale(m["locale"].toString());
// Downloads
if(m.contains("save_path"))
Preferences::setSavePath(m["save_path"].toString());
if(m.contains("temp_path_enabled"))
Preferences::setTempPathEnabled(m["temp_path_enabled"].toBool());
if(m.contains("temp_path"))
Preferences::setTempPath(m["temp_path"].toString());
if(m.contains("scan_dir"))
Preferences::setScanDir(m["scan_dir"].toString());
if(m.contains("preallocate_all"))
Preferences::preAllocateAllFiles(m["preallocate_all"].toBool());
if(m.contains("queueing_enabled"))
Preferences::setQueueingSystemEnabled(m["queueing_enabled"].toBool());
if(m.contains("max_active_downloads"))
Preferences::setMaxActiveDownloads(m["max_active_downloads"].toInt());
if(m.contains("max_active_torrents"))
Preferences::setMaxActiveTorrents(m["max_active_torrents"].toInt());
if(m.contains("max_active_uploads"))
Preferences::setMaxActiveUploads(m["max_active_uploads"].toInt());
#ifdef LIBTORRENT_0_15
if(m.contains("incomplete_files_ext"))
Preferences::useIncompleteFilesExtension(m["incomplete_files_ext"].toBool());
#endif
// Connection
if(m.contains("listen_port"))
Preferences::setSessionPort(m["listen_port"].toInt());
if(m.contains("upnp"))
Preferences::setUPnPEnabled(m["upnp"].toBool());
if(m.contains("natpmp"))
Preferences::setNATPMPEnabled(m["natpmp"].toBool());
if(m.contains("dl_limit"))
Preferences::setGlobalDownloadLimit(m["dl_limit"].toInt());
if(m.contains("up_limit"))
Preferences::setGlobalUploadLimit(m["up_limit"].toInt());
if(m.contains("max_connec"))
Preferences::setMaxConnecs(m["max_connec"].toInt());
if(m.contains("max_connec_per_torrent"))
Preferences::setMaxConnecsPerTorrent(m["max_connec_per_torrent"].toInt());
if(m.contains("max_uploads_per_torrent"))
Preferences::setMaxUploadsPerTorrent(m["max_uploads_per_torrent"].toInt());
// Bittorrent
if(m.contains("dht"))
Preferences::setDHTEnabled(m["dht"].toBool());
if(m.contains("pex"))
Preferences::setPeXEnabled(m["pex"].toBool());
qDebug("Pex support: %d", (int)m["pex"].toBool());
if(m.contains("lsd"))
Preferences::setLSDEnabled(m["lsd"].toBool());
if(m.contains("encryption"))
Preferences::setEncryptionSetting(m["encryption"].toInt());
if(m.contains("peer_id"))
Preferences::setPeerID(m["peer_id"].toString());
if(m.contains("peer_version"))
Preferences::setClientVersion(m["peer_version"].toString());
if(m.contains("peer_build"))
Preferences::setClientBuild(m["peer_build"].toString());
// Proxy
if(m.contains("proxy_type"))
Preferences::setPeerProxyType(m["proxy_type"].toInt());
if(m.contains("proxy_ip"))
Preferences::setPeerProxyIp(m["proxy_ip"].toString());
if(m.contains("proxy_port"))
Preferences::setPeerProxyPort(m["proxy_port"].toUInt());
if(m.contains("proxy_auth_enabled"))
Preferences::setPeerProxyAuthEnabled(m["proxy_auth_enabled"].toBool());
if(m.contains("proxy_username"))
Preferences::setPeerProxyUsername(m["proxy_username"].toString());
if(m.contains("proxy_password"))
Preferences::setPeerProxyPassword(m["proxy_password"].toString());
if(m.contains("http_proxy_type"))
Preferences::setHTTPProxyType(m["http_proxy_type"].toInt());
if(m.contains("http_proxy_ip"))
Preferences::setHTTPProxyIp(m["http_proxy_ip"].toString());
if(m.contains("http_proxy_port"))
Preferences::setHTTPProxyPort(m["http_proxy_port"].toUInt());
if(m.contains("http_proxy_auth_enabled"))
Preferences::setHTTPProxyAuthEnabled(m["http_proxy_auth_enabled"].toBool());
if(m.contains("http_proxy_username"))
Preferences::setHTTPProxyUsername(m["http_proxy_username"].toString());
if(m.contains("http_proxy_password"))
Preferences::setHTTPProxyPassword(m["http_proxy_password"].toString());
// IP Filter
if(m.contains("ip_filter_enabled"))
Preferences::setFilteringEnabled(m["ip_filter_enabled"].toBool());
if(m.contains("ip_filter_path"))
Preferences::setFilter(m["ip_filter_path"].toString());
// Web UI
if(m.contains("web_ui_port"))
Preferences::setWebUiPort(m["web_ui_port"].toUInt());
if(m.contains("web_ui_username"))
Preferences::setWebUiUsername(m["web_ui_username"].toString());
if(m.contains("web_ui_password"))
Preferences::setWebUiPassword(m["web_ui_password"].toString());
// Reload preferences
BTSession->configureSession();
}
QVariantMap EventManager::getGlobalPreferences() const {
QVariantMap data;
// UI
data["locale"] = Preferences::getLocale();
// Downloads
data["save_path"] = Preferences::getSavePath();
data["temp_path_enabled"] = Preferences::isTempPathEnabled();
data["temp_path"] = Preferences::getTempPath();
data["scan_dir_enabled"] = Preferences::isDirScanEnabled();
data["scan_dir"] = Preferences::getScanDir();
data["preallocate_all"] = Preferences::preAllocateAllFiles();
data["queueing_enabled"] = Preferences::isQueueingSystemEnabled();
data["max_active_downloads"] = Preferences::getMaxActiveDownloads();
data["max_active_torrents"] = Preferences::getMaxActiveTorrents();
data["max_active_uploads"] = Preferences::getMaxActiveUploads();
#ifdef LIBTORRENT_0_15
data["incomplete_files_ext"] = Preferences::useIncompleteFilesExtension();
#endif
// Connection
data["listen_port"] = Preferences::getSessionPort();
data["upnp"] = Preferences::isUPnPEnabled();
data["natpmp"] = Preferences::isNATPMPEnabled();
data["dl_limit"] = Preferences::getGlobalDownloadLimit();
data["up_limit"] = Preferences::getGlobalUploadLimit();
data["dht"] = Preferences::isDHTEnabled();
data["max_connec"] = Preferences::getMaxConnecs();
data["max_connec_per_torrent"] = Preferences::getMaxConnecsPerTorrent();
data["max_uploads_per_torrent"] = Preferences::getMaxUploadsPerTorrent();
// Bittorrent
data["dht"] = Preferences::isDHTEnabled();
data["pex"] = Preferences::isPeXEnabled();
data["lsd"] = Preferences::isLSDEnabled();
data["encryption"] = Preferences::getEncryptionSetting();
data["peer_id"] = Preferences::getPeerID();
data["peer_version"] = Preferences::getClientVersion();
data["peer_build"] = Preferences::getClientBuild();
// Proxy
data["proxy_type"] = Preferences::getPeerProxyType();
data["proxy_ip"] = Preferences::getPeerProxyIp();
data["proxy_port"] = Preferences::getPeerProxyPort();
data["proxy_auth_enabled"] = Preferences::isPeerProxyAuthEnabled();
data["proxy_username"] = Preferences::getPeerProxyUsername();
data["proxy_password"] = Preferences::getPeerProxyPassword();
data["http_proxy_type"] = Preferences::getHTTPProxyType();
data["http_proxy_ip"] = Preferences::getHTTPProxyIp();
data["http_proxy_port"] = Preferences::getHTTPProxyPort();
data["http_proxy_auth_enabled"] = Preferences::isHTTPProxyAuthEnabled();
data["http_proxy_username"] = Preferences::getHTTPProxyUsername();
data["http_proxy_password"] = Preferences::getHTTPProxyPassword();
// IP Filter
data["ip_filter_enabled"] = Preferences::isFilteringEnabled();
data["ip_filter_path"] = Preferences::getFilter();
// Web UI
data["web_ui_port"] = Preferences::getWebUiPort();
data["web_ui_username"] = Preferences::getWebUiUsername();
data["web_ui_password"] = Preferences::getWebUiPassword();
return data;
}
@@ -162,10 +306,10 @@ QVariantMap EventManager::getPropGeneralInfo(QString hash) const {
data["nb_connections"] = QString::number(h.num_connections())+" ("+tr("%1 max", "e.g. 10 max").arg(QString::number(h.connections_limit()))+")";
// Update ratio info
double ratio = BTSession->getRealRatio(h.hash());
if(ratio > 100.)
data["share_ratio"] = QString::fromUtf8("∞");
else
data["share_ratio"] = QString(QByteArray::number(ratio, 'f', 1));
if(ratio > 100.)
data["share_ratio"] = QString::fromUtf8("∞");
else
data["share_ratio"] = QString(QByteArray::number(ratio, 'f', 1));
}
return data;
}
@@ -233,7 +377,7 @@ void EventManager::modifiedTorrent(QTorrentHandle h)
}
event["name"] = QVariant(h.name());
event["size"] = QVariant(misc::friendlyUnit(h.actual_size()));
event["progress"] = QVariant(h.progress());
event["progress"] = QVariant((double)h.progress());
event["dlspeed"] = QVariant(tr("%1/s", "e.g. 120 KiB/s").arg(misc::friendlyUnit(h.download_payload_rate())));
if(BTSession->isQueueingEnabled()) {
if(h.queue_position() >= 0)

View File

@@ -55,6 +55,7 @@ class EventManager : public QObject
QList<QVariantMap> getPropTrackersInfo(QString hash) const;
QList<QVariantMap> getPropFilesInfo(QString hash) const;
QVariantMap getGlobalPreferences() const;
void setGlobalPreferences(QVariantMap m) const;
public slots:
void addedTorrent(QTorrentHandle& h);

View File

@@ -47,10 +47,16 @@ public:
}
}
void itemRemoved(QTreeWidgetItem *item) {
void itemAboutToBeRemoved(QTreeWidgetItem *item) {
RssFile* file = mapping.take(item);
if(file->getType() == RssFile::STREAM)
if(file->getType() == RssFile::STREAM) {
feeds_items.remove(file->getID());
} else {
QList<RssStream*> feeds = ((RssFolder*)file)->getAllFeeds();
foreach(RssStream* feed, feeds) {
feeds_items.remove(feed->getID());
}
}
}
bool hasFeed(QString url) const {

View File

@@ -64,17 +64,21 @@ public:
bool matches(QString s) {
QStringList match_tokens = getMatchingTokens();
//qDebug("Checking matching tokens: \"%s\"", getMatchingTokens_str().toLocal8Bit().data());
foreach(const QString& token, match_tokens) {
if(token.isEmpty() || token == "")
continue;
QRegExp reg(token, Qt::CaseInsensitive);
//qDebug("Token: %s", token.toLocal8Bit().data());
QRegExp reg(token, Qt::CaseInsensitive, QRegExp::Wildcard);
//reg.setMinimal(false);
if(reg.indexIn(s) < 0) return false;
}
qDebug("Checking not matching tokens");
// Checking not matching
QStringList notmatch_tokens = getNotMatchingTokens();
foreach(const QString& token, notmatch_tokens) {
if(token.isEmpty()) continue;
QRegExp reg(token, Qt::CaseInsensitive);
QRegExp reg(token, Qt::CaseInsensitive, QRegExp::Wildcard);
if(reg.indexIn(s) > -1) return false;
}
return true;
@@ -257,6 +261,7 @@ public:
// Restore saved info
enableDl_cb->setChecked(filters.isDownloadingEnabled());
fillFiltersList();
filtersList->sortItems(Qt::AscendingOrder);
if(filters.size() > 0) {
// Select first filter
filtersList->setCurrentItem(filtersList->item(0));
@@ -267,6 +272,8 @@ public:
}
~FeedDownloaderDlg() {
if(enableDl_cb->isChecked())
emit filteringEnabled();
// Make sure we save everything
saveCurrentFilterSettings();
filters.save();
@@ -374,11 +381,14 @@ protected slots:
QMessageBox::warning(0, tr("Invalid filter name"), tr("This filter name is already in use."));
}
}while(!validated);
// Save the current filter
saveCurrentFilterSettings();
// Rename the filter
filters.rename(current_name, new_name);
if(selected_filter == current_name)
selected_filter = new_name;
item->setText(new_name);
filtersList->sortItems(Qt::AscendingOrder);
}
}
@@ -432,6 +442,7 @@ protected slots:
}
}while(!validated);
QListWidgetItem *it = new QListWidgetItem(filter_name, filtersList);
filtersList->sortItems(Qt::AscendingOrder);
filtersList->setCurrentItem(it);
//showFilterSettings(it);
}
@@ -487,16 +498,19 @@ protected slots:
// Append file extension
if(!destination.endsWith(".filters"))
destination += ".filters";
if(QFile::exists(destination)) {
/*if(QFile::exists(destination)) {
int ret = QMessageBox::question(0, tr("Overwriting confirmation"), tr("Are you sure you want to overwrite existing file?"), QMessageBox::Yes|QMessageBox::No);
if(ret != QMessageBox::Yes) return;
}
}*/
if(filters.serialize(destination))
QMessageBox::information(0, tr("Export successful"), tr("Filters export was successful."));
else
QMessageBox::warning(0, tr("Export failure"), tr("Filters could not be exported due to an I/O error."));
}
signals:
void filteringEnabled();
};
#undef QHash

View File

@@ -34,7 +34,8 @@
#include <QThread>
#include <QFile>
#include <QDataStream>
#include <QMessageBox>
#include <QRegExp>
#include <QStringList>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
@@ -71,7 +72,7 @@ class FilterParserThread : public QThread {
// PeerGuardian p2p file
parseP2PFilterFile(filePath);
} else {
if(filePath.endsWith(".p2p", Qt::CaseInsensitive)) {
if(filePath.endsWith(".p2b", Qt::CaseInsensitive)) {
// PeerGuardian p2b file
parseP2BFilterFile(filePath);
} else {
@@ -103,7 +104,7 @@ class FilterParserThread : public QThread {
QFile file(filePath);
if (file.exists()){
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("Couldn't open %1 in read mode.").arg(filePath));
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl;
return;
}
unsigned int nbLine = 0;
@@ -224,7 +225,7 @@ class FilterParserThread : public QThread {
QStringList IP;
if (file.exists()){
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("Couldn't open %1 in read mode.").arg(filePath));
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl;
return;
}
unsigned int nbLine = 0;
@@ -292,7 +293,7 @@ class FilterParserThread : public QThread {
QFile file(filePath);
if (file.exists()){
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("Couldn't open %1 in read mode.").arg(filePath));
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl;
return;
}
QDataStream stream(&file);
@@ -304,7 +305,7 @@ class FilterParserThread : public QThread {
memcmp(buf, "\xFF\xFF\xFF\xFFP2B", 7) ||
!stream.readRawData((char*)&version, sizeof(version))
) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
@@ -318,7 +319,7 @@ class FilterParserThread : public QThread {
!stream.readRawData((char*)&start, sizeof(start)) ||
!stream.readRawData((char*)&end, sizeof(end))
) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
// Network byte order to Host byte order
@@ -334,7 +335,7 @@ class FilterParserThread : public QThread {
qDebug ("p2b version 3");
unsigned int namecount;
if(!stream.readRawData((char*)&namecount, sizeof(namecount))) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
namecount=ntohl(namecount);
@@ -342,7 +343,7 @@ class FilterParserThread : public QThread {
for(unsigned int i=0; i<namecount; i++) {
string name;
if(!getlineInStream(stream, name, '\0')) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
if(abort) return;
@@ -350,7 +351,7 @@ class FilterParserThread : public QThread {
// Reading the ranges
unsigned int rangecount;
if(!stream.readRawData((char*)&rangecount, sizeof(rangecount))) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
rangecount=ntohl(rangecount);
@@ -363,7 +364,7 @@ class FilterParserThread : public QThread {
!stream.readRawData((char*)&start, sizeof(start)) ||
!stream.readRawData((char*)&end, sizeof(end))
) {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
// Network byte order to Host byte order
@@ -376,7 +377,7 @@ class FilterParserThread : public QThread {
if(abort) return;
}
} else {
QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("%1 is not a valid PeerGuardian P2B file.").arg(filePath));
std::cerr << "Parsing Error: The filter file is not a valid PeerGuardian P2B file." << std::endl;
return;
}
file.close();

Some files were not shown because too many files have changed in this diff Show More