Compare commits
	
		
			1 Commits
		
	
	
		
			release-4.
			...
			release-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 91d9325c7c | 
							
								
								
									
										2
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						| @@ -1,5 +1,5 @@ | ||||
| Author: | ||||
| * Christophe Dumez <chris@qbittorrent.org> | ||||
|  | ||||
| Other developers: | ||||
| Contributors: | ||||
| * Arnaud Demaizière <arnaud@qbittorrent.org> | ||||
|   | ||||
							
								
								
									
										15
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						| @@ -5,6 +5,7 @@ | ||||
|     - FEATURE: Bittorrent FAST extension support | ||||
|     - FEATURE: Added RSS support | ||||
|     - FEATURE: Support files prioritizing in a torrent | ||||
|     - FEATURE: Brand new search engine plugins system | ||||
|     - FEATURE: Finished torrents are now moved to another tab for seeding | ||||
|     - FEATURE: Display more infos about the torrent in its properties | ||||
|     - FEATURE: Allow the user to edit torrents' trackers | ||||
| @@ -30,6 +31,15 @@ | ||||
|     - FEATURE: User is now warned when fast resume data was rejected | ||||
|     - FEATURE: Url seeds are now displayed in torrent properties and are editable | ||||
|     - FEATURE: Allow to drag 'n drop urls on the main window | ||||
|     - FEATURE: Improved search engine (multipage support in all plugins) | ||||
|     - FEATURE: Added BTJunkie search engine plugin | ||||
|     - FEATURE: Added an option to force full disk allocation for all torrents | ||||
|     - FEATURE: Added an option to add torrents in paused state | ||||
|     - FEATURE: Added an option to set the max number of connections per torrent | ||||
|     - FEATURE: Added an option to set the max number of uploads per torrent | ||||
|     - FEATURE: Added an option to automatically delete torrents when they reach a given ratio (>= 1.0) | ||||
|     - FEATURE: Added an option to display current transfer speeds in title bar | ||||
|     - FEATURE: Torrent content is now displayed as a tree | ||||
|     - I18N: Added Hungarian translation | ||||
|     - I18N: Added Brazilian translation | ||||
|     - BUGFIX: Progress of paused torrents is now correct on restart | ||||
| @@ -52,11 +62,14 @@ | ||||
|     - BUGFIX: Made torrent deletion from hard-drive safer | ||||
|     - BUGFIX: Prevent downloadFromUrl flooding | ||||
|     - BUGFIX: ETA was wrong for torrents with filtered files | ||||
|     - BUGFIX: Fixed drag'n drop on non-KDE systems | ||||
|     - COSMETIC: Redesigned torrent properties a little | ||||
|     - COSMETIC: Redesigned options a little | ||||
|     - COSMETIC: Totally redesigned program preferences | ||||
|     - COSMETIC: Display more logs messages concerning features | ||||
|     - COSMETIC: Improved lists renderers | ||||
|     - COSMETIC: Use a different icon for torrents being checked and for connecting ones | ||||
|     - COSMETIC: Improved some icons | ||||
|     - COSMETIC: Improved systray tooltip style | ||||
|  | ||||
| * Mon May 07 2007 - Christophe Dumez <chris@qbittorrent.org> - v0.9.3 | ||||
|     - BUGFIX: Fixed pause toggle on double-click in download list | ||||
|   | ||||
							
								
								
									
										17
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						| @@ -16,9 +16,10 @@ will install and execute qBittorrent hopefully without any problems. | ||||
| Dependencies: | ||||
| - Qt >= 4.2 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml) | ||||
|  | ||||
| - libtorrent by Arvid Norberg (>= v0.13 REQUIRED) | ||||
| - rblibtorrent by Arvid Norberg (>= v0.13 REQUIRED) | ||||
|     -> http://www.qbittorrent.org/download.php (advised) | ||||
|     -> http://www.libtorrent.net | ||||
|     Be carefull: another library (the one used by rtorrent) use the same name. | ||||
|     Be careful: another library (the one used by rTorrent) use the same name. | ||||
|     These are TWO different libraries and qBittorrent will only work with the one provided | ||||
|     on sourceforge (created by Arvid Norberg). The two libraries conflicts with each other. | ||||
|  | ||||
| @@ -26,13 +27,17 @@ Dependencies: | ||||
|  | ||||
| - libcommoncpp2 | ||||
|  | ||||
| - python >= 2.3 (previous might work - not tested): needed by search engine. | ||||
| - python >= 2.3 (needed by search engine) | ||||
|  | ||||
| - libmagick++ (advised, not required) | ||||
|   * Needed for favicons support (RSS / Search plugins) | ||||
|  | ||||
| NOTE FOR GNOME USERS: | ||||
| - qt4-qtconfig package is advised when using Plastique style (default) | ||||
|   or just change qBittorrent style to Cleanlooks (GNOME like) | ||||
| - 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: | ||||
| Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org. | ||||
|   | ||||
							
								
								
									
										14
									
								
								README
									
									
									
									
									
								
							
							
						
						| @@ -3,30 +3,30 @@ qBittorrent - A BitTorrent client in Qt4 | ||||
