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

Compare commits

...

142 Commits

Author SHA1 Message Date
Christophe Dumez
89906d16d5 Tagged today's releases 2010-10-24 09:55:14 +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
244 changed files with 40753 additions and 119330 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

View File

@@ -1,7 +1,20 @@
* Unreleased - Christophe Dumez <chris@qbittorrent.org> - v2.4.0
* Unreleased - Christophe Dumez <chris@qbittorrent.org> - v2.5.0
- FEATURE: qBittorrent can now act as a tracker
- 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
- COSMETIC: Replaced message box by on-screen notification for download errors
* Tue Aug 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.0
- FEATURE: Added actions to "Move to top/bottom" of priority queue
- FEATURE: Added Auto-Shutdown on downloads completion feature
- 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)

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

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@
#include "ui_mainwindow.h"
#include "qtorrenthandle.h"
class Bittorrent;
class QBtSession;
class QTimer;
class downloadFromURL;
class SearchEngine;
@@ -54,9 +54,11 @@ class PropertiesWidget;
class StatusBar;
class consoleDlg;
class about;
class createtorrent;
class TorrentCreatorDlg;
class downloadFromURL;
class HidableTabWidget;
class LineEdit;
class QFileSystemWatcher;
class GUI : public QMainWindow, private Ui::MainWindow{
Q_OBJECT
@@ -69,6 +71,7 @@ public:
QWidget* getCurrentTabWidget() const;
TransferListWidget* getTransferList() const { return transferList; }
QMenu* getTrayIconMenu();
PropertiesWidget *getProperties() const { return properties; }
public slots:
void trackerAuthenticationRequired(QTorrentHandle& h);
@@ -77,6 +80,7 @@ public slots:
void downloadFromURLList(const QStringList& urls);
void updateAltSpeedsBtn(bool alternative);
void updateNbTorrents(unsigned int nb_downloading, unsigned int nb_seeding, unsigned int nb_active, unsigned int nb_inactive, unsigned int nb_paused);
void deleteBTSession();
protected slots:
// GUI related slots
@@ -97,6 +101,10 @@ protected slots:
void handleDownloadFromUrlFailure(QString, QString) const;
void createSystrayDelayed();
void tab_changed(int);
void on_actionLock_qBittorrent_triggered();
void defineUILockPassword();
bool unlockUI();
void notifyOfUpdate(QString);
// Keyboard shortcuts
void createKeyboardShortcuts();
void displayTransferTab() const;
@@ -121,6 +129,10 @@ protected slots:
void optionsSaved();
// HTTP slots
void on_actionDownload_from_URL_triggered();
#if defined(Q_WS_WIN) || defined(Q_WS_MAC)
void handleUpdateCheckFinished(bool update_available, QString new_version);
void handleUpdateInstalled(QString error_msg);
#endif
protected:
void closeEvent(QCloseEvent *);
@@ -130,8 +142,9 @@ protected:
void displaySearchTab(bool enable);
private:
QFileSystemWatcher *executable_watcher;
// Bittorrent
Bittorrent *BTSession;
QBtSession *BTSession;
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
// GUI related
QTimer *guiUpdater;
@@ -140,7 +153,7 @@ private:
QPointer<options_imp> options;
QPointer<consoleDlg> console;
QPointer<about> aboutDlg;
QPointer<createtorrent> createTorrentDlg;
QPointer<TorrentCreatorDlg> createTorrentDlg;
QPointer<downloadFromURL> downloadFromURLDialog;
QPointer<QSystemTrayIcon> systrayIcon;
QPointer<QTimer> systrayCreator;
@@ -150,6 +163,8 @@ private:
PropertiesWidget *properties;
bool displaySpeedInTitle;
bool force_exit;
bool ui_locked;
LineEdit *search_filter;
// Keyboard shortcuts
QShortcut *switchSearchShortcut;
QShortcut *switchSearchShortcut2;
@@ -160,6 +175,7 @@ private:
QAction *prioSeparator2;
QSplitter *hSplitter;
QSplitter *vSplitter;
QMenu *lockMenu;
// Search
QPointer<SearchEngine> searchEngine;
// RSS
@@ -171,6 +187,8 @@ private slots:
void on_actionSpeed_in_title_bar_triggered();
void on_actionTop_tool_bar_triggered();
void on_actionShutdown_when_downloads_complete_triggered();
void on_actionShutdown_qBittorrent_when_downloads_complete_triggered();
void on_action_Import_Torrent_triggered();
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 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: 79 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() {

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;
@@ -40,10 +40,10 @@ class consoleDlg : public QDialog, private Ui_ConsoleDlg{
Q_OBJECT
private:
Bittorrent *BTSession;
QBtSession *BTSession;
public:
consoleDlg(QWidget *parent, Bittorrent* _BTSession) : QDialog(parent) {
consoleDlg(QWidget *parent, QBtSession* _BTSession) : QDialog(parent) {
setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
setModal(true);

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

@@ -407,9 +407,12 @@ class FilterParserThread : public QThread {
// First, import current filter
ip_filter filter = s->get_ip_filter();
foreach(const QString &ip, IPs) {
qDebug("Manual ban of peer %s", ip.toLocal8Bit().data());
address_v4 addr = address_v4::from_string(ip.toLocal8Bit().data());
filter.add_rule(addr, addr, ip_filter::blocked);
qDebug("Manual ban of peer %s", ip.toLocal8Bit().constData());
boost::system::error_code ec;
address_v4 addr = address_v4::from_string(ip.toLocal8Bit().constData(), ec);
Q_ASSERT(!ec);
if(!ec)
filter.add_rule(addr, addr, ip_filter::blocked);
}
s->set_ip_filter(filter);
}

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 = new QBtSession();
connect(BTSession, SIGNAL(newConsoleMessage(QString)), this, SLOT(displayConsoleMessage(QString)));
// Resume unfinished torrents
BTSession->startUpTorrents();
@@ -103,7 +103,7 @@ public slots:
}
private:
Bittorrent *BTSession;
QBtSession *BTSession;
};

View File

@@ -153,6 +153,7 @@
<file>Icons/oxygen/cookies.png</file>
<file>Icons/oxygen/network-server.png</file>
<file>Icons/oxygen/unsubscribe16.png</file>
<file>Icons/oxygen/encrypted32.png</file>
<file>Icons/oxygen/list-add.png</file>
<file>Icons/oxygen/edit-paste.png</file>
<file>Icons/oxygen/folder-remote.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

Binary file not shown.

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