You've already forked qBittorrent
							
							
				mirror of
				https://github.com/qbittorrent/qBittorrent
				synced 2025-11-02 08:10:54 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			release-2.
			...
			release-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f3456284ed | 
							
								
								
									
										36
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -2,28 +2,15 @@ Author:
 | 
				
			|||||||
* Christophe Dumez <chris@qbittorrent.org>
 | 
					* Christophe Dumez <chris@qbittorrent.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Contributors:
 | 
					Contributors:
 | 
				
			||||||
* Stefanos Antaris <santaris@csd.auth.gr>
 | 
					 | 
				
			||||||
* Mohammad Dib <mdib@qbittorrent.org>
 | 
					 | 
				
			||||||
* Mirco Chinelli <infinity89@fastwebmail.it>
 | 
					 | 
				
			||||||
* 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>
 | 
				
			||||||
* Christian Kandeler <zambesi@users.sourceforge.net>
 | 
					 | 
				
			||||||
* Silvan Scherrer <silvan.scherrer@aroa.ch>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Code from other projects:
 | 
					Code from other projects:
 | 
				
			||||||
* files src/qtsingleapp/* src/lineedit/*
 | 
					 | 
				
			||||||
  copyright: Nokia Corporation
 | 
					 | 
				
			||||||
  license: LGPL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* files src/ico.cpp src/ico.h
 | 
					* files src/ico.cpp src/ico.h
 | 
				
			||||||
  copyright: Malte Starostik <malte@kde.org>
 | 
					  copyright: Malte Starostik <malte@kde.org>
 | 
				
			||||||
  license: LGPL
 | 
					  license: LGPL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files src/search_engine/socks.py
 | 
					 | 
				
			||||||
  copyright: Dan Haim <negativeiq@users.sourceforge.net>
 | 
					 | 
				
			||||||
  license: BSD
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Images Authors:
 | 
					Images Authors:
 | 
				
			||||||
* files: src/Icons/*.png
 | 
					* files: src/Icons/*.png
 | 
				
			||||||
  copyright: Gnome Icon Theme
 | 
					  copyright: Gnome Icon Theme
 | 
				
			||||||
@@ -67,13 +54,11 @@ Images Authors:
 | 
				
			|||||||
Translations authors:
 | 
					Translations authors:
 | 
				
			||||||
* files: src/lang/*.ts
 | 
					* files: src/lang/*.ts
 | 
				
			||||||
  copyright:
 | 
					  copyright:
 | 
				
			||||||
  - Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)
 | 
					 | 
				
			||||||
  - Brazilian: Nick Marinho (nickmarinho@gmail.com)
 | 
					  - Brazilian: Nick Marinho (nickmarinho@gmail.com)
 | 
				
			||||||
  - Bulgarian: Tsvetan & Boyko Bankoff (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 (yue.guo0418@gmail.com)
 | 
				
			||||||
  - Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
 | 
					  - Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
 | 
				
			||||||
  - Croatian: Oliver Mucafir (oliver.untwist@gmail.com)
 | 
					 | 
				
			||||||
  - Czech: Jirka Vilim (web@tets.cz)
 | 
					  - 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)
 | 
				
			||||||
@@ -81,20 +66,19 @@ Translations authors:
 | 
				
			|||||||
  - 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: Matteo Sechi (bu17714@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) and Oleh Prypin (blaxpirit@gmail.com)
 | 
					  - Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
 | 
				
			||||||
  license: GPLv2
 | 
					  license: GPLv2
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										65
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								INSTALL
									
									
									
									
									
								
							@@ -1,57 +1,42 @@
 | 
				
			|||||||
qBittorrent - A BitTorrent client in C++ / Qt4
 | 
					qBittorrent - A BitTorrent client in C++ / Qt4
 | 
				
			||||||
------------------------------------------
 | 
					------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1) Compile and install qBittorrent with Qt4 Graphical Interface
 | 
					*** 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - pkg-config executable
 | 
					- libtorrent-rasterbar by Arvid Norberg (>= v0.14.0 REQUIRED)
 | 
				
			||||||
 | 
					    -> http://www.qbittorrent.org/download.php (advised)
 | 
				
			||||||
    - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, compatible with v0.15.x)
 | 
					 | 
				
			||||||
        -> http://www.libtorrent.net
 | 
					 | 
				
			||||||
        Be careful: another library (the one used by rTorrent) uses a similar name.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - libboost 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
 | 
					 | 
				
			||||||
      or
 | 
					 | 
				
			||||||
    - libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - python >= 2.3 (needed by search engine)
 | 
					 | 
				
			||||||
        * Run time only dependency
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - libnotify >= 0.4.2, glib-2.0 (optional)
 | 
					 | 
				
			||||||
        * Can be used for system notifications to replace standard Qt notifications
 | 
					 | 
				
			||||||
          so that it integrates better into the Desktop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - geoip-database (optional)
 | 
					 | 
				
			||||||
        * If qBittorrent cannot find this database, it will try to resolve countries using the Internet but it will be a lot slower.
 | 
					 | 
				
			||||||
        * Run time only dependency
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2) Compile and install qBittorrent without Qt4 Graphical interface
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  $ ./configure --disable-gui
 | 
					 | 
				
			||||||
  $ make && make install
 | 
					 | 
				
			||||||
  $ qbittorrent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  will install and execute qBittorrent hopefully without any problems.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Dependencies:
 | 
					 | 
				
			||||||
    - Qt >= 4.4.0 (libqt-devel, libqtcore, libqtnetwork)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - pkg-config executable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, >= v0.15.0 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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- libmagick++ (advised, not required)
 | 
				
			||||||
 | 
					  * Needed for favicons support (RSS / Search plugins)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- libzzip (advised, not required)
 | 
				
			||||||
 | 
					  * Needed for zip support (Search plugins)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
									
									
									
									
									
								
							
							
						
						
									
										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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								README.os2
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								README.os2
									
									
									
									
									
								
							@@ -1,62 +0,0 @@
 | 
				
			|||||||
qBittorrent - A BitTorrent client in Qt4
 | 
					 | 
				
			||||||
------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This is the eComStation (OS/2) qBittorrent part of the readme. See also README for more general information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Building qBittorrent
 | 
					 | 
				
			||||||
********************
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Requirements
 | 
					 | 
				
			||||||
============
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- gcc based build env (recommended gcc v4.4.2 or greater)
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
- Qt4 for eCS (OS/2) dev package (see http://svn.netlabs.org/qt4 for more information)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- libtorrent-rasterbar for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- boost for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
How to build
 | 
					 | 
				
			||||||
============
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
First you need to create the conf.pri file in the same dir as this readme.os2 is.
 | 
					 | 
				
			||||||
the conf.pri file has the following content:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##### conf.pri content beginn #####
 | 
					 | 
				
			||||||
PREFIX = .
 | 
					 | 
				
			||||||
BINDIR = ./bin
 | 
					 | 
				
			||||||
INCDIR = ./include
 | 
					 | 
				
			||||||
LIBDIR = ./lib
 | 
					 | 
				
			||||||
DATADIR = ./share
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CONFIG += staticlib
 | 
					 | 
				
			||||||
INCLUDEPATH += x:/trees/libtorrent/trunk/include
 | 
					 | 
				
			||||||
LIBS += -Lx:/trees/libtorrent/trunk/src/.libs \
 | 
					 | 
				
			||||||
        -Lx:/trees/boost/trunk/stage/lib \
 | 
					 | 
				
			||||||
        -Lx:/trees/openssl \
 | 
					 | 
				
			||||||
	-Lx:/extras/lib
 | 
					 | 
				
			||||||
##### conf.pri content end #####
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Of course all the above path references have to be adjusted to your build env.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
It should now be easy to build qBittorrent:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Simply type:
 | 
					 | 
				
			||||||
$ qmake
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Followed by:
 | 
					 | 
				
			||||||
$ make
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If all works fine you should get a working qbittorrent executable.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you have any question regarding the eCS (OS/2) port of qBittorrent you can meet me (_diver) on IRC:
 | 
					 | 
				
			||||||
#netlabs on irc.freenode.net
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
------------------------------------------
 | 
					 | 
				
			||||||
Silvan Scherrer <silvan.scherrer@aroa.ch>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,44 +0,0 @@
 | 
				
			|||||||
.\" This manpage has been automatically generated by docbook2man
 | 
					 | 
				
			||||||
.\" from a DocBook document.  This tool can be found at:
 | 
					 | 
				
			||||||
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
 | 
					 | 
				
			||||||
.TH "QBITTORRENT\-NOX" "1" "January 16th 2010" "Command line Bittorrent client written in C++ / Qt4" ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "NAME"
 | 
					 | 
				
			||||||
qBittorrent\-nox \- a command line Bittorrent client written in C++ / Qt4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "SYNOPSIS"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fBqbittorrent\-nox\fR [\-\-webui-port=x] [TORRENT_FILE | URL]...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fBqbittorrent\-nox\fR \-\-help
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fBqbittorrent\-nox\fR \-\-version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PP
 | 
					 | 
				
			||||||
.SH "DESCRIPTION"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fBqBittorrent-nox\fR is an advanced command-line Bittorrent client written in C++ / Qt4,
 | 
					 | 
				
			||||||
using the \fBlibtorrent-rasterbar\fR library by Arvid Norberg. qBittorrent\-nox aims
 | 
					 | 
				
			||||||
to be a good alternative to other command line bittorrent clients and provides features similar to popular graphical clients.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
qBittorrent\-nox is fast, stable, light and it supports unicode. 
 | 
					 | 
				
			||||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Vuze compatible), 
 | 
					 | 
				
			||||||
FAST extension (mainline) and PeX support (utorrent compatible).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
qBittorrent\-nox is meant to be controlled via its feature-rich Web UI which is accessible as a default on http://localhost:8080. The Web UI access is secured and the default account user name is "admin" with "adminadmin" as a password.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "OPTIONS"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fB--help\fR Prints the command line options.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fB--version\fR Prints qbittorrent program version number.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fB--webui-port=x\fR Changes Web UI port to x (default: 8080).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "BUGS"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you find a bug, please report it at http://bugs.qbittorrent.org
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "AUTHOR"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Christophe Dumez <chris@qbittorrent.org>
 | 
					 | 
				
			||||||
@@ -1,42 +1,28 @@
 | 
				
			|||||||
.\" 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" "January 16th 2010" "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] [\-\-webui-port=x] [TORRENT_FILE | URL]...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
\fBqbittorrent\fR \-\-help
 | 
					\fBqbittorrent\fR \-\-help
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\fBqbittorrent\fR \-\-version
 | 
					\fBqbittorrent\fR \-\-version
 | 
				
			||||||
 | 
					 | 
				
			||||||
.PP
 | 
					.PP
 | 
				
			||||||
.SH "DESCRIPTION"
 | 
					.SH "DESCRIPTION"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\fBqBittorrent\fR is an advanced Bittorrent client written in C++ / Qt4,
 | 
					\fBqBittorrent\fR is an advanced Bittorrent client written in C++ / Qt4,
 | 
				
			||||||
using the \fBlibtorrent-rasterbar\fR library by Arvid Norberg. qBittorrent is similar to uTorrent. qBittorrent
 | 
					using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
 | 
				
			||||||
 | 
					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 (Vuze 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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\fB--webui-port=x\fR Changes Web UI port to x (default: 8080).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.SH "BUGS"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you find a bug, please report it at http://bugs.qbittorrent.org
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please report any problem to http://bugs.qbittorrent.org
 | 
				
			||||||
 | 
					.PP
 | 
				
			||||||
.SH "AUTHOR"
 | 
					.SH "AUTHOR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Christophe Dumez <chris@qbittorrent.org>
 | 
					Christophe Dumez <chris@qbittorrent.org>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
TEMPLATE = subdirs
 | 
					TEMPLATE = subdirs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include(conf.pri)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUBDIRS += src
 | 
					SUBDIRS += src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,19 +6,14 @@
 | 
				
			|||||||
  <dep type='qt4'>
 | 
					  <dep type='qt4'>
 | 
				
			||||||
    <required/>
 | 
					    <required/>
 | 
				
			||||||
  </dep>
 | 
					  </dep>
 | 
				
			||||||
  <dep type='pkg-config'>
 | 
					 | 
				
			||||||
    <required/>
 | 
					 | 
				
			||||||
  </dep>
 | 
					 | 
				
			||||||
  <dep type='libtorrent-rasterbar'>
 | 
					  <dep type='libtorrent-rasterbar'>
 | 
				
			||||||
    <required/>
 | 
					    <required/>
 | 
				
			||||||
  </dep>
 | 
					  </dep>
 | 
				
			||||||
  <dep type='libboost'>
 | 
					  <dep type='libboost'>
 | 
				
			||||||
    <required/>
 | 
					    <required/>
 | 
				
			||||||
  </dep>
 | 
					  </dep>
 | 
				
			||||||
  <dep type='libnotify'>
 | 
					  <dep type='libcurl'>
 | 
				
			||||||
  </dep>
 | 
					    <required/>
 | 
				
			||||||
  <dep type='geoip-database'>
 | 
					 | 
				
			||||||
  </dep>
 | 
					 | 
				
			||||||
  <dep type='qtsingleapplication'>
 | 
					 | 
				
			||||||
  </dep>
 | 
					  </dep>
 | 
				
			||||||
 | 
					  <dep type='libzzip'/>
 | 
				
			||||||
</qconf>
 | 
					</qconf>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,37 +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"; }
 | 
					 | 
				
			||||||
        QString checkString() const {
 | 
					 | 
				
			||||||
                if(!conf->getenv("QC_DISABLE_geoip_database").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
 | 
					 | 
				
			||||||
                        return "";
 | 
					 | 
				
			||||||
                return ConfObj::checkString();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
	bool exec() {
 | 
					 | 
				
			||||||
	if(!conf->getenv("QC_DISABLE_geoip_database").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
#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
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -2,39 +2,14 @@
 | 
				
			|||||||
-----BEGIN QCMOD-----
 | 
					-----BEGIN QCMOD-----
 | 
				
			||||||
name: libboost
 | 
					name: libboost
 | 
				
			||||||
arg: with-libboost-inc=[path], Path to libboost include files
 | 
					arg: with-libboost-inc=[path], Path to libboost include files
 | 
				
			||||||
arg: with-libboost-lib=[path], Path to libboost library files
 | 
					 | 
				
			||||||
-----END QCMOD-----
 | 
					-----END QCMOD-----
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
#include <boost/version.hpp>
 | 
					 | 
				
			||||||
class qc_libboost : public ConfObj
 | 
					class qc_libboost : public ConfObj
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	qc_libboost(Conf *c) : ConfObj(c) {}
 | 
						qc_libboost(Conf *c) : ConfObj(c) {}
 | 
				
			||||||
	QString name() const { return "libboost"; }
 | 
						QString name() const { return "libboost"; }
 | 
				
			||||||
	QString shortname() const { return "libboost"; }
 | 
						QString shortname() const { return "libboost"; }
 | 
				
			||||||
  QString findBoostLib(QString path, QString lib) const {
 | 
					 | 
				
			||||||
    QString name;
 | 
					 | 
				
			||||||
    QDir libDir(path);
 | 
					 | 
				
			||||||
    QStringList filters;
 | 
					 | 
				
			||||||
    filters << "libboost_"+lib+"*-mt*.so";
 | 
					 | 
				
			||||||
    QStringList result = libDir.entryList(filters, QDir::Files);
 | 
					 | 
				
			||||||
    if(!result.empty()) {
 | 
					 | 
				
			||||||
      name = result.first().mid(3);
 | 
					 | 
				
			||||||
      // Remove .so
 | 
					 | 
				
			||||||
      name.chop(3);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      // Fall back to non -mt boost lib
 | 
					 | 
				
			||||||
      filters.clear();
 | 
					 | 
				
			||||||
      filters << "libboost_"+lib+"*.so";
 | 
					 | 
				
			||||||
      result = libDir.entryList(filters, QDir::Files);
 | 
					 | 
				
			||||||
      if(!result.empty()) {
 | 
					 | 
				
			||||||
        name = result.first().mid(3);
 | 
					 | 
				
			||||||
        // Remove .so
 | 
					 | 
				
			||||||
        name.chop(3);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return name;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
	bool exec(){
 | 
						bool exec(){
 | 
				
			||||||
        	QString s;
 | 
					        	QString s;
 | 
				
			||||||
		s = conf->getenv("QC_WITH_LIBBOOST_INC");
 | 
							s = conf->getenv("QC_WITH_LIBBOOST_INC");
 | 
				
			||||||
@@ -76,43 +51,6 @@ public:
 | 
				
			|||||||
      			}
 | 
					      			}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		conf->addIncludePath(s);
 | 
							conf->addIncludePath(s);
 | 
				
			||||||
		// Find library
 | 
					 | 
				
			||||||
		s = conf->getenv("QC_WITH_LIBBOOST_LIB");
 | 
					 | 
				
			||||||
    QStringList required_libs;
 | 
					 | 
				
			||||||
#if BOOST_VERSION >= 103500
 | 
					 | 
				
			||||||
      required_libs << "system"; 
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
					 | 
				
			||||||
      // Not required by nox
 | 
					 | 
				
			||||||
      required_libs << "filesystem" << "thread";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QStringList libDirs;
 | 
					 | 
				
			||||||
    libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
 | 
					 | 
				
			||||||
    foreach(const QString& lib, required_libs) {
 | 
					 | 
				
			||||||
      if(!s.isEmpty()) {
 | 
					 | 
				
			||||||
        QString detected_name = findBoostLib(s, lib);
 | 
					 | 
				
			||||||
        if(detected_name.isEmpty()) {
 | 
					 | 
				
			||||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
					 | 
				
			||||||
          return false;
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          conf->addLib("-l"+detected_name);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        bool found = false;
 | 
					 | 
				
			||||||
        foreach(const QString& libDir, libDirs) {
 | 
					 | 
				
			||||||
          QString detected_name = findBoostLib(libDir, lib);
 | 
					 | 
				
			||||||
          if(!detected_name.isEmpty()) {
 | 
					 | 
				
			||||||
            conf->addLib("-l"+detected_name);
 | 
					 | 
				
			||||||
            found = true;
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if(!found) {
 | 
					 | 
				
			||||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
					 | 
				
			||||||
          return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										61
									
								
								qcm/libcurl.qcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										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;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -1,60 +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"; }
 | 
					 | 
				
			||||||
        QString checkString() const {
 | 
					 | 
				
			||||||
                if(!conf->getenv("QC_DISABLE_libnotify").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
 | 
					 | 
				
			||||||
                        return "";
 | 
					 | 
				
			||||||
                return ConfObj::checkString();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
	bool exec(){
 | 
					 | 
				
			||||||
		if(!conf->getenv("QC_DISABLE_libnotify").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		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;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			QStringList incs3;
 | 
					 | 
				
			||||||
                        QString req_ver3 = "2.0";
 | 
					 | 
				
			||||||
                        QString version3, libs3, other3;
 | 
					 | 
				
			||||||
			if(conf->findPkgConfig("gtk+-2.0", mode, req_ver3, &version3, &incs3, &libs3, &other3)) {
 | 
					 | 
				
			||||||
                                for(int n = 0; n < incs3.count(); ++n)
 | 
					 | 
				
			||||||
                                conf->addIncludePath(incs3[n]);
 | 
					 | 
				
			||||||
                                if(!libs3.isEmpty())
 | 
					 | 
				
			||||||
                                        conf->addLib(libs3);
 | 
					 | 
				
			||||||
                        } else {
 | 
					 | 
				
			||||||
                                return false;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -8,20 +8,22 @@ 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.4"; }
 | 
						QString name() const { return "libtorrent-rasterbar >= 0.14.0 (>= 0.14.4 advised)"; }
 | 
				
			||||||
	QString shortname() const { return "libtorrent-rasterbar"; }
 | 
						QString shortname() const { return "libtorrent-rasterbar"; }
 | 
				
			||||||
	bool exec(){
 | 
						bool exec(){
 | 
				
			||||||
		QStringList incs;
 | 
							QStringList incs;
 | 
				
			||||||
		QString req_ver = "0.14.4";
 | 
							QString req_ver = "0.14.0";
 | 
				
			||||||
 | 
							QString adv_ver = "0.14.4";
 | 
				
			||||||
		QString version, libs, other;
 | 
							QString version, libs, other;
 | 
				
			||||||
		VersionMode mode = VersionMin;
 | 
							VersionMode mode = VersionMin;
 | 
				
			||||||
		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, req_ver, &version, &incs, &libs, &other))
 | 
							if(!conf->findPkgConfig("libtorrent-rasterbar", mode, req_ver, &version, &incs, &libs, &other))
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		for(int n = 0; n < incs.count(); ++n)
 | 
							for(int n = 0; n < incs.count(); ++n)
 | 
				
			||||||
			conf->addIncludePath(incs[n]);
 | 
								conf->addIncludePath(incs[n]);
 | 
				
			||||||
		if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
							if(!libs.isEmpty())
 | 
				
			||||||
  		  conf->addLib("-lcrypto");
 | 
								conf->addLib(libs);
 | 
				
			||||||
                }
 | 
							if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
 | 
				
			||||||
 | 
								printf("\nWarning: libtorrent-rasterbar v%s was detected. Although it will compile and run, you will probably experience some bugs. Please consider updating to v%s!\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										71
									
								
								qcm/libzzip.qcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										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;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
-----BEGIN QCMOD-----
 | 
					 | 
				
			||||||
name: pkg-config
 | 
					 | 
				
			||||||
-----END QCMOD-----
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
class qc_pkg_config : public ConfObj
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
	qc_pkg_config(Conf *c) : ConfObj(c) {}
 | 
					 | 
				
			||||||
	QString name() const { return "pkg-config executable"; }
 | 
					 | 
				
			||||||
	QString shortname() const { return "pkg-config"; }
 | 
					 | 
				
			||||||
	bool exec(){
 | 
					 | 
				
			||||||
		return !conf->findProgram("pkg-config").isEmpty();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										14
									
								
								qcm/qt4.qcm
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								qcm/qt4.qcm
									
									
									
									
									
								
							@@ -1,20 +1,20 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
-----BEGIN QCMOD-----
 | 
					-----BEGIN QCMOD-----
 | 
				
			||||||
name: Qt >= 4.4
 | 
					name: Qt >= 4.3
 | 
				
			||||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
 | 
					 | 
				
			||||||
-----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(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
							if(QT_VERSION >= 0x040400) {
 | 
				
			||||||
			conf->addDefine("DISABLE_GUI");
 | 
								conf->addDefine("QT_4_4");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return(QT_VERSION >= 0x040400);
 | 
							return(QT_VERSION >= 0x040300);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
-----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;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										116
									
								
								src/DLListDelegate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								src/DLListDelegate.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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 PRIORITY 8
 | 
				
			||||||
 | 
					#define HASH 9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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();
 | 
				
			||||||
 | 
					          if(ratio > 100.)
 | 
				
			||||||
 | 
					              QItemDelegate::drawDisplay(painter, opt, opt.rect, QString::fromUtf8("∞"));
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					              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
 | 
				
			||||||
@@ -32,6 +32,8 @@
 | 
				
			|||||||
#define FEEDDOWNLOADER_H
 | 
					#define FEEDDOWNLOADER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QString>
 | 
					#include <QString>
 | 
				
			||||||
 | 
					#include <QHash>
 | 
				
			||||||
 | 
					#include <QSettings>
 | 
				
			||||||
#include <QListWidget>
 | 
					#include <QListWidget>
 | 
				
			||||||
#include <QListWidgetItem>
 | 
					#include <QListWidgetItem>
 | 
				
			||||||
#include <QInputDialog>
 | 
					#include <QInputDialog>
 | 
				
			||||||
@@ -43,16 +45,7 @@
 | 
				
			|||||||
#include <QFileDialog>
 | 
					#include <QFileDialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "bittorrent.h"
 | 
					#include "bittorrent.h"
 | 
				
			||||||
#include "ui_feeddownloader.h"
 | 
					#include "ui_FeedDownloader.h"
 | 
				
			||||||
#include "qinisettings.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if QT_VERSION >= 0x040500
 | 
					 | 
				
			||||||
#include <QHash>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#include <QMap>
 | 
					 | 
				
			||||||
#define QHash QMap
 | 
					 | 
				
			||||||
#define toHash toMap
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FeedFilter: public QHash<QString, QVariant> {
 | 
					class FeedFilter: public QHash<QString, QVariant> {
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@@ -67,16 +60,14 @@ public:
 | 
				
			|||||||
    foreach(const QString& token, match_tokens) {
 | 
					    foreach(const QString& token, match_tokens) {
 | 
				
			||||||
      if(token.isEmpty() || token == "")
 | 
					      if(token.isEmpty() || token == "")
 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
      QRegExp reg(token, Qt::CaseInsensitive, QRegExp::Wildcard);
 | 
					      QRegExp reg(token, Qt::CaseInsensitive);
 | 
				
			||||||
      //reg.setMinimal(false);
 | 
					 | 
				
			||||||
      if(reg.indexIn(s) < 0) return false;
 | 
					      if(reg.indexIn(s) < 0) return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    qDebug("Checking not matching tokens");
 | 
					 | 
				
			||||||
    // Checking not matching
 | 
					    // Checking not matching
 | 
				
			||||||
    QStringList notmatch_tokens = getNotMatchingTokens();
 | 
					    QStringList notmatch_tokens = getNotMatchingTokens();
 | 
				
			||||||
    foreach(const QString& token, notmatch_tokens) {
 | 
					    foreach(const QString& token, notmatch_tokens) {
 | 
				
			||||||
      if(token.isEmpty()) continue;
 | 
					      if(token.isEmpty()) continue;
 | 
				
			||||||
      QRegExp reg(token, Qt::CaseInsensitive, QRegExp::Wildcard);
 | 
					      QRegExp reg(token, Qt::CaseInsensitive);
 | 
				
			||||||
      if(reg.indexIn(s) > -1) return false;
 | 
					      if(reg.indexIn(s) > -1) return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
@@ -92,7 +83,7 @@ public:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QString getMatchingTokens_str() const {
 | 
					  QString getMatchingTokens_str() const {
 | 
				
			||||||
    return this->value("matches", "").toString();
 | 
					    return this->value("matches", "*").toString();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void setMatchingTokens(QString tokens) {
 | 
					  void setMatchingTokens(QString tokens) {
 | 
				
			||||||
@@ -105,7 +96,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  QStringList getNotMatchingTokens() const {
 | 
					  QStringList getNotMatchingTokens() const {
 | 
				
			||||||
    QString notmatching = this->value("not", "").toString();
 | 
					    QString notmatching = this->value("not", "").toString();
 | 
				
			||||||
    return notmatching.split(QRegExp("[\\s|]"));
 | 
					    return notmatching.split(" ");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QString getNotMatchingTokens_str() const {
 | 
					  QString getNotMatchingTokens_str() const {
 | 
				
			||||||
@@ -168,20 +159,20 @@ public:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool isDownloadingEnabled() const {
 | 
					  bool isDownloadingEnabled() const {
 | 
				
			||||||
    QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
					    QSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
				
			||||||
    QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
 | 
					    QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
 | 
				
			||||||
    return feeds_w_downloader.value(feed_url, false).toBool();
 | 
					    return feeds_w_downloader.value(feed_url, false).toBool();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void setDownloadingEnabled(bool enabled) {
 | 
					  void setDownloadingEnabled(bool enabled) {
 | 
				
			||||||
    QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
					    QSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
				
			||||||
    QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
 | 
					    QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
 | 
				
			||||||
    feeds_w_downloader[feed_url] = enabled;
 | 
					    feeds_w_downloader[feed_url] = enabled;
 | 
				
			||||||
    qBTRSS.setValue("downloader_on", feeds_w_downloader);
 | 
					    qBTRSS.setValue("downloader_on", feeds_w_downloader);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static FeedFilters getFeedFilters(QString url) {
 | 
					  static FeedFilters getFeedFilters(QString url) {
 | 
				
			||||||
    QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
					    QSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
				
			||||||
    QHash<QString, QVariant> all_feeds_filters = qBTRSS.value("feed_filters", QHash<QString, QVariant>()).toHash();
 | 
					    QHash<QString, QVariant> all_feeds_filters = qBTRSS.value("feed_filters", QHash<QString, QVariant>()).toHash();
 | 
				
			||||||
    return FeedFilters(url, all_feeds_filters.value(url, QHash<QString, QVariant>()).toHash());
 | 
					    return FeedFilters(url, all_feeds_filters.value(url, QHash<QString, QVariant>()).toHash());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -222,9 +213,9 @@ public:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void save() {
 | 
					  void save() {
 | 
				
			||||||
    QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
					    QSettings qBTRSS("qBittorrent", "qBittorrent-rss");
 | 
				
			||||||
    QHash<QString, QVariant> all_feeds_filters = qBTRSS.value("feed_filters", QHash<QString, QVariant>()).toHash();
 | 
					    QHash<QString, QVariant> all_feeds_filters = qBTRSS.value("feed_filters", QHash<QString, QVariant>()).toHash();
 | 
				
			||||||
    qDebug("Saving filters for feed: %s (%d filters)", qPrintable(feed_url), (*this).size());
 | 
					    qDebug("Saving filters for feed: %s (%d filters)", feed_url.toLocal8Bit().data(), (*this).size());
 | 
				
			||||||
    all_feeds_filters[feed_url] = *this;
 | 
					    all_feeds_filters[feed_url] = *this;
 | 
				
			||||||
    qBTRSS.setValue("feed_filters", all_feeds_filters);
 | 
					    qBTRSS.setValue("feed_filters", all_feeds_filters);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -237,11 +228,11 @@ private:
 | 
				
			|||||||
  QString feed_url;
 | 
					  QString feed_url;
 | 
				
			||||||
  QString feed_name;
 | 
					  QString feed_name;
 | 
				
			||||||
  FeedFilters filters;
 | 
					  FeedFilters filters;
 | 
				
			||||||
  Bittorrent *BTSession;
 | 
					  bittorrent *BTSession;
 | 
				
			||||||
  QString selected_filter; // name
 | 
					  QString selected_filter; // name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  FeedDownloaderDlg(QWidget *parent, QString feed_url, QString feed_name, Bittorrent* BTSession): QDialog(parent), feed_url(feed_url), feed_name(feed_name), BTSession(BTSession), selected_filter(QString::null){
 | 
					  FeedDownloaderDlg(QWidget *parent, QString feed_url, QString feed_name, bittorrent* BTSession): QDialog(parent), feed_url(feed_url), feed_name(feed_name), BTSession(BTSession), selected_filter(QString::null){
 | 
				
			||||||
    setupUi(this);
 | 
					    setupUi(this);
 | 
				
			||||||
    setAttribute(Qt::WA_DeleteOnClose);
 | 
					    setAttribute(Qt::WA_DeleteOnClose);
 | 
				
			||||||
    Q_ASSERT(!feed_name.isEmpty());
 | 
					    Q_ASSERT(!feed_name.isEmpty());
 | 
				
			||||||
@@ -269,8 +260,6 @@ public:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ~FeedDownloaderDlg() {
 | 
					  ~FeedDownloaderDlg() {
 | 
				
			||||||
    if(enableDl_cb->isChecked())
 | 
					 | 
				
			||||||
      emit filteringEnabled();
 | 
					 | 
				
			||||||
    // Make sure we save everything
 | 
					    // Make sure we save everything
 | 
				
			||||||
    saveCurrentFilterSettings();
 | 
					    saveCurrentFilterSettings();
 | 
				
			||||||
    filters.save();
 | 
					    filters.save();
 | 
				
			||||||
@@ -291,17 +280,6 @@ protected slots:
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void on_browse_button_clicked() {
 | 
					 | 
				
			||||||
    QString default_path = savepath_line->text();
 | 
					 | 
				
			||||||
    if(default_path.isEmpty() || !QDir(default_path).exists()) {
 | 
					 | 
				
			||||||
      default_path = QDir::homePath();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QString dir = QFileDialog::getExistingDirectory(this, tr("Choose save path"), QDir::homePath());
 | 
					 | 
				
			||||||
    if(!dir.isNull() && QDir(dir).exists()) {
 | 
					 | 
				
			||||||
      savepath_line->setText(dir);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void fillFiltersList() {
 | 
					  void fillFiltersList() {
 | 
				
			||||||
    // Fill filter list
 | 
					    // Fill filter list
 | 
				
			||||||
    foreach(QString filter_name, filters.names()) {
 | 
					    foreach(QString filter_name, filters.names()) {
 | 
				
			||||||
@@ -375,11 +353,9 @@ protected slots:
 | 
				
			|||||||
        if(!filters.hasFilter(new_name)) {
 | 
					        if(!filters.hasFilter(new_name)) {
 | 
				
			||||||
          validated = true;
 | 
					          validated = true;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          QMessageBox::warning(0, tr("Invalid filter name"), tr("This filter name is already in use."));
 | 
					          QMessageBox::critical(0, tr("Invalid filter name"), tr("This filter name is already in use."));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }while(!validated);
 | 
					      }while(!validated);
 | 
				
			||||||
      // Save the current filter
 | 
					 | 
				
			||||||
      saveCurrentFilterSettings();
 | 
					 | 
				
			||||||
      // Rename the filter
 | 
					      // Rename the filter
 | 
				
			||||||
      filters.rename(current_name, new_name);
 | 
					      filters.rename(current_name, new_name);
 | 
				
			||||||
      if(selected_filter == current_name)
 | 
					      if(selected_filter == current_name)
 | 
				
			||||||
@@ -416,7 +392,7 @@ protected slots:
 | 
				
			|||||||
      new_name = new_name.trimmed();
 | 
					      new_name = new_name.trimmed();
 | 
				
			||||||
      if(new_name.isEmpty()) {
 | 
					      if(new_name.isEmpty()) {
 | 
				
			||||||
        // Cannot be left empty
 | 
					        // Cannot be left empty
 | 
				
			||||||
        QMessageBox::warning(0, tr("Invalid filter name"), tr("The filter name cannot be left empty."));
 | 
					        QMessageBox::critical(0, tr("Invalid filter name"), tr("The filter name cannot be left empty."));
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        validated = true;
 | 
					        validated = true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -432,7 +408,7 @@ protected slots:
 | 
				
			|||||||
      if(filter_name.isNull()) return;
 | 
					      if(filter_name.isNull()) return;
 | 
				
			||||||
      if(filters.hasFilter(filter_name)) {
 | 
					      if(filters.hasFilter(filter_name)) {
 | 
				
			||||||
        // Filter alread exists
 | 
					        // Filter alread exists
 | 
				
			||||||
        QMessageBox::warning(0, tr("Invalid filter name"), tr("This filter name is already in use."));
 | 
					        QMessageBox::critical(0, tr("Invalid filter name"), tr("This filter name is already in use."));
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        validated = true;
 | 
					        validated = true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -451,14 +427,10 @@ protected slots:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void on_testButton_clicked(bool) {
 | 
					  void on_testButton_clicked(bool) {
 | 
				
			||||||
    test_res_lbl->clear();
 | 
					    if(selected_filter.isEmpty()) return;
 | 
				
			||||||
    if(selected_filter.isEmpty()) {
 | 
					 | 
				
			||||||
      qDebug("No filter is selected!!!");
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QString s = test_line->text().trimmed();
 | 
					    QString s = test_line->text().trimmed();
 | 
				
			||||||
    if(s.isEmpty()) {
 | 
					    if(s.isEmpty()) {
 | 
				
			||||||
      QMessageBox::warning(0, tr("Filter testing error"), tr("Please specify a test torrent name."));
 | 
					      QMessageBox::critical(0, tr("Filter testing error"), tr("Please specify a test torrent name."));
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // Get current filter
 | 
					    // Get current filter
 | 
				
			||||||
@@ -483,7 +455,7 @@ protected slots:
 | 
				
			|||||||
        filtersList->setCurrentItem(filtersList->item(0));
 | 
					        filtersList->setCurrentItem(filtersList->item(0));
 | 
				
			||||||
      QMessageBox::information(0, tr("Import successful"), tr("Filters import was successful."));
 | 
					      QMessageBox::information(0, tr("Import successful"), tr("Filters import was successful."));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      QMessageBox::warning(0, tr("Import failure"), tr("Filters could not be imported due to an I/O error."));
 | 
					      QMessageBox::critical(0, tr("Import failure"), tr("Filters could not be imported due to an I/O error."));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -493,22 +465,16 @@ protected slots:
 | 
				
			|||||||
    // Append file extension
 | 
					    // Append file extension
 | 
				
			||||||
    if(!destination.endsWith(".filters"))
 | 
					    if(!destination.endsWith(".filters"))
 | 
				
			||||||
      destination += ".filters";
 | 
					      destination += ".filters";
 | 
				
			||||||
    /*if(QFile::exists(destination)) {
 | 
					    if(QFile::exists(destination)) {
 | 
				
			||||||
      int ret = QMessageBox::question(0, tr("Overwriting confirmation"), tr("Are you sure you want to overwrite existing file?"), QMessageBox::Yes|QMessageBox::No);
 | 
					      int ret = QMessageBox::question(0, tr("Overwriting confirmation"), tr("Are you sure you want to overwrite existing file?"));
 | 
				
			||||||
      if(ret != QMessageBox::Yes) return;
 | 
					      if(ret != QMessageBox::Yes) return;
 | 
				
			||||||
    }*/
 | 
					    }
 | 
				
			||||||
    if(filters.serialize(destination))
 | 
					    if(filters.serialize(destination))
 | 
				
			||||||
      QMessageBox::information(0, tr("Export successful"), tr("Filters export was successful."));
 | 
					      QMessageBox::information(0, tr("Export successful"), tr("Filters export was successful."));
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      QMessageBox::warning(0, tr("Export failure"), tr("Filters could not be exported due to an I/O error."));
 | 
					      QMessageBox::critical(0, tr("Export failure"), tr("Filters could not be exported due to an I/O error."));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					 | 
				
			||||||
  void filteringEnabled();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef QHash
 | 
					 | 
				
			||||||