|  | ||||
| Description: | ||||
| ******************************** | ||||
| qBittorrent is a bittorrent client programmed in C++ / Qt4 that use | ||||
| libtorrent (sometimes called rb_libtorrent) by Arvid Norberg. | ||||
| qBittorrent is a bittorrent client programmed in C++ / Qt4 that uses | ||||
| libtorrent (sometimes called rblibtorrent) by Arvid Norberg. | ||||
|  | ||||
| It aims to be a good alternative to all other bittorrent clients | ||||
| out there. qBittorrent is fast, stable and provides unicode | ||||
| support. | ||||
| support as well as many features. | ||||
|  | ||||
| Installation: | ||||
| ******************************** | ||||
| For installation follow the instructions from INSTALL file, but simple | ||||
| For installation, follow the instructions from INSTALL file, but simple: | ||||
|  | ||||
| ./configure | ||||
| make && make install | ||||
| qbittorrent | ||||
|  | ||||
| will install and execute qBittorrent hopefully without any problems. | ||||
| will install and execute qBittorrent hopefully without any problem. | ||||
|  | ||||
| For more information please visit: | ||||
| http://www.qbittorrent.org | ||||
|  | ||||
| Please report any bug (or feature requests) to: | ||||
| Please report any bug (or feature request) to: | ||||
| http://bugs.qbittorrent.org | ||||
|  | ||||
| You can also meet me on IRC: | ||||
| You can also meet me (chris-qBT) on IRC: | ||||
| #qbittorrent on irc.freenode.net | ||||
|  | ||||
| ------------------------------------------ | ||||
|   | ||||
							
								
								
									
										102
									
								
								TODO
									
									
									
									
									
								
							
							
						
						| @@ -1,98 +1,62 @@ | ||||
