1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-09 18:32:15 +02:00

Compare commits

..

165 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
250 changed files with 49593 additions and 127064 deletions

View File

@@ -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,17 @@
* 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

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

View File

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

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.4.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,21 +207,74 @@ 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 addTorrentsFromDir(const QDir &dir, QStringList &torrents) {
const QStringList files = dir.entryList(filters, QDir::Files, QDir::Unsorted);
foreach(const QString &file, files) {
#if defined(Q_WS_WIN) || defined(Q_OS_OS2)
torrents << dir.absoluteFilePath(file).replace("/", "\\");
#else
torrents << dir.absoluteFilePath(file);
#endif
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(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();
}
};
#endif // FILESYSTEMWATCHER_H

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

View File

@@ -161,6 +161,7 @@
<file>Icons/oxygen/encrypted.png</file>
<file>Icons/oxygen/folder-remote16.png</file>
<file>Icons/oxygen/go-top.png</file>
<file>Icons/oxygen/emblem-favorite.png</file>
<file>Icons/oxygen/edit_clear.png</file>
<file>Icons/oxygen/bug.png</file>
<file>Icons/oxygen/gear.png</file>

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

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