#undef toHash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // FEEDDOWNLOADER_H
 | 
					#endif // FEEDDOWNLOADER_H
 | 
				
			||||||
@@ -120,9 +120,6 @@
 | 
				
			|||||||
            <property name="contextMenuPolicy">
 | 
					            <property name="contextMenuPolicy">
 | 
				
			||||||
             <enum>Qt::CustomContextMenu</enum>
 | 
					             <enum>Qt::CustomContextMenu</enum>
 | 
				
			||||||
            </property>
 | 
					            </property>
 | 
				
			||||||
            <property name="sortingEnabled">
 | 
					 | 
				
			||||||
             <bool>true</bool>
 | 
					 | 
				
			||||||
            </property>
 | 
					 | 
				
			||||||
           </widget>
 | 
					           </widget>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item>
 | 
					          <item>
 | 
				
			||||||
@@ -146,7 +143,7 @@
 | 
				
			|||||||
               <string/>
 | 
					               <string/>
 | 
				
			||||||
              </property>
 | 
					              </property>
 | 
				
			||||||
              <property name="icon">
 | 
					              <property name="icon">
 | 
				
			||||||
               <iconset resource="../icons.qrc">
 | 
					               <iconset resource="icons.qrc">
 | 
				
			||||||
                <normaloff>:/Icons/oxygen/list-remove.png</normaloff>:/Icons/oxygen/list-remove.png</iconset>
 | 
					                <normaloff>:/Icons/oxygen/list-remove.png</normaloff>:/Icons/oxygen/list-remove.png</iconset>
 | 
				
			||||||
              </property>
 | 
					              </property>
 | 
				
			||||||
             </widget>
 | 
					             </widget>
 | 
				
			||||||