| // Easy | ||||
| - Translations into as many languages as possible | ||||
| - Improve man page | ||||
| - Use Launchpad/Rosetta for translations once it supports TS files | ||||
|  | ||||
| // Intermediate | ||||
| - Port on MacOS, Windows (and create an installer for Windows) - Progressing slowly | ||||
| - Add some transparency (menus,...), improve look | ||||
| - Port on MacOS, Windows (and create an installer for Windows) - Slow progress | ||||
| - Add some transparency (menus,...), improve look / usabilty | ||||
| - Skins support? (contact Mateusz) | ||||
|  | ||||
| // Harder | ||||
| - Display a progress bar that really displays the pieces we have (like in eMule) | ||||
| - Display a progress bar that really represents the pieces we have (like in eMule) | ||||
| - Torrent scheduler ala µtorrent/Bitcomet | ||||
|  | ||||
| // Waiting for libtorrent | ||||
| - File selection in a torrent in compact mode | ||||
| - Allow to prioritize torrents | ||||
| - Allow to prioritize torrents (may code this in qBittorrent?) | ||||
|  | ||||
| // Unsure | ||||
| - Display the peers we are connected to for each torrent with infos (like flag, dl/up speeds, ...) | ||||
| - Azureus spoofing to prevent ban from trackers? | ||||
| - Option to shutdown computer when downloads are finished | ||||
| - Add a torrent scheduler | ||||
| - NAT checker/Tester | ||||
| - Display hard drive space left? | ||||
| - Make use of dbus on Linux for the single instance instead of socket communication? | ||||
|   (http://techbase.kde.org/Development/Tutorials/D-Bus/Accessing_Interfaces) | ||||
| - search engines customizing | ||||
| - When favicon can't be downloaded, try to parse the webpage for: | ||||
|   <link rel="icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon"> | ||||
|     * Be carefull, the link can be relative | ||||
|  | ||||
| // in v1.2.0 | ||||
| - Allow user to organize the downloads into categories/folders | ||||
| - Allow user to organize the downloads into categories/folders? | ||||
|  | ||||
| // in v1.1.0 | ||||
| - Tabs support in search | ||||
| - Allow to hide columns? | ||||
| - Allow to scan multiple directories? (useful?) | ||||
| - Web interface (turbogears? php?) | ||||
| - Web interface (turbogears? php? python?) | ||||
|   * Webserver? Try to write a webserver as a plugin for qBittorrent in Python | ||||
|     * http://fragments.turtlemeat.com/pythonwebserver.php | ||||
| - improve and test tracker authentication code (remember login/pass) (need a tracker to test this) | ||||
| - support zipped torrents? (useful?) | ||||
| - Add option for RSS customization (refresh interval, max news per RSS...) | ||||
| - Allow to disable UPnP/NAT-PMP/LSD in options? | ||||
| - Allow to automatically delete torrents when they reach a given ratio (in options) : easy | ||||
| - Allow to limit the number of downloading torrents simultaneously (other are paused until a download finishes) | ||||
| - Add "Mark all as read" feature for RSS | ||||
| - Allow to customize lists refreshing interval (in options) | ||||
| - Use search engines as plugins (split them, load them dynamically) to allow the user to add some | ||||
| - Improve search plugin install (choose in a list taken from plugins.qbittorrent.org) | ||||
| - Display the number of DHT node if possible | ||||
| - When adding a duplicate torrent, check if the trackers are different from the existing one and ask the user if he wants to add them | ||||
| - Display in torrent addition dialog: | ||||
|    * free disk space on selected drive | ||||
|    * free disk space after torrent download (and/or torrent size) | ||||
| - Allow to change action on double-click | ||||
|   -> in download list | ||||
|   -> in seeding list | ||||
|  | ||||
| // in v1.0.0 (partial) - WIP | ||||
| - Check storage st creation + hasher in torrent creation | ||||
| // in v1.0.0 - FEATURE FREEZE | ||||
| - Fix all (or almost all) opened bugs in bug tracker | ||||
| - update sorting when a new torrent is added? | ||||
| - Keep documention up to date | ||||
| - Windows port (Chris - Peerkoel) | ||||
| - write patches libtorrent for file_priority(int index), actual_size() ? | ||||
| - valgrind --tool=memcheck --leak-check=full src/qbittorrent (Looks ok) | ||||
| - 128m  29m  16m S  4.8  2.9   0:02.28 qbittorrent | ||||
| * beta 6 | ||||
|   - Translations update (IN PROGRESS) | ||||
|   - Wait for some bug fixes in libtorrent : | ||||
|     - Number of seeds non null for finished torrent (Ticket #122) | ||||
| - debug new torrent content selection | ||||
| - Recheck doc | ||||
| - Translations update (IN PROGRESS) | ||||
| - Make use of total_wanted | ||||
|  | ||||
| LANGUAGES UPDATED: | ||||
| - French *BETA3* | ||||
| - English *BETA3* | ||||
| - Japanese *BETA3* | ||||
| - Swedish *BETA3* | ||||
| - Slovak *BETA3* | ||||
| - Ukrainian *BETA3* | ||||
| - Chinese (simplified) *BETA4* | ||||
| - Hungarian *BETA4* | ||||
| - Italian *BETA5* | ||||
| - Polish *BETA5* | ||||
| - Portuguese *BETA5* | ||||
| - Brazilian *BETA5* | ||||
| - Spanish *BETA5* | ||||
| - German *BETA5* | ||||
| - Russian *BETA5* | ||||
| - Korean *BETA5* | ||||
| - Greek *BETA6* | ||||
| - Dutch *BETA6* | ||||
| - Romanian *BETA6* | ||||
|  | ||||
| beta5->beta6 changelog: | ||||
| - FEATURE: Split download tab from GUI class and cleaned up code | ||||
| - FEATURE: A lot of code optimization (CPU & memory usage) | ||||
| - FEATURE: Added support for .ico format (useful for RSS favicons) | ||||
| - FEATURE: Replaced Meganova search engine by TorrentReactor | ||||
| - I18N: Updated Greek, Dutch and Romanian translation | ||||
| - I18N: Removed no longer maintained Traditional chinese translation | ||||
| - BUGFIX: Made torrent deletion from hard-drive safer | ||||
| - BUGFIX: Fixed a bug when switching from finished to downloading list | ||||
| - BUGFIX: Showing checking progress for paused torrents too | ||||
| - BUGFIX: Fixed progress column sorting on startup | ||||
| - BUGFIX: Prevent downloadFromUrl flooding | ||||
| - BUGFIX: Fixed pause state toggle for paused and checking torrents | ||||
| - BUGFIX: Made finished list context menu more similar to the download list one | ||||
| - BUGFIX: Fixed Pause/Start action in lists context menus | ||||
| - BUGFIX: Improved ETA calculation | ||||
| - BUGFIX: ETA was wrong for torrents with filtered files | ||||
| - BUGFIX: Display the torrent that are being checked as 'checking' in seeding list | ||||
| - BUGFIX: Fixed file preview and improved previewable files detection | ||||
| - BUGFIX: Do not store and calculate ETA values for finished/paused torrents | ||||
| - BUGFIX: Fixed memory leak in GUI | ||||
| rc2->rc3 changelog: | ||||
| - BUGFIX: Fixed a proxy problem causing connections to be rejected by trackers | ||||
| - BUGFIX: Fixed compilation problem on FreeBSD | ||||
							
								
								
									
										114
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -27,6 +27,9 @@ Dependency options: | ||||
|   --disable-libmagick                    Disable use of libmagick | ||||
|   --with-libmagick-inc=[path]             Path to libmagick++ include files | ||||
|   --with-libmagick-lib=[path]             Path to libmagick++ library files | ||||
|   --disable-libzzip                      Disable use of libzzip | ||||
|   --with-libzzip-inc=[path]               Path to libzzip++ include files | ||||
|   --with-libzzip-lib=[path]               Path to libzzip++ library files | ||||
|  | ||||
| EOT | ||||
| } | ||||
| @@ -188,6 +191,21 @@ while [ $# -gt 0 ]; do | ||||
| 			shift | ||||
| 			;; | ||||
|  | ||||
| 		--disable-libzzip) | ||||
| 			QC_DISABLE_libzzip="Y" | ||||
| 			shift | ||||
| 			;; | ||||
|  | ||||
| 		--with-libzzip-inc=*) | ||||
| 			QC_WITH_LIBZZIP_INC=$optarg | ||||
| 			shift | ||||
| 			;; | ||||
|  | ||||
| 		--with-libzzip-lib=*) | ||||
| 			QC_WITH_LIBZZIP_LIB=$optarg | ||||
| 			shift | ||||
| 			;; | ||||
|  | ||||
| 		--verbose) | ||||
| 			QC_VERBOSE="Y" | ||||
| 			shift | ||||
| @@ -218,6 +236,9 @@ echo QC_WITH_LIBCOMMONCPP2_LIB=$QC_WITH_LIBCOMMONCPP2_LIB | ||||
| echo QC_DISABLE_libmagick=$QC_DISABLE_libmagick | ||||
| echo QC_WITH_LIBMAGICK_INC=$QC_WITH_LIBMAGICK_INC | ||||
| echo QC_WITH_LIBMAGICK_LIB=$QC_WITH_LIBMAGICK_LIB | ||||
| echo QC_DISABLE_libzzip=$QC_DISABLE_libzzip | ||||
| echo QC_WITH_LIBZZIP_INC=$QC_WITH_LIBZZIP_INC | ||||
| echo QC_WITH_LIBZZIP_LIB=$QC_WITH_LIBZZIP_LIB | ||||
| echo | ||||
| fi | ||||
|  | ||||
| @@ -319,21 +340,21 @@ fi | ||||
|  | ||||
| gen_files() { | ||||
| cat >$1/modules.cpp <<EOT | ||||
| #line 1 "qt42.qcm" | ||||
| #line 1 "qt4.qcm" | ||||
| /* | ||||
| -----BEGIN QCMOD----- | ||||
| name: Qt >= 4.2 | ||||
| name: Qt >= 4.3 | ||||
| -----END QCMOD----- | ||||
| */ | ||||
| class qc_qt42 : public ConfObj | ||||
| class qc_qt4 : public ConfObj | ||||
| { | ||||
| public: | ||||
| 	qc_qt42(Conf *c) : ConfObj(c) {} | ||||
| 	QString name() const { return "Qt >= 4.2"; } | ||||
| 	QString shortname() const { return "qt42"; } | ||||
| 	qc_qt4(Conf *c) : ConfObj(c) {} | ||||
| 	QString name() const { return "Qt >= 4.3"; } | ||||
| 	QString shortname() const { return "Qt 4.3"; } | ||||
| 	bool exec() | ||||
| 	{ | ||||
| 		return(QT_VERSION >= 0x040200); | ||||
| 		return(QT_VERSION >= 0x040300); | ||||
| 	} | ||||
| }; | ||||
| #line 1 "libtorrent.qcm" | ||||
| @@ -618,11 +639,82 @@ public: | ||||
| 		magickConfig.waitForStarted(); | ||||
| 		magickConfig.waitForFinished(); | ||||
| 		QByteArray result = magickConfig.readAll(); | ||||
| 		result = result.replace("\n", ""); | ||||
| 		conf->addLib(result.data()); | ||||
| 		conf->addDefine("HAVE_MAGICK"); | ||||
| 		return true; | ||||
| 	} | ||||
| }; | ||||
| #line 1 "libzzip.qcm" | ||||
| /* | ||||
| -----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/local/lib/"; | ||||
| 			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; | ||||
| 	} | ||||
| }; | ||||
| #line 1 "python.qcm" | ||||
| /* | ||||
| -----BEGIN QCMOD----- | ||||
| @@ -646,7 +738,7 @@ public: | ||||
|  | ||||
| EOT | ||||
| cat >$1/modules_new.cpp <<EOT | ||||
|     o = new qc_qt42(conf); | ||||
|     o = new qc_qt4(conf); | ||||
|     o->required = true; | ||||
|     o->disabled = false; | ||||
|     o = new qc_libtorrent(conf); | ||||
| @@ -661,6 +753,9 @@ cat >$1/modules_new.cpp <<EOT | ||||
|     o = new qc_libmagick(conf); | ||||
|     o->required = false; | ||||
|     o->disabled = false; | ||||
|     o = new qc_libzzip(conf); | ||||
|     o->required = false; | ||||
|     o->disabled = false; | ||||
|     o = new qc_python(conf); | ||||
|     o->required = true; | ||||
|     o->disabled = false; | ||||
| @@ -1618,6 +1713,9 @@ export QC_WITH_LIBCOMMONCPP2_LIB | ||||
| export QC_DISABLE_libmagick | ||||
| export QC_WITH_LIBMAGICK_INC | ||||
| export QC_WITH_LIBMAGICK_LIB | ||||
| export QC_DISABLE_libzzip | ||||
| export QC_WITH_LIBZZIP_INC | ||||
| export QC_WITH_LIBZZIP_LIB | ||||
| export QC_VERBOSE | ||||
| rm -rf .qconftemp | ||||
| ( | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  <profile>qbittorrent.pro</profile> | ||||
|  <moddir>qcm</moddir> | ||||
|  <datadir/> | ||||
|   <dep type='qt42'> | ||||
|   <dep type='qt4'> | ||||
|     <required/> | ||||
|   </dep> | ||||
|   <dep type='libtorrent'> | ||||
| @@ -16,6 +16,7 @@ | ||||
|     <required/> | ||||
|   </dep> | ||||
|   <dep type='libmagick'/> | ||||
|   <dep type='libzzip'/> | ||||
|   <dep type='python'> | ||||
|     <required/> | ||||
|   </dep> | ||||
|   | ||||
| @@ -69,6 +69,7 @@ public: | ||||
| 		magickConfig.waitForStarted(); | ||||
| 		magickConfig.waitForFinished(); | ||||
| 		QByteArray result = magickConfig.readAll(); | ||||
| 		result = result.replace("\n", ""); | ||||
| 		conf->addLib(result.data()); | ||||
| 		conf->addDefine("HAVE_MAGICK"); | ||||
| 		return true; | ||||
|   | ||||
							
								
								
									
										69
									
								
								qcm/libzzip.qcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,69 @@ | ||||
| /* | ||||
| -----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/local/lib/"; | ||||
| 			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; | ||||
| 	} | ||||
| }; | ||||
							
								
								
									
										16
									
								
								qcm/qt4.qcm
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,16 @@ | ||||
| /* | ||||
| -----BEGIN QCMOD----- | ||||
| name: Qt >= 4.3 | ||||
| -----END QCMOD----- | ||||
| */ | ||||
| class qc_qt4 : public ConfObj | ||||
| { | ||||
| public: | ||||
| 	qc_qt4(Conf *c) : ConfObj(c) {} | ||||
| 	QString name() const { return "Qt >= 4.3"; } | ||||
| 	QString shortname() const { return "Qt 4.3"; } | ||||
| 	bool exec() | ||||
| 	{ | ||||
| 		return(QT_VERSION >= 0x040300); | ||||
| 	} | ||||
| }; | ||||
							
								
								
									
										16
									
								
								qcm/qt42.qcm
									
									
									
									
									
								
							
							
						
						| @@ -1,16 +0,0 @@ | ||||
