You've already forked qBittorrent
							
							
				mirror of
				https://github.com/qbittorrent/qBittorrent
				synced 2025-11-02 08:10:54 +01:00 
			
		
		
		
	Compare commits
	
		
			37 Commits
		
	
	
		
			release-2.
			...
			release-2.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c21f32283e | ||
| 
						 | 
					a33b978564 | ||
| 
						 | 
					f9cf937e20 | ||
| 
						 | 
					7109685913 | ||
| 
						 | 
					bd222ac8bd | ||
| 
						 | 
					b675f4ac58 | ||
| 
						 | 
					9989ec79c9 | ||
| 
						 | 
					20167c2276 | ||
| 
						 | 
					e26a1d5342 | ||
| 
						 | 
					3734e11879 | ||
| 
						 | 
					4632c6fda9 | ||
| 
						 | 
					62ff08b6b5 | ||
| 
						 | 
					f50b62624a | ||
| 
						 | 
					d380eb9958 | ||
| 
						 | 
					a71bdde022 | ||
| 
						 | 
					e8e6894b5c | ||
| 
						 | 
					d92f69fa0f | ||
| 
						 | 
					77d7a1ec49 | ||
| 
						 | 
					d5c174a6f8 | ||
| 
						 | 
					173999e504 | ||
| 
						 | 
					1ed928bc39 | ||
| 
						 | 
					b85d51ba79 | ||
| 
						 | 
					779b53722b | ||
| 
						 | 
					76780c4c46 | ||
| 
						 | 
					da74f24a71 | ||
| 
						 | 
					01c56865db | ||
| 
						 | 
					b541c9fa4c | ||
| 
						 | 
					aac0fbcbe4 | ||
| 
						 | 
					b315551edd | ||
| 
						 | 
					58a885cb87 | ||
| 
						 | 
					d19282285c | ||
| 
						 | 
					e0d8ca39a5 | ||
| 
						 | 
					ec3169c9b0 | ||
| 
						 | 
					7bfd7e9cda | ||
| 
						 | 
					459bb8c51d | ||
| 
						 | 
					9159a9f25d | ||
| 
						 | 
					8ea8f8a9f7 | 
							
								
								
									
										6
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -12,10 +12,6 @@ Code from other projects:
 | 
			
		||||
  copyright: Malte Starostik <malte@kde.org>
 | 
			
		||||
  license: LGPL
 | 
			
		||||
 | 
			
		||||
* files src/search_engine/socks.py
 | 
			
		||||
  copyright: Dan Haim <negativeiq@users.sourceforge.net>
 | 
			
		||||
  license: BSD
 | 
			
		||||
 | 
			
		||||
Images Authors:
 | 
			
		||||