@@ -173,7 +170,7 @@
 | 
				
			|||||||
               <string/>
 | 
					               <string/>
 | 
				
			||||||
              </property>
 | 
					              </property>
 | 
				
			||||||
              <property name="icon">
 | 
					              <property name="icon">
 | 
				
			||||||
               <iconset resource="../icons.qrc">
 | 
					               <iconset resource="icons.qrc">
 | 
				
			||||||
                <normaloff>:/Icons/oxygen/list-add.png</normaloff>:/Icons/oxygen/list-add.png</iconset>
 | 
					                <normaloff>:/Icons/oxygen/list-add.png</normaloff>:/Icons/oxygen/list-add.png</iconset>
 | 
				
			||||||
              </property>
 | 
					              </property>
 | 
				
			||||||
             </widget>
 | 
					             </widget>
 | 
				
			||||||
@@ -399,7 +396,7 @@
 | 
				
			|||||||
                       </font>
 | 
					                       </font>
 | 
				
			||||||
                      </property>
 | 
					                      </property>
 | 
				
			||||||
                      <property name="text">
 | 
					                      <property name="text">
 | 
				
			||||||
                       <string/>
 | 
					                       <string>      </string>
 | 
				
			||||||
                      </property>
 | 
					                      </property>
 | 
				
			||||||
                     </widget>
 | 
					                     </widget>
 | 
				
			||||||
                    </item>
 | 
					                    </item>
 | 
				
			||||||
