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

Compare commits

..

224 Commits

Author SHA1 Message Date
Christophe Dumez
3513288468 tagged v2.5.0beta3 release 2010-11-13 21:19:21 +00:00
Christophe Dumez
1cb30d77fd Bump to beta3 2010-11-13 21:16:18 +00:00
Christophe Dumez
126e2e7c75 Code clean up 2010-11-13 21:15:52 +00:00
Christophe Dumez
9c13ed2635 Cosmetic changes to the article previewx tree 2010-11-13 20:21:49 +00:00
Christophe Dumez
e11545c8a3 Fix crash when hiding RSS and then showing it again 2010-11-13 20:14:59 +00:00
Christophe Dumez
ad087d7e88 Fix rule saving issue 2010-11-13 20:08:44 +00:00
Christophe Dumez
c387c15eb0 Fix possible rule saving issue
Matching articles are now previewable in the rss downloader dialog
Make sure Rss downloading is enabled before checking for matching rules
2010-11-13 19:36:46 +00:00
Christophe Dumez
345222cf42 Improved feed assignment behavior 2010-11-13 18:08:09 +00:00
Christophe Dumez
adffd7df74 Fix selection behavior 2010-11-13 17:12:13 +00:00
Christophe Dumez
4de980c1a1 Fix rule selection behavior 2010-11-13 16:08:08 +00:00
Christophe Dumez
578a5c9551 Improved context menu behavior (multiple selection) 2010-11-13 16:00:14 +00:00
Christophe Dumez
c47dbfb1f5 Added right click menu for the rss download rules list 2010-11-13 15:51:36 +00:00
Christophe Dumez
cb0942b388 Remove the old rss feed downloader code 2010-11-13 15:29:27 +00:00
Christophe Dumez
1904bc1abb Fix feed list refresh issue 2010-11-13 15:18:56 +00:00
Christophe Dumez
5a02c56865 Fix rss download rule import from qBittorrent < v2.5.0 2010-11-13 15:14:50 +00:00
Christophe Dumez
d7b0299416 Added back support for RSS download rules import
Fix rule deletion
2010-11-13 12:33:52 +00:00
Christophe Dumez
265ab7bef2 Added back support for RSS download rules export 2010-11-13 12:08:29 +00:00
Christophe Dumez
e824bc8bb1 Updated Changelog 2010-11-13 11:05:32 +00:00
Christophe Dumez
046ebb5a8f Remember automated rss downloader dialog geometry 2010-11-13 11:04:40 +00:00
Christophe Dumez
8b83d60732 Made good progress on the new rss feed downloader 2010-11-13 10:49:22 +00:00
Christophe Dumez
d2754fb242 BUGFIX: Do not report a progress of 100% in the Web UI unless the
torrent is really complete (closes #674349)
2010-11-12 17:16:44 +00:00
Christophe Dumez
30ba1a428e Fix compilation warning 2010-11-11 21:13:23 +00:00
Christophe Dumez
0553668da8 Fix compilation error on Mac 2010-11-11 21:08:26 +00:00
Christophe Dumez
ff63d75532 Fix failure to build on Windows 2010-11-11 17:36:28 +00:00
Christophe Dumez
b7ec18e4f1 Do not create the torrent root folder at the destination if the torrent is in temp dir 2010-11-10 17:42:20 +00:00
Christophe Dumez
9c9944715a More reliable folder scanning 2010-11-09 19:10:42 +00:00
Christophe Dumez
ea1a54c5f1 Updated Changelog
Fix cursor over status bar buttons
2010-11-08 18:23:13 +00:00
Christophe Dumez
34cb5efb72 Show the connection settings when clicking on the connection status icon 2010-11-08 18:17:54 +00:00
Christophe Dumez
8597689a52 Some progress on new RSS download rules (still unused) 2010-11-07 13:06:00 +00:00
Christophe Dumez
41a61ced89 Improved IP address parsing 2010-11-07 11:36:37 +00:00
Christophe Dumez
da95d5e0df Improved IPv6 support 2010-11-07 10:40:47 +00:00
Christophe Dumez
8276c301c2 Fix compilation with libnotify 0.7.0 2010-11-06 09:24:09 +00:00
Christophe Dumez
75ff9984fa Updated Polish translation 2010-11-05 20:09:16 +00:00
Christophe Dumez
cda77d1724 Updated Russian translation 2010-11-05 18:43:55 +00:00
Christophe Dumez
583b8c60bb Draw qBittorrent version on splashscreen at run time 2010-11-04 19:31:12 +00:00
Christophe Dumez
5c2b57052b Updated Spanish and catalan translations 2010-11-03 20:53:55 +00:00
Christophe Dumez
9cf79a4a76 Remove wrong assert in qtorrenthandle.cpp 2010-11-02 18:16:18 +00:00
Christophe Dumez
c4968edb79 Added qBittorrent version to the debug stack trace 2010-11-02 18:12:58 +00:00
Christophe Dumez
a859a6d179 Fix torrent import dialog height 2010-11-02 18:09:13 +00:00
Christophe Dumez
e2c75b5a11 Fix possible crash when selecting a RSS article 2010-11-02 18:04:39 +00:00
Christophe Dumez
12195b186b Fix compilation on Windows 2010-11-01 18:05:54 +00:00
Christophe Dumez
658d876ff7 Fix and improve file priorities editing 2010-10-31 16:05:59 +00:00
Christophe Dumez
390508e7db Fix possible crash on qBittorrent shutdown 2010-10-31 14:19:55 +00:00
Christophe Dumez
0a2efaf5fc Correctly update the torrent size in torrent addition dialog 2010-10-31 14:12:13 +00:00
Christophe Dumez
6b7af5b464 Started work on the new RSS feed downloader (WIP) 2010-10-31 12:35:07 +00:00
Christophe Dumez
a2c19302cb Updated resource file 2010-10-31 12:04:04 +00:00
Christophe Dumez
1638554944 Added a donate link to Help menu 2010-10-31 12:03:24 +00:00
Christophe Dumez
1d1b49205d Declare destructor as virtual 2010-10-31 08:55:50 +00:00
Christophe Dumez
0ca7100168 Fix issues with virtual
Code cleanup
2010-10-31 08:55:22 +00:00
Christophe Dumez
26c680ae1f Declared function as virtual when it shouldn't 2010-10-31 08:49:18 +00:00
Christophe Dumez
6c1eda8755 Code optimization
Made code to listen on a particular interface more robust
2010-10-30 22:40:28 +00:00
Christophe Dumez
0374f9d0a8 Make sure the splash screen is displayed for 3 seconds 2010-10-30 14:35:46 +00:00
Christophe Dumez
080a36de5f Correctly update the total number of torrents when a torrent is automatically removed 2010-10-30 13:55:36 +00:00
Christophe Dumez
071801fee7 Fix possible crash on clicking a RSS article 2010-10-28 17:07:29 +00:00
Christophe Dumez
bee507cb45 Fix possible crash when deleting a torrent without metadata 2010-10-28 16:50:45 +00:00
Christophe Dumez
7d6df2a3c2 Correctly display the hash of torrents without metadata 2010-10-28 16:22:40 +00:00
Christophe Dumez
a2ffecd6bd Updated Croatian translation 2010-10-27 20:14:54 +00:00
Christophe Dumez
1532b24448 Updated Spanish and Catalan translations 2010-10-27 16:03:00 +00:00
Christophe Dumez
c4dae02ef6 Added a console message to explain why qBittorrent needs to be restarted 2010-10-26 18:00:27 +00:00
Christophe Dumez
846962aab1 Elide status bar text if it is too wide 2010-10-26 17:54:04 +00:00
Christophe Dumez
35e98b6cbb Fix crash when pressing enter in the save path field of the torrent addition dialog 2010-10-26 16:30:22 +00:00
Christophe Dumez
ecfc3d0118 Updated Arabic translation 2010-10-25 20:25:53 +00:00
Christophe Dumez
3ecc8c8d67 FEATURE: Remember the last trackers used in the torrent creation tool
FEATURE: The optimal piece size is now automatically computed in the torrent creation tool
 COSMETIC: Improved the torrent creation tool appearance
2010-10-25 19:34:42 +00:00
Christophe Dumez
a83fbf5a98 Peers can now be sorted by country 2010-10-24 09:32:28 +00:00
Christophe Dumez
328e4fd860 Better fix for save path editing issues in torrent addition dialog 2010-10-24 08:28:35 +00:00
Christophe Dumez
b98d0282ce BUGFIX: Fix issue when altering files priorities of a seeding torrent (closes #665799) 2010-10-24 08:06:56 +00:00
Christophe Dumez
166dad51d5 FEATURE: qBittorrent can update itself from Sourceforge (Windows/Mac OS X only) 2010-10-23 21:46:05 +00:00
Christophe Dumez
e3ccea3b17 Fix a progress rounding issue 2010-10-23 19:12:00 +00:00
Christophe Dumez
8a64a6441e Fix status list widget height issue on style change 2010-10-23 16:58:06 +00:00
Christophe Dumez
c34000ab17 Update language files 2010-10-23 16:25:05 +00:00
Christophe Dumez
90dd337069 FEATURE: Added a torrent import assistant to seed or keep downloading outside torrents 2010-10-23 16:21:56 +00:00
Christophe Dumez
31e4b8dc31 Fix nox compilation 2010-10-22 20:17:47 +00:00
Christophe Dumez
5145abe5c8 Update search engine update URL 2010-10-22 20:14:51 +00:00
Christophe Dumez
7ec842929a Moved search code into a subfolder 2010-10-22 20:13:22 +00:00
Christophe Dumez
39778baaf5 Cleaned up the properties tab bar code 2010-10-22 18:59:18 +00:00
Christophe Dumez
0a510db95e Started properties refactoring 2010-10-22 17:49:55 +00:00
Christophe Dumez
c73243b0d2 Remember the current property tab on startup 2010-10-22 17:30:17 +00:00
Christophe Dumez
46b75b760f Auto-disable to auto-shutdown feature 2010-10-21 16:54:10 +00:00
Christophe Dumez
fc3ae51122 Fix isohunt and vertor search plugins 2010-10-20 20:27:32 +00:00
Christophe Dumez
05d9f28f8b Fix torrentreactor search plugin 2010-10-20 19:50:28 +00:00
Christophe Dumez
b1b2a2c775 Fix issues when searching for something with {*} in the name 2010-10-20 19:42:12 +00:00
Christophe Dumez
105de3161a Improved hostname resolution code 2010-10-20 17:19:18 +00:00
Christophe Dumez
354d968a94 Fix possible crash on manual peer ban 2010-10-20 16:15:15 +00:00
Christophe Dumez
f617b74bac Performance optimization and code clean up 2010-10-19 20:00:50 +00:00
Christophe Dumez
3664134e02 Fix possible transfer list refresh issue 2010-10-19 16:45:23 +00:00
Christophe Dumez
1875846326 Improved "Set Location" and "Change save path" dialogs 2010-10-18 19:23:39 +00:00
Christophe Dumez
64f0adc813 Fix issues when marking a file as "not downloaded" causes the torrent to complete 2010-10-18 18:20:44 +00:00
Christophe Dumez
a9d4b38bd3 Remove uneeded files on torrent deletion
Fix encoding error in file renaming
2010-10-18 17:44:37 +00:00
Christophe Dumez
44fa7388d5 Fix display of priority column when the queueing system is enabled 2010-10-18 17:06:11 +00:00
Christophe Dumez
24df142b02 Fix to German translation 2010-10-18 16:25:23 +00:00
Christophe Dumez
958b73f2cb Updated language files 2010-10-18 16:21:38 +00:00
Christophe Dumez
1962898e24 Bump to v2.5.0 beta1 2010-10-17 15:21:52 +00:00
Christophe Dumez
56b88661bc BUGFIX: Fix moving of a torrent to an unexisting directory 2010-10-17 15:17:39 +00:00
Christophe Dumez
5b47a762ac Fix crash on torrent addition caused by last commit 2010-10-17 15:00:31 +00:00
Christophe Dumez
a5c6bcceea Fix detection of path at final destination when temp directory is enabled (regression) 2010-10-17 14:50:38 +00:00
Christophe Dumez
290932e128 Big code clean up 2010-10-17 14:46:01 +00:00
Christophe Dumez
f53fe96191 Start to clean up Bittorrent class 2010-10-17 12:18:34 +00:00
Christophe Dumez
fc8a822dac Fix compilation error with libtorrent v0.14 2010-10-17 11:45:53 +00:00
Christophe Dumez
b7a3ae2b4c Fix issue where the properties panel data would not match the currently selected torrent 2010-10-17 09:09:40 +00:00
Christophe Dumez
26d19b33e6 Improvement to last commit 2010-10-17 09:00:06 +00:00
Christophe Dumez
4ba9dc1fed Fix seeding after torrent creation 2010-10-17 08:41:45 +00:00
Christophe Dumez
2c3f99692d Further restructuring of the RSS code 2010-10-16 20:09:15 +00:00
Christophe Dumez
a27d2dcac2 Big restructuring of the RSS code
Dropped Qt 4.4 support
2010-10-16 17:39:03 +00:00
Christophe Dumez
f7cb6a7da5 Forgot to commit this file 2010-10-16 16:41:15 +00:00
Christophe Dumez
6855edf649 Disabled some checking 2010-10-16 15:30:44 +00:00
Christophe Dumez
aff27558dd FEATURE: qBittorrent can now act as a tracker 2010-10-15 21:55:56 +00:00
Christophe Dumez
f6172f8c77 Code optimization 2010-10-12 16:06:53 +00:00
Christophe Dumez
1562088bc8 Some more code optimization 2010-10-11 21:28:00 +00:00
Christophe Dumez
67973515d5 Performance improvement for piece availability and downloaded pieces widgets 2010-10-11 21:06:53 +00:00
Christophe Dumez
7867cf68f9 Fix possible variable overflow 2010-10-11 19:50:32 +00:00
Christophe Dumez
1eb26bd78b Greatly improved peer host name resolution with caching 2010-10-10 21:03:45 +00:00
Christophe Dumez
a8d635f7ac Fix URL Seed support 2010-10-10 15:39:08 +00:00
Christophe Dumez
289ad37f06 Further RSS code cleanup 2010-10-10 11:03:09 +00:00
Christophe Dumez
94de42bf2e Keep reorganizing code (RSS) 2010-10-10 10:37:07 +00:00
Christophe Dumez
ca9f40eb7f COSMETIC: Replaced message box by on-screen notification for download errors 2010-10-09 15:40:24 +00:00
Christophe Dumez
4013f9fefd Enable systray icon on Mac since it is supported by Qt 2010-10-09 15:36:39 +00:00
Christophe Dumez
ccf0002c0f FEATURE: Added a transfer list column to display the current tracker 2010-10-09 15:23:51 +00:00
Christophe Dumez
86fb4a323a FEATURE: Added feature to shutdown qbittorrent on torrents completion 2010-10-09 14:57:41 +00:00
Christophe Dumez
38c56a2b5f Some more code reorganizing 2010-10-09 14:32:00 +00:00
Christophe Dumez
2d1286158a Updated language files 2010-10-09 14:11:14 +00:00
Christophe Dumez
6e7309316c Started code reorganizing (Moved libtorrent specific files and webui files to subfolders) 2010-10-09 14:06:35 +00:00
Christophe Dumez
593fdad426 Fix feature to keep incomplete torrents in a separate folder 2010-10-09 08:56:07 +00:00
Christophe Dumez
933a831eb1 Forgot to commit this file 2010-10-08 17:50:47 +00:00
Christophe Dumez
7c55082464 Fix about dialog cosmetic issues 2010-10-08 17:47:34 +00:00
Ishan Arora
fa3e70316e moved windows path configs from src/src.pro to winconf.pri 2010-10-05 01:11:46 +00:00
Christophe Dumez
c9c2ab320d Remember completion date correctly 2010-10-02 12:52:06 +00:00
Christophe Dumez
53d9817d8a Code cleanup 2010-10-02 12:11:55 +00:00
Christophe Dumez
828ecb6b3c Fix to last commit 2010-10-01 20:51:08 +00:00
Christophe Dumez
af61ed7c72 Fix possible search plugin update issue 2010-10-01 20:17:04 +00:00
Christophe Dumez
1e86ea8c0a Clean program exit on system shutdown/logout 2010-10-01 20:03:27 +00:00
Christophe Dumez
129bfac549 Fix typo (baloon -> ballon) 2010-09-30 20:30:48 +00:00
Christophe Dumez
4815bb9f11 Fix wrong mapping to source model 2010-09-28 16:53:58 +00:00
Christophe Dumez
81eb8b1341 Fix tiny memory leak 2010-09-27 20:42:00 +00:00
Christophe Dumez
1596dc5206 TorrentDownloads plugin performance improvement 2010-09-27 19:47:17 +00:00
Christophe Dumez
76a22fabcd Better fix for encoding issue 2010-09-27 17:36:10 +00:00
Christophe Dumez
3d7bf26f85 Fix possible crash when changing the save path in torrent addition dialog 2010-09-27 17:33:43 +00:00
Christophe Dumez
69661406a0 Fix encoding problem in command line parameter processing 2010-09-27 17:17:22 +00:00
Christophe Dumez
74fba0fb7e Really fix manual editing of save path in torrent addition dialog 2010-09-26 17:08:16 +00:00
Christophe Dumez
d56fc9fcd4 Fix torrent addition dialog bug introduced in v2.4.1 2010-09-26 16:50:56 +00:00
Christophe Dumez
124dcee7b8 Fix deprecation warning 2010-09-26 11:15:22 +00:00
Christophe Dumez
b5b06ce36d Fix to last commit 2010-09-25 19:40:31 +00:00
Christophe Dumez
ef01088411 Limit torrent addition dialog width 2010-09-25 19:26:45 +00:00
Christophe Dumez
bc87c1c409 Fix saving to drive root on Windows 2010-09-25 17:31:06 +00:00
Christophe Dumez
bbe4328c06 Fix progress bar style on Windows 2010-09-25 16:51:19 +00:00
Christophe Dumez
d557410156 Fix save path encoding problem on Windows 2010-09-25 16:01:07 +00:00
Christophe Dumez
a150e24ce4 Update version file 2010-09-25 13:08:07 +00:00
Christophe Dumez
261d02863c - Use AND operator for torrentdownloads searches 2010-09-25 13:07:31 +00:00
Christophe Dumez
c64f02c9bf Fix locale change from the Web UI 2010-09-25 12:42:19 +00:00
Christophe Dumez
790db14b51 Remove obsolete strings from language files 2010-09-25 12:11:26 +00:00
Christophe Dumez
2500ac2cb7 Fix Web UI for spanish users 2010-09-25 11:44:13 +00:00
Christophe Dumez
cd8a7cf0e0 Fix problem in spanish translation that would break web UI 2010-09-25 11:41:37 +00:00
Christophe Dumez
b3be32126d Added support for | (OR) operator in RSS feed downloader 2010-09-25 11:29:45 +00:00
Christophe Dumez
643bc5516c Fix "Temp path" saving 2010-09-25 11:02:40 +00:00
Christophe Dumez
eb94c59892 TorrentCreator: add .torrent extension only when missing 2010-09-25 10:46:29 +00:00
Christophe Dumez
72f4c81f4c Fix download in scan dir persistence 2010-09-25 10:39:08 +00:00
Christophe Dumez
9543bd63f9 Fix torrent addition dialog path editing 2010-09-25 09:11:06 +00:00
Christophe Dumez
7ae7a71782 Higher maximum download speed limit 2010-09-25 07:52:29 +00:00
Christophe Dumez
8994ca6dd5 Detect OGV as previewable format 2010-09-25 07:40:13 +00:00
Christophe Dumez
354dceeaf0 Fixes to German translation 2010-09-19 08:39:26 +00:00
Christophe Dumez
50c7225c1e Updated Spanish and Catalan translations 2010-08-27 07:43:15 +00:00
Christophe Dumez
44d945b5c0 Updated Changelog 2010-08-26 17:42:23 +00:00
Christophe Dumez
4ff6104601 Updated Arabic translation 2010-08-25 06:33:29 +00:00
Christophe Dumez
80760dd7af Trunk is now v2.5.0alpha 2010-08-24 18:28:17 +00:00
Christophe Dumez
7835a13573 Updated Russian translation 2010-08-23 19:53:03 +00:00
Christophe Dumez
9b26fd50b2 Fix Chinese translation 2010-08-23 19:50:48 +00:00
Christophe Dumez
eb54d81c5e Bump to rc3 2010-08-23 19:42:33 +00:00
Christophe Dumez
431d2f082c FEATURE: Detect executable updates in order to advise the user to restart 2010-08-23 19:42:15 +00:00
Christophe Dumez
a0ff0cdc7e UI lock related cosmetic changes 2010-08-23 16:12:17 +00:00
Christophe Dumez
fb91558261 Updated Portuguese and Brazilian translations 2010-08-23 15:46:06 +00:00
Christophe Dumez
fc2a47ca31 Updated Spanish and Catalan translation 2010-08-23 06:07:52 +00:00
Christophe Dumez
dcccbaad59 UI Lock also lock the tray icon menu 2010-08-22 19:08:15 +00:00
Christophe Dumez
99d040de3f Updated Serbian translation 2010-08-22 18:52:54 +00:00
Christophe Dumez
ee30a75b57 Fix compilation warning 2010-08-22 18:11:19 +00:00
Christophe Dumez
8c001aa478 Force progress update of paused torrents too 2010-08-22 16:55:57 +00:00
Christophe Dumez
849bc11a01 Updated Simplified Chinese translation 2010-08-22 14:27:47 +00:00
Christophe Dumez
5024e0b092 Updated Traditional Chinese translation 2010-08-22 12:53:16 +00:00
Christophe Dumez
d93447489b Clear search filter before hiding the top toolbar 2010-08-22 08:54:33 +00:00
Christophe Dumez
33988e70ab Updated Czech translation 2010-08-22 08:38:56 +00:00
Christophe Dumez
d2b41d70c8 Safer error detection 2010-08-21 20:22:59 +00:00
Christophe Dumez
8e1e51d268 Bump to rc2 2010-08-21 20:16:26 +00:00
Christophe Dumez
53500ea005 Force progress update on torrent pausing 2010-08-21 20:12:16 +00:00
Christophe Dumez
e048389dea Attempt to improve error detection 2010-08-21 09:08:12 +00:00
Christophe Dumez
fa7b1a205d Updated Slovak translation 2010-08-20 20:39:21 +00:00
Christophe Dumez
7dd6b7e9bb Updated Ukrainian translation 2010-08-20 14:37:30 +00:00
Christophe Dumez
78b96accda Fix "Seed until ratio reaches x.x" feature 2010-08-20 14:17:46 +00:00
Christophe Dumez
73d0e2568a Updated Web UI to reflect the autorun changes 2010-08-20 14:02:40 +00:00
Christophe Dumez
92fc212a0e FEATURE: Run external program on torrent completion 2010-08-20 13:20:23 +00:00
Christophe Dumez
6f4d7b7c1b Clean up 2010-08-20 12:35:13 +00:00
Christophe Dumez
63ee1c36e8 FEATURE: Added torrent filtering by name 2010-08-20 12:27:20 +00:00
Christophe Dumez
7d07debcb5 Cleaner program exit on Auto-shutdown 2010-08-20 09:35:28 +00:00
Christophe Dumez
dd67e1ee9d Code cleanup 2010-08-20 09:33:44 +00:00
Christophe Dumez
493efdbf10 Bump to beta3 2010-08-20 09:31:24 +00:00
Christophe Dumez
e323175275 Fix possible crash when using the new "Auto-shutdown" feature 2010-08-20 09:31:00 +00:00
Christophe Dumez
c1fa7f8645 Code cleanup 2010-08-20 09:02:27 +00:00
Christophe Dumez
275b962363 Added missing include 2010-08-19 20:23:39 +00:00
Christophe Dumez
3847c33017 Updated French translation 2010-08-19 19:37:29 +00:00
Christophe Dumez
9e21f52213 Updated language files 2010-08-19 19:16:44 +00:00
Christophe Dumez
25cf9b33ec Bump to beta2 2010-08-19 19:12:25 +00:00
Christophe Dumez
c7a2d3589f Updated Web UI to reflect the mail notification changes 2010-08-19 19:10:46 +00:00
Christophe Dumez
d8dd3834c3 Email notification on download completion 2010-08-19 18:47:57 +00:00
Christophe Dumez
ee01c2c745 FEATURE: Added button to password-lock the UI 2010-08-19 16:30:13 +00:00
Christophe Dumez
e7e5a2b4e9 Fix "Set location" action 2010-08-18 08:46:04 +00:00
Christophe Dumez
ff16f59be1 Fix per-label pause/resume actions 2010-08-18 08:07:17 +00:00
Christophe Dumez
2cd4937ddc Mac specific changes by Stephanos Antaris 2010-08-17 10:50:14 +00:00
Christophe Dumez
0e9abc1762 Bump to v2.4.0beta1 2010-08-17 08:51:12 +00:00
Christophe Dumez
e24ce87946 FEATURE: Added label-level Pause/Resume/Delete actions 2010-08-17 08:42:30 +00:00
Christophe Dumez
308e358d3f Fix Auto-Shutdown feature on Windows 2010-08-16 18:34:30 +00:00
Christophe Dumez
d15e6a4847 Blind implementation for auto-shutdown on Windows 2010-08-16 17:57:15 +00:00
Christophe Dumez
e311239a28 Blind implementation of auto-shutdown for Mac OS 2010-08-16 17:42:21 +00:00
Christophe Dumez
df677789d2 FEATURE: Added Auto-Shutdown on downloads completion feature (Linux Only for now) 2010-08-16 17:35:32 +00:00
Christophe Dumez
0af44eadb6 Fix possible folder watching issues on Windows 2010-08-16 11:51:50 +00:00
Christophe Dumez
85cafe530e Fix to last commit 2010-08-16 09:20:49 +00:00
Christophe Dumez
7609db28f1 Fix scan folder display on Windows and OS/2 2010-08-16 08:58:25 +00:00
Christophe Dumez
fefda39284 Added priority actions to Web UI right-click menu 2010-08-15 08:49:19 +00:00
Christophe Dumez
b2f98bd059 Priority actions should work only if the tab is displayed 2010-08-15 07:47:33 +00:00
Christophe Dumez
26c69fe6d4 Priority actions are only effective if the transfer list tab is displayed 2010-08-15 07:45:20 +00:00
Christophe Dumez
bf4f1a7c37 Fix speed limit sliders initialization in Web UI 2010-08-15 07:39:36 +00:00
Christophe Dumez
9b0dd39d9d Added missing icon 2010-08-15 07:23:37 +00:00
Christophe Dumez
66d4cc2ab8 FEATURE: Added actions to "Move to top/bottom" of priority queue 2010-08-14 15:53:05 +00:00
Christophe Dumez
0bcbaf6521 Remember last selected paths in torrent creation dialog 2010-08-13 14:02:19 +00:00
Christophe Dumez
e074872b24 Fix about dialog layout 2010-08-13 13:35:24 +00:00
Christophe Dumez
63ec1e618e Fix compilation with gcc 4.5 2010-08-13 13:29:17 +00:00
Christophe Dumez
331c15b76c Bump to v2.4.0alpha 2010-07-27 08:07:46 +00:00
Christophe Dumez
d2089c9aad Updated about dialog 2010-07-27 00:00:52 +00:00
269 changed files with 56420 additions and 127471 deletions

View File

@@ -12,7 +12,7 @@ Contributors:
* Silvan Scherrer <silvan.scherrer@aroa.ch>
Code from other projects:
* files src/qtsingleapp/*
* files src/qtsingleapp/* src/lineedit/*
copyright: Nokia Corporation
license: LGPL
@@ -83,7 +83,7 @@ Translations authors:
- German: Niels Hoffmann (zentralmaschine@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)
- Italian: Matteo Sechi (bu17714@gmail.com)
- Japanese: Nardog (alphisation@gmail.com)
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)

View File

@@ -1,3 +1,27 @@
* Unreleased - Christophe Dumez <chris@qbittorrent.org> - v2.5.0
- FEATURE: qBittorrent can now act as a tracker
- FEATURE: New and improved RSS feed automated downloader
- FEATURE: Added feature to shutdown qbittorrent on torrents completion
- FEATURE: Added a torrent import assistant to seed or keep downloading outside torrents
- FEATURE: qBittorrent can update itself from Sourceforge (Windows/Mac OS X only)
- FEATURE: Added a transfer list column to display the current tracker
- FEATURE: Remember the last trackers used in the torrent creation tool
- FEATURE: The optimal piece size is now automatically computed in the torrent creation tool
- FEATURE: Bring up the connection settings when clicking on the connection status icon
- COSMETIC: Replaced message box by on-screen notification for download errors
- COSMETIC: Improved the torrent creation tool appearance
- OTHERS: Dropped support for Qt <= 4.4
* Tue Aug 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.0
- FEATURE: Added actions to "Move to top/bottom" of priority queue
- FEATURE: Auto-Shutdown on downloads completion
- FEATURE: Email notification on download completion
- FEATURE: Added button to password-lock the UI
- FEATURE: Added label-level Pause/Resume/Delete actions
- FEATURE: Torrents can now be filtered by name
- FEATURE: Run external program on torrent completion
- FEATURE: Detect executable updates in order to advise the user to restart
* Tue Jul 27 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.3.0
- FEATURE: Simplified torrent root folder renaming/truncating (< v2.3.0 is no longer forward compatible)
- FEATURE: Remember previous save paths in torrent addition dialog

View File

@@ -10,7 +10,7 @@ qBittorrent - A BitTorrent client in C++ / Qt4
will install and execute qBittorrent hopefully without any problems.
Dependencies:
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
- Qt >= 4.5.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
- pkg-config executable

26
configure vendored
View File

@@ -325,7 +325,7 @@ cat >$1/modules.cpp <<EOT
#line 1 "qt4.qcm"
/*
-----BEGIN QCMOD-----
name: Qt >= 4.4
name: Qt >= 4.5
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
-----END QCMOD-----
*/
@@ -333,14 +333,14 @@ class qc_qt4 : public ConfObj
{
public:
qc_qt4(Conf *c) : ConfObj(c) {}
QString name() const { return "Qt >= 4.4"; }
QString shortname() const { return "Qt 4.4"; }
QString name() const { return "Qt >= 4.5"; }
QString shortname() const { return "Qt 4.5"; }
bool exec()
{
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
conf->addDefine("DISABLE_GUI");
}
return(QT_VERSION >= 0x040400);
return(QT_VERSION >= 0x040500);
}
};
#line 1 "pkg-config.qcm"
@@ -616,22 +616,22 @@ arg: with-qtsingleapplication=[system|shipped], Use the shipped qtsingleapplicat
class qc_qtsingleapplication : public ConfObj
{
public:
qc_qtsingleapplication(Conf *c) : ConfObj(c) {}
QString name() const { return "qtsingleapplication library"; }
QString shortname() const { return "qtsingleapplication"; }
qc_qtsingleapplication(Conf *c) : ConfObj(c) {}
QString name() const { return "qtsingleapplication library"; }
QString shortname() const { return "qtsingleapplication"; }
bool exec(){
QString s;
s = conf->getenv("QC_WITH_QTSINGLEAPPLICATION");
bool exec(){
QString s;
s = conf->getenv("QC_WITH_QTSINGLEAPPLICATION");
if(s.compare("system", Qt::CaseInsensitive) == 0) {
// System
conf->addDefine("USE_SYSTEM_QTSINGLEAPPLICATION");
printf(" [system] ");
} else {
printf(" [shipped] ");
}
return true;
}
}
return true;
}
};
EOT

