Compare commits
3 Commits
release-2.
...
release-1.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7d565e7f97 | ||
![]() |
b1f15e8714 | ||
![]() |
1512630757 |
39
AUTHORS
@@ -2,40 +2,28 @@ Author:
|
|||||||
* Christophe Dumez <chris@qbittorrent.org>
|
* Christophe Dumez <chris@qbittorrent.org>
|
||||||
|
|
||||||
Contributors:
|
Contributors:
|
||||||
* Stefanos Antaris <santaris@csd.auth.gr>
|
|
||||||
* Ishan Arora <ishan@qbittorrent.org>
|
|
||||||
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
||||||
|
* Ishan Arora <ishan@qbittorrent.org>
|
||||||
* Grigis Gaëtan <cipher16@gmail.com>
|
* Grigis Gaëtan <cipher16@gmail.com>
|
||||||
|
|
||||||
Code from other projects:
|
|
||||||
* files src/ico.cpp src/ico.h
|
|
||||||
copyright: Malte Starostik <malte@kde.org>
|
|
||||||
license: LGPL
|
|
||||||
|
|
||||||
Images Authors:
|
Images Authors:
|
||||||
* files: src/Icons/*.png
|
* files: src/Icons/*.png
|
||||||
copyright: Gnome Icon Theme
|
copyright: Gnome Icon Theme
|
||||||
license: GPLv2
|
license: GPLv2
|
||||||
url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
|
url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
|
||||||
|
|
||||||
* files: src/oxygen/*.png
|
|
||||||
copyright: Oxygen Icon Theme (KDE)
|
|
||||||
license: LGPL
|
|
||||||
url: http://www.oxygen-icons.org
|
|
||||||
|
|
||||||
* files: src/Icons/flags/*.png
|
* files: src/Icons/flags/*.png
|
||||||
copyright: Open Clip Art Library
|
copyright: Open Clip Art Library
|
||||||
license: Creative Commons Public Domain Dedication
|
license: Creative Commons Public Domain Dedication
|
||||||
url: http://www.openclipart.org
|
url: http://www.openclipart.org
|
||||||
|
|
||||||
* files: src/Icons/skin/*.png
|
* files: src/Icons/skins/*.png
|
||||||
files: src/menuicons/YYxYY/*.png
|
|
||||||
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||||
license: GPLv2
|
license: GPLv2
|
||||||
|
|
||||||
* file: src/Icons/skin/tabs.gif
|
* files: src/menuicons/YYxYY/*.png
|
||||||
copyright: Greg Houston <gregory.houston@gmail.com>
|
copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
|
||||||
license: MIT
|
license: GPLv2
|
||||||
|
|
||||||
* file: src/search_engine/engines/btjunkie.png
|
* file: src/search_engine/engines/btjunkie.png
|
||||||
copyright: Downloaded from btjunkie.org
|
copyright: Downloaded from btjunkie.org
|
||||||
@@ -57,30 +45,27 @@ Translations authors:
|
|||||||
copyright:
|
copyright:
|
||||||
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
||||||
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
- Bulgarian: Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)
|
||||||
- Catalan: Francisco Luque Contreras (frannoe@ya.com)
|
- Catalan: Gekko Dam Beer (gekko04@users.sourceforge.net)
|
||||||
- Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
|
- Chinese (Simplified): Guo Yue (guoyue0418@hotmail.com)
|
||||||
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
|
||||||
- Czech: Jirka Vilim (web@tets.cz)
|
|
||||||
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
||||||
- Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)
|
- Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)
|
||||||
- English: Christophe Dumez (chris@qbittorrent.org)
|
- English: Christophe Dumez (chris@qbittorrent.org)
|
||||||
- Finnish: Niklas Laxström (nikerabbit@users.sourceforge.net)
|
- Finnish: Niklas Laxström (nikerabbit@users.sourceforge.net)
|
||||||
- French: Christophe Dumez (chris@qbittorrent.org)
|
- French: Christophe Dumez (chris@qbittorrent.org)
|
||||||
- German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
|
- German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
|
||||||
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net) and Stephanos Antaris (santaris@csd.auth.gr)
|
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net)
|
||||||
- Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
|
- Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
|
||||||
- Italian: Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)
|
- Italian: Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)
|
||||||
- Japanese: Nardog (alphisation@gmail.com)
|
- Japanese: Nardog (nardog@e2umail.com)
|
||||||
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
||||||
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
|
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
|
||||||
- Polish: Mariusz Fik (fisiu@opensuse.org)
|
- Polish: Jarek Smieja (ajep9691@wp.pl)
|
||||||
- Portuguese: Nick Marinho (nickmarinho@gmail.com)
|
- Portuguese: Nick Marinho (nickmarinho@gmail.com)
|
||||||
- Romanian: Obada Denis (obadadenis@users.sourceforge.net)
|
- Romanian: Obada Denis (obadadenis@users.sourceforge.net)
|
||||||
- Russian: Nick Khazov (m2k3d0n at users.sourceforge.net)
|
- Russian: Nick Khazov (m2k3d0n at users.sourceforge.net)
|
||||||
- Serbian: Anaximandar Milet (anaximandar at operamail.com)
|
|
||||||
- Slovak: helix84
|
- Slovak: helix84
|
||||||
- Spanish: Francisco Luque Contreras (frannoe@ya.com)
|
- Spanish: Vicente Raul Plata Fonseca (silverxnt@users.sourceforge.net)
|
||||||
- Swedish: Daniel Nylander (po@danielnylander.se)
|
- Swedish: Daniel Nylander (po@danielnylander.se)
|
||||||
- Turkish: Hasan Yilmaz (iletisim@hedefturkce.com)
|
- Turkish: Erdem Bingöl (erdem84@gmail.com)
|
||||||
- Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
|
- Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
|
||||||
license: GPLv2
|
license: GPLv2
|
||||||
|
14
COPYING
@@ -1,17 +1,3 @@
|
|||||||
qBittorrent is licensed under the GNU General Public License version 2 with the
|
|
||||||
addition of the following special exception:
|
|
||||||
|
|
||||||
In addition, as a special exception, the copyright holders give permission to
|
|
||||||
link this program with the OpenSSL project's "OpenSSL" library (or with
|
|
||||||
modified versions of it that use the same license as the "OpenSSL" library),
|
|
||||||
and distribute the linked executables. You must obey the GNU General Public
|
|
||||||
License in all respects for all of the code used other than "OpenSSL". If you
|
|
||||||
modify file(s), you may extend this exception to your version of the file(s),
|
|
||||||
but you are not obligated to do so. If you do not wish to do so, delete this
|
|
||||||
exception statement from your version.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
|
28
INSTALL
@@ -1,6 +1,12 @@
|
|||||||
qBittorrent - A BitTorrent client in C++ / Qt4
|
qBittorrent - A BitTorrent client in C++ / Qt4
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
|
*** Necessary if qt3 is default on your system ***
|
||||||
|
export QTDIR=/usr/include/qt4
|
||||||
|
export PATH=$QTDIR/bin:$PATH
|
||||||
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
|
||||||
|
*** End ***
|
||||||
|
|
||||||
./configure
|
./configure
|
||||||
make && make install
|
make && make install
|
||||||
qbittorrent
|
qbittorrent
|
||||||
@@ -8,25 +14,29 @@ qbittorrent
|
|||||||
will install and execute qBittorrent hopefully without any problems.
|
will install and execute qBittorrent hopefully without any problems.
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
- Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
|
||||||
|
Qt >= 4.4.0 is advised
|
||||||
|
|
||||||
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.0 REQUIRED, >= v0.15.0 ADVISED)
|
- libtorrent-rasterbar by Arvid Norberg (>= v0.13.1 REQUIRED)
|
||||||
-> http://www.qbittorrent.org/download.php (advised)
|
-> http://www.qbittorrent.org/download.php (advised)
|
||||||
-> http://www.libtorrent.net
|
-> http://www.libtorrent.net
|
||||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||||
|
|
||||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
|
||||||
|
|
||||||
|
- libcurl
|
||||||
|
|
||||||
- python >= 2.3 (needed by search engine)
|
- python >= 2.3 (needed by search engine)
|
||||||
* Run time only dependency
|
|
||||||
|
|
||||||
- libnotify >= 0.4.2, glib-2.0 (optional)
|
- libmagick++ (advised, not required)
|
||||||
* Can be used for system notifications to replace standard Qt notifications
|
* Needed for favicons support (RSS / Search plugins)
|
||||||
so that it integrates better into the Desktop
|
|
||||||
|
|
||||||
- geoip-database (optional)
|
- libzzip (advised, not required)
|
||||||
* If qBittorrent cannot find this database, it will try to resolve countries using the Internet but it will be a lot slower.
|
* Needed for zip support (Search plugins)
|
||||||
* Run time only dependency
|
|
||||||
|
NOTE FOR NON-KDE USERS:
|
||||||
|
- qt4-qtconfig package is advised when using other systems than KDE.
|
||||||
|
You can also change qBittorrent style to Cleanlooks (GNOME like)
|
||||||
|
|
||||||
DOCUMENTATION:
|
DOCUMENTATION:
|
||||||
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
|
||||||
|
6
README
@@ -10,9 +10,6 @@ It aims to be a good alternative to all other bittorrent clients
|
|||||||
out there. qBittorrent is fast, stable and provides unicode
|
out there. qBittorrent is fast, stable and provides unicode
|
||||||
support as well as many features.
|
support as well as many features.
|
||||||
|
|
||||||
This product includes GeoLite data created by MaxMind, available from
|
|
||||||
http://maxmind.com/
|
|
||||||
|
|
||||||
Installation:
|
Installation:
|
||||||
********************************
|
********************************
|
||||||
For installation, follow the instructions from INSTALL file, but simple:
|
For installation, follow the instructions from INSTALL file, but simple:
|
||||||
@@ -26,9 +23,6 @@ will install and execute qBittorrent hopefully without any problem.
|
|||||||
For more information please visit:
|
For more information please visit:
|
||||||
http://www.qbittorrent.org
|
http://www.qbittorrent.org
|
||||||
|
|
||||||
or our wiki here:
|
|
||||||
http://wiki.qbittorrent.org
|
|
||||||
|
|
||||||
Please report any bug (or feature request) to:
|
Please report any bug (or feature request) to:
|
||||||
http://bugs.qbittorrent.org
|
http://bugs.qbittorrent.org
|
||||||
|
|
||||||
|
37
TODO
@@ -1,2 +1,37 @@
|
|||||||
See https://blueprints.launchpad.net/qbittorrent/
|
// Easy
|
||||||
|
- Translations into as many languages as possible
|
||||||
|
- Use Launchpad/Rosetta for translations once it supports TS files
|
||||||
|
|
||||||
|
// Intermediate
|
||||||
|
- Port on MacOS, Windows (and create an installer for Windows) - Slow progress
|
||||||
|
- Add some transparency (menus,...), improve look / usabilty
|
||||||
|
- Skins support? (contact Mateusz)
|
||||||
|
|
||||||
|
// Harder
|
||||||
|
- Torrent scheduler ala µtorrent/Bitcomet
|
||||||
|
|
||||||
|
// Waiting for libtorrent
|
||||||
|
- Allow to prioritize torrents (may code this in qBittorrent?)
|
||||||
|
|
||||||
|
// Unsure
|
||||||
|
- Display the peers we are connected to for each torrent with infos (like flag, dl/up speeds, ...)
|
||||||
|
- Azureus spoofing to prevent ban from trackers?
|
||||||
|
- Option to shutdown computer when downloads are finished
|
||||||
|
- NAT checker/Tester
|
||||||
|
- Display hard drive space left?
|
||||||
|
- Make use of dbus on Linux for the single instance instead of socket communication?
|
||||||
|
(http://techbase.kde.org/Development/Tutorials/D-Bus/Accessing_Interfaces)
|
||||||
|
- When favicon can't be downloaded, try to parse the webpage for:
|
||||||
|
<link rel="icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon">
|
||||||
|
* Be careful, the link can be relative
|
||||||
|
- Improve search plugin install (choose in a list taken from plugins.qbittorrent.org)
|
||||||
|
- support zipped torrents? (useful?)
|
||||||
|
- Allow to limit the number of downloading torrents simultaneously (other are paused until a download finishes)
|
||||||
|
|
||||||
|
// in v1.2.0
|
||||||
|
- Allow user to organize the downloads into categories/folders?
|
||||||
|
|
||||||
|
// in v1.1.0
|
||||||
|
- Stop calculating ETAs when ETA column is hidden
|
||||||
|
-> See https://blueprints.launchpad.net/qbittorrent
|
||||||
|
|
||||||
|
@@ -1,19 +1,17 @@
|
|||||||
.\" This manpage has been automatically generated by docbook2man
|
.\" This manpage has been automatically generated by docbook2man
|
||||||
.\" from a DocBook document. This tool can be found at:
|
.\" from a DocBook document. This tool can be found at:
|
||||||
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
|
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
|
||||||
.TH "QBITTORRENT" "1" "September 30th 2009" "Bittorrent client written in C++ / Qt4" ""
|
.TH "QBITTORRENT" "1" "September 1st 2007" "Bittorrent client written in C++ / Qt4" ""
|
||||||
|
|
||||||
.SH "NAME"
|
.SH NAME
|
||||||
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
||||||
|
.SH SYNOPSIS
|
||||||
|
|
||||||
.SH "SYNOPSIS"
|
\fBqbittorrent\fR [FILE | URL] [FILE | URL...]
|
||||||
|
|
||||||
\fBqbittorrent\fR [\-\-no-splash] [TORRENT_FILE | URL]...
|
|
||||||
|
|
||||||
\fBqbittorrent\fR \-\-help
|
\fBqbittorrent\fR \-\-help
|
||||||
|
|
||||||
\fBqbittorrent\fR \-\-version
|
\fBqbittorrent\fR \-\-version
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
|
|
||||||
@@ -21,21 +19,10 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4
|
|||||||
using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
|
using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
|
||||||
to be a good alternative to all other bittorrent clients out there. qBittorrent
|
to be a good alternative to all other bittorrent clients out there. qBittorrent
|
||||||
is fast, stable, light, it supports unicode and it provides a good integrated search engine.
|
is fast, stable, light, it supports unicode and it provides a good integrated search engine.
|
||||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Azureus compatible),
|
It also comes with UPnP port forwarding / NAT-PMP, encryption (Azureus compatible), FAST extension (mainline) and PeX support (utorrent compatible).
|
||||||
FAST extension (mainline) and PeX support (utorrent compatible).
|
|
||||||
|
|
||||||
.SH "OPTIONS"
|
|
||||||
|
|
||||||
\fB--help\fR Prints the command line options.
|
|
||||||
|
|
||||||
\fB--version\fR Prints qbittorrent program version number.
|
|
||||||
|
|
||||||
\fB--no-splash\fR Disables splash screen on startup.
|
|
||||||
|
|
||||||
.SH "BUGS"
|
|
||||||
|
|
||||||
If you find a bug, please report it at http://bugs.qbittorrent.org
|
|
||||||
|
|
||||||
|
Please report any problem to http://bugs.qbittorrent.org
|
||||||
|
.PP
|
||||||
.SH "AUTHOR"
|
.SH "AUTHOR"
|
||||||
|
|
||||||
Christophe Dumez <chris@qbittorrent.org>
|
Christophe Dumez <chris@qbittorrent.org>
|
||||||
|
@@ -12,8 +12,9 @@
|
|||||||
<dep type='libboost'>
|
<dep type='libboost'>
|
||||||
<required/>
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='libnotify'>
|
<dep type='libcurl'>
|
||||||
</dep>
|
<required/>
|
||||||
<dep type='geoip-database'>
|
|
||||||
</dep>
|
</dep>
|
||||||
|
<dep type='libmagick'/>
|
||||||
|
<dep type='libzzip'/>
|
||||||
</qconf>
|
</qconf>
|
||||||
|
@@ -1,29 +0,0 @@
|
|||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: geoip-database
|
|
||||||
arg: with-geoip-database-embedded, Geoip Database will be embedded in qBittorrent executable (please follow instructions in src/geoip/README)
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
// see Conf::findPkgConfig
|
|
||||||
class qc_geoip_database : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_geoip_database(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "GeoIP Database (optional)"; }
|
|
||||||
QString shortname() const { return "GeoIP Database"; }
|
|
||||||
bool exec() {
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if(!conf->getenv("QC_WITH_GEOIP_DATABASE_EMBEDDED").isEmpty()) {
|
|
||||||
#endif
|
|
||||||
conf->addDefine("WITH_GEOIP_EMBEDDED");
|
|
||||||
printf(" embedded and");
|
|
||||||
return true;
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
}
|
|
||||||
if(QFile::exists("/usr/share/GeoIP/GeoIP.dat") || QFile::exists("/usr/local/share/GeoIP/GeoIP.dat") || QFile::exists("/var/lib/GeoIP/GeoIP.dat"))
|
|
||||||
return true;
|
|
||||||
printf("\nWarning: GeoIP database was not found at /usr/share/GeoIP/GeoIP.dat or /var/lib/GeoIP/GeoIP.dat\nCountry resolution will be slow.");
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
|
65
qcm/libcommoncpp2.qcm
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: libcommoncpp2
|
||||||
|
arg: with-libcommoncpp2-inc=[path], Path to libcommoncpp2 include files
|
||||||
|
arg: with-libcommoncpp2-lib=[path], Path to libcommoncpp2 library files
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
class qc_libcommoncpp2 : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_libcommoncpp2(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "GNU Common C++ library (libcommoncpp2)"; }
|
||||||
|
QString shortname() const { return "libcommoncpp2"; }
|
||||||
|
bool exec(){
|
||||||
|
QString s;
|
||||||
|
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_INC");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "cc++/url.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "cc++/url.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBCOMMONCPP2_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libccext2.so")))
|
||||||
|
return false;
|
||||||
|
if(!QFile::exists(s+QString("/libccgnu2.so")))
|
||||||
|
return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libccext2.so"))){
|
||||||
|
if(QFile::exists(s+QString("libccgnu2.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
61
qcm/libcurl.qcm
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: libcommoncpp2
|
||||||
|
arg: with-libcurl-inc=[path], Path to libcurl include files
|
||||||
|
arg: with-libcurl-lib=[path], Path to libcurl library files
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
class qc_libcurl : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_libcurl(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "libcurl"; }
|
||||||
|
QString shortname() const { return "libcurl"; }
|
||||||
|
bool exec(){
|
||||||
|
QString s;
|
||||||
|
s = conf->getenv("QC_WITH_LIBCURL_INC");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "curl/curl.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "curl/curl.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBCURL_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libcurl.so")))
|
||||||
|
return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libcurl.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
@@ -64,11 +64,14 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
conf->addLib(QString("-L") + s);
|
conf->addLib(QString("-L") + s);
|
||||||
QString out = "";
|
QProcess magickConfig;
|
||||||
QStringList params;
|
QStringList params;
|
||||||
params << "--libs";
|
params << "--libs";
|
||||||
qconf->doCommand("Magick++-config", params, &out);
|
magickConfig.start("Magick++-config", params, QIODevice::ReadOnly);
|
||||||
out = out.replace("\n", "");
|
magickConfig.waitForStarted();
|
||||||
|
magickConfig.waitForFinished();
|
||||||
|
QByteArray result = magickConfig.readAll();
|
||||||
|
result = result.replace("\n", "");
|
||||||
conf->addLib(result.data());
|
conf->addLib(result.data());
|
||||||
conf->addDefine("HAVE_MAGICK");
|
conf->addDefine("HAVE_MAGICK");
|
||||||
return true;
|
return true;
|
||||||
|
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
-----BEGIN QCMOD-----
|
|
||||||
name: libnotify
|
|
||||||
-----END QCMOD-----
|
|
||||||
*/
|
|
||||||
// see Conf::findPkgConfig
|
|
||||||
class qc_libnotify : public ConfObj
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
qc_libnotify(Conf *c) : ConfObj(c) {}
|
|
||||||
QString name() const { return "libnotify >= 0.4.2 (optional)"; }
|
|
||||||
QString shortname() const { return "libnotify"; }
|
|
||||||
bool exec(){
|
|
||||||
QStringList incs;
|
|
||||||
QString req_ver = "0.4.2";
|
|
||||||
QString version, libs, other;
|
|
||||||
VersionMode mode = VersionMin;
|
|
||||||
if(conf->findPkgConfig("libnotify", mode, req_ver, &version, &incs, &libs, &other)) {
|
|
||||||
conf->addDefine("WITH_LIBNOTIFY");
|
|
||||||
for(int n = 0; n < incs.count(); ++n)
|
|
||||||
conf->addIncludePath(incs[n]);
|
|
||||||
if(!libs.isEmpty())
|
|
||||||
conf->addLib(libs);
|
|
||||||
QStringList incs2;
|
|
||||||
QString req_ver2 = "2.0";
|
|
||||||
QString version2, libs2, other2;
|
|
||||||
if(conf->findPkgConfig("glib-2.0", mode, req_ver2, &version2, &incs2, &libs2, &other2)) {
|
|
||||||
for(int n = 0; n < incs2.count(); ++n)
|
|
||||||
conf->addIncludePath(incs2[n]);
|
|
||||||
if(!libs2.isEmpty())
|
|
||||||
conf->addLib(libs2);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
@@ -1,31 +1,70 @@
|
|||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: libtorrent-rasterbar
|
name: libtorrent-rasterbar
|
||||||
|
arg: with-libtorrent-inc=[path], Path to libtorrent-rasterbar include files
|
||||||
|
arg: with-libtorrent-lib=[path], Path to libtorrent-rasterbar library files
|
||||||
|
arg: with-libtorrent-static-lib=[path], Path to libtorrent-rasterbar .a file
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
// see Conf::findPkgConfig
|
|
||||||
class qc_libtorrent_rasterbar : public ConfObj
|
class qc_libtorrent_rasterbar : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "libtorrent-rasterbar >= 0.14.0 (>= 0.15.0 advised)"; }
|
QString name() const { return "libtorrent-rasterbar >= 0.13"; }
|
||||||
QString shortname() const { return "libtorrent-rasterbar"; }
|
QString shortname() const { return "libtorrent-rasterbar"; }
|
||||||
bool exec(){
|
bool exec(){
|
||||||
QStringList incs;
|
QString s;
|
||||||
QString req_ver = "0.14.0";
|
s = conf->getenv("QC_WITH_LIBTORRENT_INC");
|
||||||
QString adv_ver = "0.15.0";
|
if(!s.isEmpty()) {
|
||||||
QString version, libs, other;
|
if(!conf->checkHeader(s, "libtorrent/lsd.hpp")) {
|
||||||
VersionMode mode = VersionMin;
|
return false;
|
||||||
if(!conf->findPkgConfig("libtorrent-rasterbar", mode, req_ver, &version, &incs, &libs, &other))
|
}
|
||||||
return false;
|
}else{
|
||||||
for(int n = 0; n < incs.count(); ++n)
|
QStringList sl;
|
||||||
conf->addIncludePath(incs[n]);
|
sl << "/usr/include";
|
||||||
if(!libs.isEmpty())
|
sl << "/usr/local/include";
|
||||||
conf->addLib(libs);
|
bool found = false;
|
||||||
if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
|
foreach(s, sl){
|
||||||
printf("\nWarning: libtorrent-rasterbar v%s was detected.\nAlthough it will compile and run, you will be missing some features. Please consider updating to v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
if(conf->checkHeader(s, "libtorrent/lsd.hpp")){
|
||||||
else
|
found = true;
|
||||||
conf->addDefine("LIBTORRENT_0_15");
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
conf->addIncludePath(s+QDir::separator()+"libtorrent");
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBTORRENT_STATIC_LIB");
|
||||||
|
if(!s.isEmpty() && QFile::exists(s) && s.endsWith(".a")){
|
||||||
|
conf->addLib(s);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBTORRENT_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkLibrary(s, "torrent-rasterbar")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkLibrary(s, "torrent-rasterbar")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found) return false;
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
71
qcm/libzzip.qcm
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
-----BEGIN QCMOD-----
|
||||||
|
name: libzzip
|
||||||
|
arg: with-libzzip-inc=[path], Path to libzzip++ include files
|
||||||
|
arg: with-libzzip-lib=[path], Path to libzzip++ library files
|
||||||
|
-----END QCMOD-----
|
||||||
|
*/
|
||||||
|
#include <QProcess>
|
||||||
|
class qc_libzzip : public ConfObj
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
qc_libzzip(Conf *c) : ConfObj(c) {}
|
||||||
|
QString name() const { return "Zzip library (libzzip)"; }
|
||||||
|
QString shortname() const { return "libzzip"; }
|
||||||
|
QString checkString() const {
|
||||||
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
|
return "";
|
||||||
|
return ConfObj::checkString();
|
||||||
|
}
|
||||||
|
bool exec(){
|
||||||
|
if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty())
|
||||||
|
return false;
|
||||||
|
QString s;
|
||||||
|
s = conf->getenv("QC_WITH_LIBZZIP_INC");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!conf->checkHeader(s, "zzip/zzip.h")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/include";
|
||||||
|
sl << "/usr/local/include";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(conf->checkHeader(s, "zzip/zzip.h")){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addIncludePath(s);
|
||||||
|
|
||||||
|
s = conf->getenv("QC_WITH_LIBZZIP_LIB");
|
||||||
|
if(!s.isEmpty()) {
|
||||||
|
if(!QFile::exists(s+QString("/libzzip.so"))){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
QStringList sl;
|
||||||
|
sl << "/usr/lib/";
|
||||||
|
sl << "/usr/lib64/";
|
||||||
|
sl << "/usr/local/lib/";
|
||||||
|
sl << "/usr/local/lib64/";
|
||||||
|
bool found = false;
|
||||||
|
foreach(s, sl){
|
||||||
|
if(QFile::exists(s+QString("libzzip.so"))){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
conf->addLib(QString("-L") + s);
|
||||||
|
conf->addLib("-lzzip");
|
||||||
|
conf->addDefine("HAVE_ZZIP");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
14
qcm/qt4.qcm
@@ -1,20 +1,20 @@
|
|||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: Qt >= 4.4
|
name: Qt >= 4.3
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_qt4 : public ConfObj
|
class qc_qt4 : public ConfObj
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
qc_qt4(Conf *c) : ConfObj(c) {}
|
qc_qt4(Conf *c) : ConfObj(c) {}
|
||||||
QString name() const { return "Qt >= 4.4"; }
|
QString name() const { return "Qt >= 4.3"; }
|
||||||
QString shortname() const { return "Qt 4.4"; }
|
QString shortname() const { return "Qt 4.3"; }
|
||||||
bool exec()
|
bool exec()
|
||||||
{
|
{
|
||||||
if(QT_VERSION >= 0x040500) {
|
if(QT_VERSION >= 0x040400) {
|
||||||
conf->addDefine("QT_4_5");
|
conf->addDefine("QT_4_4");
|
||||||
}
|
}
|
||||||
return(QT_VERSION >= 0x040400);
|
return(QT_VERSION >= 0x040300);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
103
src/DLListDelegate.h
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DLLISTDELEGATE_H
|
||||||
|
#define DLLISTDELEGATE_H
|
||||||
|
|
||||||
|
#include <QItemDelegate>
|
||||||
|
#include <QModelIndex>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QStyleOptionProgressBarV2>
|
||||||
|
#include <QStyleOptionViewItemV2>
|
||||||
|
#include <QProgressBar>
|
||||||
|
#include <QApplication>
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
|
// Defines for download list list columns
|
||||||
|
#define NAME 0
|
||||||
|
#define SIZE 1
|
||||||
|
#define PROGRESS 2
|
||||||
|
#define DLSPEED 3
|
||||||
|
#define UPSPEED 4
|
||||||
|
#define SEEDSLEECH 5
|
||||||
|
#define RATIO 6
|
||||||
|
#define ETA 7
|
||||||
|
#define HASH 8
|
||||||
|
|
||||||
|
class DLListDelegate: public QItemDelegate {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
DLListDelegate(QObject *parent) : QItemDelegate(parent){}
|
||||||
|
|
||||||
|
~DLListDelegate(){}
|
||||||
|
|
||||||
|
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const{
|
||||||
|
QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
|
||||||
|
switch(index.column()){
|
||||||
|
case SIZE:
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, option.rect, misc::friendlyUnit(index.data().toLongLong()));
|
||||||
|
break;
|
||||||
|
case ETA:
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, option.rect, misc::userFriendlyDuration(index.data().toLongLong()));
|
||||||
|
break;
|
||||||
|
case UPSPEED:
|
||||||
|
case DLSPEED:{
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
double speed = index.data().toDouble();
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(speed/1024., 'f', 1))+QString::fromUtf8(" ")+tr("KiB/s"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RATIO:{
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
double ratio = index.data().toDouble();
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROGRESS:{
|
||||||
|
QStyleOptionProgressBarV2 newopt;
|
||||||
|
double progress = index.data().toDouble()*100.;
|
||||||
|
newopt.rect = opt.rect;
|
||||||
|
newopt.text = QString(QByteArray::number(progress, 'f', 1))+QString::fromUtf8("%");
|
||||||
|
newopt.progress = (int)progress;
|
||||||
|
newopt.maximum = 100;
|
||||||
|
newopt.minimum = 0;
|
||||||
|
newopt.state |= QStyle::State_Enabled;
|
||||||
|
newopt.textVisible = true;
|
||||||
|
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt,
|
||||||
|
painter);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
QItemDelegate::paint(painter, option, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const {
|
||||||
|
// No editor here
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
81
src/FinishedListDelegate.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FINISHEDLISTDELEGATE_H
|
||||||
|
#define FINISHEDLISTDELEGATE_H
|
||||||
|
|
||||||
|
#include <QItemDelegate>
|
||||||
|
#include <QModelIndex>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QStyleOptionProgressBarV2>
|
||||||
|
#include <QStyleOptionViewItemV2>
|
||||||
|
#include <QProgressBar>
|
||||||
|
#include <QApplication>
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
|
// Defines for download list list columns
|
||||||
|
#define F_NAME 0
|
||||||
|
#define F_SIZE 1
|
||||||
|
#define F_UPSPEED 2
|
||||||
|
#define F_LEECH 3
|
||||||
|
#define F_RATIO 4
|
||||||
|
#define F_HASH 5
|
||||||
|
|
||||||
|
class FinishedListDelegate: public QItemDelegate {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
FinishedListDelegate(QObject *parent) : QItemDelegate(parent){}
|
||||||
|
|
||||||
|
~FinishedListDelegate(){}
|
||||||
|
|
||||||
|
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const{
|
||||||
|
QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
|
||||||
|
switch(index.column()){
|
||||||
|
case F_SIZE:
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, option.rect, misc::friendlyUnit(index.data().toLongLong()));
|
||||||
|
break;
|
||||||
|
case F_UPSPEED:{
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
double speed = index.data().toDouble();
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(speed/1024., 'f', 1))+QString::fromUtf8(" ")+tr("KiB/s"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case F_RATIO:{
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
double ratio = index.data().toDouble();
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, opt.rect, QString(QByteArray::number(ratio, 'f', 1)));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
QItemDelegate::paint(painter, option, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const {
|
||||||
|
// No editor here
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
602
src/FinishedTorrents.cpp
Normal file
92
src/FinishedTorrents.h
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SEEDING_H
|
||||||
|
#define SEEDING_H
|
||||||
|
|
||||||
|
#include "ui_seeding.h"
|
||||||
|
#include "qtorrenthandle.h"
|
||||||
|
|
||||||
|
class QStandardItemModel;
|
||||||
|
class bittorrent;
|
||||||
|
class FinishedListDelegate;
|
||||||
|
|
||||||
|
using namespace libtorrent;
|
||||||
|
|
||||||
|
class FinishedTorrents : public QWidget, public Ui::seeding {
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
QObject *parent;
|
||||||
|
bittorrent *BTSession;
|
||||||
|
FinishedListDelegate *finishedListDelegate;
|
||||||
|
QStandardItemModel *finishedListModel;
|
||||||
|
unsigned int nbFinished;
|
||||||
|
void hideOrShowColumn(int index);
|
||||||
|
bool loadHiddenColumns();
|
||||||
|
void saveHiddenColumns();
|
||||||
|
QAction* getActionHoSCol(int index);
|
||||||
|
|
||||||
|
public:
|
||||||
|
FinishedTorrents(QObject *parent, bittorrent *BTSession);
|
||||||
|
~FinishedTorrents();
|
||||||
|
// Methods
|
||||||
|
bool loadColWidthFinishedList();
|
||||||
|
int getRowFromHash(QString hash) const;
|
||||||
|
QStringList getSelectedTorrents(bool only_one=false) const;
|
||||||
|
unsigned int getNbTorrentsInList() const;
|
||||||
|
QString getHashFromRow(unsigned int row) const;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void showProperties(const QModelIndex &index);
|
||||||
|
void displayFinishedListMenu(const QPoint&);
|
||||||
|
void displayFinishedHoSMenu(const QPoint&);
|
||||||
|
void setRowColor(int row, QString color);
|
||||||
|
void saveColWidthFinishedList() const;
|
||||||
|
void sortFinishedList(int index);
|
||||||
|
void sortFinishedListFloat(int index, Qt::SortOrder sortOrder);
|
||||||
|
void sortFinishedListString(int index, Qt::SortOrder sortOrder);
|
||||||
|
void updateFileSize(QString hash);
|
||||||
|
void torrentAdded(QString path, QTorrentHandle& h, bool fastResume);
|
||||||
|
void on_actionSet_upload_limit_triggered();
|
||||||
|
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
||||||
|
void hideOrShowColumnName();
|
||||||
|
void hideOrShowColumnSize();
|
||||||
|
void hideOrShowColumnUpSpeed();
|
||||||
|
void hideOrShowColumnLeechers();
|
||||||
|
void hideOrShowColumnRatio();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void addTorrent(QString hash);
|
||||||
|
void updateFinishedList();
|
||||||
|
void pauseTorrent(QString hash);
|
||||||
|
void resumeTorrent(QString hash);
|
||||||
|
void propertiesSelection();
|
||||||
|
void deleteTorrent(QString hash);
|
||||||
|
void showPropertiesFromHash(QString hash);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void torrentMovedFromFinishedList(QString);
|
||||||
|
void torrentDoubleClicked(QString hash, bool finished);
|
||||||
|
void finishedTorrentsNumberChanged(unsigned int);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
1391
src/GUI.cpp
120
src/GUI.h
@@ -16,15 +16,6 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* In addition, as a special exception, the copyright holders give permission to
|
|
||||||
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
|
||||||
* modified versions of it that use the same license as the "OpenSSL" library),
|
|
||||||
* and distribute the linked executables. You must obey the GNU General Public
|
|
||||||
* License in all respects for all of the code used other than "OpenSSL". If you
|
|
||||||
* modify file(s), you may extend this exception to your version of the file(s),
|
|
||||||
* but you are not obligated to do so. If you do not wish to do so, delete this
|
|
||||||
* exception statement from your version.
|
|
||||||
*
|
|
||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -33,65 +24,77 @@
|
|||||||
|
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
#include <QPointer>
|
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_MainWindow.h"
|
||||||
#include "qtorrenthandle.h"
|
#include "qtorrenthandle.h"
|
||||||
|
|
||||||
enum TabIndex{TAB_TRANSFER, TAB_SEARCH, TAB_RSS};
|
class bittorrent;
|
||||||
|
class createtorrent;
|
||||||
class Bittorrent;
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
class DownloadingTorrents;
|
||||||
|
class FinishedTorrents;
|
||||||
class downloadFromURL;
|
class downloadFromURL;
|
||||||
class SearchEngine;
|
class SearchEngine;
|
||||||
class QLocalServer;
|
#ifdef QT_4_4
|
||||||
|
class QLocalServer;
|
||||||
|
class QLocalSocket;
|
||||||
|
#else
|
||||||
|
class QTcpServer;
|
||||||
|
class QTcpSocket;
|
||||||
|
#endif
|
||||||
class QCloseEvent;
|
class QCloseEvent;
|
||||||
class RSSImp;
|
class RSSImp;
|
||||||
class QShortcut;
|
class QShortcut;
|
||||||
class about;
|
class about;
|
||||||
|
class previewSelect;
|
||||||
class options_imp;
|
class options_imp;
|
||||||
class QTabWidget;
|
class QTabWidget;
|
||||||
class TransferListWidget;
|
class QLabel;
|
||||||
class TransferListFiltersWidget;
|
class QModelIndex;
|
||||||
class QSplitter;
|
class HttpServer;
|
||||||
class PropertiesWidget;
|
|
||||||
class StatusBar;
|
|
||||||
|
|
||||||
class GUI : public QMainWindow, private Ui::MainWindow{
|
class GUI : public QMainWindow, private Ui::MainWindow{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Bittorrent
|
// Bittorrent
|
||||||
Bittorrent *BTSession;
|
bittorrent *BTSession;
|
||||||
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
|
QTimer *checkConnect;
|
||||||
|
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers;
|
||||||
// GUI related
|
// GUI related
|
||||||
QTimer *guiUpdater;
|
|
||||||
QTabWidget *tabs;
|
QTabWidget *tabs;
|
||||||
StatusBar *status_bar;
|
options_imp *options;
|
||||||
QPointer<options_imp> options;
|
QSystemTrayIcon *myTrayIcon;
|
||||||
QPointer<QSystemTrayIcon> systrayIcon;
|
QTimer *systrayCreator;
|
||||||
QPointer<QTimer> systrayCreator;
|
|
||||||
QMenu *myTrayIconMenu;
|
QMenu *myTrayIconMenu;
|
||||||
TransferListWidget *transferList;
|
DownloadingTorrents *downloadingTorrentTab;
|
||||||
TransferListFiltersWidget *transferListFilters;
|
FinishedTorrents *finishedTorrentTab;
|
||||||
PropertiesWidget *properties;
|
QLabel *connecStatusLblIcon;
|
||||||
|
bool systrayIntegration;
|
||||||
bool displaySpeedInTitle;
|
bool displaySpeedInTitle;
|
||||||
bool force_exit;
|
bool force_exit;
|
||||||
|
unsigned int refreshInterval;
|
||||||
|
QTimer *refresher;
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
QShortcut *switchSearchShortcut;
|
QShortcut *switchSearchShortcut;
|
||||||
QShortcut *switchSearchShortcut2;
|
QShortcut *switchSearchShortcut2;
|
||||||
QShortcut *switchTransferShortcut;
|
QShortcut *switchDownShortcut;
|
||||||
|
QShortcut *switchUpShortcut;
|
||||||
QShortcut *switchRSSShortcut;
|
QShortcut *switchRSSShortcut;
|
||||||
// Widgets
|
|
||||||
QAction *prioSeparator;
|
|
||||||
QAction *prioSeparator2;
|
|
||||||
QSplitter *hSplitter;
|
|
||||||
QSplitter *vSplitter;
|
|
||||||
// Search
|
// Search
|
||||||
SearchEngine *searchEngine;
|
SearchEngine *searchEngine;
|
||||||
// RSS
|
// RSS
|
||||||
QPointer<RSSImp> rssWidget;
|
RSSImp *rssWidget;
|
||||||
|
// Web UI
|
||||||
|
HttpServer *httpServer;
|
||||||
// Misc
|
// Misc
|
||||||
|
#ifdef QT_4_4
|
||||||
QLocalServer *localServer;
|
QLocalServer *localServer;
|
||||||
|
QLocalSocket *clientConnection;
|
||||||
|
#else
|
||||||
|
QTcpServer *localServer;
|
||||||
|
QTcpSocket *clientConnection;
|
||||||
|
#endif
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
// GUI related slots
|
// GUI related slots
|
||||||
@@ -102,39 +105,58 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
void on_actionCreate_torrent_triggered();
|
void on_actionCreate_torrent_triggered();
|
||||||
void on_actionWebsite_triggered() const;
|
void on_actionWebsite_triggered() const;
|
||||||
void on_actionBugReport_triggered() const;
|
void on_actionBugReport_triggered() const;
|
||||||
void on_actionShow_console_triggered();
|
|
||||||
void readParamsOnSocket();
|
void readParamsOnSocket();
|
||||||
void acceptConnection();
|
void acceptConnection();
|
||||||
|
void togglePausedState(QString hash);
|
||||||
|
void torrentDoubleClicked(QString hash, bool finished);
|
||||||
|
void on_actionPreview_file_triggered();
|
||||||
|
void previewFile(QString filePath);
|
||||||
void balloonClicked();
|
void balloonClicked();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void on_actionExit_triggered();
|
void on_actionExit_triggered();
|
||||||
void createTrayIcon();
|
void createTrayIcon();
|
||||||
void fullDiskError(QTorrentHandle& h, QString msg) const;
|
void updateUnfinishedTorrentNumber(unsigned int nb);
|
||||||
|
void updateFinishedTorrentNumber(unsigned int nb);
|
||||||
|
void fullDiskError(QTorrentHandle& h) const;
|
||||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||||
void createSystrayDelayed();
|
void createSystrayDelayed();
|
||||||
void tab_changed(int);
|
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
void createKeyboardShortcuts();
|
void createKeyboardShortcuts();
|
||||||
void displayTransferTab() const;
|
void displayDownTab() const;
|
||||||
|
void displayUpTab() const;
|
||||||
void displaySearchTab() const;
|
void displaySearchTab() const;
|
||||||
void displayRSSTab() const;
|
void displayRSSTab() const;
|
||||||
// Torrent actions
|
// Torrent actions
|
||||||
|
void on_actionTorrent_Properties_triggered();
|
||||||
|
void on_actionPause_triggered();
|
||||||
|
void on_actionPause_All_triggered();
|
||||||
|
void on_actionStart_triggered();
|
||||||
|
void on_actionStart_All_triggered();
|
||||||
|
void on_actionOpen_triggered();
|
||||||
|
void on_actionDelete_Permanently_triggered();
|
||||||
|
void on_actionDelete_triggered();
|
||||||
void on_actionSet_global_upload_limit_triggered();
|
void on_actionSet_global_upload_limit_triggered();
|
||||||
void on_actionSet_global_download_limit_triggered();
|
void on_actionSet_global_download_limit_triggered();
|
||||||
void on_actionDocumentation_triggered() const;
|
void on_actionDocumentation_triggered() const;
|
||||||
void on_actionOpen_triggered();
|
void checkConnectionStatus();
|
||||||
void updateGUI();
|
void configureSession(bool deleteOptions);
|
||||||
void loadPreferences(bool configure_session=true);
|
|
||||||
void processParams(const QStringList& params);
|
void processParams(const QStringList& params);
|
||||||
void addTorrent(QString path);
|
void addTorrent(QString path);
|
||||||
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
|
||||||
|
void processScannedFiles(const QStringList& params);
|
||||||
void processDownloadedFiles(QString path, QString url);
|
void processDownloadedFiles(QString path, QString url);
|
||||||
void downloadFromURLList(const QStringList& urls);
|
void downloadFromURLList(const QStringList& urls);
|
||||||
|
void deleteTorrent(QString hash);
|
||||||
|
void deleteRatioTorrent(QString fileName);
|
||||||
void finishedTorrent(QTorrentHandle& h) const;
|
void finishedTorrent(QTorrentHandle& h) const;
|
||||||
|
void torrentChecked(QString hash) const;
|
||||||
|
void updateLists();
|
||||||
|
bool initWebUi(QString username, QString password, int port);
|
||||||
|
void pauseTorrent(QString hash);
|
||||||
// Options slots
|
// Options slots
|
||||||
void on_actionOptions_triggered();
|
void on_actionOptions_triggered();
|
||||||
void optionsSaved();
|
void OptionsSaved(QString info, bool deleteOptions);
|
||||||
// HTTP slots
|
// HTTP slots
|
||||||
void on_actionDownload_from_URL_triggered();
|
void on_actionDownload_from_URL_triggered();
|
||||||
|
|
||||||
@@ -142,13 +164,13 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
|||||||
public slots:
|
public slots:
|
||||||
void trackerAuthenticationRequired(QTorrentHandle& h);
|
void trackerAuthenticationRequired(QTorrentHandle& h);
|
||||||
void setTabText(int index, QString text) const;
|
void setTabText(int index, QString text) const;
|
||||||
void showNotificationBaloon(QString title, QString msg) const;
|
void openDestinationFolder() const;
|
||||||
|
void goBuyPage() const;
|
||||||
|
void updateRatio();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
void showEvent(QShowEvent *);
|
void hideEvent(QHideEvent *);
|
||||||
bool event(QEvent * event);
|
|
||||||
void displayRSSTab(bool enable);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Construct / Destruct
|
// Construct / Destruct
|
||||||
|
BIN
src/Icons/add_file.png
Normal file
After Width: | Height: | Size: 1005 B |
BIN
src/Icons/add_folder.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/Icons/bt_settings.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/Icons/button_cancel.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/button_ok.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/configure.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/Icons/connection.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
src/Icons/description.png
Normal file
After Width: | Height: | Size: 821 B |
BIN
src/Icons/download.png
Normal file
After Width: | Height: | Size: 1.2 KiB |