@@ -477,7 +474,7 @@
 | 
				
			|||||||
  </layout>
 | 
					  </layout>
 | 
				
			||||||
  <action name="actionRename_filter">
 | 
					  <action name="actionRename_filter">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset resource="../icons.qrc">
 | 
					    <iconset resource="icons.qrc">
 | 
				
			||||||
     <normaloff>:/Icons/oxygen/edit_clear.png</normaloff>:/Icons/oxygen/edit_clear.png</iconset>
 | 
					     <normaloff>:/Icons/oxygen/edit_clear.png</normaloff>:/Icons/oxygen/edit_clear.png</iconset>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="text">
 | 
					   <property name="text">
 | 
				
			||||||
@@ -489,7 +486,7 @@
 | 
				
			|||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
  <action name="actionRemove_filter">
 | 
					  <action name="actionRemove_filter">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset resource="../icons.qrc">
 | 
					    <iconset resource="icons.qrc">
 | 
				
			||||||
     <normaloff>:/Icons/oxygen/list-remove.png</normaloff>:/Icons/oxygen/list-remove.png</iconset>
 | 
					     <normaloff>:/Icons/oxygen/list-remove.png</normaloff>:/Icons/oxygen/list-remove.png</iconset>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="text">
 | 
					   <property name="text">
 | 
				
			||||||