View File

@@ -1,6 +1,6 @@
/*
-----BEGIN QCMOD-----
name: Qt >= 4.4
name: Qt >= 4.5
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
-----END QCMOD-----
*/
@@ -8,13 +8,13 @@ class qc_qt4 : public ConfObj
{
public:
qc_qt4(Conf *c) : ConfObj(c) {}
QString name() const { return "Qt >= 4.4"; }
QString shortname() const { return "Qt 4.4"; }
QString name() const { return "Qt >= 4.5"; }
QString shortname() const { return "Qt 4.5"; }
bool exec()
{
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
conf->addDefine("DISABLE_GUI");
}
return(QT_VERSION >= 0x040400);
return(QT_VERSION >= 0x040500);
}
};

View File

@@ -0,0 +1,26 @@
/*
-----BEGIN QCMOD-----
name: libboost
arg: with-qtsingleapplication=[system|shipped], Use the shipped qtsingleapplication library or the system one
-----END QCMOD-----
*/
class qc_qtsingleapplication : public ConfObj
{
public:
qc_qtsingleapplication(Conf *c) : ConfObj(c) {}
QString name() const { return "qtsingleapplication library"; }
QString shortname() const { return "qtsingleapplication"; }
bool exec(){
QString s;
s = conf->getenv("QC_WITH_QTSINGLEAPPLICATION");
if(s.compare("system", Qt::CaseInsensitive) == 0) {
// System
conf->addDefine("USE_SYSTEM_QTSINGLEAPPLICATION");
printf(" [system] ");
} else {
printf(" [shipped] ");
}
return true;
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

BIN
src/Icons/oxygen/go-top.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 B

BIN
src/Icons/oxygen/go-up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 929 B

View File

@@ -1,6 +1,6 @@
[Desktop Entry]
Categories=Qt;Network;P2P;
Comment=V2.3.0
Comment=V2.5.0
Exec=qbittorrent %f
GenericName=Bittorrent client
GenericName[ar]=العميل Bittorrent

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -47,7 +47,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleGetInfoString</key>
<string>2.3.0</string>
<string>2.5.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>

6
src/about.qrc Normal file
View File

@@ -0,0 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>gpl.html</file>
</qresource>
</RCC>

File diff suppressed because it is too large Load Diff

View File

@@ -11,15 +11,15 @@
#include "preferences.h"
enum AdvSettingsCols {PROPERTY, VALUE};
enum AdvSettingsRows {DISK_CACHE, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, COUNT_OVERHEAD, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN, SUPER_SEEDING, NETWORK_IFACE, PROGRAM_NOTIFICATIONS };
#define ROW_COUNT 13
enum AdvSettingsRows {DISK_CACHE, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, COUNT_OVERHEAD, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN, SUPER_SEEDING, NETWORK_IFACE, PROGRAM_NOTIFICATIONS, TRACKER_STATUS, TRACKER_PORT };
#define ROW_COUNT 15
class AdvancedSettings: public QTableWidget {
Q_OBJECT
private:
QSpinBox *spin_cache, *outgoing_ports_min, *outgoing_ports_max, *spin_list_refresh, *spin_maxhalfopen;
QCheckBox *cb_ignore_limits_lan, *cb_count_overhead, *cb_recheck_completed, *cb_resolve_countries, *cb_resolve_hosts, *cb_super_seeding, *cb_program_notifications;
QSpinBox *spin_cache, *outgoing_ports_min, *outgoing_ports_max, *spin_list_refresh, *spin_maxhalfopen, *spin_tracker_port;
QCheckBox *cb_ignore_limits_lan, *cb_count_overhead, *cb_recheck_completed, *cb_resolve_countries, *cb_resolve_hosts, *cb_super_seeding, *cb_program_notifications, *cb_tracker_status;
QComboBox *combo_iface;
public:
@@ -53,6 +53,8 @@ public:
delete cb_super_seeding;
delete combo_iface;
delete cb_program_notifications;
delete spin_tracker_port;
delete cb_tracker_status;
}
public slots:
@@ -88,6 +90,9 @@ public slots:
}
// Program notification
Preferences::useProgramNotification(cb_program_notifications->isChecked());
// Tracker
Preferences::setTrackerEnabled(cb_tracker_status->isChecked());
Preferences::setTrackerPort(spin_tracker_port->value());
}
protected slots:
@@ -190,11 +195,25 @@ protected slots:
connect(combo_iface, SIGNAL(currentIndexChanged(int)), this, SLOT(emitSettingsChanged()));
setCellWidget(NETWORK_IFACE, VALUE, combo_iface);
// Program notifications
setItem(PROGRAM_NOTIFICATIONS, PROPERTY, new QTableWidgetItem(tr("Display program notification baloons")));
setItem(PROGRAM_NOTIFICATIONS, PROPERTY, new QTableWidgetItem(tr("Display program notification balloons")));
cb_program_notifications = new QCheckBox();
connect(cb_program_notifications, SIGNAL(toggled(bool)), this, SLOT(emitSettingsChanged()));
cb_program_notifications->setChecked(Preferences::useProgramNotification());
setCellWidget(PROGRAM_NOTIFICATIONS, VALUE, cb_program_notifications);
// Tracker State
setItem(TRACKER_STATUS, PROPERTY, new QTableWidgetItem(tr("Enable embedded tracker")));
cb_tracker_status = new QCheckBox();
connect(cb_tracker_status, SIGNAL(toggled(bool)), this, SLOT(emitSettingsChanged()));
cb_tracker_status->setChecked(Preferences::isTrackerEnabled());
setCellWidget(TRACKER_STATUS, VALUE, cb_tracker_status);
// Tracker port
setItem(TRACKER_PORT, PROPERTY, new QTableWidgetItem(tr("Embedded tracker port")));
spin_tracker_port = new QSpinBox();
connect(spin_tracker_port, SIGNAL(valueChanged(int)), this, SLOT(emitSettingsChanged()));
spin_tracker_port->setMinimum(1);
spin_tracker_port->setMaximum(65535);
spin_tracker_port->setValue(Preferences::getTrackerPort());
setCellWidget(TRACKER_PORT, VALUE, spin_tracker_port);
}
void emitSettingsChanged() {

File diff suppressed because it is too large Load Diff

View File

@@ -31,7 +31,7 @@
#ifndef CONSOLE_H
#define CONSOLE_H
#include "bittorrent.h"
#include "qbtsession.h"
#include "ui_console.h"
using namespace libtorrent;
@@ -39,17 +39,13 @@ using namespace libtorrent;
class consoleDlg : public QDialog, private Ui_ConsoleDlg{
Q_OBJECT
private:
Bittorrent *BTSession;
public:
consoleDlg(QWidget *parent, Bittorrent* _BTSession) : QDialog(parent) {
consoleDlg(QWidget *parent) : QDialog(parent) {
setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
setModal(true);
BTSession = _BTSession;
textConsole->setHtml(BTSession->getConsoleMessages().join("<br>"));
textBannedPeers->setHtml(BTSession->getPeerBanMessages().join("<br>"));
textConsole->setHtml(QBtSession::instance()->getConsoleMessages().join("<br>"));
textBannedPeers->setHtml(QBtSession::instance()->getPeerBanMessages().join("<br>"));
show();
}

File diff suppressed because it is too large Load Diff

View File

@@ -39,8 +39,6 @@
#include "preferences.h"
#include "qinisettings.h"
enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4, SOCKS4=5};
/** Download Thread **/
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
@@ -180,7 +178,7 @@ void downloadThread::applyProxySettings() {
qDebug("Using proxy: %s", qPrintable(IP));
proxy.setPort(port.toUShort());
// Default proxy type is HTTP, we must change if it is SOCKS5
if(intValue == SOCKS5 || intValue == SOCKS5_PW) {
if(intValue == Proxy::SOCKS5 || intValue == Proxy::SOCKS5_PW) {
qDebug("Proxy is SOCKS5, not HTTP");
proxy.setType(QNetworkProxy::Socks5Proxy);
} else {

View File

@@ -1,221 +0,0 @@
#ifndef FEEDLIST_H
#define FEEDLIST_H
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QDropEvent>
#include <QDragMoveEvent>
#include <QStringList>
#include <QHash>
#include <QUrl>
#include "rss.h"
class FeedList: public QTreeWidget {
Q_OBJECT
private:
RssManager *rssmanager;
QHash<QTreeWidgetItem*, RssFile*> mapping;
QHash<QString, QTreeWidgetItem*> feeds_items;
QTreeWidgetItem* current_feed;
QTreeWidgetItem *unread_item;
public:
FeedList(QWidget *parent, RssManager *rssmanager): QTreeWidget(parent), rssmanager(rssmanager) {
setContextMenuPolicy(Qt::CustomContextMenu);
setDragDropMode(QAbstractItemView::InternalMove);
setSelectionMode(QAbstractItemView::ExtendedSelection);
setColumnCount(1);
QTreeWidgetItem *___qtreewidgetitem = headerItem();
___qtreewidgetitem->setText(0, QApplication::translate("RSS", "RSS feeds", 0, QApplication::UnicodeUTF8));
unread_item = new QTreeWidgetItem(this);
unread_item->setText(0, tr("Unread") + QString::fromUtf8(" (") + QString::number(rssmanager->getNbUnRead(), 10)+ QString(")"));
unread_item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/oxygen/mail-folder-inbox.png")));
itemAdded(unread_item, rssmanager);
connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateCurrentFeed(QTreeWidgetItem*)));
setCurrentItem(unread_item);
}
~FeedList() {
disconnect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateCurrentFeed(QTreeWidgetItem*)));
delete unread_item;
}
void itemAdded(QTreeWidgetItem *item, RssFile* file) {
mapping[item] = file;
if(file->getType() == RssFile::STREAM) {
feeds_items[file->getID()] = item;
}
}
void itemAboutToBeRemoved(QTreeWidgetItem *item) {
RssFile* file = mapping.take(item);
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 {
return feeds_items.contains(QUrl(url).toString());
}
QList<QTreeWidgetItem*> getAllFeedItems() const {
return feeds_items.values();
}
QTreeWidgetItem* getUnreadItem() const {
return unread_item;
}
QStringList getItemPath(QTreeWidgetItem* item) const {
QStringList path;
if(item) {
if(item->parent())
path << getItemPath(item->parent());
path.append(getRSSItem(item)->getID());
}
return path;
}
QList<QTreeWidgetItem*> getAllOpenFolders(QTreeWidgetItem *parent=0) const {
QList<QTreeWidgetItem*> open_folders;
int nbChildren;
if(parent)
nbChildren = parent->childCount();
else
nbChildren = topLevelItemCount();
for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem *item;
if(parent)
item = parent->child(i);
else
item = topLevelItem(i);
if(getItemType(item) == RssFile::FOLDER && item->isExpanded()) {
QList<QTreeWidgetItem*> open_subfolders = getAllOpenFolders(item);
if(!open_subfolders.empty()) {
open_folders << open_subfolders;
} else {
open_folders << item;
}
}
}
return open_folders;
}
QList<QTreeWidgetItem*> getAllFeedItems(QTreeWidgetItem* folder) {
QList<QTreeWidgetItem*> feeds;
int nbChildren = folder->childCount();
for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem *item = folder->child(i);
if(getItemType(item) == RssFile::STREAM) {
feeds << item;
} else {
feeds << getAllFeedItems(item);
}
}
return feeds;
}
RssFile* getRSSItem(QTreeWidgetItem *item) const {
return mapping.value(item, 0);
}
RssFile::FileType getItemType(QTreeWidgetItem *item) const {
return mapping.value(item)->getType();
}
QString getItemID(QTreeWidgetItem *item) const {
return mapping.value(item)->getID();
}
QTreeWidgetItem* getTreeItemFromUrl(QString url) const{
return feeds_items.value(url, 0);
}
RssStream* getRSSItemFromUrl(QString url) const {
return (RssStream*)getRSSItem(getTreeItemFromUrl(url));
}
QTreeWidgetItem* currentItem() const {
return current_feed;
}
QTreeWidgetItem* currentFeed() const {
return current_feed;
}
signals:
void foldersAltered(QList<QTreeWidgetItem*> folders);
void overwriteAttempt(QString filename);
protected slots:
void updateCurrentFeed(QTreeWidgetItem* new_item) {
if(!new_item) return;
if(!mapping.contains(new_item)) return;
if((getItemType(new_item) == RssFile::STREAM) || new_item == unread_item)
current_feed = new_item;
}
protected:
void dragMoveEvent(QDragMoveEvent * event) {
QTreeWidgetItem *item = itemAt(event->pos());
if(item == unread_item) {
event->ignore();
} else {
if(item && getItemType(item) != RssFile::FOLDER)
event->ignore();
else {
if(selectedItems().contains(unread_item)) {
event->ignore();
} else {
QTreeWidget::dragMoveEvent(event);
}
}
}
}
void dropEvent(QDropEvent *event) {
qDebug("dropEvent");
QList<QTreeWidgetItem*> folders_altered;
QTreeWidgetItem *dest_folder_item = itemAt(event->pos());
RssFolder *dest_folder;
if(dest_folder_item) {
dest_folder = (RssFolder*)getRSSItem(dest_folder_item);
folders_altered << dest_folder_item;
} else {
dest_folder = rssmanager;
}
QList<QTreeWidgetItem *> src_items = selectedItems();
// Check if there is not going to overwrite another file
foreach(QTreeWidgetItem *src_item, src_items) {
RssFile *file = getRSSItem(src_item);
if(dest_folder->hasChild(file->getID())) {
emit overwriteAttempt(file->getID());
return;
}
}
// Proceed with the move
foreach(QTreeWidgetItem *src_item, src_items) {
QTreeWidgetItem *parent_folder = src_item->parent();
if(parent_folder && !folders_altered.contains(parent_folder))
folders_altered << parent_folder;
// Actually move the file
RssFile *file = getRSSItem(src_item);
rssmanager->moveFile(file, dest_folder);
}
QTreeWidget::dropEvent(event);
if(dest_folder_item)
dest_folder_item->setExpanded(true);
// Emit signal for update
if(!folders_altered.empty())
emit foldersAltered(folders_altered);
}
};
#endif // FEEDLIST_H

