Compare commits
	
		
			57 Commits
		
	
	
		
			release-2.
			...
			release-2.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					014b86290b | ||
| 
						 | 
					9836d4ec07 | ||
| 
						 | 
					b5b14d4d43 | ||
| 
						 | 
					dff1666b6c | ||
| 
						 | 
					e6966bec31 | ||
| 
						 | 
					e92f6a3d96 | ||
| 
						 | 
					f70aab3877 | ||
| 
						 | 
					ec44efb261 | ||
| 
						 | 
					d227ed8b59 | ||
| 
						 | 
					395c2c862a | ||
| 
						 | 
					e7eb61c0c3 | ||
| 
						 | 
					7cd2ec57d3 | ||
| 
						 | 
					4941f24fff | ||
| 
						 | 
					94cb5fe0b6 | ||
| 
						 | 
					4828ffa280 | ||
| 
						 | 
					622d9701cb | ||
| 
						 | 
					93c4b521bb | ||
| 
						 | 
					9c7374e4a1 | ||
| 
						 | 
					1d58e7fd7f | ||
| 
						 | 
					ed9c68eea0 | ||
| 
						 | 
					1b8a87c54d | ||
| 
						 | 
					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 | 
							
								
								
									
										20
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						@@ -3,27 +3,15 @@ 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
 | 
			
		||||
 | 
			
		||||
* 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
 | 
			
		||||
@@ -67,13 +55,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)
 | 
			
		||||
  - Bulgarian: Tsvetan & Boiko Bankov (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)
 | 
			
		||||
@@ -83,7 +69,7 @@ Translations authors:
 | 
			
		||||
  - German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
 | 
			
		||||
  - Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net) and Stephanos Antaris (santaris@csd.auth.gr)
 | 
			
		||||
  - Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
 | 
			
		||||
  - Italian: Matteo Sechi (bu17714@gmail.com)
 | 
			
		||||
  - Italian: Mirko Ferrari (mirkoferrari@gmail.com) and Ferraro Luciano (luciano.ferraro@gmail.com)
 | 
			
		||||
  - Japanese: Nardog (alphisation@gmail.com)
 | 
			
		||||
  - Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
 | 
			
		||||
  - Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
 | 
			
		||||
@@ -96,5 +82,5 @@ Translations authors:
 | 
			
		||||
  - Spanish: Francisco Luque Contreras (frannoe@ya.com)
 | 
			
		||||
  - Swedish: Daniel Nylander (po@danielnylander.se)
 | 
			
		||||
  - Turkish: Hasan Yilmaz (iletisim@hedefturkce.com)
 | 
			
		||||
  - Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net) and Oleh Prypin (blaxpirit@gmail.com)
 | 
			
		||||
  - Ukrainian: Andrey Shpachenko (masterfix@users.sourceforge.net)
 | 
			
		||||
  license: GPLv2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										123
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						@@ -1,125 +1,4 @@
 | 
			
		||||
* Unreleased - Christophe Dumez <chris@qbittorrent.org> - v2.5.0
 | 
			
		||||
    - FEATURE: qBittorrent can now act as a tracker
 | 
			
		||||
    - FEATURE: New and improved RSS feed automated downloader
 | 
			
		||||
    - FEATURE: Added feature to shutdown qbittorrent on torrents completion
 | 
			
		||||
    - FEATURE: Added a torrent import assistant to seed or keep downloading outside torrents
 | 
			
		||||
    - FEATURE: qBittorrent can update itself from Sourceforge (Windows/Mac OS X only)
 | 
			
		||||
    - FEATURE: Added a transfer list column to display the current tracker
 | 
			
		||||
    - FEATURE: Remember the last trackers used in the torrent creation tool
 | 
			
		||||
    - FEATURE: The optimal piece size is now automatically computed in the torrent creation tool
 | 
			
		||||
    - FEATURE: Bring up the connection settings when clicking on the connection status icon
 | 
			
		||||
    - COSMETIC: Replaced message box by on-screen notification for download errors
 | 
			
		||||
    - COSMETIC: Improved the torrent creation tool appearance
 | 
			
		||||
    - OTHERS: Dropped support for Qt <= 4.4
 | 
			
		||||
 | 
			
		||||
* 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...)
 | 
			
		||||
 | 
			
		||||
