Compare commits
	
		
			14 Commits
		
	
	
		
			release-2.
			...
			release-2.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a4f62b4e18 | ||
| 
						 | 
					2f291daefa | ||
| 
						 | 
					722f2aeb5d | ||
| 
						 | 
					d5b9598b5b | ||
| 
						 | 
					cc7d74b67c | ||
| 
						 | 
					e853b0b736 | ||
| 
						 | 
					5e395b24a9 | ||
| 
						 | 
					9c3789f83f | ||
| 
						 | 
					758595dc8c | ||
| 
						 | 
					01f9e989ef | ||
| 
						 | 
					eb9f0cb559 | ||
| 
						 | 
					2592948182 | ||
| 
						 | 
					6f6ab1c439 | ||
| 
						 | 
					b10e606dda | 
							
								
								
									
										9
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						@@ -3,19 +3,12 @@ Author:
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
* Stefanos Antaris <santaris@csd.auth.gr>
 | 
			
		||||
* Mohammad Dib <mdib@qbittorrent.org>
 | 
			
		||||
* Mirco Chinelli <infinity89@fastwebmail.it>
 | 
			
		||||
* Ishan Arora <ishan@qbittorrent.org>
 | 
			
		||||
* Arnaud Demaizière <arnaud@qbittorrent.org>
 | 
			
		||||
* Grigis Gaëtan <cipher16@gmail.com>
 | 
			
		||||
* Christian Kandeler <zambesi@users.sourceforge.net>
 | 
			
		||||
* Silvan Scherrer <silvan.scherrer@aroa.ch>
 | 
			
		||||
 | 
			
		||||
Code from other projects:
 | 
			
		||||