| /* | ||||
| -----BEGIN QCMOD----- | ||||
| name: Qt >= 4.2 | ||||
| -----END QCMOD----- | ||||
| */ | ||||
| class qc_qt42 : public ConfObj | ||||
| { | ||||
| public: | ||||
| 	qc_qt42(Conf *c) : ConfObj(c) {} | ||||
| 	QString name() const { return "Qt >= 4.2"; } | ||||
| 	QString shortname() const { return "qt42"; } | ||||
| 	bool exec() | ||||
| 	{ | ||||
| 		return(QT_VERSION >= 0x040200); | ||||
| 	} | ||||
| }; | ||||
| @@ -86,7 +86,8 @@ class DLListDelegate: public QItemDelegate { | ||||
|           newopt.textVisible = false; | ||||
|           QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, | ||||
|           painter); | ||||
|           painter->setPen(QColor("Black")); | ||||
|           QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; | ||||
|           painter->setPen(opt.palette.color(cg, QPalette::WindowText)); | ||||
|           painter->drawText(opt.rect, Qt::AlignCenter, newopt.text); | ||||
|           break; | ||||
|         } | ||||
|   | ||||
| @@ -79,7 +79,8 @@ class FinishedListDelegate: public QItemDelegate { | ||||
|           newopt.textVisible = false; | ||||
|           QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, | ||||
|           painter); | ||||
|           painter->setPen(QColor("Black")); | ||||
|           QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; | ||||
|           painter->setPen(opt.palette.color(cg, QPalette::WindowText)); | ||||
|           painter->drawText(opt.rect, Qt::AlignCenter, newopt.text); | ||||
|           break; | ||||
|         } | ||||
|   | ||||
| @@ -122,7 +122,8 @@ void FinishedTorrents::torrentAdded(QString, QTorrentHandle& h, bool) { | ||||
|  | ||||
| // Set the color of a row in data model | ||||
| void FinishedTorrents::setRowColor(int row, QString color){ | ||||
|   for(int i=0; i<finishedListModel->columnCount(); ++i){ | ||||
|   unsigned int nbColumns = finishedListModel->columnCount()-1; | ||||
|   for(unsigned int i=0; i<nbColumns; ++i){ | ||||
|     finishedListModel->setData(finishedListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole); | ||||
|   } | ||||
| } | ||||
| @@ -209,6 +210,10 @@ void FinishedTorrents::updateFinishedList(){ | ||||
|     } | ||||
|     Q_ASSERT(row != -1); | ||||
|     if(h.is_paused()) continue; | ||||
|     if(BTSession->getTorrentsToPauseAfterChecking().indexOf(hash) != -1) { | ||||
|       finishedListModel->setData(finishedListModel->index(row, F_PROGRESS), QVariant((double)h.progress())); | ||||
|       continue; | ||||
|     } | ||||
|     if(h.state() == torrent_status::downloading || (h.state() != torrent_status::checking_files && h.state() != torrent_status::queued_for_checking && h.progress() < 1.)) { | ||||
|       // What are you doing here? go back to download tab! | ||||
|       qDebug("Info: a torrent was moved from finished to download tab"); | ||||
| @@ -218,10 +223,8 @@ void FinishedTorrents::updateFinishedList(){ | ||||
|       continue; | ||||
|     } | ||||
|     if(h.state() == torrent_status::checking_files){ | ||||
|       if(BTSession->getTorrentsToPauseAfterChecking().indexOf(hash) == -1) { | ||||
|       finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(QIcon(QString::fromUtf8(":/Icons/time.png"))), Qt::DecorationRole); | ||||
|       setRowColor(row, QString::fromUtf8("grey")); | ||||
|       } | ||||
|       finishedListModel->setData(finishedListModel->index(row, F_PROGRESS), QVariant((double)h.progress())); | ||||
|       continue; | ||||
|     } | ||||
| @@ -311,7 +314,7 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){ | ||||
|   // Enable/disable pause/start action given the DL state | ||||
|   QModelIndexList selectedIndexes = finishedList->selectionModel()->selectedIndexes(); | ||||
|   QSettings settings("qBittorrent", "qBittorrent"); | ||||
|   QString previewProgram = settings.value("Options/Misc/PreviewProgram", QString()).toString(); | ||||
|   QString previewProgram = settings.value("Preferences/general/MediaPlayer", QString()).toString(); | ||||
|   bool has_pause = false, has_start = false, has_preview = false; | ||||
|   foreach(index, selectedIndexes) { | ||||
|     if(index.column() == F_NAME) { | ||||
|   | ||||
							
								
								
									
										374
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
							
						
						| @@ -64,7 +64,9 @@ class GUI : public QMainWindow, private Ui::MainWindow{ | ||||
|     FinishedTorrents *finishedTorrentTab; | ||||
|     QLabel *connecStatusLblIcon; | ||||
|     bool systrayIntegration; | ||||
|     bool displaySpeedInTitle; | ||||
|     bool force_exit; | ||||
|     unsigned int refreshInterval; | ||||
|     QTimer *refresher; | ||||
|     // Keyboard shortcuts | ||||
|     QShortcut *switchSearchShortcut; | ||||
| @@ -127,10 +129,12 @@ class GUI : public QMainWindow, private Ui::MainWindow{ | ||||
|     void checkConnectionStatus(); | ||||
|     void configureSession(bool deleteOptions); | ||||
|     void processParams(const QStringList& params); | ||||
|     void addTorrent(QString path); | ||||
|     void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker); | ||||
|     void processScannedFiles(const QStringList& params); | ||||
|     void processDownloadedFiles(QString path, QString url); | ||||
|     void downloadFromURLList(const QStringList& urls); | ||||
|     void deleteTorrent(QString hash, QString fileName, bool finished); | ||||
|     void finishedTorrent(QTorrentHandle& h) const; | ||||
|     void torrentChecked(QString hash) const; | ||||
|     void updateLists(); | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								src/Icons/bt_settings.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/configure.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 820 B | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/download.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/file.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 704 B | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 998 B | 
| Before Width: | Height: | Size: 558 B | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/folder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 449 B | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/gear.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 532 B | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.2 KiB | 
| Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 948 B | 
| Before Width: | Height: | Size: 2.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/rss16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 607 B |