* Sun Mar 14 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.0
 | 
			
		||||
    - FEATURE: User can set alternative speed limits for fast toggling
 | 
			
		||||
    - FEATURE: Bandwidth scheduler (automatically use alternative speed limits for a given period)
 | 
			
		||||
    - FEATURE: Added "Added/Completed On" columns to transfer list
 | 
			
		||||
    - FEATURE: Added "Upload/Download limit" columns to transfer list
 | 
			
		||||
    - FEATURE: Torrent files can be exported to a given directory
 | 
			
		||||
    - FEATURE: Outgoing ports range can be customized (for QoS)
 | 
			
		||||
    - FEATURE: User can choose to apply transfer limits on LAN too
 | 
			
		||||
    - FEATURE: User can choose to include the protocol overhead in transfer limits
 | 
			
		||||
    - FEATURE: Torrents can be automatically rechecked on completion
 | 
			
		||||
    - FEATURE: If 2 torrents have the same hash, add new trackers/URL seeds to the existing torrent
 | 
			
		||||
    - FEATURE: Trackers can be added from Web UI
 | 
			
		||||
    - FEATURE: Global transfer information are displayed in the new Web UI status bar
 | 
			
		||||
    - FEATURE: Allow to change the priority of several files at once
 | 
			
		||||
    - FEATURE: Support for multiple scan folders (Patch by Christian Kandeler)
 | 
			
		||||
    - BUGFIX: Only one log window can be opened at a time
 | 
			
		||||
    - BUGFIX: Optimized RSS module memory usage
 | 
			
		||||
    - BUGFIX: Consider HTTP downloads >1MB as invalid .torrent files and abort
 | 
			
		||||
    - BUGFIX: Fix Web UI authentication with some browsers
 | 
			
		||||
    - BUGFIX: Set Web UI ban period to 1 hour
 | 
			
		||||
    - COSMETIC: Improved style management
 | 
			
		||||
 | 
			
		||||
* 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
 | 
			
		||||
* Web 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						@@ -1,57 +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.5.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, compatible with v0.15.x)
 | 
			
		||||
        -> 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 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
 | 
			
		||||
      or
 | 
			
		||||
    - libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
 | 
			
		||||
 | 
			
		||||
    - python >= 2.3 (needed by search engine)
 | 
			
		||||
        * Run time only dependency
 | 
			
		||||
 | 
			
		||||
    - libnotify >= 0.4.2, glib-2.0 (optional)
 | 
			
		||||
        * Can be used for system notifications to replace standard Qt notifications
 | 
			
		||||
          so that it integrates better into the Desktop
 | 
			
		||||
 | 
			
		||||
    - geoip-database (optional)
 | 
			
		||||
        * If qBittorrent cannot find this database, it will try to resolve countries using the Internet but it will be a lot slower.
 | 
			
		||||
        * Run time only dependency
 | 
			
		||||
 | 
			
		||||
2) Compile and install qBittorrent without Qt4 Graphical interface
 | 
			
		||||
 | 
			
		||||
  $ ./configure --disable-gui
 | 
			
		||||
  $ make && make install
 | 
			
		||||
  $ qbittorrent
 | 
			
		||||
 | 
			
		||||
  will install and execute qBittorrent hopefully without any problems.
 | 
			
		||||
 | 
			
		||||
  Dependencies:
 | 
			
		||||
    - Qt >= 4.4.0 (libqt-devel, libqtcore, libqtnetwork)
 | 
			
		||||
 | 
			
		||||
    - pkg-config executable
 | 
			
		||||
 | 
			
		||||
    - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, >= v0.15.0 ADVISED)
 | 
			
		||||
        -> http://www.libtorrent.net
 | 
			
		||||
        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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								README.os2
									
									
									
									
									
								
							
							
						
						@@ -1,62 +0,0 @@
 | 
			
		||||
qBittorrent - A BitTorrent client in Qt4
 | 
			
		||||
------------------------------------------
 | 
			
		||||
 | 
			
		||||
This is the eComStation (OS/2) qBittorrent part of the readme. See also README for more general information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Building qBittorrent
 | 
			
		||||
********************
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
- gcc based build env (recommended gcc v4.4.2 or greater)
 | 
			
		||||
  
 | 
			
		||||