* files: src/Icons/*.png
 | 
			
		||||
  copyright: Gnome Icon Theme
 | 
			
		||||
@@ -61,7 +57,7 @@ Translations authors:
 | 
			
		||||
  copyright:
 | 
			
		||||
  - Brazilian: Nick Marinho (nickmarinho@gmail.com)
 | 
			
		||||
  - 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 (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
 | 
			
		||||
  - Czech: Jirka Vilim (web@tets.cz)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										121
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								Changelog
									
									
									
									
									
								
							@@ -1,124 +1,3 @@
 | 
			
		||||
* Thu Mar 4 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.6
 | 
			
		||||
    - BUGFIX: Fix Web UI authentication with Konqueror
 | 
			
		||||
    - BUGFIX: Fix save path display in properties
 | 
			
		||||
    - BUGFIX: Fix ratio calculation for directly seeded torrents (Thanks phorane)
 | 
			
		||||
    - BUGFIX: Fix memory leak in RSS parser
 | 
			
		||||
    - BUGFIX: Only one log window can be opened at a time
 | 
			
		||||
    - BUGFIX: Command-line parameters are no longer required to be in UTF-8
 | 
			
		||||
 | 
			
		||||
* Web Feb 10 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.5
 | 
			
		||||
    - BUGFIX: Fix actions on selected torrents (non-selected torrents could be affected)
 | 
			
		||||
    - BUGFIX: Only one program preferences dialog is allowed at a time
 | 
			
		||||
    - BUGFIX: Link against boost and ssl to fix issues with gold linker
 | 
			
		||||
    - BUGFIX: Fix memory leak in RSS
 | 
			
		||||
    - BUGFIX: Improved HTTP gzip compression detection in downloader
 | 
			
		||||
    - BUGFIX: Fix possible race condition in search engine
 | 
			
		||||
 | 
			
		||||
* Mon Feb 8 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.4
 | 
			
		||||
    - BUGFIX: Fix file prioritizing in a torrent
 | 
			
		||||
    - BUGFIX: Make sure seeding torrents display a progress of 100%
 | 
			
		||||
    - BUGFIX: Usage display was improved and localized (--help)
 | 
			
		||||
    - BUGFIX: Fix possible crash when deleting a torrent
 | 
			
		||||
    - BUGFIX: Fix possible crash when changing torrents label
 | 
			
		||||
 | 
			
		||||
* Sun Jan 31 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.3
 | 
			
		||||
    - BUGFIX: Fix "Append .!qB extension to complete files" (libtorrent v0.15)
 | 
			
		||||
    - BUGFIX: Make sure bandwidth limiting dialogs are centered on screen
 | 
			
		||||
    - BUGFIX: Added support for HTTP redirection
 | 
			
		||||
    - BUGFIX: Fix compilation error when geoip database is embedded
 | 
			
		||||
    - BUGFIX: Fix crash when double-clicking on a torrent that has no metadata to open its save path
 | 
			
		||||
    - BUGFIX: Fix Scan directory preferences in Web UI
 | 
			
		||||
    - BUGFIX: Clear torrent error state when resuming it
 | 
			
		||||
 | 
			
		||||
* Sun Jan 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.2
 | 
			
		||||
    - FEATURE: Added back file prioritizing in a torrent
 | 
			
		||||
    - BUGFIX: Fix issue causing torrents not to be displayed in the list
 | 
			
		||||
    - BUGFIX: Make sure invalid torrent are removed from the transfer list
 | 
			
		||||
    - BUGFIX: Fix overwrite check when renaming a folder in a torrent
 | 
			
		||||
    - BUGFIX: Force a recheck after renaming files to avoid overwriting
 | 
			
		||||
    - BUGFIX: Improve "Open destination folder" behavior
 | 
			
		||||
    - BUGFIX: Fix race condition in RSS that could cause a crash on startup
 | 
			
		||||
    - BUGFIX: Improved user friendlyness of size units
 | 
			
		||||
    - BUGFIX: Optimized transfer list repainting
 | 
			
		||||
    - COSMETIC: Improved transfer speed display in peers list
 | 
			
		||||
 | 
			
		||||
* Wed Jan 20 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.1
 | 
			
		||||
    - BUGFIX: Fix compilation with Qt4.4
 | 
			
		||||
    - BUGFIX: Save torrent metadata so that it does not have to be re-downloaded on restart (Magnet links)
 | 
			
		||||
    - BUGFIX: Fix folder renaming in a torrent (would rename children under certain conditions)
 | 
			
		||||
    - BUGFIX: Nox version no longer requires libQtXml
 | 
			
		||||
    - BUGFIX: Configure file now checks for pkg-config executable which is required
 | 
			
		||||
    - BUGFIX: Torrents added from magnet links were not remembered on restart
 | 
			
		||||
    - BUGFIX: "Add in pause" setting can be ignored from torrent addition dialog
 | 
			
		||||
    - BUGFIX: Fix renaming of files with unicode characters in their name
 | 
			
		||||
    - BUGFIX: Fix typo in legal notice (startup)
 | 
			
		||||
    - BUGFIX: Can listen on ports < 1024 (must be root)
 | 
			
		||||
    - BUGFIX: Paused torrents can now be rechecked
 | 
			
		||||
    - BUGFIX: Fix "open torrent destination" feature when path contains spaces
 | 
			
		||||
    - I18N: Updated translations (Hungarian, Chinese, Russian)
 | 
			
		||||
 | 
			
		||||
* Mon Jan 18 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.1.0
 | 
			
		||||
    - FEATURE: Graphical User Interface can be disabled at compilation time (headless running)
 | 
			
		||||
    - FEATURE: Torrents can be labeled/categorized
 | 
			
		||||
    - FEATURE: Labeled torrent can be downloaded corresponding subfolders
 | 
			
		||||
    - FEATURE: Disk cache size can be set from preferences
 | 
			
		||||
    - FEATURE: Peer Exchange (PeX) can be disabled from preferences
 | 
			
		||||
    - FEATURE: Append !.qB extension to incomplete files option (libtorrent >= v0.15 only)
 | 
			
		||||
    - FEATURE: Torrent files/folders can be renamed (torrent addition dialog or files properties)
 | 
			
		||||
    - FEATURE: uTorrent compatible tracker list support (use torrentz.com url as a default)
 | 
			
		||||
    - FEATURE: Better proxy support and preferences remodeling
 | 
			
		||||
    - FEATURE: qBittorrent can identify itself as uTorrent, Vuze or KTorrent (Any stable version)
 | 
			
		||||
    - FEATURE: Torrents can be renamed in transfer list
 | 
			
		||||
    - FEATURE: Display torrent addition dialog for magnet links too
 | 
			
		||||
    - FEATURE: Files contained in a torrent are opened on double click (files panel)
 | 
			
		||||
    - FEATURE: Added support for magnet links in search engine
 | 
			
		||||
    - FEATURE: Added vertor.com and torrentdownloads.net search plugins
 | 
			
		||||
    - FEATURE: Search engine can now use a SOCKS5 proxy
 | 
			
		||||
    - FEATURE: HTTP proxy support for peer communication
 | 
			
		||||
    - BUGFIX: Search engine loads new proxy settings without program restart
 | 
			
		||||
    - BUGFIX: Use XDG folders (.cache, .local) instead of .qbittorrent
 | 
			
		||||
    - BUGFIX: Added legal notice on startup that the user must accept
 | 
			
		||||
    - BUGFIX: Protect Web UI authentication against brute forcing
 | 
			
		||||
    - BUGFIX: Use HTTP digest mode for Web UI authentication (instead of Basic)
 | 
			
		||||
    - BUGFIX: Properly display torrents with one file in subfolder(s)
 | 
			
		||||
    - BUGFIX: Display Web UI favicon
 | 
			
		||||
    - BUGFIX: File priority can be set for finished torrents that have filtered files
 | 
			
		||||
    - COSMETIC: Use checkboxes to filter torrent content instead of comboboxes
 | 
			
		||||
    - COSMETIC: Use alternating row colors in transfer list (set in program preferences)
 | 
			
		||||
    - COSMETIC: Added a spin box to speed limiting dialog for manual input
 | 
			
		||||
 | 
			
		||||
* Mon Jan 11 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.0.7
 | 
			
		||||
    - BUGFIX: Fix 'Add in pause' setting in torrent addition dialog
 | 
			
		||||
    - BUGFIX: Update RSS feed as soon as feed downloader is enabled
 | 
			
		||||
    - BUGFIX: RSS Feed downloader ignores articles above maximum number of articles
 | 
			
		||||
    - BUGFIX: Fix possible bug when deleting a RSS folder
 | 
			
		||||
    - BUGFIX: Remove persistant data when a RSS feed is deleted
 | 
			
		||||
    - BUGFIX: RSS filters are now alphabetically sorted
 | 
			
		||||
    - BUGFIX: Fix crash when renaming currently displayed RSS filter
 | 
			
		||||
    - BUGFIX: Remove overwriting confirmation when exporting RSS filters since Qt takes care of it
 | 
			
		||||
 | 
			
		||||
* Tue Jan 5 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.0.6
 | 
			
		||||
    - BUGFIX: Fix detection of invalid torrent files
 | 
			
		||||
    - BUGFIX: Stop catching signals once one has been caught to avoid possible infinite loop
 | 
			
		||||
    - BUGFIX: Force data recheck whenever a torrent is moved
 | 
			
		||||
    - BUGFIX: Detect existing torrent data even if incomplete torrents are saved to a different folder
 | 
			
		||||
    - COSMETIC: Improve torrent deletion confirmation dialog so that the text that not get truncated
 | 
			
		||||
 | 
			
		||||
* Thu Dec 31 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.5
 | 
			
		||||
    - BUGFIX: Fix crash with downloaded/availability bars when the torrent has too many pieces
 | 
			
		||||
 | 
			
		||||
* Wed Dec 30 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.4
 | 
			
		||||
    - BUGFIX: Fix PeerGuardian .p2b binary filter support
 | 
			
		||||
    - BUGFIX: Fix possible crash when closing a search engine tab
 | 
			
		||||
    - BUGFIX: Make sure service port does not change
 | 
			
		||||
    - BUGFIX: Fix possible DHT port saving issue
 | 
			
		||||
    - BUGFIX: Fix communication between qBittorrent and Web UI (Qt 4.6)
 | 
			
		||||
    - BUGFIX: Use Wildcard matching instead of full regex in RSS feed downloader
 | 
			
		||||
    - BUGFIX: Fix code for listening on a random port whenever it failed to listen on the one defined
 | 
			
		||||
    - BUGFIX: Use global maximum transfer rates as maximum values in per-torrent speed limiting dialogs
 | 
			
		||||
    - BUGFIX: Fix global download rate limiting from Web UI
 | 
			
		||||
    - COSMETIC: Display a disconnected icon in status bar whenever qBittorrent failed to listen on the port defined
 | 
			
		||||
 | 
			
		||||
* Wed Dec 23 2009 - Christophe Dumez <chris@qbittorrent.org> - v2.0.3
 | 
			
		||||
    - BUGFIX: Minor cosmetic fix to program preferences
 | 
			
		||||
    - BUGFIX: Fix "Temp path" button in program preferences
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								INSTALL
									
									
									
									
									
								
							@@ -1,55 +1,32 @@
 | 
			
		||||
qBittorrent - A BitTorrent client in C++ / Qt4
 | 
			
		||||
------------------------------------------
 | 
			
		||||
 | 
			
		||||
1) Compile and install qBittorrent with Qt4 Graphical Interface
 | 
			
		||||
./configure
 | 
			
		||||
make && make install
 | 
			
		||||
qbittorrent
 | 
			
		||||
 | 
			
		||||
  $ ./configure
 | 
			
		||||
  $ make && make install
 | 
			
		||||
  $ qbittorrent
 | 
			
		||||
will install and execute qBittorrent hopefully without any problems.
 | 
			
		||||
 | 
			
		||||
  will install and execute qBittorrent hopefully without any problems.
 | 
			
		||||
Dependencies:
 | 
			
		||||
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
 | 
			
		||||
 | 
			
		||||
  Dependencies:
 | 
			
		||||
    - Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
 | 
			
		||||
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.0 REQUIRED, >= v0.15.0 ADVISED)
 | 
			
		||||
    -> http://www.qbittorrent.org/download.php (advised)
 | 
			
		||||
    -> http://www.libtorrent.net
 | 
			
		||||
    Be careful: another library (the one used by rTorrent) uses a similar name.
 | 
			
		||||
 | 
			
		||||
    - pkg-config executable
 | 
			
		||||
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
 | 
			
		||||
 | 
			
		||||
    - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, >= v0.15.0 ADVISED)
 | 
			
		||||
        -> http://www.libtorrent.net
 | 
			
		||||
        Be careful: another library (the one used by rTorrent) uses a similar name.
 | 
			
		||||
- python >= 2.3 (needed by search engine)
 | 
			
		||||
  * Run time only dependency
 | 
			
		||||
 | 
			
		||||
    - libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
 | 
			
		||||
 | 
			
		||||
    - 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
 | 
			
		||||
        Be careful: another library (the one used by rTorrent) uses a similar name.
 | 
			
		||||
 | 
			
		||||
    - libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
 | 
			
		||||
- 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
 | 
			
		||||
 | 
			
		||||
DOCUMENTATION:
 | 
			
		||||
Please note that there is a documentation with a "compiling howto" at http://wiki.qbittorrent.org.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -18,8 +18,6 @@ Main options:
 | 
			
		||||
  --help              This help text.
 | 
			
		||||
 | 
			
		||||
Dependency options:
 | 
			
		||||
  --disable-gui                      Disable qBittorrent Graphical user
 | 
			
		||||
                                    interface for headless running
 | 
			
		||||
  --with-libboost-inc=[path]         Path to libboost include files
 | 
			
		||||
  --disable-libnotify               Disable use of libnotify
 | 
			
		||||
  --disable-geoip-database          Disable use of geoip-database
 | 
			
		||||
@@ -142,11 +140,6 @@ while [ $# -gt 0 ]; do
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--disable-gui)
 | 
			
		||||
			QC_DISABLE_GUI="Y"
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--with-libboost-inc=*)
 | 
			
		||||
			QC_WITH_LIBBOOST_INC=$optarg
 | 
			
		||||
			shift
 | 
			
		||||
@@ -188,7 +181,6 @@ echo PREFIX=$PREFIX
 | 
			
		||||
echo BINDIR=$BINDIR
 | 
			
		||||
echo DATADIR=$DATADIR
 | 
			
		||||
echo EX_QTDIR=$EX_QTDIR
 | 
			
		||||
echo QC_DISABLE_GUI=$QC_DISABLE_GUI
 | 
			
		||||
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
 | 
			
		||||
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
 | 
			
		||||
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
 | 
			
		||||
@@ -298,7 +290,6 @@ cat >$1/modules.cpp <<EOT
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: Qt >= 4.4
 | 
			
		||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
class qc_qt4 : public ConfObj
 | 
			
		||||
@@ -309,9 +300,6 @@ public:
 | 
			
		||||
	QString shortname() const { return "Qt 4.4"; }
 | 
			
		||||
	bool exec()
 | 
			
		||||
	{
 | 
			
		||||
		if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
			conf->addDefine("DISABLE_GUI");
 | 
			
		||||
		}	
 | 
			
		||||
		if(QT_VERSION >= 0x040500) {
 | 
			
		||||
                        conf->addDefine("QT_4_5");
 | 
			
		||||
                }
 | 
			
		||||
@@ -319,23 +307,6 @@ public:
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
#line 1 "pkg-config.qcm"
 | 
			
		||||
/*
 | 
			
		||||
-----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();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
#line 1 "libtorrent-rasterbar.qcm"
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
@@ -347,11 +318,11 @@ class qc_libtorrent_rasterbar : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	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.15.0 advised)"; }
 | 
			
		||||
	QString shortname() const { return "libtorrent-rasterbar"; }
 | 
			
		||||
	bool exec(){
 | 
			
		||||
		QStringList incs;
 | 
			
		||||
		QString req_ver = "0.14.4";
 | 
			
		||||
		QString req_ver = "0.14.0";
 | 
			
		||||
		QString adv_ver = "0.15.0";
 | 
			
		||||
		QString version, libs, other;
 | 
			
		||||
		VersionMode mode = VersionMin;
 | 
			
		||||
@@ -359,18 +330,12 @@ public:
 | 
			
		||||
			return false;
 | 
			
		||||
		for(int n = 0; n < incs.count(); ++n)
 | 
			
		||||
			conf->addIncludePath(incs[n]);
 | 
			
		||||
		//if(!libs.isEmpty())
 | 
			
		||||
		//	conf->addLib(libs);
 | 
			
		||||
		if(!libs.isEmpty())
 | 
			
		||||
			conf->addLib(libs);
 | 
			
		||||
		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
 | 
			
		||||
                        printf("\nWarning: libtorrent-rasterbar v%s was detected. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
 | 
			
		||||
                        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());
 | 
			
		||||
		else
 | 
			
		||||
			conf->addDefine("LIBTORRENT_0_15");
 | 
			
		||||
		// Get linking parameters
 | 
			
		||||
		QStringList params;
 | 
			
		||||
		QByteArray staticlibs;
 | 
			
		||||
		params << "--static" << "--libs" << "libtorrent-rasterbar";
 | 
			
		||||
		conf->doCommand("pkg-config", params, &staticlibs);
 | 
			
		||||
		conf->addLib(staticlibs.trimmed());
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
@@ -444,15 +409,7 @@ 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;
 | 
			
		||||
@@ -495,15 +452,7 @@ 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
 | 
			
		||||
@@ -525,9 +474,6 @@ cat >$1/modules_new.cpp <<EOT
 | 
			
		||||
    o = new qc_qt4(conf);
 | 
			
		||||
    o->required = true;
 | 
			
		||||
    o->disabled = false;
 | 
			
		||||
    o = new qc_pkg_config(conf);
 | 
			
		||||
    o->required = true;
 | 
			
		||||
    o->disabled = false;
 | 
			
		||||
    o = new qc_libtorrent_rasterbar(conf);
 | 
			
		||||
    o->required = true;
 | 
			
		||||
    o->disabled = false;
 | 
			
		||||
@@ -1485,7 +1431,6 @@ export PREFIX
 | 
			
		||||
export BINDIR
 | 
			
		||||
export DATADIR
 | 
			
		||||
export EX_QTDIR
 | 
			
		||||
export QC_DISABLE_GUI
 | 
			
		||||
export QC_WITH_LIBBOOST_INC
 | 
			
		||||
export QC_DISABLE_libnotify
 | 
			
		||||
export QC_DISABLE_geoip_database
 | 
			
		||||
 
 | 
			
		||||
@@ -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,14 +1,14 @@
 | 
			
		||||
.\" 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" "1" "January 16th 2010" "Bittorrent client written in C++ / Qt4" ""
 | 
			
		||||
.TH "QBITTORRENT" "1" "September 30th 2009" "Bittorrent client written in C++ / Qt4" ""
 | 
			
		||||
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
qBittorrent \- a Bittorrent client written in C++ / Qt4
 | 
			
		||||
 | 
			
		||||
.SH "SYNOPSIS"
 | 
			
		||||
 | 
			
		||||
\fBqbittorrent\fR [\-\-no-splash] [\-\-webui-port=x] [TORRENT_FILE | URL]...
 | 
			
		||||
\fBqbittorrent\fR [\-\-no-splash] [TORRENT_FILE | URL]...
 | 
			
		||||
 | 
			
		||||
\fBqbittorrent\fR \-\-help
 | 
			
		||||
 | 
			
		||||
@@ -18,9 +18,10 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4
 | 
			
		||||
.SH "DESCRIPTION"
 | 
			
		||||
 | 
			
		||||
\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.
 | 
			
		||||
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).
 | 
			
		||||
 | 
			
		||||
.SH "OPTIONS"
 | 
			
		||||
@@ -31,8 +32,6 @@ FAST extension (mainline) and PeX support (utorrent compatible).
 | 
			
		||||
 | 
			
		||||
\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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,6 @@
 | 
			
		||||
TEMPLATE = subdirs
 | 
			
		||||
 | 
			
		||||
include(conf.pri)
 | 
			
		||||
 | 
			
		||||
SUBDIRS += src
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,6 @@
 | 
			
		||||
  <dep type='qt4'>
 | 
			
		||||
    <required/>
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='pkg-config'>
 | 
			
		||||
    <required/>
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='libtorrent-rasterbar'>
 | 
			
		||||
    <required/>
 | 
			
		||||
  </dep>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,15 +11,7 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -10,15 +10,7 @@ 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;
 | 
			
		||||
 
 | 
			
		||||
@@ -8,11 +8,11 @@ class qc_libtorrent_rasterbar : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	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.15.0 advised)"; }
 | 
			
		||||
	QString shortname() const { return "libtorrent-rasterbar"; }
 | 
			
		||||
	bool exec(){
 | 
			
		||||
		QStringList incs;
 | 
			
		||||
		QString req_ver = "0.14.4";
 | 
			
		||||
		QString req_ver = "0.14.0";
 | 
			
		||||
		QString adv_ver = "0.15.0";
 | 
			
		||||
		QString version, libs, other;
 | 
			
		||||
		VersionMode mode = VersionMin;
 | 
			
		||||
@@ -20,18 +20,12 @@ public:
 | 
			
		||||
			return false;
 | 
			
		||||
		for(int n = 0; n < incs.count(); ++n)
 | 
			
		||||
			conf->addIncludePath(incs[n]);
 | 
			
		||||
		//if(!libs.isEmpty())
 | 
			
		||||
		//	conf->addLib(libs);
 | 
			
		||||
		if(!libs.isEmpty())
 | 
			
		||||
			conf->addLib(libs);
 | 
			
		||||
		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
 | 
			
		||||
                        printf("\nWarning: libtorrent-rasterbar v%s was detected. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
 | 
			
		||||
                        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());
 | 
			
		||||
		else
 | 
			
		||||
			conf->addDefine("LIBTORRENT_0_15");
 | 
			
		||||
		// Get linking parameters
 | 
			
		||||
		QStringList params;
 | 
			
		||||
		QByteArray staticlibs;
 | 
			
		||||
		params << "--static" << "--libs" << "libtorrent-rasterbar";
 | 
			
		||||
		conf->doCommand("pkg-config", params, &staticlibs);
 | 
			
		||||
		conf->addLib(staticlibs.trimmed());
 | 
			
		||||
		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();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: Qt >= 4.4
 | 
			
		||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
class qc_qt4 : public ConfObj
 | 
			
		||||
@@ -12,9 +11,6 @@ public:
 | 
			
		||||
	QString shortname() const { return "Qt 4.4"; }
 | 
			
		||||
	bool exec()
 | 
			
		||||
	{
 | 
			
		||||
		if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
			conf->addDefine("DISABLE_GUI");
 | 
			
		||||
		}	
 | 
			
		||||
		if(QT_VERSION >= 0x040500) {
 | 
			
		||||
                        conf->addDefine("QT_4_5");
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								src/GUI.cpp
									
									
									
									
									
								
							@@ -35,6 +35,7 @@
 | 
			
		||||
 | 
			
		||||
#include <QFileDialog>
 | 
			
		||||
#include <QMessageBox>
 | 
			
		||||
#include <QDesktopWidget>
 | 
			
		||||
#include <QTimer>
 | 
			
		||||
#include <QDesktopServices>
 | 
			
		||||
#include <QStatusBar>
 | 
			
		||||
@@ -59,8 +60,6 @@
 | 
			
		||||
#include "speedlimitdlg.h"
 | 
			
		||||
#include "preferences.h"
 | 
			
		||||
#include "console_imp.h"
 | 
			
		||||
#include "trackerlist.h"
 | 
			
		||||
#include "peerlistwidget.h"
 | 
			
		||||
#include "torrentpersistentdata.h"
 | 
			
		||||
#include "transferlistfilterswidget.h"
 | 
			
		||||
#include "propertieswidget.h"
 | 
			
		||||
@@ -79,7 +78,6 @@ using namespace libtorrent;
 | 
			
		||||
// Constructor
 | 
			
		||||
GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), displaySpeedInTitle(false), force_exit(false) {
 | 
			
		||||
  setupUi(this);
 | 
			
		||||
 | 
			
		||||
  setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION)));
 | 
			
		||||
  // Setting icons
 | 
			
		||||
  this->setWindowIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent32.png")));
 | 
			
		||||
@@ -187,15 +185,6 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
 | 
			
		||||
  readSettings();
 | 
			
		||||
  properties->readSettings();
 | 
			
		||||
 | 
			
		||||
  // Limit status filters list height
 | 
			
		||||
  int cur_height = 80;
 | 
			
		||||
  do {
 | 
			
		||||
    transferListFilters->getStatusFilters()->setFixedHeight(cur_height);
 | 
			
		||||
    cur_height += 10;
 | 
			
		||||
    transferListFilters->getStatusFilters()->scrollToBottom();
 | 
			
		||||
  }while(transferListFilters->getStatusFilters()->verticalScrollBar()->sliderPosition() > 0);
 | 
			
		||||
  transferListFilters->getStatusFilters()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 | 
			
		||||
 | 
			
		||||
  if(Preferences::startMinimized()) {
 | 
			
		||||
    setWindowState(Qt::WindowMinimized);
 | 
			
		||||
  }
 | 
			
		||||
@@ -217,10 +206,7 @@ GUI::~GUI() {
 | 
			
		||||
  delete status_bar;
 | 
			
		||||
  delete transferList;
 | 
			
		||||
  delete guiUpdater;
 | 
			
		||||
  if (console)
 | 
			
		||||
    delete console;
 | 
			
		||||
  if(options)
 | 
			
		||||
    delete options;
 | 
			
		||||
 | 
			
		||||
  if(rssWidget)
 | 
			
		||||
    delete rssWidget;
 | 
			
		||||
  delete searchEngine;
 | 
			
		||||
@@ -358,7 +344,7 @@ void GUI::readSettings() {
 | 
			
		||||
  QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
 | 
			
		||||
  settings.beginGroup(QString::fromUtf8("MainWindow"));
 | 
			
		||||
  resize(settings.value(QString::fromUtf8("size"), size()).toSize());
 | 
			
		||||
  move(settings.value(QString::fromUtf8("pos"), misc::screenCenter(this)).toPoint());
 | 
			
		||||
  move(settings.value(QString::fromUtf8("pos"), screenCenter()).toPoint());
 | 
			
		||||
  QStringList sizes_str = settings.value("vSplitterSizes", QStringList()).toStringList();
 | 
			
		||||
  // Splitter size
 | 
			
		||||
  QList<int> sizes;
 | 
			
		||||
@@ -396,7 +382,7 @@ void GUI::readParamsOnSocket() {
 | 
			
		||||
  if(clientConnection) {
 | 
			
		||||
    QByteArray params = clientConnection->readAll();
 | 
			
		||||
    if(!params.isEmpty()) {
 | 
			
		||||
      processParams(QString::fromLocal8Bit(params.constData()).split("\n"));
 | 
			
		||||
      processParams(QString::fromUtf8(params.data()).split(QString::fromUtf8("\n")));
 | 
			
		||||
      qDebug("Received parameters from another instance");
 | 
			
		||||
    }
 | 
			
		||||
    clientConnection->deleteLater();
 | 
			
		||||
@@ -423,11 +409,7 @@ void GUI::on_actionSet_global_upload_limit_triggered() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GUI::on_actionShow_console_triggered() {
 | 
			
		||||
  if(!console) {
 | 
			
		||||
    console = new consoleDlg(this, BTSession);
 | 
			
		||||
  } else {
 | 
			
		||||
    console->setFocus();
 | 
			
		||||
  }
 | 
			
		||||
  new consoleDlg(this, BTSession);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GUI::on_actionSet_global_download_limit_triggered() {
 | 
			
		||||
@@ -481,6 +463,22 @@ void GUI::toggleVisibility(QSystemTrayIcon::ActivationReason e) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Center window
 | 
			
		||||
QPoint GUI::screenCenter() const{
 | 
			
		||||
  int scrn = 0;
 | 
			
		||||
  QWidget *w = this->topLevelWidget();
 | 
			
		||||
 | 
			
		||||
  if(w)
 | 
			
		||||
    scrn = QApplication::desktop()->screenNumber(w);
 | 
			
		||||
  else if(QApplication::desktop()->isVirtualDesktop())
 | 
			
		||||
    scrn = QApplication::desktop()->screenNumber(QCursor::pos());
 | 
			
		||||
  else
 | 
			
		||||
    scrn = QApplication::desktop()->screenNumber(this);
 | 
			
		||||
 | 
			
		||||
  QRect desk(QApplication::desktop()->availableGeometry(scrn));
 | 
			
		||||
  return QPoint((desk.width() - this->frameGeometry().width()) / 2, (desk.height() - this->frameGeometry().height()) / 2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Display About Dialog
 | 
			
		||||
void GUI::on_actionAbout_triggered() {
 | 
			
		||||
  //About dialog
 | 
			
		||||
@@ -652,12 +650,8 @@ void GUI::processParams(const QStringList& params) {
 | 
			
		||||
      BTSession->downloadFromUrl(param);
 | 
			
		||||
    }else{
 | 
			
		||||
      if(param.startsWith("magnet:", Qt::CaseInsensitive)) {
 | 
			
		||||
        if(useTorrentAdditionDialog) {
 | 
			
		||||
          torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
 | 
			
		||||
          dialog->showLoadMagnetURI(param);
 | 
			
		||||
        } else {
 | 
			
		||||
          BTSession->addMagnetUri(param);
 | 
			
		||||
        }
 | 
			
		||||
        // FIXME: Possibily skipped torrent addition dialog
 | 
			
		||||
        BTSession->addMagnetUri(param);
 | 
			
		||||
      } else {
 | 
			
		||||
        if(useTorrentAdditionDialog) {
 | 
			
		||||
          torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
 | 
			
		||||
@@ -730,10 +724,7 @@ void GUI::loadPreferences(bool configure_session) {
 | 
			
		||||
  }
 | 
			
		||||
  unsigned int new_refreshInterval = Preferences::getRefreshInterval();
 | 
			
		||||
  transferList->setRefreshInterval(new_refreshInterval);
 | 
			
		||||
  transferList->setAlternatingRowColors(Preferences::useAlternatingRowColors());
 | 
			
		||||
  properties->getFilesList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
 | 
			
		||||
  properties->getTrackerList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
 | 
			
		||||
  properties->getPeerList()->setAlternatingRowColors(Preferences::useAlternatingRowColors());
 | 
			
		||||
 | 
			
		||||
  // Queueing System
 | 
			
		||||
  if(Preferences::isQueueingSystemEnabled()) {
 | 
			
		||||
    if(!configure_session || !BTSession->isQueueingEnabled()) {
 | 
			
		||||
@@ -841,16 +832,9 @@ void GUI::showNotificationBaloon(QString title, QString msg) const {
 | 
			
		||||
 *****************************************************/
 | 
			
		||||
 | 
			
		||||