@@ -501,7 +498,7 @@
 | 
				
			|||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
  <action name="actionAdd_filter">
 | 
					  <action name="actionAdd_filter">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset resource="../icons.qrc">
 | 
					    <iconset resource="icons.qrc">
 | 
				
			||||||
     <normaloff>:/Icons/oxygen/list-add.png</normaloff>:/Icons/oxygen/list-add.png</iconset>
 | 
					     <normaloff>:/Icons/oxygen/list-add.png</normaloff>:/Icons/oxygen/list-add.png</iconset>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="text">
 | 
					   <property name="text">
 | 
				
			||||||
@@ -510,7 +507,7 @@
 | 
				
			|||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
 </widget>
 | 
					 </widget>
 | 
				
			||||||
 <resources>
 | 
					 <resources>
 | 
				
			||||||
  <include location="../icons.qrc"/>
 | 
					  <include location="icons.qrc"/>
 | 
				
			||||||
 </resources>
 | 
					 </resources>
 | 
				
			||||||
 <connections>
 | 
					 <connections>
 | 
				
			||||||
  <connection>
 | 
					  <connection>
 | 
				
			||||||
							
								
								
									
										98
									
								
								src/FinishedListDelegate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/FinishedListDelegate.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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_SWARM 3
 | 
				
			||||||
 | 
					#define F_PEERS 4
 | 
				
			||||||
 | 
					#define F_UPLOAD 5
 | 
				
			||||||
 | 
					#define F_RATIO 6
 | 
				
			||||||
 | 
					#define F_HASH 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_RATIO 100.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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:
 | 
				
			||||||
 | 
					        case F_UPLOAD:
 | 
				
			||||||
 | 
					          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();
 | 
				
			||||||
 | 
					          if(ratio > MAX_RATIO)
 | 
				
			||||||
 | 
					            QItemDelegate::drawDisplay(painter, opt, opt.rect, QString::fromUtf8("∞"));
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					            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
 | 
				
			||||||
							
								
								
									
										699
									
								
								src/FinishedTorrents.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										699
									
								
								src/FinishedTorrents.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										105
									
								
								src/FinishedTorrents.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								src/FinishedTorrents.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 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
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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 toggleFinishedListSortOrder(int index);
 | 
				
			||||||
 | 
					    void sortFinishedList(int index=-1, Qt::SortOrder sortOrder=Qt::AscendingOrder);
 | 
				
			||||||
 | 
					    void sortFinishedListFloat(int index, Qt::SortOrder sortOrder);
 | 
				
			||||||
 | 
					    void sortFinishedListString(int index, Qt::SortOrder sortOrder);
 | 
				
			||||||
 | 
					    void updateFileSize(QString hash);
 | 
				
			||||||
 | 
					    void on_actionSet_upload_limit_triggered();
 | 
				
			||||||
 | 
					    void notifyTorrentDoubleClicked(const QModelIndex& index);
 | 
				
			||||||
 | 
					    void hideOrShowColumnName();
 | 
				
			||||||
 | 
					    void hideOrShowColumnSize();
 | 
				
			||||||
 | 
					    void hideOrShowColumnUpSpeed();
 | 
				
			||||||
 | 
					    void hideOrShowColumnSwarm();
 | 
				
			||||||
 | 
					    void hideOrShowColumnPeers();
 | 
				
			||||||
 | 
					    void hideOrShowColumnUpload();
 | 
				
			||||||
 | 
					    void hideOrShowColumnRatio();
 | 
				
			||||||
 | 
					    void forceRecheck();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public slots:
 | 
				
			||||||
 | 
					    void addTorrent(QString hash);
 | 
				
			||||||
 | 
					    void updateTorrent(QTorrentHandle h);
 | 
				
			||||||
 | 
					    void pauseTorrent(QString hash);
 | 
				
			||||||
 | 
					    void propertiesSelection();
 | 
				
			||||||
 | 
					    void deleteTorrent(QString hash);
 | 
				
			||||||
 | 
					    void showPropertiesFromHash(QString hash);
 | 
				
			||||||
 | 
					    void loadLastSortedColumn();
 | 
				
			||||||
 | 
					    void updateMetadata(QTorrentHandle &h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  signals:
 | 
				
			||||||
 | 
					    void torrentMovedFromFinishedList(QString);
 | 
				
			||||||
 | 
					    void torrentDoubleClicked(QString hash, bool finished);
 | 
				
			||||||
 | 
					    void finishedTorrentsNumberChanged(unsigned int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										1800
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
							
						
						
									
										1800
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 322 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/L.gif
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/Icons/L.gif
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 66 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/add_file.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/Icons/add_file.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1005 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/add_folder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/Icons/add_folder.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.3 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 473 B  | 
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user