- Qt4 for eCS (OS/2) dev package (see http://svn.netlabs.org/qt4 for more information)
 | 
			
		||||
 | 
			
		||||
- libtorrent-rasterbar for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
			
		||||
 | 
			
		||||
- boost for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
How to build
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
First you need to create the conf.pri file in the same dir as this readme.os2 is.
 | 
			
		||||
the conf.pri file has the following content:
 | 
			
		||||
 | 
			
		||||
##### conf.pri content beginn #####
 | 
			
		||||
PREFIX = .
 | 
			
		||||
BINDIR = ./bin
 | 
			
		||||
INCDIR = ./include
 | 
			
		||||
LIBDIR = ./lib
 | 
			
		||||
DATADIR = ./share
 | 
			
		||||
 | 
			
		||||
CONFIG += staticlib
 | 
			
		||||
INCLUDEPATH += x:/trees/libtorrent/trunk/include
 | 
			
		||||
LIBS += -Lx:/trees/libtorrent/trunk/src/.libs \
 | 
			
		||||
        -Lx:/trees/boost/trunk/stage/lib \
 | 
			
		||||
        -Lx:/trees/openssl \
 | 
			
		||||
	-Lx:/extras/lib
 | 
			
		||||
##### conf.pri content end #####
 | 
			
		||||
 | 
			
		||||
Of course all the above path references have to be adjusted to your build env.
 | 
			
		||||
 | 
			
		||||
It should now be easy to build qBittorrent:
 | 
			
		||||
 | 
			
		||||
Simply type:
 | 
			
		||||
$ qmake
 | 
			
		||||
 | 
			
		||||
Followed by:
 | 
			
		||||
$ make
 | 
			
		||||
 | 
			
		||||
If all works fine you should get a working qbittorrent executable.
 | 
			
		||||
 | 
			
		||||
If you have any question regarding the eCS (OS/2) port of qBittorrent you can meet me (_diver) on IRC:
 | 
			
		||||
#netlabs on irc.freenode.net
 | 
			
		||||
 | 
			
		||||
------------------------------------------
 | 
			
		||||
Silvan Scherrer <silvan.scherrer@aroa.ch>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
.\" This manpage has been automatically generated by docbook2man
 | 
			
		||||
.\" from a DocBook document.  This tool can be found at:
 | 
			
		||||
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
 | 
			
		||||
.TH "QBITTORRENT\-NOX" "1" "January 16th 2010" "Command line Bittorrent client written in C++ / Qt4" ""
 | 
			
		||||
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
qBittorrent\-nox \- a command line Bittorrent client written in C++ / Qt4
 | 
			
		||||
 | 
			
		||||
.SH "SYNOPSIS"
 | 
			
		||||
 | 
			
		||||
\fBqbittorrent\-nox\fR [\-\-webui-port=x] [TORRENT_FILE | URL]...
 | 
			
		||||
 | 
			
		||||
\fBqbittorrent\-nox\fR \-\-help
 | 
			
		||||
 | 
			
		||||
\fBqbittorrent\-nox\fR \-\-version
 | 
			
		||||
 | 
			
		||||
.PP
 | 
			
		||||
.SH "DESCRIPTION"
 | 
			
		||||
 | 
			
		||||
\fBqBittorrent-nox\fR is an advanced command-line Bittorrent client written in C++ / Qt4,
 | 
			
		||||
using the \fBlibtorrent-rasterbar\fR library by Arvid Norberg. qBittorrent\-nox aims
 | 
			
		||||
to be a good alternative to other command line bittorrent clients and provides features similar to popular graphical clients.
 | 
			
		||||
 | 
			
		||||
qBittorrent\-nox is fast, stable, light and it supports unicode. 
 | 
			
		||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Vuze compatible), 
 | 
			
		||||
FAST extension (mainline) and PeX support (utorrent compatible).
 | 
			
		||||
 | 
			
		||||
qBittorrent\-nox is meant to be controlled via its feature-rich Web UI which is accessible as a default on http://localhost:8080. The Web UI access is secured and the default account user name is "admin" with "adminadmin" as a password.
 | 
			
		||||
 | 
			
		||||
.SH "OPTIONS"
 | 
			
		||||
 | 
			
		||||
\fB--help\fR Prints the command line options.
 | 
			
		||||
 | 
			
		||||
\fB--version\fR Prints qbittorrent program version number.
 | 
			
		||||
 | 
			
		||||
\fB--webui-port=x\fR Changes Web UI port to x (default: 8080).
 | 
			
		||||
 | 
			
		||||
.SH "BUGS"
 | 
			
		||||
 | 
			
		||||
If you find a bug, please report it at http://bugs.qbittorrent.org
 | 
			
		||||
 | 
			
		||||
.SH "AUTHOR"
 | 
			
		||||
 | 
			
		||||
Christophe Dumez <chris@qbittorrent.org>
 | 
			
		||||
@@ -1,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>
 | 
			
		||||
@@ -19,6 +16,4 @@
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='geoip-database'>
 | 
			
		||||
  </dep>
 | 
			
		||||
  <dep type='qtsingleapplication'>
 | 
			
		||||
  </dep>
 | 
			
		||||