void GUI::downloadFromURLList(const QStringList& url_list) {
 | 
			
		||||
  QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
 | 
			
		||||
  bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool();
 | 
			
		||||
  foreach(const QString url, url_list) {
 | 
			
		||||
    if(url.startsWith("magnet:", Qt::CaseInsensitive)) {
 | 
			
		||||
      if(useTorrentAdditionDialog) {
 | 
			
		||||
        torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession);
 | 
			
		||||
        dialog->showLoadMagnetURI(url);
 | 
			
		||||
      } else {
 | 
			
		||||
        BTSession->addMagnetUri(url);
 | 
			
		||||
      }
 | 
			
		||||
      BTSession->addMagnetUri(url);
 | 
			
		||||
    } else {
 | 
			
		||||
      BTSession->downloadFromUrl(url);
 | 
			
		||||
    }
 | 
			
		||||
@@ -915,13 +899,8 @@ void GUI::createTrayIcon() {
 | 
			
		||||
 | 
			
		||||
// Display Program Options
 | 
			
		||||
void GUI::on_actionOptions_triggered() {
 | 
			
		||||
  if(!options) {
 | 
			
		||||
    options = new options_imp(this);
 | 
			
		||||
    connect(options, SIGNAL(status_changed()), this, SLOT(optionsSaved()));
 | 
			
		||||
  } else {
 | 
			
		||||
    // Get focus
 | 
			
		||||
    options->setFocus();
 | 
			
		||||
  }
 | 
			
		||||
  options = new options_imp(this);
 | 
			
		||||
  connect(options, SIGNAL(status_changed()), this, SLOT(optionsSaved()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*****************************************************
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								src/GUI.h
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								src/GUI.h
									
									
									
									
									
								
							@@ -55,110 +55,108 @@ class TransferListFiltersWidget;
 | 
			
		||||
class QSplitter;
 | 
			
		||||
class PropertiesWidget;
 | 
			
		||||
class StatusBar;
 | 
			
		||||
class consoleDlg;
 | 
			
		||||
 | 
			
		||||
class GUI : public QMainWindow, private Ui::MainWindow{
 | 
			
		||||
  Q_OBJECT
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  // Bittorrent
 | 
			
		||||
  Bittorrent *BTSession;
 | 
			
		||||
  QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
 | 
			
		||||
  // GUI related
 | 
			
		||||
  QTimer *guiUpdater;
 | 
			
		||||
  QTabWidget *tabs;
 | 
			
		||||
  StatusBar *status_bar;
 | 
			
		||||
  QPointer<options_imp> options;
 | 
			
		||||
  QPointer<consoleDlg> console;
 | 
			
		||||
  QPointer<QSystemTrayIcon> systrayIcon;
 | 
			
		||||
  QPointer<QTimer> systrayCreator;
 | 
			
		||||
  QMenu *myTrayIconMenu;
 | 
			
		||||
  TransferListWidget *transferList;
 | 
			
		||||
  TransferListFiltersWidget *transferListFilters;
 | 
			
		||||
  PropertiesWidget *properties;
 | 
			
		||||
  bool displaySpeedInTitle;
 | 
			
		||||
  bool force_exit;
 | 
			
		||||
  // Keyboard shortcuts
 | 
			
		||||
  QShortcut *switchSearchShortcut;
 | 
			
		||||
  QShortcut *switchSearchShortcut2;
 | 
			
		||||
  QShortcut *switchTransferShortcut;
 | 
			
		||||
  QShortcut *switchRSSShortcut;
 | 
			
		||||
  // Widgets
 | 
			
		||||
  QAction *prioSeparator;
 | 
			
		||||
  QAction *prioSeparator2;
 | 
			
		||||
  QSplitter *hSplitter;
 | 
			
		||||
  QSplitter *vSplitter;
 | 
			
		||||
  // Search
 | 
			
		||||
  SearchEngine *searchEngine;
 | 
			
		||||
  // RSS
 | 
			
		||||
  QPointer<RSSImp> rssWidget;
 | 
			
		||||
  // Misc
 | 
			
		||||
  QLocalServer *localServer;
 | 
			
		||||
  private:
 | 
			
		||||
    // Bittorrent
 | 
			
		||||
    Bittorrent *BTSession;
 | 
			
		||||
    QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
 | 
			
		||||
    // GUI related
 | 
			
		||||
    QTimer *guiUpdater;
 | 
			
		||||
    QTabWidget *tabs;
 | 
			
		||||
    StatusBar *status_bar;
 | 
			
		||||
    QPointer<options_imp> options;
 | 
			
		||||
    QPointer<QSystemTrayIcon> systrayIcon;
 | 
			
		||||
    QPointer<QTimer> systrayCreator;
 | 
			
		||||
    QMenu *myTrayIconMenu;
 | 
			
		||||
    TransferListWidget *transferList;
 | 
			
		||||
    TransferListFiltersWidget *transferListFilters;
 | 
			
		||||
    PropertiesWidget *properties;
 | 
			
		||||
    bool displaySpeedInTitle;
 | 
			
		||||
    bool force_exit;
 | 
			
		||||
    // Keyboard shortcuts
 | 
			
		||||
    QShortcut *switchSearchShortcut;
 | 
			
		||||
    QShortcut *switchSearchShortcut2;
 | 
			
		||||
    QShortcut *switchTransferShortcut;
 | 
			
		||||
    QShortcut *switchRSSShortcut;
 | 
			
		||||
    // Widgets
 | 
			
		||||
    QAction *prioSeparator;
 | 
			
		||||
    QAction *prioSeparator2;
 | 
			
		||||
    QSplitter *hSplitter;
 | 
			
		||||
    QSplitter *vSplitter;
 | 
			
		||||
    // Search
 | 
			
		||||
    SearchEngine *searchEngine;
 | 
			
		||||
    // RSS
 | 
			
		||||
    QPointer<RSSImp> rssWidget;
 | 
			
		||||
    // Misc
 | 
			
		||||
    QLocalServer *localServer;
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
  // GUI related slots
 | 
			
		||||
  void dropEvent(QDropEvent *event);
 | 
			
		||||
  void dragEnterEvent(QDragEnterEvent *event);
 | 
			
		||||
  void toggleVisibility(QSystemTrayIcon::ActivationReason e);
 | 
			
		||||
  void on_actionAbout_triggered();
 | 
			
		||||
  void on_actionCreate_torrent_triggered();
 | 
			
		||||
  void on_actionWebsite_triggered() const;
 | 
			
		||||
  void on_actionBugReport_triggered() const;
 | 
			
		||||
  void on_actionShow_console_triggered();
 | 
			
		||||
  void readParamsOnSocket();
 | 
			
		||||
  void acceptConnection();
 | 
			
		||||
  void balloonClicked();
 | 
			
		||||
  void writeSettings();
 | 
			
		||||
  void readSettings();
 | 
			
		||||
  void on_actionExit_triggered();
 | 
			
		||||
  void createTrayIcon();
 | 
			
		||||
  void fullDiskError(QTorrentHandle& h, QString msg) const;
 | 
			
		||||
  void handleDownloadFromUrlFailure(QString, QString) const;
 | 
			
		||||
  void createSystrayDelayed();
 | 
			
		||||
  void tab_changed(int);
 | 
			
		||||
  // Keyboard shortcuts
 | 
			
		||||
  void createKeyboardShortcuts();
 | 
			
		||||
  void displayTransferTab() const;
 | 
			
		||||
  void displaySearchTab() const;
 | 
			
		||||
  void displayRSSTab() const;
 | 
			
		||||
  // Torrent actions
 | 
			
		||||
  void on_actionSet_global_upload_limit_triggered();
 | 
			
		||||
  void on_actionSet_global_download_limit_triggered();
 | 
			
		||||
  void on_actionDocumentation_triggered() const;
 | 
			
		||||
  void on_actionOpen_triggered();
 | 
			
		||||
  void updateGUI();
 | 
			
		||||
  void loadPreferences(bool configure_session=true);
 | 
			
		||||
  void processParams(const QStringList& params);
 | 
			
		||||
  void addTorrent(QString path);
 | 
			
		||||
  void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
 | 
			
		||||
  void processDownloadedFiles(QString path, QString url);
 | 
			
		||||
  void finishedTorrent(QTorrentHandle& h) const;
 | 
			
		||||
  // Options slots
 | 
			
		||||
  void on_actionOptions_triggered();
 | 
			
		||||
  void optionsSaved();
 | 
			
		||||
  // HTTP slots
 | 
			
		||||
  void on_actionDownload_from_URL_triggered();
 | 
			
		||||
  protected slots:
 | 
			
		||||
    // GUI related slots
 | 
			
		||||
    void dropEvent(QDropEvent *event);
 | 
			
		||||
    void dragEnterEvent(QDragEnterEvent *event);
 | 
			
		||||
    void toggleVisibility(QSystemTrayIcon::ActivationReason e);
 | 
			
		||||
    void on_actionAbout_triggered();
 | 
			
		||||
    void on_actionCreate_torrent_triggered();
 | 
			
		||||
    void on_actionWebsite_triggered() const;
 | 
			
		||||
    void on_actionBugReport_triggered() const;
 | 
			
		||||
    void on_actionShow_console_triggered();
 | 
			
		||||
    void readParamsOnSocket();
 | 
			
		||||
    void acceptConnection();
 | 
			
		||||
    void balloonClicked();
 | 
			
		||||
    void writeSettings();
 | 
			
		||||
    void readSettings();
 | 
			
		||||
    void on_actionExit_triggered();
 | 
			
		||||
    void createTrayIcon();
 | 
			
		||||
    void fullDiskError(QTorrentHandle& h, QString msg) const;
 | 
			
		||||
    void handleDownloadFromUrlFailure(QString, QString) const;
 | 
			
		||||
    void createSystrayDelayed();
 | 
			
		||||
    void tab_changed(int);
 | 
			
		||||
    // Keyboard shortcuts
 | 
			
		||||
    void createKeyboardShortcuts();
 | 
			
		||||
    void displayTransferTab() const;
 | 
			
		||||
    void displaySearchTab() const;
 | 
			
		||||
    void displayRSSTab() const;
 | 
			
		||||
    // Torrent actions
 | 
			
		||||
    void on_actionSet_global_upload_limit_triggered();
 | 
			
		||||
    void on_actionSet_global_download_limit_triggered();
 | 
			
		||||
    void on_actionDocumentation_triggered() const;
 | 
			
		||||
    void on_actionOpen_triggered();
 | 
			
		||||
    void updateGUI();
 | 
			
		||||
    void loadPreferences(bool configure_session=true);
 | 
			
		||||
    void processParams(const QStringList& params);
 | 
			
		||||
    void addTorrent(QString path);
 | 
			
		||||
    void addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker);
 | 
			
		||||
    void processDownloadedFiles(QString path, QString url);
 | 
			
		||||
    void downloadFromURLList(const QStringList& urls);
 | 
			
		||||
    void finishedTorrent(QTorrentHandle& h) const;
 | 
			
		||||
    // Options slots
 | 
			
		||||
    void on_actionOptions_triggered();
 | 
			
		||||
    void optionsSaved();
 | 
			
		||||
    // HTTP slots
 | 
			
		||||
    void on_actionDownload_from_URL_triggered();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
  void trackerAuthenticationRequired(QTorrentHandle& h);
 | 
			
		||||
  void setTabText(int index, QString text) const;
 | 
			
		||||
  void showNotificationBaloon(QString title, QString msg) const;
 | 
			
		||||
  void downloadFromURLList(const QStringList& urls);
 | 
			
		||||
  public slots:
 | 
			
		||||
    void trackerAuthenticationRequired(QTorrentHandle& h);
 | 
			
		||||
    void setTabText(int index, QString text) const;
 | 
			
		||||
    void showNotificationBaloon(QString title, QString msg) const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  void closeEvent(QCloseEvent *);
 | 
			
		||||
  void showEvent(QShowEvent *);
 | 
			
		||||
  bool event(QEvent * event);
 | 
			
		||||
  void displayRSSTab(bool enable);
 | 
			
		||||
  protected:
 | 
			
		||||
    void closeEvent(QCloseEvent *);
 | 
			
		||||
    void showEvent(QShowEvent *);
 | 
			
		||||
    bool event(QEvent * event);
 | 
			
		||||
    void displayRSSTab(bool enable);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  // Construct / Destruct
 | 
			
		||||
  GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
 | 
			
		||||
  ~GUI();
 | 
			
		||||
  // Methods
 | 
			
		||||
  int getCurrentTabIndex() const;
 | 
			
		||||
  TransferListWidget* getTransferList() const { return transferList; }
 | 
			
		||||
  public:
 | 
			
		||||
    // Construct / Destruct
 | 
			
		||||
    GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
 | 
			
		||||
    ~GUI();
 | 
			
		||||
    // Methods
 | 
			
		||||
    int getCurrentTabIndex() const;
 | 
			
		||||
    QPoint screenCenter() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 409 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 722 B  | 
@@ -1,6 +1,6 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Categories=Qt;Network;P2P;
 | 
			
		||||
Comment=V2.1.6
 | 
			
		||||
Comment=V2.0.3
 | 
			
		||||
Exec=qbittorrent %f
 | 
			
		||||
GenericName=Bittorrent client
 | 
			
		||||
GenericName[bg]=Торент клиент
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB  | 
@@ -64,7 +64,7 @@ class about : public QDialog, private Ui::AboutDlg{
 | 
			
		||||
      te_translation->append(QString::fromUtf8(
 | 
			
		||||
          "<i>- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
 | 
			
		||||
          - <u>Bulgarian:</u> Tsvetan & Boiko Bankov (emerge_life@users.sourceforge.net)<br>\
 | 
			
		||||
          - <u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)<br>\
 | 
			
		||||
          - <u>Catalan:</u> Gekko Dam Beer (gekko04@users.sourceforge.net)<br>\
 | 
			
		||||
          - <u>Chinese (Simplified):</u> Guo Yue (yue.guo0418@gmail.com)<br>\
 | 
			
		||||
          - <u>Chinese (Traditional):</u> Yi-Shun Wang (dnextstep@gmail.com)<br>\
 | 
			
		||||
          - <u>Czech:</u> Jirka Vilim (web@tets.cz)<br>\
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2092
									
								
								src/bittorrent.cpp
									
									
									
									
									
								
							
							
						
						
									
										2092
									
								
								src/bittorrent.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -34,12 +34,8 @@
 | 
			
		||||
#include <QMap>
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
#ifdef DISABLE_GUI
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#else
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QPalette>
 | 
			
		||||
#endif
 | 
			
		||||
#include <QPointer>
 | 
			
		||||
 | 
			
		||||
#include <libtorrent/session.hpp>
 | 
			
		||||
@@ -94,7 +90,6 @@ private:
 | 
			
		||||
  QPointer<QTimer> timerAlerts;
 | 
			
		||||
  QMap<QUrl, QString> savepath_fromurl;
 | 
			
		||||
  QHash<QString, QHash<QString, TrackerInfos> > trackersInfos;
 | 
			
		||||
  QStringList torrentsToPausedAfterChecking;
 | 
			
		||||
  // Ratio
 | 
			
		||||
  QPointer<QTimer> BigRatioTimer;
 | 
			
		||||
  // HTTP
 | 
			
		||||
@@ -112,20 +107,12 @@ private:
 | 
			
		||||
  bool NATPMPEnabled;
 | 
			
		||||
  bool LSDEnabled;
 | 
			
		||||
  bool DHTEnabled;
 | 
			
		||||
  int current_dht_port;
 | 
			
		||||
  bool PeXEnabled;
 | 
			
		||||
  bool queueingEnabled;
 | 
			
		||||
  bool appendLabelToSavePath;
 | 
			
		||||
#ifdef LIBTORRENT_0_15
 | 
			
		||||
  bool appendqBExtension;
 | 
			
		||||
#endif
 | 
			
		||||
  QString defaultSavePath;
 | 
			
		||||
  QString defaultTempPath;
 | 
			
		||||
  // GeoIP
 | 
			
		||||
#ifndef DISABLE_GUI
 | 
			
		||||
  bool resolve_countries;
 | 
			
		||||
  bool geoipDBLoaded;
 | 
			
		||||
#endif
 | 
			
		||||
  // ETA Computation
 | 
			
		||||
  QPointer<QTimer> timerETA;
 | 
			
		||||
  QHash<QString, QList<int> > ETA_samples;
 | 
			
		||||
@@ -181,7 +168,6 @@ public slots:
 | 
			
		||||
  void deleteTorrent(QString hash, bool delete_local_files = false);
 | 
			
		||||
  void startUpTorrents();
 | 
			
		||||
  session_proxy asyncDeletion();
 | 
			
		||||
  void recheckTorrent(QString hash);
 | 
			
		||||
  /* Needed by Web UI */
 | 
			
		||||
  void pauseAllTorrents();
 | 
			
		||||
  void pauseTorrent(QString hash);
 | 
			
		||||
@@ -208,18 +194,10 @@ public slots:
 | 
			
		||||
  void setGlobalRatio(float ratio);
 | 
			
		||||
  void setDeleteRatio(float ratio);
 | 
			
		||||
  void setDHTPort(int dht_port);
 | 
			
		||||
  void setPeerProxySettings(proxy_settings proxySettings);
 | 
			
		||||
  void setHTTPProxySettings(proxy_settings proxySettings);
 | 
			
		||||
  void setProxySettings(proxy_settings proxySettings, bool trackers=true, bool peers=true, bool web_seeds=true, bool dht=true);
 | 
			
		||||
  void setSessionSettings(session_settings sessionSettings);
 | 
			
		||||
  void startTorrentsInPause(bool b);
 | 
			
		||||
  void setDefaultTempPath(QString temppath);
 | 
			
		||||
  void setAppendLabelToSavePath(bool append);
 | 
			
		||||
  void appendLabelToTorrentSavePath(QTorrentHandle h);
 | 
			
		||||
  void changeLabelInTorrentSavePath(QTorrentHandle h, QString old_label, QString new_label);
 | 
			
		||||
#ifdef LIBTORRENT_0_15
 | 
			
		||||
  void appendqBextensionToTorrent(QTorrentHandle h, bool append);
 | 
			
		||||
  void setAppendqBExtension(bool append);
 | 
			
		||||
#endif
 | 
			
		||||
  void applyEncryptionSettings(pe_settings se);
 | 
			
		||||
  void setDownloadLimit(QString hash, long val);
 | 
			
		||||
  void setUploadLimit(QString hash, long val);
 | 
			
		||||
@@ -227,11 +205,7 @@ public slots:
 | 
			
		||||
  void enableNATPMP(bool b);
 | 
			
		||||
  void enableLSD(bool b);
 | 
			
		||||
  bool enableDHT(bool b);
 | 
			
		||||
#ifdef DISABLE_GUI
 | 
			
		||||
  void addConsoleMessage(QString msg, QString color=QString::null);
 | 
			
		||||
#else
 | 
			
		||||
  void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText));
 | 
			
		||||
#endif
 | 
			
		||||
  void addPeerBanMessage(QString msg, bool from_ipfilter);
 | 
			
		||||
  void processDownloadedFile(QString, QString);
 | 
			
		||||
  void addMagnetSkipAddDlg(QString uri);
 | 
			
		||||
@@ -259,8 +233,6 @@ signals:
 | 
			
		||||
  void downloadFromUrlFailure(QString url, QString reason);
 | 
			
		||||
  void torrentFinishedChecking(QTorrentHandle& h);
 | 
			
		||||
  void metadataReceived(QTorrentHandle &h);
 | 
			
		||||
  void savePathChanged(QTorrentHandle &h);
 | 
			
		||||
  void newConsoleMessage(QString msg);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,6 @@
 | 
			
		||||
 | 
			
		||||
#include <QDialog>
 | 
			
		||||
#include "ui_confirmdeletiondlg.h"
 | 
			
		||||
#include "misc.h"
 | 
			
		||||
 | 
			
		||||
class DeletionConfirmationDlg : public QDialog, private Ui::confirmDeletionDlg {
 | 
			
		||||
  Q_OBJECT
 | 
			
		||||
@@ -41,7 +40,6 @@ class DeletionConfirmationDlg : public QDialog, private Ui::confirmDeletionDlg {
 | 
			
		||||
  public:
 | 
			
		||||
  DeletionConfirmationDlg(QWidget *parent=0): QDialog(parent) {
 | 
			
		||||
    setupUi(this);
 | 
			
		||||
    move(misc::screenCenter(this));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool shouldDeleteLocalFiles() const {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,6 @@
 | 
			
		||||
#include <QList>
 | 
			
		||||
#include <QPixmap>
 | 
			
		||||
#include <libtorrent/bitfield.hpp>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
using namespace libtorrent;
 | 
			
		||||
#define BAR_HEIGHT 18
 | 
			
		||||
@@ -56,46 +55,19 @@ public:
 | 
			
		||||
  void setProgress(bitfield pieces) {
 | 
			
		||||
    if(pieces.empty()) {
 | 
			
		||||
      // Empty bar
 | 
			
		||||
      QPixmap pix = QPixmap(1, 1);
 | 
			
		||||
      pix.fill();
 | 
			
		||||
      pixmap = pix;
 | 
			
		||||
      pixmap = QPixmap(1, 1);
 | 
			
		||||
      QPainter painter(&pixmap);
 | 
			
		||||
      painter.setPen(Qt::white);
 | 
			
		||||
      painter.drawPoint(0,0);
 | 
			
		||||
    } else {
 | 
			
		||||
      int nb_pieces = pieces.size();
 | 
			
		||||
      // Reduce the number of pieces before creating the pixmap
 | 
			
		||||
      // otherwise it can crash when there are too many pieces
 | 
			
		||||
      if(nb_pieces > width()) {
 | 
			
		||||
        int ratio = floor(nb_pieces/(double)width());
 | 
			
		||||
        QVector<bool> scaled_pieces;
 | 
			
		||||
        for(int i=0; i<nb_pieces; i+= ratio) {
 | 
			
		||||
          bool have = true;
 | 
			
		||||
          for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
 | 
			
		||||
            if(!pieces[i]) { have = false; break; }
 | 
			
		||||
          }
 | 
			
		||||
          scaled_pieces << have;
 | 
			
		||||
        }
 | 
			
		||||
        QPixmap pix = QPixmap(scaled_pieces.size(), 1);
 | 
			
		||||
        pix.fill();
 | 
			
		||||
        QPainter painter(&pix);
 | 
			
		||||
        for(int i=0; i<scaled_pieces.size(); ++i) {
 | 
			
		||||
          if(scaled_pieces[i])
 | 
			
		||||
            painter.setPen(Qt::blue);
 | 
			
		||||
          else
 | 
			
		||||
            painter.setPen(Qt::white);
 | 
			
		||||
          painter.drawPoint(i,0);
 | 
			
		||||
        }
 | 
			
		||||
        pixmap = pix;
 | 
			
		||||
      } else {
 | 
			
		||||
        QPixmap pix = QPixmap(pieces.size(), 1);
 | 
			
		||||
        pix.fill();
 | 
			
		||||
        QPainter painter(&pix);
 | 
			
		||||
        for(uint i=0; i<pieces.size(); ++i) {
 | 
			
		||||
          if(pieces[i])
 | 
			
		||||
            painter.setPen(Qt::blue);
 | 
			
		||||
          else
 | 
			
		||||
            painter.setPen(Qt::white);
 | 
			
		||||
          painter.drawPoint(i,0);
 | 
			
		||||
        }
 | 
			
		||||
        pixmap = pix;
 | 
			
		||||
      pixmap = QPixmap(pieces.size(), 1);
 | 
			
		||||
      QPainter painter(&pixmap);
 | 
			
		||||
      for(uint i=0; i<pieces.size(); ++i) {
 | 
			
		||||
        if(pieces[i])
 | 
			
		||||
          painter.setPen(Qt::blue);
 | 
			
		||||
        else
 | 
			
		||||
          painter.setPen(Qt::white);
 | 
			
		||||
        painter.drawPoint(i,0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    update();
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,6 @@
 | 
			
		||||
#include <QNetworkRequest>
 | 
			
		||||
#include <QNetworkProxy>
 | 
			
		||||
 | 
			
		||||
enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4, SOCKS4=5};
 | 
			
		||||
 | 
			
		||||
/** Download Thread **/
 | 
			
		||||
 | 
			
		||||
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
 | 
			
		||||
@@ -56,18 +54,6 @@ void downloadThread::processDlFinished(QNetworkReply* reply) {
 | 
			
		||||
    // Failure
 | 
			
		||||
    emit downloadFailure(url, errorCodeToString(reply->error()));
 | 
			
		||||
  } else {
 | 
			
		||||
    QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
 | 
			
		||||
    if(redirection.isValid()) {
 | 
			
		||||
      // We should redirect
 | 
			
		||||
      qDebug("Redirecting from %s to %s", url.toLocal8Bit().data(), redirection.toUrl().toString().toLocal8Bit().data());
 | 
			
		||||
      redirect_mapping.insert(redirection.toUrl().toString(), url);
 | 
			
		||||
      downloadUrl(redirection.toUrl().toString());
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    // Checking if it was redirecting, restoring initial URL
 | 
			
		||||
    if(redirect_mapping.contains(url)) {
 | 
			
		||||
      url = redirect_mapping.take(url);
 | 
			
		||||
    }
 | 
			
		||||
    // Success
 | 
			
		||||
    QString filePath;
 | 
			
		||||
    QTemporaryFile tmpfile;
 | 
			
		||||
@@ -103,7 +89,6 @@ void downloadThread::downloadUrl(QString url){
 | 
			
		||||
  // Spoof Firefox 3.5 user agent to avoid
 | 
			
		||||
  // Web server banning
 | 
			
		||||
  request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5");
 | 
			
		||||
  request.setRawHeader("Accept-Encoding", "");
 | 
			
		||||
  qDebug("Downloading %s...", request.url().toString().toLocal8Bit().data());
 | 
			
		||||
  networkManager->get(request);
 | 
			
		||||
}
 | 
			
		||||
@@ -120,7 +105,7 @@ void downloadThread::applyProxySettings() {
 | 
			
		||||
    qDebug("Using proxy: %s", (IP+QString(":")+port).toLocal8Bit().data());
 | 
			
		||||
    proxy.setPort(port.toUShort());
 | 
			
		||||
    // Default proxy type is HTTP, we must change if it is SOCKS5
 | 
			
		||||
    if(intValue == SOCKS5 || intValue == SOCKS5_PW) {
 | 
			
		||||
    if(intValue%2==0) {
 | 
			
		||||
      qDebug("Proxy is SOCKS5, not HTTP");
 | 
			
		||||
      proxy.setType(QNetworkProxy::Socks5Proxy);
 | 
			
		||||
    } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,6 @@
 | 
			
		||||
 | 
			
		||||
#include <QNetworkReply>
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QHash>
 | 
			
		||||
 | 
			
		||||
class QNetworkAccessManager;
 | 
			
		||||
 | 
			
		||||
@@ -42,7 +41,6 @@ class downloadThread : public QObject {
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  QNetworkAccessManager *networkManager;
 | 
			
		||||
  QHash<QString, QString> redirect_mapping;
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
  void downloadFinished(QString url, QString file_path);
 | 
			
		||||
 
 | 
			
		||||
@@ -170,7 +170,7 @@ void engineSelectDlg::on_actionUninstall_triggered() {
 | 
			
		||||
    }else {
 | 
			
		||||
      // Proceed with uninstall
 | 
			
		||||
      // remove it from hard drive
 | 
			
		||||
      QDir enginesFolder(misc::searchEngineLocation()+QDir::separator()+"engines");
 | 
			
		||||
      QDir enginesFolder(misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines");
 | 
			
		||||
      QStringList filters;
 | 
			
		||||
      filters << id+".*";
 | 
			
		||||
      QStringList files = enginesFolder.entryList(filters, QDir::Files, QDir::Unsorted);
 | 
			
		||||
@@ -245,7 +245,7 @@ QTreeWidgetItem* engineSelectDlg::findItemWithID(QString id){
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool engineSelectDlg::isUpdateNeeded(QString plugin_name, float new_version) const {
 | 
			
		||||
  float old_version = SearchEngine::getPluginVersion(misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py");
 | 
			
		||||
  float old_version = SearchEngine::getPluginVersion(misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py");
 | 
			
		||||
  qDebug("IsUpdate needed? tobeinstalled: %.2f, alreadyinstalled: %.2f", new_version, old_version);
 | 
			
		||||
  return (new_version > old_version);
 | 
			
		||||
}
 | 
			
		||||
@@ -260,7 +260,7 @@ void engineSelectDlg::installPlugin(QString path, QString plugin_name) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  // Process with install
 | 
			
		||||
  QString dest_path = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py";
 | 
			
		||||
  QString dest_path = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+plugin_name+".py";
 | 
			
		||||
  bool update = false;
 | 
			
		||||
  if(QFile::exists(dest_path)) {
 | 
			
		||||
    // Backup in case install fails
 | 
			
		||||
@@ -324,12 +324,12 @@ void engineSelectDlg::addNewEngine(QString engine_name) {
 | 
			
		||||
    setRowColor(pluginsTree->indexOfTopLevelItem(item), "red");
 | 
			
		||||
  }
 | 
			
		||||
  // Handle icon
 | 
			
		||||
  QString iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".png";
 | 
			
		||||
  QString iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".png";
 | 
			
		||||
  if(QFile::exists(iconPath)) {
 | 
			
		||||
    // Good, we already have the icon
 | 
			
		||||
    item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
 | 
			
		||||
  } else {
 | 
			
		||||
    iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".ico";
 | 
			
		||||
    iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+engine->getName()+".ico";
 | 
			
		||||
    if(QFile::exists(iconPath)) { // ICO support
 | 
			
		||||
      item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -427,9 +427,9 @@ void engineSelectDlg::processDownloadedFile(QString url, QString filePath) {
 | 
			
		||||
        QFile icon(filePath);
 | 
			
		||||
        icon.open(QIODevice::ReadOnly);
 | 
			
		||||
        if(ICOHandler::canRead(&icon))
 | 
			
		||||
          iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+id+".ico";
 | 
			
		||||
          iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+id+".ico";
 | 
			
		||||
        else
 | 
			
		||||
          iconPath = misc::searchEngineLocation()+QDir::separator()+"engines"+QDir::separator()+id+".png";
 | 
			
		||||
          iconPath = misc::qBittorrentPath()+"search_engine"+QDir::separator()+"engines"+QDir::separator()+id+".png";
 | 
			
		||||
        QFile::copy(filePath, iconPath);
 | 
			
		||||
        item->setData(ENGINE_NAME, Qt::DecorationRole, QVariant(QIcon(iconPath)));
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,12 +33,12 @@
 | 
			
		||||
#include "bittorrent.h"
 | 
			
		||||
#include "misc.h"
 | 
			
		||||
#include "preferences.h"
 | 
			
		||||
//#include "proplistdelegate.h"
 | 
			
		||||
#include "proplistdelegate.h"
 | 
			
		||||
#include "torrentpersistentdata.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
EventManager::EventManager(QObject *parent, Bittorrent *BTSession)
 | 
			
		||||
  : QObject(parent), BTSession(BTSession)
 | 
			
		||||
    : QObject(parent), BTSession(BTSession)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -103,9 +103,13 @@ QList<QVariantMap> EventManager::getPropFilesInfo(QString hash) const {
 | 
			
		||||
  int i=0;
 | 
			
		||||
  for(fi=t.begin_files(); fi != t.end_files(); fi++) {
 | 
			
		||||
    QVariantMap file;
 | 
			
		||||
    QString path = QDir::cleanPath(misc::toQString(fi->path.string()));
 | 
			
		||||
    QString name = path.split('/').last();
 | 
			
		||||
    file["name"] = name;
 | 
			
		||||
    if(h.num_files() == 1) {
 | 
			
		||||
      file["name"] = h.name();
 | 
			
		||||
    } else {
 | 
			
		||||
      QString path = QDir::cleanPath(misc::toQString(fi->path.string()));
 | 
			
		||||
      QString name = path.split('/').last();
 | 
			
		||||
      file["name"] = name;
 | 
			
		||||
    }
 | 
			
		||||
    file["size"] = misc::friendlyUnit((double)fi->size);
 | 
			
		||||
    if(fi->size > 0)
 | 
			
		||||
      file["progress"] = fp[i]/(double)fi->size;
 | 
			
		||||
@@ -118,162 +122,14 @@ QList<QVariantMap> EventManager::getPropFilesInfo(QString hash) const {
 | 
			
		||||
  return files;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EventManager::setGlobalPreferences(QVariantMap m) const {
 | 
			
		||||
  // UI
 | 
			
		||||
  if(m.contains("locale"))
 | 
			
		||||
    Preferences::setLocale(m["locale"].toString());
 | 
			
		||||
  // Downloads
 | 
			
		||||
  if(m.contains("save_path"))
 | 
			
		||||
    Preferences::setSavePath(m["save_path"].toString());
 | 
			
		||||
  if(m.contains("temp_path_enabled"))
 | 
			
		||||
    Preferences::setTempPathEnabled(m["temp_path_enabled"].toBool());
 | 
			
		||||
  if(m.contains("temp_path"))
 | 
			
		||||
    Preferences::setTempPath(m["temp_path"].toString());
 | 
			
		||||
  if(m.contains("scan_dir"))
 | 
			
		||||
    Preferences::setScanDir(m["scan_dir"].toString());
 | 
			
		||||
  if(m.contains("preallocate_all"))
 | 
			
		||||
    Preferences::preAllocateAllFiles(m["preallocate_all"].toBool());
 | 
			
		||||
  if(m.contains("queueing_enabled"))
 | 
			
		||||
    Preferences::setQueueingSystemEnabled(m["queueing_enabled"].toBool());
 | 
			
		||||
  if(m.contains("max_active_downloads"))
 | 
			
		||||
    Preferences::setMaxActiveDownloads(m["max_active_downloads"].toInt());
 | 
			
		||||
  if(m.contains("max_active_torrents"))
 | 
			
		||||
    Preferences::setMaxActiveTorrents(m["max_active_torrents"].toInt());
 | 
			
		||||
  if(m.contains("max_active_uploads"))
 | 
			
		||||
    Preferences::setMaxActiveUploads(m["max_active_uploads"].toInt());
 | 
			
		||||
#ifdef LIBTORRENT_0_15
 | 
			
		||||
  if(m.contains("incomplete_files_ext"))
 | 
			
		||||
    Preferences::useIncompleteFilesExtension(m["incomplete_files_ext"].toBool());
 | 
			
		||||
#endif
 | 
			
		||||
  // Connection
 | 
			
		||||
  if(m.contains("listen_port"))
 | 
			
		||||
    Preferences::setSessionPort(m["listen_port"].toInt());
 | 
			
		||||
  if(m.contains("upnp"))
 | 
			
		||||
    Preferences::setUPnPEnabled(m["upnp"].toBool());
 | 
			
		||||
  if(m.contains("natpmp"))
 | 
			
		||||
    Preferences::setNATPMPEnabled(m["natpmp"].toBool());
 | 
			
		||||
  if(m.contains("dl_limit"))
 | 
			
		||||
    Preferences::setGlobalDownloadLimit(m["dl_limit"].toInt());
 | 
			
		||||
  if(m.contains("up_limit"))
 | 
			
		||||
    Preferences::setGlobalUploadLimit(m["up_limit"].toInt());
 | 
			
		||||
  if(m.contains("max_connec"))
 | 
			
		||||
    Preferences::setMaxConnecs(m["max_connec"].toInt());
 | 
			
		||||
  if(m.contains("max_connec_per_torrent"))
 | 
			
		||||
    Preferences::setMaxConnecsPerTorrent(m["max_connec_per_torrent"].toInt());
 | 
			
		||||
  if(m.contains("max_uploads_per_torrent"))
 | 
			
		||||
    Preferences::setMaxUploadsPerTorrent(m["max_uploads_per_torrent"].toInt());
 | 
			
		||||
  // Bittorrent
 | 
			
		||||
  if(m.contains("dht"))
 | 
			
		||||
    Preferences::setDHTEnabled(m["dht"].toBool());
 | 
			
		||||
  if(m.contains("pex"))
 | 
			
		||||
    Preferences::setPeXEnabled(m["pex"].toBool());
 | 
			
		||||
  qDebug("Pex support: %d", (int)m["pex"].toBool());
 | 
			
		||||
  if(m.contains("lsd"))
 | 
			
		||||
    Preferences::setLSDEnabled(m["lsd"].toBool());
 | 
			
		||||
  if(m.contains("encryption"))
 | 
			
		||||
    Preferences::setEncryptionSetting(m["encryption"].toInt());
 | 
			
		||||
  if(m.contains("peer_id"))
 | 
			
		||||
    Preferences::setPeerID(m["peer_id"].toString());
 | 
			
		||||
  if(m.contains("peer_version"))
 | 
			
		||||
    Preferences::setClientVersion(m["peer_version"].toString());
 | 
			
		||||
  if(m.contains("peer_build"))
 | 
			
		||||
    Preferences::setClientBuild(m["peer_build"].toString());
 | 
			
		||||
  // Proxy
 | 
			
		||||
  if(m.contains("proxy_type"))
 | 
			
		||||
    Preferences::setPeerProxyType(m["proxy_type"].toInt());
 | 
			
		||||
  if(m.contains("proxy_ip"))
 | 
			
		||||
    Preferences::setPeerProxyIp(m["proxy_ip"].toString());
 | 
			
		||||
  if(m.contains("proxy_port"))
 | 
			
		||||
    Preferences::setPeerProxyPort(m["proxy_port"].toUInt());
 | 
			
		||||
  if(m.contains("proxy_auth_enabled"))
 | 
			
		||||
    Preferences::setPeerProxyAuthEnabled(m["proxy_auth_enabled"].toBool());
 | 
			
		||||
  if(m.contains("proxy_username"))
 | 
			
		||||
    Preferences::setPeerProxyUsername(m["proxy_username"].toString());
 | 
			
		||||
  if(m.contains("proxy_password"))
 | 
			
		||||
    Preferences::setPeerProxyPassword(m["proxy_password"].toString());
 | 
			
		||||
  if(m.contains("http_proxy_type"))
 | 
			
		||||
    Preferences::setHTTPProxyType(m["http_proxy_type"].toInt());
 | 
			
		||||
  if(m.contains("http_proxy_ip"))
 | 
			
		||||
    Preferences::setHTTPProxyIp(m["http_proxy_ip"].toString());
 | 
			
		||||
  if(m.contains("http_proxy_port"))
 | 
			
		||||
    Preferences::setHTTPProxyPort(m["http_proxy_port"].toUInt());
 | 
			
		||||
  if(m.contains("http_proxy_auth_enabled"))
 | 
			
		||||
    Preferences::setHTTPProxyAuthEnabled(m["http_proxy_auth_enabled"].toBool());
 | 
			
		||||
  if(m.contains("http_proxy_username"))
 | 
			
		||||
    Preferences::setHTTPProxyUsername(m["http_proxy_username"].toString());
 | 
			
		||||
  if(m.contains("http_proxy_password"))
 | 
			
		||||
    Preferences::setHTTPProxyPassword(m["http_proxy_password"].toString());
 | 
			
		||||
  // IP Filter
 | 
			
		||||
  if(m.contains("ip_filter_enabled"))
 | 
			
		||||
    Preferences::setFilteringEnabled(m["ip_filter_enabled"].toBool());
 | 
			
		||||
  if(m.contains("ip_filter_path"))
 | 
			
		||||
    Preferences::setFilter(m["ip_filter_path"].toString());
 | 
			
		||||
  // Web UI
 | 
			
		||||
  if(m.contains("web_ui_port"))
 | 
			
		||||
    Preferences::setWebUiPort(m["web_ui_port"].toUInt());
 | 
			
		||||
  if(m.contains("web_ui_username"))
 | 
			
		||||
    Preferences::setWebUiUsername(m["web_ui_username"].toString());
 | 
			
		||||
  if(m.contains("web_ui_password"))
 | 
			
		||||
    Preferences::setWebUiPassword(m["web_ui_password"].toString());
 | 
			
		||||
  // Reload preferences
 | 
			
		||||
  BTSession->configureSession();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QVariantMap EventManager::getGlobalPreferences() const {
 | 
			
		||||
  QVariantMap data;
 | 
			
		||||
  // UI
 | 
			
		||||
  data["locale"] = Preferences::getLocale();
 | 
			
		||||
  // Downloads
 | 
			
		||||
  data["save_path"] = Preferences::getSavePath();
 | 
			
		||||
  data["temp_path_enabled"] = Preferences::isTempPathEnabled();
 | 
			
		||||
  data["temp_path"] = Preferences::getTempPath();
 | 
			
		||||
  data["scan_dir_enabled"] = Preferences::isDirScanEnabled();
 | 
			
		||||
  data["scan_dir"] = Preferences::getScanDir();
 | 
			
		||||
  data["preallocate_all"] = Preferences::preAllocateAllFiles();
 | 
			
		||||
  data["queueing_enabled"] = Preferences::isQueueingSystemEnabled();
 | 
			
		||||
  data["max_active_downloads"] = Preferences::getMaxActiveDownloads();
 | 
			
		||||
  data["max_active_torrents"] = Preferences::getMaxActiveTorrents();
 | 
			
		||||
  data["max_active_uploads"] = Preferences::getMaxActiveUploads();
 | 
			
		||||
#ifdef LIBTORRENT_0_15
 | 
			
		||||
  data["incomplete_files_ext"] = Preferences::useIncompleteFilesExtension();
 | 
			
		||||
#endif
 | 
			
		||||
  // Connection
 | 
			
		||||
  data["listen_port"] = Preferences::getSessionPort();
 | 
			
		||||
  data["upnp"] = Preferences::isUPnPEnabled();
 | 
			
		||||
  data["natpmp"] = Preferences::isNATPMPEnabled();
 | 
			
		||||
  data["dl_limit"] = Preferences::getGlobalDownloadLimit();
 | 
			
		||||
  data["up_limit"] = Preferences::getGlobalUploadLimit();
 | 
			
		||||
  data["dht"] = Preferences::isDHTEnabled();
 | 
			
		||||
  data["max_connec"] = Preferences::getMaxConnecs();
 | 
			
		||||
  data["max_connec_per_torrent"] = Preferences::getMaxConnecsPerTorrent();
 | 
			
		||||
  data["max_uploads_per_torrent"] = Preferences::getMaxUploadsPerTorrent();
 | 
			
		||||
  // Bittorrent
 | 
			
		||||
  data["dht"] = Preferences::isDHTEnabled();
 | 
			
		||||
  data["pex"] = Preferences::isPeXEnabled();
 | 
			
		||||
  data["lsd"] = Preferences::isLSDEnabled();
 | 
			
		||||
  data["encryption"] = Preferences::getEncryptionSetting();
 | 
			
		||||
  data["peer_id"] = Preferences::getPeerID();
 | 
			
		||||
  data["peer_version"] = Preferences::getClientVersion();
 | 
			
		||||
  data["peer_build"] = Preferences::getClientBuild();
 | 
			
		||||
  // Proxy
 | 
			
		||||
  data["proxy_type"] = Preferences::getPeerProxyType();
 | 
			
		||||
  data["proxy_ip"] = Preferences::getPeerProxyIp();
 | 
			
		||||
  data["proxy_port"] = Preferences::getPeerProxyPort();
 | 
			
		||||
  data["proxy_auth_enabled"] = Preferences::isPeerProxyAuthEnabled();
 | 
			
		||||
  data["proxy_username"] = Preferences::getPeerProxyUsername();
 | 
			
		||||
  data["proxy_password"] = Preferences::getPeerProxyPassword();
 | 
			
		||||
  data["http_proxy_type"] = Preferences::getHTTPProxyType();
 | 
			
		||||
  data["http_proxy_ip"] = Preferences::getHTTPProxyIp();
 | 
			
		||||
  data["http_proxy_port"] = Preferences::getHTTPProxyPort();
 | 
			
		||||
  data["http_proxy_auth_enabled"] = Preferences::isHTTPProxyAuthEnabled();
 | 
			
		||||
  data["http_proxy_username"] = Preferences::getHTTPProxyUsername();
 | 
			
		||||
  data["http_proxy_password"] = Preferences::getHTTPProxyPassword();
 | 
			
		||||
  // IP Filter
 | 
			
		||||
  data["ip_filter_enabled"] = Preferences::isFilteringEnabled();
 | 
			
		||||
  data["ip_filter_path"] = Preferences::getFilter();
 | 
			
		||||
  // Web UI
 | 
			
		||||
  data["web_ui_port"] = Preferences::getWebUiPort();
 | 
			
		||||
  data["web_ui_username"] = Preferences::getWebUiUsername();
 | 
			
		||||
  data["web_ui_password"] = Preferences::getWebUiPassword();
 | 
			
		||||
  return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -282,9 +138,7 @@ QVariantMap EventManager::getPropGeneralInfo(QString hash) const {
 | 
			
		||||
  QTorrentHandle h = BTSession->getTorrentHandle(hash);
 | 
			
		||||
  if(h.is_valid() && h.has_metadata()) {
 | 
			
		||||
    // Save path
 | 
			
		||||
    QString p = TorrentPersistentData::getSavePath(hash);
 | 
			
		||||
    if(p.isEmpty()) p = h.save_path();
 | 
			
		||||
    data["save_path"] = p;
 | 
			
		||||
    data["save_path"] = TorrentPersistentData::getSavePath(hash);
 | 
			
		||||
    // Creation date
 | 
			
		||||
    data["creation_date"] = h.creation_date();
 | 
			
		||||
    // Comment
 | 
			
		||||
@@ -308,10 +162,10 @@ QVariantMap EventManager::getPropGeneralInfo(QString hash) const {
 | 
			
		||||
    data["nb_connections"] = QString::number(h.num_connections())+" ("+tr("%1 max", "e.g. 10 max").arg(QString::number(h.connections_limit()))+")";
 | 
			
		||||
    // Update ratio info
 | 
			
		||||
    double ratio = BTSession->getRealRatio(h.hash());
 | 
			
		||||
    if(ratio > 100.)
 | 
			
		||||
      data["share_ratio"] = QString::fromUtf8("∞");
 | 
			
		||||
    else
 | 
			
		||||
      data["share_ratio"] = QString(QByteArray::number(ratio, 'f', 1));
 | 
			
		||||
      if(ratio > 100.)
 | 
			
		||||
        data["share_ratio"] = QString::fromUtf8("∞");
 | 
			
		||||
      else
 | 
			
		||||
        data["share_ratio"] = QString(QByteArray::number(ratio, 'f', 1));
 | 
			
		||||
  }
 | 
			
		||||
  return data;
 | 
			
		||||
}
 | 
			
		||||
@@ -379,7 +233,7 @@ void EventManager::modifiedTorrent(QTorrentHandle h)
 | 
			
		||||
  }
 | 
			
		||||
  event["name"] = QVariant(h.name());
 | 
			
		||||
  event["size"] = QVariant(misc::friendlyUnit(h.actual_size()));
 | 
			
		||||
  event["progress"] = QVariant((double)h.progress());
 | 
			
		||||
  event["progress"] = QVariant(h.progress());
 | 
			
		||||
  event["dlspeed"] = QVariant(tr("%1/s", "e.g. 120 KiB/s").arg(misc::friendlyUnit(h.download_payload_rate())));
 | 
			
		||||
  if(BTSession->isQueueingEnabled()) {
 | 
			
		||||
    if(h.queue_position() >= 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,6 @@ class EventManager : public QObject
 | 
			
		||||
                QList<QVariantMap> getPropTrackersInfo(QString hash) const;
 | 
			
		||||
                QList<QVariantMap> getPropFilesInfo(QString hash) const;
 | 
			
		||||
                QVariantMap getGlobalPreferences() const;
 | 
			
		||||
                void setGlobalPreferences(QVariantMap m) const;
 | 
			
		||||
 | 
			
		||||
	public slots:
 | 
			
		||||
		void addedTorrent(QTorrentHandle& h);
 | 
			
		||||
 
 | 
			
		||||
@@ -47,16 +47,10 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void itemAboutToBeRemoved(QTreeWidgetItem *item) {
 | 
			
		||||
  void itemRemoved(QTreeWidgetItem *item) {
 | 
			
		||||
    RssFile* file = mapping.take(item);
 | 
			
		||||
    if(file->getType() == RssFile::STREAM) {
 | 
			
		||||
    if(file->getType() == RssFile::STREAM)
 | 
			
		||||
      feeds_items.remove(file->getID());
 | 
			
		||||
    } else {
 | 
			
		||||
      QList<RssStream*> feeds = ((RssFolder*)file)->getAllFeeds();
 | 
			
		||||
      foreach(RssStream* feed, feeds) {
 | 
			
		||||
        feeds_items.remove(feed->getID());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool hasFeed(QString url) const {
 | 
			
		||||
@@ -154,9 +148,7 @@ signals:
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
  void updateCurrentFeed(QTreeWidgetItem* new_item) {
 | 
			
		||||
    if(!new_item) return;
 | 
			
		||||
    if(!mapping.contains(new_item)) return;
 | 
			
		||||
    if((getItemType(new_item) == RssFile::STREAM) || new_item == unread_item)
 | 
			
		||||
    if((new_item && getItemType(new_item) == RssFile::STREAM) || new_item == unread_item)
 | 
			
		||||
      current_feed = new_item;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user