File diff suppressed because it is too large Load Diff

View File

@@ -3,11 +3,12 @@
#include <QFileSystemWatcher>
#include <QDir>
#ifndef Q_WS_WIN
#include <QTimer>
#include <QPointer>
#include <QStringList>
#include <QHash>
#ifndef Q_WS_WIN
#include <QSet>
#include <iostream>
#include <errno.h>
@@ -19,6 +20,8 @@
#endif
#endif
#include "misc.h"
#ifndef CIFS_MAGIC_NUMBER
#define CIFS_MAGIC_NUMBER 0xFF534D42
#endif
@@ -27,6 +30,9 @@
#define NFS_SUPER_MAGIC 0x6969
#endif
const int WATCH_INTERVAL = 10000; // 10 sec
const int MAX_PARTIAL_RETRIES = 5;
/*
* Subclassing QFileSystemWatcher in order to support Network File
* System watching (NFS, CIFS) on Linux and Mac OS.
@@ -39,11 +45,14 @@ private:
QList<QDir> watched_folders;
QPointer<QTimer> watch_timer;
#endif
QStringList filters;
QStringList m_filters;
// Partial torrents
QHash<QString, int> m_partialTorrents;
QPointer<QTimer> m_partialTorrentTimer;
#ifndef Q_WS_WIN
protected:
bool isNetworkFileSystem(QString path) {
private:
static bool isNetworkFileSystem(QString path) {
QString file = path;
if(!file.endsWith(QDir::separator()))
file += QDir::separator();
@@ -99,7 +108,7 @@ protected:
public:
FileSystemWatcher(QObject *parent): QFileSystemWatcher(parent) {
filters << "*.torrent";
m_filters << "*.torrent";
connect(this, SIGNAL(directoryChanged(QString)), this, SLOT(scanLocalFolder(QString)));
}
@@ -108,6 +117,8 @@ public:
if(watch_timer)
delete watch_timer;
#endif
if(m_partialTorrentTimer)
delete m_partialTorrentTimer;
}
QStringList directories() const {
@@ -137,7 +148,7 @@ public:
if (!watch_timer) {
watch_timer = new QTimer(this);
connect(watch_timer, SIGNAL(timeout()), this, SLOT(scanNetworkFolders()));
watch_timer->start(5000); // 5 sec
watch_timer->start(WATCH_INTERVAL); // 5 sec
}
} else {
#endif
@@ -196,14 +207,72 @@ protected slots:
#endif
}
void processPartialTorrents() {
QStringList no_longer_partial;
// Check which torrents are still partial
foreach(const QString& torrent_path, m_partialTorrents.keys()) {
if(!QFile::exists(torrent_path)) {
m_partialTorrents.remove(torrent_path);
continue;
}
if(misc::isValidTorrentFile(torrent_path)) {
no_longer_partial << torrent_path;
m_partialTorrents.remove(torrent_path);
} else {
if(m_partialTorrents[torrent_path] >= MAX_PARTIAL_RETRIES) {
m_partialTorrents.remove(torrent_path);
QFile::rename(torrent_path, torrent_path+".invalid");
} else {
m_partialTorrents[torrent_path]++;
}
}
}
// Stop the partial timer if necessary
if(m_partialTorrents.empty()) {
m_partialTorrentTimer->stop();
m_partialTorrentTimer->deleteLater();
qDebug("No longer any partial torrent.");
} else {
qDebug("Still %d partial torrents after delayed processing.", m_partialTorrents.count());
m_partialTorrentTimer->start(WATCH_INTERVAL);
}
// Notify of new torrents
if(!no_longer_partial.isEmpty())
emit torrentsAdded(no_longer_partial);
}
signals:
void torrentsAdded(QStringList &pathList);
private:
void startPartialTorrentTimer() {
Q_ASSERT(!m_partialTorrents.isEmpty());
if(!m_partialTorrentTimer) {
m_partialTorrentTimer = new QTimer();
connect(m_partialTorrentTimer, SIGNAL(timeout()), SLOT(processPartialTorrents()));
m_partialTorrentTimer->setSingleShot(true);
m_partialTorrentTimer->start(WATCH_INTERVAL);
}
}
void addTorrentsFromDir(const QDir &dir, QStringList &torrents) {
const QStringList files = dir.entryList(filters, QDir::Files, QDir::Unsorted);
foreach(const QString &file, files)
torrents << dir.canonicalPath() + '/' + file;
const QStringList files = dir.entryList(m_filters, QDir::Files, QDir::Unsorted);
foreach(const QString &file, files) {
const QString file_abspath = dir.absoluteFilePath(file);
if(misc::isValidTorrentFile(file_abspath)) {
torrents << file_abspath;
} else {
if(!m_partialTorrents.contains(file_abspath)) {
qDebug("Partial torrent detected at: %s", qPrintable(file_abspath));
qDebug("Delay the file's processing...");
m_partialTorrents.insert(file_abspath, 0);
}
}
}
if(!m_partialTorrents.empty())
startPartialTorrentTimer();
}
};

File diff suppressed because it is too large Load Diff

508
src/gpl.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -34,7 +34,7 @@
#include <QObject>
#include <QCoreApplication>
#include "preferences.h"
#include "bittorrent.h"
#include "qbtsession.h"
class HeadlessLoader: public QObject {
Q_OBJECT
@@ -44,7 +44,7 @@ public:
// Enable Web UI
Preferences::setWebUiEnabled(true);
// Instanciate Bittorrent Object
BTSession = new Bittorrent();
BTSession = QBtSession::instance();
connect(BTSession, SIGNAL(newConsoleMessage(QString)), this, SLOT(displayConsoleMessage(QString)));
// Resume unfinished torrents
BTSession->startUpTorrents();
@@ -61,7 +61,7 @@ public:
}
~HeadlessLoader() {
delete BTSession;
QBtSession::drop();
}
public slots:
@@ -103,7 +103,7 @@ public slots:
}
private:
Bittorrent *BTSession;
QBtSession *BTSession;
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +1,34 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>lang/qbittorrent_es.qm</file>
<file>lang/qbittorrent_sk.qm</file>
<file>lang/qbittorrent_zh_TW.qm</file>
<file>lang/qbittorrent_pt.qm</file>
<file>lang/qbittorrent_sv.qm</file>
<file>lang/qbittorrent_pl.qm</file>
<file>lang/qbittorrent_it.qm</file>
<file>lang/qbittorrent_ar.qm</file>
<file>lang/qbittorrent_ko.qm</file>
<file>lang/qbittorrent_en.qm</file>
<file>lang/qbittorrent_ro.qm</file>
<file>lang/qbittorrent_bg.qm</file>
<file>lang/qbittorrent_ru.qm</file>
<file>lang/qbittorrent_nl.qm</file>
<file>lang/qbittorrent_nb.qm</file>
<file>lang/qbittorrent_hu.qm</file>
<file>lang/qbittorrent_ru.qm</file>
<file>lang/qbittorrent_zh_TW.qm</file>
<file>lang/qbittorrent_tr.qm</file>
<file>lang/qbittorrent_fi.qm</file>
<file>lang/qbittorrent_uk.qm</file>
<file>lang/qbittorrent_cs.qm</file>
<file>lang/qbittorrent_pt_BR.qm</file>
<file>lang/qbittorrent_sk.qm</file>
<file>lang/qbittorrent_ja.qm</file>
<file>lang/qbittorrent_el.qm</file>
<file>lang/qbittorrent_ca.qm</file>
<file>lang/qbittorrent_hr.qm</file>
<file>lang/qbittorrent_sr.qm</file>
<file>lang/qbittorrent_hu.qm</file>
<file>lang/qbittorrent_da.qm</file>
<file>lang/qbittorrent_de.qm</file>
<file>lang/qbittorrent_zh.qm</file>
<file>lang/qbittorrent_ja.qm</file>
<file>lang/qbittorrent_tr.qm</file>
<file>lang/qbittorrent_pt.qm</file>
<file>lang/qbittorrent_it.qm</file>
<file>lang/qbittorrent_fr.qm</file>
<file>lang/qbittorrent_uk.qm</file>
<file>lang/qbittorrent_zh.qm</file>
<file>lang/qbittorrent_ko.qm</file>
<file>lang/qbittorrent_nb.qm</file>
<file>lang/qbittorrent_sv.qm</file>
<file>lang/qbittorrent_de.qm</file>
<file>lang/qbittorrent_sr.qm</file>
<file>lang/qbittorrent_pt_BR.qm</file>
<file>lang/qbittorrent_da.qm</file>
<file>lang/qbittorrent_cs.qm</file>
<file>lang/qbittorrent_pl.qm</file>
<file>lang/qbittorrent_bg.qm</file>
<file>lang/qbittorrent_ar.qm</file>
<file>lang/qbittorrent_es.qm</file>
<file>lang/qbittorrent_en.qm</file>
<file>lang/qbittorrent_hr.qm</file>
<file>lang/qbittorrent_ro.qm</file>
</qresource>
</RCC>

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