* files src/qtsingleapp/* src/lineedit/*
 | 
			
		||||
  copyright: Nokia Corporation
 | 
			
		||||
  license: LGPL
 | 
			
		||||
 | 
			
		||||
* files src/ico.cpp src/ico.h
 | 
			
		||||
  copyright: Malte Starostik <malte@kde.org>
 | 
			
		||||
  license: LGPL
 | 
			
		||||
@@ -67,13 +60,11 @@ Images Authors:
 | 
			
		||||
Translations authors:
 | 
			
		||||
* files: src/lang/*.ts
 | 
			
		||||
  copyright:
 | 
			
		||||
  - Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)
 | 
			
		||||
  - Brazilian: Nick Marinho (nickmarinho@gmail.com)
 | 
			
		||||
  - Bulgarian: Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)
 | 
			
		||||
  - Catalan: Francisco Luque Contreras (frannoe@ya.com)
 | 
			
		||||
  - Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
 | 
			
		||||
  - Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
 | 
			
		||||
  - Croatian: Oliver Mucafir (oliver.untwist@gmail.com)
 | 
			
		||||
  - Czech: Jirka Vilim (web@tets.cz)
 | 
			
		||||
  - Danish: Mathias Nielsen (comoneo@gmail.com)
 | 
			
		||||
  - Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										79
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						@@ -1,71 +1,14 @@
 | 
			
		||||
* Fri Oct 1 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.4
 | 
			
		||||
    - BUGFIX: Clean program exit on system shutdown/logout
 | 
			
		||||
    - BUGFIX: Fix possible search engine plugin update
 | 
			
		||||
 | 
			
		||||
* Tue Sep 28 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.3
 | 
			
		||||
    - BUGFIX: Fix encoding issue in command line parameters processing
 | 
			
		||||
    - BUGFIX: Fix possible crash when changing the save path in addition dialog
 | 
			
		||||
    - BUGFIX: Fix wrong mapping to source model
 | 
			
		||||
 | 
			
		||||
* Sun Sep 26 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.2
 | 
			
		||||
    - BUGFIX: Fix display of torrent content in addition dialog
 | 
			
		||||
    - BUGFIX: Really fix manual editing of save path in torrent addition dialog
 | 
			
		||||
 | 
			
		||||
* Sun Sep 26 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.1
 | 
			
		||||
    - I18N: Updated Arabic translation
 | 
			
		||||
    - I18N: Fixes to German translation
 | 
			
		||||
    - BUGFIX: Save path can now be edited in torrent addition dialog
 | 
			
		||||
    - BUGFIX: Fix save path encoding on non-utf8 systems
 | 
			
		||||
    - BUGFIX: Fix saving to drive root on Windows
 | 
			
		||||
    - BUGFIX: OGV can now be previewed
 | 
			
		||||
    - BUGFIX: Maximum download limit is now 10MB/s
 | 
			
		||||
    - BUGFIX: Fix 'download in scan dir' persistence
 | 
			
		||||
    - BUGFIX: Add .torrent extension only when missing (torrent creator)
 | 
			
		||||
    - BUGFIX: Fix possible issue with temporary download path persistence
 | 
			
		||||
    - BUGFIX: Added support for | (OR) operator in RSS feed downloader
 | 
			
		||||
    - BUGFIX: Fix Web UI for spanish users
 | 
			
		||||
    - BUGFIX: Fix locale switching from Web UI
 | 
			
		||||
    - BUGFIX: Use AND operator for torrentdownloads.net searches
 | 
			
		||||
    - BUGFIX: Limit torrent addition dialog width to fit the screen
 | 
			
		||||
    - COSMETIC: Fix progress bars style on Windows
 | 
			
		||||
 | 
			
		||||
* Tue Aug 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.4.0
 | 
			
		||||
    - FEATURE: Added actions to "Move to top/bottom" of priority queue
 | 
			
		||||
    - FEATURE: Auto-Shutdown on downloads completion
 | 
			
		||||
    - FEATURE: Email notification on download completion
 | 
			
		||||
    - FEATURE: Added button to password-lock the UI
 | 
			
		||||
    - FEATURE: Added label-level Pause/Resume/Delete actions
 | 
			
		||||
    - FEATURE: Torrents can now be filtered by name
 | 
			
		||||
    - FEATURE: Run external program on torrent completion
 | 
			
		||||
    - FEATURE: Detect executable updates in order to advise the user to restart
 | 
			
		||||
 | 
			
		||||
* Tue Jul 27 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.3.0
 | 
			
		||||
    - FEATURE: Simplified torrent root folder renaming/truncating (< v2.3.0 is no longer forward compatible)
 | 
			
		||||
    - FEATURE: Remember previous save paths in torrent addition dialog
 | 
			
		||||
    - FEATURE: Max number of half-open connections can now be edited
 | 
			
		||||
    - FEATURE: Added support for strict super seeding
 | 
			
		||||
    - FEATURE: The user can force listening on a particular network interface
 | 
			
		||||
    - FEATURE: Added cookie support for RSS feeds
 | 
			
		||||
    - FEATURE: User can force tracker reannounce
 | 
			
		||||
    - FEATURE: Added "No action" setting for double-click action
 | 
			
		||||
    - FEATURE: Several torrents can be moved at once
 | 
			
		||||
    - FEATURE: Added error state for torrents (error is displayed in a tooltip)
 | 
			
		||||
    - FEATURE: Added filter for paused/error torrents
 | 
			
		||||
    - FEATURE: Add Check/Uncheck all feature in Web UI
 | 
			
		||||
    - FEATURE: Search engine can now be disabled
 | 
			
		||||
    - FEATURE: Torrents can be automatically paused once they reach a given ratio
 | 
			
		||||
    - FEATURE: Several files can now be disabled at once
 | 
			
		||||
    - FEATURE: Added "Select All/None" buttons to files list
 | 
			
		||||
    - FEATURE: Added support for BitComet links (bc://bt/...)
 | 
			
		||||
    - BUGFIX: Hide seeding torrents files priorities in Web UI
 | 
			
		||||
    - BUGFIX: The user can disable permanently recursive torrent download
 | 
			
		||||
    - BUGFIX: Peer Exchange status is now correctly reported
 | 
			
		||||
    - BUGFIX: Use an INI file instead of the registry on Windows (More reliable)
 | 
			
		||||
    - BUGFIX: Removed client spoofing feature to avoid tracker blacklisting
 | 
			
		||||
    - COSMETIC: Display peers country name in tooltip
 | 
			
		||||
    - COSMETIC: Display number of torrents in transfers tab label
 | 
			
		||||
    - COSMETIC: Simplified program preferences
 | 
			
		||||
    - COSMETIC: Fix naming of actions opening new dialogs (use Name...)
 | 
			
		||||
* Sat Mar 20 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.1
 | 
			
		||||
    - FEATURE: Display pieces that are being downloaded
 | 
			
		||||
    - FEATURE: Added back folder watching in Web UI
 | 
			
		||||
    - FEATURE: Added back file prioritizing in Web UI
 | 
			
		||||
    - BUGFIX: Fix compilation with Qt 4.4
 | 
			
		||||
    - BUGFIX: Fix Web UI compatibility with Safari
 | 
			
		||||
    - BUGFIX: Fix progress display with cleanlook style
 | 
			
		||||
    - BUGFIX: Fix file filtering in complex torrents
 | 
			
		||||
    - BUGFIX: Ask for user confirmation for recursive torrent download
 | 
			
		||||
    - BUGFIX: Fix "add file" dialog in torrent creation tool
 | 
			
		||||
    - BUGFIX: Fix "Ctrl+A" in Web UI
 | 
			
		||||
 | 
			
		||||
* Sun Mar 14 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.0
 | 
			
		||||
    - FEATURE: User can set alternative speed limits for fast toggling
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						@@ -14,13 +14,11 @@ qBittorrent - A BitTorrent client in C++ / Qt4
 | 
			
		||||
 | 
			
		||||
    - pkg-config executable
 | 
			
		||||
 | 
			
		||||
    - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, compatible with v0.15.x)
 | 
			
		||||
    - 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 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
 | 
			
		||||
      or
 | 
			
		||||
    - libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
 | 
			
		||||
    - libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
 | 
			
		||||
 | 
			
		||||
    - python >= 2.3 (needed by search engine)
 | 
			
		||||
        * Run time only dependency
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								README.os2
									
									
									
									
									
								
							
							
						
						@@ -1,62 +0,0 @@
 | 
			
		||||
qBittorrent - A BitTorrent client in Qt4
 | 
			
		||||
------------------------------------------
 | 
			
		||||
 | 
			
		||||
This is the eComStation (OS/2) qBittorrent part of the readme. See also README for more general information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Building qBittorrent
 | 
			
		||||
********************
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
- gcc based build env (recommended gcc v4.4.2 or greater)
 | 
			
		||||
  
 | 
			
		||||
- Qt4 for eCS (OS/2) dev package (see http://svn.netlabs.org/qt4 for more information)
 | 
			
		||||
 | 
			
		||||
- libtorrent-rasterbar for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
			
		||||
 | 
			
		||||
- boost for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
How to build
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
First you need to create the conf.pri file in the same dir as this readme.os2 is.
 | 
			
		||||
the conf.pri file has the following content:
 | 
			
		||||
 | 
			
		||||
##### conf.pri content beginn #####
 | 
			
		||||
PREFIX = .
 | 
			
		||||
BINDIR = ./bin
 | 
			
		||||
INCDIR = ./include
 | 
			
		||||
LIBDIR = ./lib
 | 
			
		||||
DATADIR = ./share
 | 
			
		||||
 | 
			
		||||
CONFIG += staticlib
 | 
			
		||||
INCLUDEPATH += x:/trees/libtorrent/trunk/include
 | 
			
		||||
LIBS += -Lx:/trees/libtorrent/trunk/src/.libs \
 | 
			
		||||
        -Lx:/trees/boost/trunk/stage/lib \
 | 
			
		||||
        -Lx:/trees/openssl \
 | 
			
		||||
	-Lx:/extras/lib
 | 
			
		||||
##### conf.pri content end #####
 | 
			
		||||
 | 
			
		||||
Of course all the above path references have to be adjusted to your build env.
 | 
			
		||||
 | 
			
		||||
It should now be easy to build qBittorrent:
 | 
			
		||||
 | 
			
		||||
Simply type:
 | 
			
		||||
$ qmake
 | 
			
		||||
 | 
			
		||||
Followed by:
 | 
			
		||||
$ make
 | 
			
		||||
 | 
			
		||||
If all works fine you should get a working qbittorrent executable.
 | 
			
		||||
 | 
			
		||||
If you have any question regarding the eCS (OS/2) port of qBittorrent you can meet me (_diver) on IRC:
 | 
			
		||||
#netlabs on irc.freenode.net
 | 
			
		||||
 | 
			
		||||
------------------------------------------
 | 
			
		||||
Silvan Scherrer <silvan.scherrer@aroa.ch>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										162
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -18,24 +18,14 @@ 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
 | 
			
		||||
  --with-libboost-lib=[path]                      Path to libboost library
 | 
			
		||||
                                                 files
 | 
			
		||||
  --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
 | 
			
		||||
  --with-geoip-database-embedded                  Geoip Database will be
 | 
			
		||||
                                                 embedded in qBittorrent
 | 
			
		||||
                                                 executable (please follow
 | 
			
		||||
                                                 instructions in
 | 
			
		||||
                                                 src/geoip/README)
 | 
			
		||||
  --disable-qtsingleapplication                  Disable use of libboost
 | 
			
		||||
  --with-qtsingleapplication=[system|shipped]     Use the shipped
 | 
			
		||||
                                                 qtsingleapplication library
 | 
			
		||||
                                                 or the system one
 | 
			
		||||
  --with-geoip-database-embedded     Geoip Database will be embedded in
 | 
			
		||||
                                    qBittorrent executable (please follow
 | 
			
		||||
                                    instructions in src/geoip/README)
 | 
			
		||||
 | 
			
		||||
EOT
 | 
			
		||||
}
 | 
			
		||||
@@ -162,11 +152,6 @@ while [ $# -gt 0 ]; do
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--with-libboost-lib=*)
 | 
			
		||||
			QC_WITH_LIBBOOST_LIB=$optarg
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--disable-libnotify)
 | 
			
		||||
			QC_DISABLE_libnotify="Y"
 | 
			
		||||
			shift
 | 
			
		||||
@@ -182,16 +167,6 @@ while [ $# -gt 0 ]; do
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--disable-qtsingleapplication)
 | 
			
		||||
			QC_DISABLE_qtsingleapplication="Y"
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--with-qtsingleapplication=*)
 | 
			
		||||
			QC_WITH_QTSINGLEAPPLICATION=$optarg
 | 
			
		||||
			shift
 | 
			
		||||
			;;
 | 
			
		||||
 | 
			
		||||
		--verbose)
 | 
			
		||||
			QC_VERBOSE="Y"
 | 
			
		||||
			shift
 | 
			
		||||
@@ -215,12 +190,9 @@ 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_WITH_LIBBOOST_LIB=$QC_WITH_LIBBOOST_LIB
 | 
			
		||||
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
 | 
			
		||||
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
 | 
			
		||||
echo QC_WITH_GEOIP_DATABASE_EMBEDDED=$QC_WITH_GEOIP_DATABASE_EMBEDDED
 | 
			
		||||
echo QC_DISABLE_qtsingleapplication=$QC_DISABLE_qtsingleapplication
 | 
			
		||||
echo QC_WITH_QTSINGLEAPPLICATION=$QC_WITH_QTSINGLEAPPLICATION
 | 
			
		||||
echo
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@@ -376,15 +348,25 @@ public:
 | 
			
		||||
	bool exec(){
 | 
			
		||||
		QStringList incs;
 | 
			
		||||
		QString req_ver = "0.14.4";
 | 
			
		||||
		QString adv_ver = "0.15.0";
 | 
			
		||||
		QString version, libs, other;
 | 
			
		||||
		VersionMode mode = VersionMin;
 | 
			
		||||
		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, req_ver, &version, &incs, &libs, &other))
 | 
			
		||||
			return false;
 | 
			
		||||
		for(int n = 0; n < incs.count(); ++n)
 | 
			
		||||
			conf->addIncludePath(incs[n]);
 | 
			
		||||
		if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
  		  conf->addLib("-lcrypto");
 | 
			
		||||
                }
 | 
			
		||||
		//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());
 | 
			
		||||
		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;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
@@ -393,39 +375,14 @@ public:
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: libboost
 | 
			
		||||
arg: with-libboost-inc=[path], Path to libboost include files
 | 
			
		||||
arg: with-libboost-lib=[path], Path to libboost library files
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
#include <boost/version.hpp>
 | 
			
		||||
class qc_libboost : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	qc_libboost(Conf *c) : ConfObj(c) {}
 | 
			
		||||
	QString name() const { return "libboost"; }
 | 
			
		||||
	QString shortname() const { return "libboost"; }
 | 
			
		||||
  QString findBoostLib(QString path, QString lib) const {
 | 
			
		||||
    QString name;
 | 
			
		||||
    QDir libDir(path);
 | 
			
		||||
    QStringList filters;
 | 
			
		||||
    filters << "libboost_"+lib+"*-mt*.so";
 | 
			
		||||
    QStringList result = libDir.entryList(filters, QDir::Files);
 | 
			
		||||
    if(!result.empty()) {
 | 
			
		||||
      name = result.first().mid(3);
 | 
			
		||||
      // Remove .so
 | 
			
		||||
      name.chop(3);
 | 
			
		||||
    } else {
 | 
			
		||||
      // Fall back to non -mt boost lib
 | 
			
		||||
      filters.clear();
 | 
			
		||||
      filters << "libboost_"+lib+"*.so";
 | 
			
		||||
      result = libDir.entryList(filters, QDir::Files);
 | 
			
		||||
      if(!result.empty()) {
 | 
			
		||||
        name = result.first().mid(3);
 | 
			
		||||
        // Remove .so
 | 
			
		||||
        name.chop(3);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return name;
 | 
			
		||||
  }
 | 
			
		||||
	bool exec(){
 | 
			
		||||
        	QString s;
 | 
			
		||||
		s = conf->getenv("QC_WITH_LIBBOOST_INC");
 | 
			
		||||
@@ -467,43 +424,6 @@ public:
 | 
			
		||||
      			}
 | 
			
		||||
		}
 | 
			
		||||
		conf->addIncludePath(s);
 | 
			
		||||
		// Find library
 | 
			
		||||
		s = conf->getenv("QC_WITH_LIBBOOST_LIB");
 | 
			
		||||
    QStringList required_libs;
 | 
			
		||||
#if BOOST_VERSION >= 103500
 | 
			
		||||
      required_libs << "system"; 
 | 
			
		||||
#endif
 | 
			
		||||
    if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
      // Not required by nox
 | 
			
		||||
      required_libs << "filesystem" << "thread";
 | 
			
		||||
    }
 | 
			
		||||
    QStringList libDirs;
 | 
			
		||||
    libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
 | 
			
		||||
    foreach(const QString& lib, required_libs) {
 | 
			
		||||
      if(!s.isEmpty()) {
 | 
			
		||||
        QString detected_name = findBoostLib(s, lib);
 | 
			
		||||
        if(detected_name.isEmpty()) {
 | 
			
		||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
			
		||||
          return false;
 | 
			
		||||
        } else {
 | 
			
		||||
          conf->addLib("-l"+detected_name);
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        bool found = false;
 | 
			
		||||
        foreach(const QString& libDir, libDirs) {
 | 
			
		||||
          QString detected_name = findBoostLib(libDir, lib);
 | 
			
		||||
          if(!detected_name.isEmpty()) {
 | 
			
		||||
            conf->addLib("-l"+detected_name);
 | 
			
		||||
            found = true;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if(!found) {
 | 
			
		||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
@@ -550,17 +470,6 @@ public:
 | 
			
		||||
			} else {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			QStringList incs3;
 | 
			
		||||
                        QString req_ver3 = "2.0";
 | 
			
		||||
                        QString version3, libs3, other3;
 | 
			
		||||
			if(conf->findPkgConfig("gtk+-2.0", mode, req_ver3, &version3, &incs3, &libs3, &other3)) {
 | 
			
		||||
                                for(int n = 0; n < incs3.count(); ++n)
 | 
			
		||||
                                conf->addIncludePath(incs3[n]);
 | 
			
		||||
                                if(!libs3.isEmpty())
 | 
			
		||||
                                        conf->addLib(libs3);
 | 
			
		||||
                        } else {
 | 
			
		||||
                                return false;
 | 
			
		||||
                        }
 | 
			
		||||
		} else {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
@@ -606,33 +515,6 @@ public:
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
#line 1 "qtsingleapplication.qcm"
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: libboost
 | 
			
		||||
arg: with-qtsingleapplication=[system|shipped], Use the shipped qtsingleapplication library or the system one
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
class qc_qtsingleapplication : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	qc_qtsingleapplication(Conf *c) : ConfObj(c) {}
 | 
			
		||||
	QString name() const { return "qtsingleapplication library"; }
 | 
			
		||||
	QString shortname() const { return "qtsingleapplication"; }
 | 
			
		||||
 | 
			
		||||
	bool exec(){
 | 
			
		||||
        	QString s;
 | 
			
		||||
		s = conf->getenv("QC_WITH_QTSINGLEAPPLICATION");
 | 
			
		||||
                if(s.compare("system", Qt::CaseInsensitive) == 0) {
 | 
			
		||||
                  // System
 | 
			
		||||
                  conf->addDefine("USE_SYSTEM_QTSINGLEAPPLICATION");
 | 
			
		||||
                  printf(" [system] ");
 | 
			
		||||
                } else {
 | 
			
		||||
                  printf(" [shipped] ");
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
EOT
 | 
			
		||||
cat >$1/modules_new.cpp <<EOT
 | 
			
		||||
@@ -654,9 +536,6 @@ cat >$1/modules_new.cpp <<EOT
 | 
			
		||||
    o = new qc_geoip_database(conf);
 | 
			
		||||
    o->required = false;
 | 
			
		||||
    o->disabled = false;
 | 
			
		||||
    o = new qc_qtsingleapplication(conf);
 | 
			
		||||
    o->required = false;
 | 
			
		||||
    o->disabled = false;
 | 
			
		||||
 | 
			
		||||
EOT
 | 
			
		||||
cat >$1/conf4.h <<EOT
 | 
			
		||||
@@ -1604,12 +1483,9 @@ export DATADIR
 | 
			
		||||
export EX_QTDIR
 | 
			
		||||
export QC_DISABLE_GUI
 | 
			
		||||
export QC_WITH_LIBBOOST_INC
 | 
			
		||||
export QC_WITH_LIBBOOST_LIB
 | 
			
		||||
export QC_DISABLE_libnotify
 | 
			
		||||
export QC_DISABLE_geoip_database
 | 
			
		||||
export QC_WITH_GEOIP_DATABASE_EMBEDDED
 | 
			
		||||
export QC_DISABLE_qtsingleapplication
 | 
			
		||||
export QC_WITH_QTSINGLEAPPLICATION
 | 
			
		||||
export QC_VERBOSE
 | 
			
		||||
rm -rf .qconftemp
 | 
			
		||||
(
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,4 @@
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='geoip-database'>
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='qtsingleapplication'>
 | 
			
		||||
  </dep>
 | 
			
		||||
</qconf>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,39 +2,14 @@
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: libboost
 | 
			
		||||
arg: with-libboost-inc=[path], Path to libboost include files
 | 
			
		||||
arg: with-libboost-lib=[path], Path to libboost library files
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
#include <boost/version.hpp>
 | 
			
		||||
class qc_libboost : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	qc_libboost(Conf *c) : ConfObj(c) {}
 | 
			
		||||
	QString name() const { return "libboost"; }
 | 
			
		||||
	QString shortname() const { return "libboost"; }
 | 
			
		||||
  QString findBoostLib(QString path, QString lib) const {
 | 
			
		||||
    QString name;
 | 
			
		||||
    QDir libDir(path);
 | 
			
		||||
    QStringList filters;
 | 
			
		||||
    filters << "libboost_"+lib+"*-mt*.so";
 | 
			
		||||
    QStringList result = libDir.entryList(filters, QDir::Files);
 | 
			
		||||
    if(!result.empty()) {
 | 
			
		||||
      name = result.first().mid(3);
 | 
			
		||||
      // Remove .so
 | 
			
		||||
      name.chop(3);
 | 
			
		||||
    } else {
 | 
			
		||||
      // Fall back to non -mt boost lib
 | 
			
		||||
      filters.clear();
 | 
			
		||||
      filters << "libboost_"+lib+"*.so";
 | 
			
		||||
      result = libDir.entryList(filters, QDir::Files);
 | 
			
		||||
      if(!result.empty()) {
 | 
			
		||||
        name = result.first().mid(3);
 | 
			
		||||
        // Remove .so
 | 
			
		||||
        name.chop(3);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return name;
 | 
			
		||||
  }
 | 
			
		||||
	bool exec(){
 | 
			
		||||
        	QString s;
 | 
			
		||||
		s = conf->getenv("QC_WITH_LIBBOOST_INC");
 | 
			
		||||
@@ -76,43 +51,6 @@ public:
 | 
			
		||||
      			}
 | 
			
		||||
		}
 | 
			
		||||
		conf->addIncludePath(s);
 | 
			
		||||
		// Find library
 | 
			
		||||
		s = conf->getenv("QC_WITH_LIBBOOST_LIB");
 | 
			
		||||
    QStringList required_libs;
 | 
			
		||||
#if BOOST_VERSION >= 103500
 | 
			
		||||
      required_libs << "system"; 
 | 
			
		||||
#endif
 | 
			
		||||
    if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
      // Not required by nox
 | 
			
		||||
      required_libs << "filesystem" << "thread";
 | 
			
		||||
    }
 | 
			
		||||
    QStringList libDirs;
 | 
			
		||||
    libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
 | 
			
		||||
    foreach(const QString& lib, required_libs) {
 | 
			
		||||
      if(!s.isEmpty()) {
 | 
			
		||||
        QString detected_name = findBoostLib(s, lib);
 | 
			
		||||
        if(detected_name.isEmpty()) {
 | 
			
		||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
			
		||||
          return false;
 | 
			
		||||
        } else {
 | 
			
		||||
          conf->addLib("-l"+detected_name);
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        bool found = false;
 | 
			
		||||
        foreach(const QString& libDir, libDirs) {
 | 
			
		||||
          QString detected_name = findBoostLib(libDir, lib);
 | 
			
		||||
          if(!detected_name.isEmpty()) {
 | 
			
		||||
            conf->addLib("-l"+detected_name);
 | 
			
		||||
            found = true;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if(!found) {
 | 
			
		||||
          printf("Could not find boost %s library!\n", qPrintable(lib));
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -40,17 +40,6 @@ public:
 | 
			
		||||
			} else {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			QStringList incs3;
 | 
			
		||||
                        QString req_ver3 = "2.0";
 | 
			
		||||
                        QString version3, libs3, other3;
 | 
			
		||||
			if(conf->findPkgConfig("gtk+-2.0", mode, req_ver3, &version3, &incs3, &libs3, &other3)) {
 | 
			
		||||
                                for(int n = 0; n < incs3.count(); ++n)
 | 
			
		||||
                                conf->addIncludePath(incs3[n]);
 | 
			
		||||
                                if(!libs3.isEmpty())
 | 
			
		||||
                                        conf->addLib(libs3);
 | 
			
		||||
                        } else {
 | 
			
		||||
                                return false;
 | 
			
		||||
                        }
 | 
			
		||||
		} else {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,15 +13,25 @@ public:
 | 
			
		||||
	bool exec(){
 | 
			
		||||
		QStringList incs;
 | 
			
		||||
		QString req_ver = "0.14.4";
 | 
			
		||||
		QString adv_ver = "0.15.0";
 | 
			
		||||
		QString version, libs, other;
 | 
			
		||||
		VersionMode mode = VersionMin;
 | 
			
		||||
		if(!conf->findPkgConfig("libtorrent-rasterbar", mode, req_ver, &version, &incs, &libs, &other))
 | 
			
		||||
			return false;
 | 
			
		||||
		for(int n = 0; n < incs.count(); ++n)
 | 
			
		||||
			conf->addIncludePath(incs[n]);
 | 
			
		||||
		if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
  		  conf->addLib("-lcrypto");
 | 
			
		||||
                }
 | 
			
		||||
		//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());
 | 
			
		||||
		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;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										508
									
								
								src/GUI.cpp
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										39
									
								
								src/GUI.h
									
									
									
									
									
								
							
							
						
						@@ -37,10 +37,13 @@
 | 
			
		||||
#include "ui_mainwindow.h"
 | 
			
		||||
#include "qtorrenthandle.h"
 | 
			
		||||
 | 
			
		||||
enum TabIndex{TAB_TRANSFER, TAB_SEARCH, TAB_RSS};
 | 
			
		||||
 | 
			
		||||
class Bittorrent;
 | 
			
		||||
class QTimer;
 | 
			
		||||
class downloadFromURL;
 | 
			
		||||
class SearchEngine;
 | 
			
		||||
class QLocalServer;
 | 
			
		||||
class QCloseEvent;
 | 
			
		||||
class RSSImp;
 | 
			
		||||
class QShortcut;
 | 
			
		||||
@@ -56,9 +59,6 @@ class consoleDlg;
 | 
			
		||||
class about;
 | 
			
		||||
class createtorrent;
 | 
			
		||||
class downloadFromURL;
 | 
			
		||||
class HidableTabWidget;
 | 
			
		||||
class LineEdit;
 | 
			
		||||
class QFileSystemWatcher;
 | 
			
		||||
 | 
			
		||||
class GUI : public QMainWindow, private Ui::MainWindow{
 | 
			
		||||
  Q_OBJECT
 | 
			
		||||
@@ -68,10 +68,8 @@ public:
 | 
			
		||||
  GUI(QWidget *parent=0, QStringList torrentCmdLine=QStringList());
 | 
			
		||||
  ~GUI();
 | 
			
		||||
  // Methods
 | 
			
		||||
  QWidget* getCurrentTabWidget() const;
 | 
			
		||||
  int getCurrentTabIndex() const;
 | 
			
		||||
  TransferListWidget* getTransferList() const { return transferList; }
 | 
			
		||||
  QMenu* getTrayIconMenu();
 | 
			
		||||
  PropertiesWidget *getProperties() const { return properties; }
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
  void trackerAuthenticationRequired(QTorrentHandle& h);
 | 
			
		||||
@@ -79,8 +77,6 @@ public slots:
 | 
			
		||||
  void showNotificationBaloon(QString title, QString msg) const;
 | 
			
		||||
  void downloadFromURLList(const QStringList& urls);
 | 
			
		||||
  void updateAltSpeedsBtn(bool alternative);
 | 
			
		||||
  void updateNbTorrents(unsigned int nb_downloading, unsigned int nb_seeding, unsigned int nb_active, unsigned int nb_inactive, unsigned int nb_paused);
 | 
			
		||||
  void deleteBTSession();
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
  // GUI related slots
 | 
			
		||||
@@ -92,6 +88,8 @@ protected slots:
 | 
			
		||||
  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();
 | 
			
		||||
@@ -101,10 +99,6 @@ protected slots:
 | 
			
		||||
  void handleDownloadFromUrlFailure(QString, QString) const;
 | 
			
		||||
  void createSystrayDelayed();
 | 
			
		||||
  void tab_changed(int);
 | 
			
		||||
  void on_actionLock_qBittorrent_triggered();
 | 
			
		||||
  void defineUILockPassword();
 | 
			
		||||
  bool unlockUI();
 | 
			
		||||
  void notifyOfUpdate(QString);
 | 
			
		||||
  // Keyboard shortcuts
 | 
			
		||||
  void createKeyboardShortcuts();
 | 
			
		||||
  void displayTransferTab() const;
 | 
			
		||||
@@ -117,7 +111,6 @@ protected slots:
 | 
			
		||||
  void on_actionOpen_triggered();
 | 
			
		||||
  void updateGUI();
 | 
			
		||||
  void loadPreferences(bool configure_session=true);
 | 
			
		||||
  void processParams(const QString& params);
 | 
			
		||||
  void processParams(const QStringList& params);
 | 
			
		||||
  void addTorrent(QString path);
 | 
			
		||||
  void addUnauthenticatedTracker(const QPair<QTorrentHandle,QString> &tracker);
 | 
			
		||||
@@ -135,16 +128,14 @@ protected:
 | 
			
		||||
  void showEvent(QShowEvent *);
 | 
			
		||||
  bool event(QEvent * event);
 | 
			
		||||
  void displayRSSTab(bool enable);
 | 
			
		||||
  void displaySearchTab(bool enable);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  QFileSystemWatcher *executable_watcher;
 | 
			
		||||
  // Bittorrent
 | 
			
		||||
  Bittorrent *BTSession;
 | 
			
		||||
  QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
 | 
			
		||||
  // GUI related
 | 
			
		||||
  QTimer *guiUpdater;
 | 
			
		||||
  HidableTabWidget *tabs;
 | 
			
		||||
  QTabWidget *tabs;
 | 
			
		||||
  StatusBar *status_bar;
 | 
			
		||||
  QPointer<options_imp> options;
 | 
			
		||||
  QPointer<consoleDlg> console;
 | 
			
		||||
@@ -153,14 +144,12 @@ private:
 | 
			
		||||
  QPointer<downloadFromURL> downloadFromURLDialog;
 | 
			
		||||
  QPointer<QSystemTrayIcon> systrayIcon;
 | 
			
		||||
  QPointer<QTimer> systrayCreator;
 | 
			
		||||
  QPointer<QMenu> myTrayIconMenu;
 | 
			
		||||
  QMenu *myTrayIconMenu;
 | 
			
		||||
  TransferListWidget *transferList;
 | 
			
		||||
  TransferListFiltersWidget *transferListFilters;
 | 
			
		||||
  PropertiesWidget *properties;
 | 
			
		||||
  bool displaySpeedInTitle;
 | 
			
		||||
  bool force_exit;
 | 
			
		||||
  bool ui_locked;
 | 
			
		||||
  LineEdit *search_filter;
 | 
			
		||||
  // Keyboard shortcuts
 | 
			
		||||
  QShortcut *switchSearchShortcut;
 | 
			
		||||
  QShortcut *switchSearchShortcut2;
 | 
			
		||||
@@ -171,18 +160,12 @@ private:
 | 
			
		||||
  QAction *prioSeparator2;
 | 
			
		||||
  QSplitter *hSplitter;
 | 
			
		||||
  QSplitter *vSplitter;
 | 
			
		||||
  QMenu *lockMenu;
 | 
			
		||||
  // Search
 | 
			
		||||
  QPointer<SearchEngine> searchEngine;
 | 
			
		||||
  SearchEngine *searchEngine;
 | 
			
		||||
  // RSS
 | 
			
		||||
  QPointer<RSSImp> rssWidget;
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
    void on_actionSearch_engine_triggered();
 | 
			
		||||
    void on_actionRSS_Reader_triggered();
 | 
			
		||||
    void on_actionSpeed_in_title_bar_triggered();
 | 
			
		||||
    void on_actionTop_tool_bar_triggered();
 | 
			
		||||
    void on_actionShutdown_when_downloads_complete_triggered();
 | 
			
		||||
  // Misc
 | 
			
		||||
  QLocalServer *localServer;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 322 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/L.gif
									
									
									
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 66 B  | 
| 
		 Before Width: | Height: | Size: 546 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/locale.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 892 B  | 
| 
		 Before Width: | Height: | Size: 996 B  | 
| 
		 Before Width: | Height: | Size: 929 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/oxygen/mail-queue.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 860 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/oxygen/wallet.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
@@ -1,9 +1,8 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Categories=Qt;Network;P2P;
 | 
			
		||||
Comment=V2.4.4
 | 
			
		||||
Comment=V2.2.1
 | 
			
		||||
Exec=qbittorrent %f
 | 
			
		||||
GenericName=Bittorrent client
 | 
			
		||||
GenericName[ar]=العميل Bittorrent
 | 
			
		||||
GenericName[bg]=Торент клиент
 | 
			
		||||
GenericName[cs]=Bittorrent klient
 | 
			
		||||
GenericName[de]=Bittorren Client
 | 
			
		||||
@@ -11,7 +10,6 @@ GenericName[el]=Bittorrent πελάτης
 | 
			
		||||
GenericName[es]=Cliente Bittorrent
 | 
			
		||||
GenericName[fi]=Bittorrent-ohjelma
 | 
			
		||||
GenericName[fr]=Client Bittorrent
 | 
			
		||||
GenericName[hr]=Bittorrent klijent
 | 
			
		||||
GenericName[hu]=Bittorrent kliens
 | 
			
		||||
GenericName[it]=Client Bittorrent
 | 
			
		||||
GenericName[ja]=Bittorrent クライアント
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 54 B  | 
| 
		 Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/Icons/skin/checkingUP.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.3 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 257 B  | 
| 
		 Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.9 KiB  |