Compare commits
	
		
			24 Commits
		
	
	
		
			release-2.
			...
			release-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 3783b11e98 | ||
|   | 03cf510f7f | ||
|   | 610dfefa26 | ||
|   | 6c477fcf75 | ||
|   | 604f8542a7 | ||
|   | e9b4c6c047 | ||
|   | 985ac3be68 | ||
|   | 562c748c50 | ||
|   | 7a685f5ab6 | ||
|   | 9500b212c7 | ||
|   | 5a2e92ad79 | ||
|   | 9772fccde3 | ||
|   | f26bcec56f | ||
|   | 52a62b6f0f | ||
|   | f27b49f9a3 | ||
|   | 3e4fe1f823 | ||
|   | a8a6911aa8 | ||
|   | e299288367 | ||
|   | de64a641d0 | ||
|   | ab13a58614 | ||
|   | c863ff6335 | ||
|   | e20a09ca3e | ||
|   | 40966ae421 | ||
|   | a87098629b | 
							
								
								
									
										8
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						| @@ -2,9 +2,8 @@ Author: | |||||||
| * Christophe Dumez <chris@qbittorrent.org> | * Christophe Dumez <chris@qbittorrent.org> | ||||||
|  |  | ||||||
| Contributors: | Contributors: | ||||||
| * Stefanos Antaris <santaris@csd.auth.gr> |  | ||||||
| * Ishan Arora <ishan@qbittorrent.org> |  | ||||||
| * Arnaud Demaizière <arnaud@qbittorrent.org> | * Arnaud Demaizière <arnaud@qbittorrent.org> | ||||||
|  | * Ishan Arora <ishan@qbittorrent.org> | ||||||
| * Grigis Gaëtan <cipher16@gmail.com> | * Grigis Gaëtan <cipher16@gmail.com> | ||||||
|  |  | ||||||
| Code from other projects: | Code from other projects: | ||||||
| @@ -12,11 +11,6 @@ Code from other projects: | |||||||
|   copyright: Malte Starostik <malte@kde.org> |   copyright: Malte Starostik <malte@kde.org> | ||||||
|   license: LGPL |   license: LGPL | ||||||
|  |  | ||||||
| GeoIP database author: |  | ||||||
| * files: src/geoip/GeoIP.dat |  | ||||||
|   copyright: MaxMind, Inc (http://maxmind.com/) |  | ||||||
|   license: Open Data License (see src/geoip/LICENSE.txt) |  | ||||||
|  |  | ||||||
| Images Authors: | Images Authors: | ||||||
| * files: src/Icons/*.png | * files: src/Icons/*.png | ||||||
|   copyright: Gnome Icon Theme |   copyright: Gnome Icon Theme | ||||||
|   | |||||||
							
								
								
									
										77
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						| @@ -1,54 +1,29 @@ | |||||||
| * Unknown - Christophe Dumez <chris@qbittorrent.org> - v2.0.0 | * Sun Oct 25 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.4 | ||||||
|     - FEATURE: Added program option to disable splash screen |   - BUGFIX: Updated man page | ||||||
|     - FEATURE: Dropped dependency on libcurl and libzzip |   - BUGFIX: Fixed possible crash with torrents containing unicode characters | ||||||
|     - FEATURE: Display more information regarding the torrent in its properties |   - BUGFIX: Fixed problem when disabling systray integration and starting minimized | ||||||
|     - FEATURE: Various optimizations to save CPU and memory |   - BUGFIX: Fixed PirateBay search plugin | ||||||
|     - FEATURE: Folder scanning now works with CIFS and NFS mounted folders |   - BUGFIX: Using Download button in search results list now downloads the right torrents | ||||||
|     - FEATURE: Speed up qBittorrent startup |   - BUGFIX: The search results list is no longer sorted automatically when a row color is updated | ||||||
|     - FEATURE: Display per-torrent peer list |  | ||||||
|     - FEATURE: Make sure torrent files are always sorted by name | * Wed Sep 30 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.3 | ||||||
|     - FEATURE: Seeds and Peers columns are now sortable |   - BUGFIX: Fix a possible crash when pausing then deleting a torrent quickly | ||||||
|     - FEATURE: Torrents can be rechecked from Web UI (Stephanos Antaris) |   - BUGFIX: Fix a race condition in folder scanning and torrent downloader | ||||||
|     - FEATURE: New peers can manually be added to the torrents |   - BUGFIX: Hide download url column in search results | ||||||
|     - FEATURE: Support per-peer rate limiting |   - BUGFIX: Fix a crash when scanned directory does not exist | ||||||
|     - FEATURE: Support peer manual ban |   - BUGFIX: Fix compilation on Mac OS | ||||||
|     - FEATURE: Display total amounts transferred in status bar |   - BUGFIX: Added a command line parameter to disable splash screen | ||||||
|     - FEATURE: Display trackers status as well as error/warning messages |   - BUGFIX: Ignore permanent deletion button when no torrent is selected | ||||||
|     - FEATURE: Display the number of peers returned by each tracker & DHT/PeX/LSD |   - BUGFIX: When a selected torrent is deleted, select next suitable torrent | ||||||
|     - FEATURE: Global upload/download speeds can be capped from status bar (µTorrent behavior) |  | ||||||
|     - FEATURE: Added option to download first and last piece of a torrent main file first (for preview) | * Sun Sep 20 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.2 | ||||||
|     - FEATURE: Graphically display piece availability in torrent properties |   - BUGFIX: Some torrents were pausing for no reason | ||||||
|     - FEATURE: Dropped Qt 4.3 support (Qt >= 4.4 is now required) |   - I18N: Updated Korean translation | ||||||
|     - FEATURE: Display close tab button into the tabs in search engine (Qt >= 4.5 only) |  | ||||||
|     - FEATURE: Show official documentation when pressing F1 key | * Thu Sep 7 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.1 | ||||||
|     - FEATURE: Announce to all trackers specified for a torrent (µTorrent behavior) (libtorrent >= v0.15 only) |    - BUGFIX: Fix crash in torrent addition dialog when save path does not exist (closes #425227) | ||||||
|     - FEATURE: Added per-torrent super seeding mode (libtorrent >= v0.15 only) |    - BUGFIX: Fix downloading from URL (broken in v1.5.0) | ||||||
|     - FEATURE: Support for storing symbolic links in .torrent files (libtorrent >= v0.15 only) |    - BUGFIX: Pause torrents in error state | ||||||
|     - FEATURE: Support for uTorrent interpretation of multi-tracker torrents (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Handle torrents with duplicate filenames (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Support for merkle hash tree torrents (.merkle.torrent) (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Metadata download from swarm is now compatible with µtorrent (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Support tracker exchange between peers (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Better http seed support (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Tracker connections are now also subject to IP filtering (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Include DHT traffic in the rate limiter (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Support for bitcomet padding files (libtorrent >= v0.15 only) |  | ||||||
|     - FEATURE: Option to skip file checking and start seeding immediately in torrent addition dialog (Stephanos Antaris) (libtorrent >= v0.15 only) |  | ||||||
|     - WEB UI: Remodeled Web UI to match new qBittorrent UI (Properties and preferences available) |  | ||||||
|     - WEB UI: Added internationalization support |  | ||||||
|     - WEB UI: Reduced computation in Javascript (do this one server side instead) |  | ||||||
|     - WEB UI: Fixed Transfer list flickering |  | ||||||
|     - COSMETIC: Merged download / upload lists |  | ||||||
|     - COSMETIC: Torrents can be filtered based on their status |  | ||||||
|     - COSMETIC: Torrent properties are now displayed in main window |  | ||||||
|     - COSMETIC: Made program preferences scrollable for usability on small screens (e.g. netbooks) |  | ||||||
|     - COSMETIC: Added a "torrent status" column to transfer list |  | ||||||
|     - COSMETIC: Display Seeds and Peers in two separate columns |  | ||||||
|     - COSMETIC: New deletion confirmation dialog (Merged delete/delete permanently actions) |  | ||||||
|     - COSMETIC: Improved status bar layout spacing |  | ||||||
|     - COSMETIC: Display speeds with more user friendly units instead of always using KiB/s |  | ||||||
|     - COSMETIC: New torrent status icons by Mateusz Tolola |  | ||||||
|     - COSMETIC: Make use of libnotify if available for system notifications (Ubuntu, ...) |  | ||||||
|  |  | ||||||
| * Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0 | * Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0 | ||||||
|     - FEATURE: Added Magnet URI support |     - FEATURE: Added Magnet URI support | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,12 @@ | |||||||
| qBittorrent - A BitTorrent client in C++ / Qt4 | qBittorrent - A BitTorrent client in C++ / Qt4 | ||||||
| ------------------------------------------ | ------------------------------------------ | ||||||
|  |  | ||||||
|  | *** Necessary if qt3 is default on your system *** | ||||||
|  | export QTDIR=/usr/include/qt4 | ||||||
|  | export PATH=$QTDIR/bin:$PATH | ||||||
|  | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib | ||||||
|  | *** End *** | ||||||
|  |  | ||||||
| ./configure | ./configure | ||||||
| make && make install | make && make install | ||||||
| qbittorrent | qbittorrent | ||||||
| @@ -8,20 +14,29 @@ qbittorrent | |||||||
| will install and execute qBittorrent hopefully without any problems. | will install and execute qBittorrent hopefully without any problems. | ||||||
|  |  | ||||||
| Dependencies: | Dependencies: | ||||||
| - Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml) | - Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml) | ||||||
|  |   Qt >= 4.4.0 is advised | ||||||
|  |  | ||||||
| - libtorrent-rasterbar by Arvid Norberg (>= 0.14.0 REQUIRED, >= v0.15.0 ADVISED) | - libtorrent-rasterbar by Arvid Norberg (>= v0.14.0 REQUIRED) | ||||||
|     -> http://www.qbittorrent.org/download.php (advised) |     -> http://www.qbittorrent.org/download.php (advised) | ||||||
|     -> http://www.libtorrent.net |     -> http://www.libtorrent.net | ||||||
|     Be careful: another library (the one used by rTorrent) uses a similar name. |     Be careful: another library (the one used by rTorrent) uses a similar name. | ||||||
|  |  | ||||||
| - libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization | - libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization | ||||||
|  |  | ||||||
|  | - libcurl | ||||||
|  |  | ||||||
| - python >= 2.3 (needed by search engine) | - python >= 2.3 (needed by search engine) | ||||||
|  |  | ||||||
| - libnotify >= 0.4.2, glib-2.0 (optional) | - libmagick++ (advised, not required) | ||||||
|   * Can be used for system notifications to replace standard Qt notifications |   * Needed for favicons support (RSS / Search plugins) | ||||||
|     so that it integrates better into the Desktop |  | ||||||
|  | - 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
									
									
									
									
									
								
							
							
						
						| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4 | |||||||
|  |  | ||||||
| .SH "SYNOPSIS" | .SH "SYNOPSIS" | ||||||
|  |  | ||||||
| \fBqbittorrent\fR [\-\-no-splash] [TORRENT_FILE | URL]... | \fBqbittorrent\fR [--no-splash] [TORRENT_FILE | URL]... | ||||||
|  |  | ||||||
| \fBqbittorrent\fR \-\-help | \fBqbittorrent\fR \-\-help | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ | |||||||
|   <dep type='libboost'> |   <dep type='libboost'> | ||||||
|     <required/> |     <required/> | ||||||
|   </dep> |   </dep> | ||||||
|   <dep type='libnotify'> |   <dep type='libcurl'> | ||||||
|  |     <required/> | ||||||
|   </dep> |   </dep> | ||||||
|  |   <dep type='libzzip'/> | ||||||
| </qconf> | </qconf> | ||||||
|   | |||||||
							
								
								
									
										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,41 +0,0 @@ | |||||||
| /* |  | ||||||
| -----BEGIN QCMOD----- |  | ||||||
| name: libnotify |  | ||||||
| -----END QCMOD----- |  | ||||||
| */ |  | ||||||
| // see  Conf::findPkgConfig |  | ||||||
| class qc_libnotify : public ConfObj |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	qc_libnotify(Conf *c) : ConfObj(c) {} |  | ||||||
| 	QString name() const { return "libnotify >= 0.4.2 (optional)"; } |  | ||||||
| 	QString shortname() const { return "libnotify"; } |  | ||||||
| 	bool exec(){ |  | ||||||
| 		QStringList incs; |  | ||||||
| 		QString req_ver = "0.4.2"; |  | ||||||
| 		QString version, libs, other; |  | ||||||
| 		VersionMode mode = VersionMin; |  | ||||||
| 		if(conf->findPkgConfig("libnotify", mode, req_ver, &version, &incs, &libs, &other)) { |  | ||||||
| 			conf->addDefine("WITH_LIBNOTIFY"); |  | ||||||
| 			for(int n = 0; n < incs.count(); ++n) |  | ||||||
| 				conf->addIncludePath(incs[n]); |  | ||||||
| 			if(!libs.isEmpty()) |  | ||||||
| 				conf->addLib(libs); |  | ||||||
| 			QStringList incs2; |  | ||||||
| 			QString req_ver2 = "2.0"; |  | ||||||
| 			QString version2, libs2, other2; |  | ||||||
| 			if(conf->findPkgConfig("glib-2.0", mode, req_ver2, &version2, &incs2, &libs2, &other2)) { |  | ||||||
| 				for(int n = 0; n < incs2.count(); ++n) |  | ||||||
| 				conf->addIncludePath(incs2[n]); |  | ||||||
| 				if(!libs2.isEmpty()) |  | ||||||
| 					conf->addLib(libs2); |  | ||||||
| 			} else { |  | ||||||
| 				return false; |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			return false; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| }; |  | ||||||
| @@ -8,12 +8,12 @@ class qc_libtorrent_rasterbar : public ConfObj | |||||||
| { | { | ||||||
| public: | public: | ||||||
| 	qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {} | 	qc_libtorrent_rasterbar(Conf *c) : ConfObj(c) {} | ||||||
| 	QString name() const { return "libtorrent-rasterbar >= 0.14.0 (>= 0.15.0 advised)"; } | 	QString name() const { return "libtorrent-rasterbar >= 0.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.0"; | 		QString req_ver = "0.14.0"; | ||||||
| 		QString adv_ver = "0.15.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)) | ||||||
| @@ -23,9 +23,7 @@ public: | |||||||
| 		if(!libs.isEmpty()) | 		if(!libs.isEmpty()) | ||||||
| 			conf->addLib(libs); | 			conf->addLib(libs); | ||||||
| 		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other)) | 		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other)) | ||||||
|                         printf("\nWarning: libtorrent-rasterbar v%s was detected.\nAlthough it will compile and run, you will be missing some features. Please consider updating to v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data()); | 			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()); | ||||||
| 		else |  | ||||||
| 			conf->addDefine("LIBTORRENT_0_15"); |  | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										71
									
								
								qcm/libzzip.qcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,71 @@ | |||||||
|  | /* | ||||||
|  | -----BEGIN QCMOD----- | ||||||
|  | name: libzzip | ||||||
|  | arg: with-libzzip-inc=[path], Path to libzzip++ include files | ||||||
|  | arg: with-libzzip-lib=[path], Path to libzzip++ library files | ||||||
|  | -----END QCMOD----- | ||||||
|  | */ | ||||||
|  | #include <QProcess> | ||||||
|  | class qc_libzzip : public ConfObj | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	qc_libzzip(Conf *c) : ConfObj(c) {} | ||||||
|  | 	QString name() const { return "Zzip library (libzzip)"; } | ||||||
|  | 	QString shortname() const { return "libzzip"; } | ||||||
|  | 	QString checkString() const { | ||||||
|  | 		if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty()) | ||||||
|  | 			return ""; | ||||||
|  | 		return ConfObj::checkString(); | ||||||
|  | 	} | ||||||
|  | 	bool exec(){ | ||||||
|  | 		if(!conf->getenv("QC_DISABLE_LIBZZIP").isEmpty()) | ||||||
|  | 			return false; | ||||||
|  | 		QString s; | ||||||
|  | 		s = conf->getenv("QC_WITH_LIBZZIP_INC"); | ||||||
|  | 		if(!s.isEmpty()) { | ||||||
|  | 			if(!conf->checkHeader(s, "zzip/zzip.h")) { | ||||||
|  | 				return false; | ||||||
|  |     			} | ||||||
|  | 		}else{ | ||||||
|  | 			QStringList sl; | ||||||
|  | 			sl << "/usr/include"; | ||||||
|  | 			sl << "/usr/local/include"; | ||||||
|  | 			bool found = false; | ||||||
|  | 			foreach(s, sl){ | ||||||
|  | 				if(conf->checkHeader(s, "zzip/zzip.h")){ | ||||||
|  | 					found = true; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if(!found) | ||||||
|  | 				return false; | ||||||
|  | 		} | ||||||
|  | 		conf->addIncludePath(s); | ||||||
|  |  | ||||||
|  | 		s = conf->getenv("QC_WITH_LIBZZIP_LIB"); | ||||||
|  | 		if(!s.isEmpty()) { | ||||||
|  | 			if(!QFile::exists(s+QString("/libzzip.so"))){ | ||||||
|  |                           return false; | ||||||
|  |                         } | ||||||
|  | 		}else{ | ||||||
|  | 			QStringList sl; | ||||||
|  | 			sl << "/usr/lib/"; | ||||||
|  | 			sl << "/usr/lib64/"; | ||||||
|  | 			sl << "/usr/local/lib/"; | ||||||
|  | 			sl << "/usr/local/lib64/"; | ||||||
|  | 			bool found = false; | ||||||
|  | 			foreach(s, sl){ | ||||||
|  | 				if(QFile::exists(s+QString("libzzip.so"))){ | ||||||
|  | 					found = true; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if(!found) | ||||||
|  |                          	return false; | ||||||
|  | 		} | ||||||
|  | 		conf->addLib(QString("-L") + s); | ||||||
|  | 		conf->addLib("-lzzip"); | ||||||
|  | 		conf->addDefine("HAVE_ZZIP"); | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | }; | ||||||
							
								
								
									
										14
									
								
								qcm/qt4.qcm
									
									
									
									
									
								
							
							
						
						| @@ -1,20 +1,20 @@ | |||||||
| /* | /* | ||||||
| -----BEGIN QCMOD----- | -----BEGIN QCMOD----- | ||||||
| name: Qt >= 4.4 | name: Qt >= 4.3 | ||||||
| -----END QCMOD----- | -----END QCMOD----- | ||||||
| */ | */ | ||||||
| class qc_qt4 : public ConfObj | class qc_qt4 : public ConfObj | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 	qc_qt4(Conf *c) : ConfObj(c) {} | 	qc_qt4(Conf *c) : ConfObj(c) {} | ||||||
| 	QString name() const { return "Qt >= 4.4"; } | 	QString name() const { return "Qt >= 4.3"; } | ||||||
| 	QString shortname() const { return "Qt 4.4"; } | 	QString shortname() const { return "Qt 4.3"; } | ||||||
| 	bool exec() | 	bool exec() | ||||||
| 	{ | 	{ | ||||||
| 		if(QT_VERSION >= 0x040500) { | 		if(QT_VERSION >= 0x040400) { | ||||||
|                         conf->addDefine("QT_4_5"); | 			conf->addDefine("QT_4_4"); | ||||||
|                 } | 		} | ||||||
| 		return(QT_VERSION >= 0x040400); | 		return(QT_VERSION >= 0x040300); | ||||||
| 		 | 		 | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										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 | ||||||
| @@ -45,7 +45,7 @@ | |||||||
| #include <QFileDialog> | #include <QFileDialog> | ||||||
|  |  | ||||||
| #include "bittorrent.h" | #include "bittorrent.h" | ||||||
| #include "ui_feeddownloader.h" | #include "ui_FeedDownloader.h" | ||||||
|  |  | ||||||
| class FeedFilter: public QHash<QString, QVariant> { | class FeedFilter: public QHash<QString, QVariant> { | ||||||
| private: | private: | ||||||
| @@ -228,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()); | ||||||
							
								
								
									
										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 | ||||||
							
								
								
									
										640
									
								
								src/FinishedTorrents.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										104
									
								
								src/FinishedTorrents.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,104 @@ | |||||||
|  | /* | ||||||
|  |  * 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 QSortFilterProxyModel; | ||||||
|  | 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; | ||||||
|  |     QSortFilterProxyModel *proxyModel; | ||||||
|  |     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 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 saveLastSortedColumn(); | ||||||
|  |     void updateMetadata(QTorrentHandle &h); | ||||||
|  |  | ||||||
|  |   signals: | ||||||
|  |     void torrentMovedFromFinishedList(QString); | ||||||
|  |     void torrentDoubleClicked(QString hash, bool finished); | ||||||
|  |     void finishedTorrentsNumberChanged(unsigned int); | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif | ||||||
							
								
								
									
										2202
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										111
									
								
								src/GUI.h
									
									
									
									
									
								
							
							
						
						| @@ -34,64 +34,88 @@ | |||||||
| #include <QProcess> | #include <QProcess> | ||||||
| #include <QSystemTrayIcon> | #include <QSystemTrayIcon> | ||||||
| #include <QPointer> | #include <QPointer> | ||||||
| #include "ui_mainwindow.h" | #include "ui_MainWindow.h" | ||||||
| #include "qtorrenthandle.h" | #include "qtorrenthandle.h" | ||||||
|  |  | ||||||
| enum TabIndex{TAB_TRANSFER, TAB_SEARCH, TAB_RSS}; | class bittorrent; | ||||||
|  | class createtorrent; | ||||||
| class Bittorrent; |  | ||||||
| class QTimer; | class QTimer; | ||||||
|  | class DownloadingTorrents; | ||||||
|  | class FinishedTorrents; | ||||||
| class downloadFromURL; | class downloadFromURL; | ||||||
| class SearchEngine; | class SearchEngine; | ||||||
| class QLocalServer; | #ifdef QT_4_4 | ||||||
|  |   class QLocalServer; | ||||||
|  |   class QLocalSocket; | ||||||
|  | #else | ||||||
|  |   class QTcpServer; | ||||||
|  |   class QTcpSocket; | ||||||
|  | #endif | ||||||
| class QCloseEvent; | class QCloseEvent; | ||||||
| class RSSImp; | class RSSImp; | ||||||
| class QShortcut; | class QShortcut; | ||||||
| class about; | class about; | ||||||
|  | class previewSelect; | ||||||
| class options_imp; | class options_imp; | ||||||
| class QTabWidget; | class QTabWidget; | ||||||
| class TransferListWidget; | class QLabel; | ||||||
| class TransferListFiltersWidget; | class QModelIndex; | ||||||
| class QSplitter; | class HttpServer; | ||||||
| class PropertiesWidget; | class QFrame; | ||||||
| class StatusBar; |  | ||||||
|  |  | ||||||
| class GUI : public QMainWindow, private Ui::MainWindow{ | class GUI : public QMainWindow, private Ui::MainWindow{ | ||||||
|   Q_OBJECT |   Q_OBJECT | ||||||
|  |  | ||||||
|   private: |   private: | ||||||
|     // Bittorrent |     // Bittorrent | ||||||
|     Bittorrent *BTSession; |     bittorrent *BTSession; | ||||||
|     QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed? |     QTimer *checkConnect; | ||||||
|  |     QTimer *scrapeTimer; | ||||||
|  |     QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; | ||||||
|     // GUI related |     // GUI related | ||||||
|     QTimer *guiUpdater; |  | ||||||
|     QTabWidget *tabs; |     QTabWidget *tabs; | ||||||
|     StatusBar *status_bar; |  | ||||||
|     QPointer<options_imp> options; |     QPointer<options_imp> options; | ||||||
|     QPointer<QSystemTrayIcon> systrayIcon; |     QSystemTrayIcon *myTrayIcon; | ||||||
|     QPointer<QTimer> systrayCreator; |     QPointer<QTimer> systrayCreator; | ||||||
|     QMenu *myTrayIconMenu; |     QMenu *myTrayIconMenu; | ||||||
|     TransferListWidget *transferList; |     DownloadingTorrents *downloadingTorrentTab; | ||||||
|     TransferListFiltersWidget *transferListFilters; |     FinishedTorrents *finishedTorrentTab; | ||||||
|     PropertiesWidget *properties; |     QLabel *connecStatusLblIcon; | ||||||
|  |     bool systrayIntegration; | ||||||
|     bool displaySpeedInTitle; |     bool displaySpeedInTitle; | ||||||
|     bool force_exit; |     bool force_exit; | ||||||
|  |     unsigned int refreshInterval; | ||||||
|  |     QTimer *refresher; | ||||||
|  |     QLabel *dlSpeedLbl; | ||||||
|  |     QLabel *upSpeedLbl; | ||||||
|  |     QLabel *ratioLbl; | ||||||
|  |     QLabel *DHTLbl; | ||||||
|  |     QFrame *statusSep1; | ||||||
|  |     QFrame *statusSep2; | ||||||
|  |     QFrame *statusSep3; | ||||||
|  |     QFrame *statusSep4; | ||||||
|     // Keyboard shortcuts |     // Keyboard shortcuts | ||||||
|     QShortcut *switchSearchShortcut; |     QShortcut *switchSearchShortcut; | ||||||
|     QShortcut *switchSearchShortcut2; |     QShortcut *switchSearchShortcut2; | ||||||
|     QShortcut *switchTransferShortcut; |     QShortcut *switchDownShortcut; | ||||||
|  |     QShortcut *switchUpShortcut; | ||||||
|     QShortcut *switchRSSShortcut; |     QShortcut *switchRSSShortcut; | ||||||
|     // Widgets |  | ||||||
|     QAction *prioSeparator; |     QAction *prioSeparator; | ||||||
|     QAction *prioSeparator2; |     QAction *prioSeparator2; | ||||||
|     QSplitter *hSplitter; |  | ||||||
|     QSplitter *vSplitter; |  | ||||||
|     // Search |     // Search | ||||||
|     SearchEngine *searchEngine; |     SearchEngine *searchEngine; | ||||||
|     // RSS |     // RSS | ||||||
|     QPointer<RSSImp> rssWidget; |     RSSImp *rssWidget; | ||||||
|  |     // Web UI | ||||||
|  |     QPointer<HttpServer> httpServer; | ||||||
|     // Misc |     // Misc | ||||||
|  | #ifdef QT_4_4 | ||||||
|     QLocalServer *localServer; |     QLocalServer *localServer; | ||||||
|  |     QLocalSocket *clientConnection; | ||||||
|  | #else | ||||||
|  |     QTcpServer *localServer; | ||||||
|  |     QTcpSocket *clientConnection; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   protected slots: |   protected slots: | ||||||
|     // GUI related slots |     // GUI related slots | ||||||
| @@ -105,36 +129,60 @@ class GUI : public QMainWindow, private Ui::MainWindow{ | |||||||
|     void on_actionShow_console_triggered(); |     void on_actionShow_console_triggered(); | ||||||
|     void readParamsOnSocket(); |     void readParamsOnSocket(); | ||||||
|     void acceptConnection(); |     void acceptConnection(); | ||||||
|  |     void togglePausedState(QString hash); | ||||||
|  |     void torrentDoubleClicked(QString hash, bool finished); | ||||||
|  |     void on_actionPreview_file_triggered(); | ||||||
|  |     void previewFile(QString filePath); | ||||||
|     void balloonClicked(); |     void balloonClicked(); | ||||||
|     void writeSettings(); |     void writeSettings(); | ||||||
|     void readSettings(); |     void readSettings(); | ||||||
|     void on_actionExit_triggered(); |     void on_actionExit_triggered(); | ||||||
|     void createTrayIcon(); |     void createTrayIcon(); | ||||||
|  |     void updateUnfinishedTorrentNumber(unsigned int nb); | ||||||
|  |     void updateFinishedTorrentNumber(unsigned int nb); | ||||||
|     void fullDiskError(QTorrentHandle& h, QString msg) const; |     void fullDiskError(QTorrentHandle& h, QString msg) const; | ||||||
|     void handleDownloadFromUrlFailure(QString, QString) const; |     void handleDownloadFromUrlFailure(QString, QString) const; | ||||||
|     void createSystrayDelayed(); |     void createSystrayDelayed(); | ||||||
|     void tab_changed(int); |     void setPaused(QTorrentHandle &h) const; | ||||||
|     // Keyboard shortcuts |     // Keyboard shortcuts | ||||||
|     void createKeyboardShortcuts(); |     void createKeyboardShortcuts(); | ||||||
|     void displayTransferTab() const; |     void displayDownTab() const; | ||||||
|  |     void displayUpTab() const; | ||||||
|     void displaySearchTab() const; |     void displaySearchTab() const; | ||||||
|     void displayRSSTab() const; |     void displayRSSTab() const; | ||||||
|     // Torrent actions |     // Torrent actions | ||||||
|  |     void on_actionTorrent_Properties_triggered(); | ||||||
|  |     void on_actionPause_triggered(); | ||||||
|  |     void on_actionPause_All_triggered(); | ||||||
|  |     void on_actionStart_triggered(); | ||||||
|  |     void on_actionStart_All_triggered(); | ||||||
|  |     void on_actionOpen_triggered(); | ||||||
|  |     void on_actionDelete_Permanently_triggered(); | ||||||
|  |     void on_actionDelete_triggered(); | ||||||
|     void on_actionSet_global_upload_limit_triggered(); |     void on_actionSet_global_upload_limit_triggered(); | ||||||
|     void on_actionSet_global_download_limit_triggered(); |     void on_actionSet_global_download_limit_triggered(); | ||||||
|     void on_actionDocumentation_triggered() const; |     void on_actionDocumentation_triggered() const; | ||||||
|     void on_actionOpen_triggered(); |     void checkConnectionStatus(); | ||||||
|     void updateGUI(); |     void configureSession(bool deleteOptions); | ||||||
|     void loadPreferences(bool configure_session=true); |  | ||||||
|     void processParams(const QStringList& params); |     void processParams(const QStringList& params); | ||||||
|     void addTorrent(QString path); |     void addTorrent(QString path); | ||||||
|     void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker); |     void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker); | ||||||
|     void processDownloadedFiles(QString path, QString url); |     void processDownloadedFiles(QString path, QString url); | ||||||
|     void downloadFromURLList(const QStringList& urls); |     void downloadFromURLList(const QStringList& urls); | ||||||
|  |     void deleteTorrent(QString hash); | ||||||
|     void finishedTorrent(QTorrentHandle& h) const; |     void finishedTorrent(QTorrentHandle& h) const; | ||||||
|  |     void addedTorrent(QTorrentHandle& h) const; | ||||||
|  |     void checkedTorrent(QTorrentHandle& h) const; | ||||||
|  |     void pausedTorrent(QTorrentHandle& h) const; | ||||||
|  |     void resumedTorrent(QTorrentHandle& h) const; | ||||||
|  |     void updateLists(bool force=false); | ||||||
|  |     bool initWebUi(QString username, QString password, int port); | ||||||
|  |     void on_actionIncreasePriority_triggered(); | ||||||
|  |     void on_actionDecreasePriority_triggered(); | ||||||
|  |     void scrapeTrackers(); | ||||||
|     // Options slots |     // Options slots | ||||||
|     void on_actionOptions_triggered(); |     void on_actionOptions_triggered(); | ||||||
|     void optionsSaved(); |     void OptionsSaved(bool deleteOptions); | ||||||
|     // HTTP slots |     // HTTP slots | ||||||
|     void on_actionDownload_from_URL_triggered(); |     void on_actionDownload_from_URL_triggered(); | ||||||
|  |  | ||||||
| @@ -142,7 +190,10 @@ class GUI : public QMainWindow, private Ui::MainWindow{ | |||||||
|   public slots: |   public slots: | ||||||
|     void trackerAuthenticationRequired(QTorrentHandle& h); |     void trackerAuthenticationRequired(QTorrentHandle& h); | ||||||
|     void setTabText(int index, QString text) const; |     void setTabText(int index, QString text) const; | ||||||
|     void showNotificationBaloon(QString title, QString msg) const; |     void openDestinationFolder() const; | ||||||
|  |     void goBuyPage() const; | ||||||
|  |     void copyMagnetURI() const; | ||||||
|  |     void updateRatio(); | ||||||
|  |  | ||||||
|   protected: |   protected: | ||||||
|     void closeEvent(QCloseEvent *); |     void closeEvent(QCloseEvent *); | ||||||
|   | |||||||
| Before Width: | Height: | Size: 473 B | 
| Before Width: | Height: | Size: 308 B | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 285 B | 
| Before Width: | Height: | Size: 373 B | 
| Before Width: | Height: | Size: 173 B | 
| Before Width: | Height: | Size: 583 B | 
| Before Width: | Height: | Size: 686 B | 
| Before Width: | Height: | Size: 203 B | 
| Before Width: | Height: | Size: 479 B | 
| Before Width: | Height: | Size: 314 B | 
| Before Width: | Height: | Size: 680 B |