</qconf>
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -40,21 +32,10 @@ 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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -8,20 +8,24 @@ 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;
 | 
			
		||||
		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.\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");
 | 
			
		||||
		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();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										16
									
								
								qcm/qt4.qcm
									
									
									
									
									
								
							
							
						
						@@ -1,20 +1,20 @@
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: Qt >= 4.5
 | 
			
		||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
 | 
			
		||||
name: Qt >= 4.4
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
class qc_qt4 : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	qc_qt4(Conf *c) : ConfObj(c) {}
 | 
			
		||||
	QString name() const { return "Qt >= 4.5"; }
 | 
			
		||||
	QString shortname() const { return "Qt 4.5"; }
 | 
			
		||||
	QString name() const { return "Qt >= 4.4"; }
 | 
			
		||||
	QString shortname() const { return "Qt 4.4"; }
 | 
			
		||||
	bool exec()
 | 
			
		||||
	{
 | 
			
		||||
		if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
 | 
			
		||||
			conf->addDefine("DISABLE_GUI");
 | 
			
		||||
		}	
 | 
			
		||||
		return(QT_VERSION >= 0x040500);
 | 
			
		||||
		if(QT_VERSION >= 0x040500) {
 | 
			
		||||
                        conf->addDefine("QT_4_5");
 | 
			
		||||
                }
 | 
			
		||||
		return(QT_VERSION >= 0x040400);
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
-----BEGIN QCMOD-----
 | 
			
		||||
name: libboost
 | 
			
		||||
arg: with-qtsingleapplication=[system|shipped], Use the shipped qtsingleapplication library or the system one
 | 
			
		||||
-----END QCMOD-----
 | 
			
		||||
*/
 | 
			
		||||
class qc_qtsingleapplication : public ConfObj
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
        qc_qtsingleapplication(Conf *c) : ConfObj(c) {}
 | 
			
		||||
        QString name() const { return "qtsingleapplication library"; }
 | 
			
		||||
        QString shortname() const { return "qtsingleapplication"; }
 | 
			
		||||
 | 
			
		||||
        bool exec(){
 | 
			
		||||
                QString s;
 | 
			
		||||
                s = conf->getenv("QC_WITH_QTSINGLEAPPLICATION");
 | 
			
		||||
                if(s.compare("system", Qt::CaseInsensitive) == 0) {
 | 
			
		||||
                  // System
 | 
			
		||||
                  conf->addDefine("USE_SYSTEM_QTSINGLEAPPLICATION");
 | 
			
		||||
                  printf(" [system] ");
 | 
			
		||||
                } else {
 | 
			
		||||
                  printf(" [shipped] ");
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										162
									
								
								src/GUI.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,162 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Bittorrent Client using Qt4 and libtorrent.
 | 
			
		||||
 * Copyright (C) 2006  Christophe Dumez
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU General Public License
 | 
			
		||||
 * as published by the Free Software Foundation; either version 2
 | 
			
		||||
 * of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give permission to
 | 
			
		||||
 * link this program with the OpenSSL project's "OpenSSL" library (or with
 | 
			
		||||
 * modified versions of it that use the same license as the "OpenSSL" library),
 | 
			
		||||
 * and distribute the linked executables. You must obey the GNU General Public
 | 
			
		||||
 * License in all respects for all of the code used other than "OpenSSL".  If you
 | 
			
		||||
 * modify file(s), you may extend this exception to your version of the file(s),
 | 
			
		||||
 * but you are not obligated to do so. If you do not wish to do so, delete this
 | 
			
		||||
 * exception statement from your version.
 | 
			
		||||
 *
 | 
			
		||||
 * Contact : chris@qbittorrent.org
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef GUI_H
 | 
			
		||||
#define GUI_H
 | 
			
		||||
 | 
			
		||||
#include <QProcess>
 | 
			
		||||
#include <QSystemTrayIcon>
 | 
			
		||||
#include <QPointer>
 | 
			
		||||
#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;
 | 
			
		||||
class about;
 | 
			
		||||
class options_imp;
 | 
			
		||||
class QTabWidget;
 | 
			
		||||
class TransferListWidget;
 | 
			
		||||
class TransferListFiltersWidget;
 | 
			
		||||
class QSplitter;
 | 
			
		||||
class PropertiesWidget;
 | 
			
		||||
class StatusBar;
 | 
			
		||||
 | 
			
		||||
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<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 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;
 | 
			
		||||
 | 
			
		||||
  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;
 | 
			
		||||
    QPoint screenCenter() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#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: 7.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 409 B  | 
| 
		 Before Width: | Height: | Size: 1.8 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 892 B  | 
| 
		 Before Width: | Height: | Size: 996 B  |