1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-23 22:32:16 +02:00

Compare commits

..

40 Commits

Author SHA1 Message Date
Christophe Dumez
53842fd94e Tagged v2.6.3 release 2011-01-15 10:38:16 +00:00
Christophe Dumez
4552df5ec2 Bump to v2.6.3 2011-01-15 10:36:31 +00:00
Christophe Dumez
c19db4fa04 Fix FreeBSD compilation 2011-01-15 09:33:37 +00:00
Christophe Dumez
74e2339bc8 Get rid of DBus dependency in nox mode 2011-01-15 08:51:30 +00:00
Christophe Dumez
991c308423 Fix file priority context menu 2011-01-14 21:20:16 +00:00
Christophe Dumez
1867643288 Fixed Web UI translation 2011-01-14 19:14:02 +00:00
Christophe Dumez
50023bd968 Fixed icon size issues 2011-01-14 17:31:38 +00:00
Christophe Dumez
30c5bf3fd6 Updated Polish translation 2011-01-14 16:51:36 +00:00
Christophe Dumez
4e2d9564d1 Updated Armenian translation 2011-01-14 16:49:01 +00:00
Christophe Dumez
600186a6e9 Updated Armenian translation 2011-01-14 15:14:38 +00:00
Christophe Dumez
ca0e605276 Code clean up 2011-01-13 20:59:14 +00:00
Christophe Dumez
201aaae897 Fix possible crashes in full allocation mode 2011-01-13 20:44:42 +00:00
Christophe Dumez
629dc15bef Remove obsolete translatable strings 2011-01-12 17:51:50 +00:00
Christophe Dumez
35541e14aa Bump to v2.6.2 2011-01-12 17:48:35 +00:00
Christophe Dumez
cdede2d3db Translate locale names 2011-01-12 17:45:24 +00:00
Christophe Dumez
1f2e34b828 Fix torrent import 2011-01-12 17:13:44 +00:00
Christophe Dumez
d5aaf975dd Fix possible crash on adding a magnet link 2011-01-12 16:55:10 +00:00
Christophe Dumez
4ac59dbaba Updated Russian translation 2011-01-12 16:47:06 +00:00
Christophe Dumez
67802b16ab Updated Croatian translation 2011-01-12 15:50:35 +00:00
Christophe Dumez
41883c99c5 Updated Armenian settings 2011-01-12 15:46:33 +00:00
Christophe Dumez
d663c7bd3a Remove country flags from program preferences 2011-01-11 21:12:18 +00:00
Christophe Dumez
a6d1090515 Updated Ukrainian translation 2011-01-11 21:07:36 +00:00
Christophe Dumez
7844ce287d Fix typo 2011-01-11 21:01:39 +00:00
Christophe Dumez
c6ce0d35b2 Code clea nup 2011-01-11 19:42:54 +00:00
Christophe Dumez
eec56074fc Code clean up 2011-01-11 19:07:13 +00:00
Christophe Dumez
7c180dc57a Code clean up 2011-01-11 18:54:46 +00:00
Christophe Dumez
043b9f2981 Added Python 2.7 support (Windows) 2011-01-11 17:34:35 +00:00
Christophe Dumez
229559ef67 Added Armenian translation 2011-01-11 17:15:32 +00:00
Christophe Dumez
5e4b815d0f Updated Greek and Bulgarian translations 2011-01-11 17:05:48 +00:00
Christophe Dumez
c98ab55e11 BUGFIX: Do not report PeX as being disabled when DHT is 2011-01-10 21:13:40 +00:00
Christophe Dumez
632c2c5e4a Fix typo 2011-01-10 21:01:16 +00:00
Christophe Dumez
bbd9764f9c Reduced top toolbar spacing 2011-01-10 17:55:27 +00:00
Christophe Dumez
7437bd4265 Bump to v2.6.1 2011-01-10 17:39:47 +00:00
Christophe Dumez
1299e75934 BUGFIX: Fix magnet torrent name update problem 2011-01-10 17:36:17 +00:00
Christophe Dumez
514f82a3c9 Move transfer list filter on the right side of the toolbar 2011-01-10 17:12:55 +00:00
Christophe Dumez
51a69dc36a Also fix toolbar icon size in Web UI 2011-01-10 16:57:57 +00:00
Christophe Dumez
737fee79ed COSMETIC: Use 24px size for toolbar icons 2011-01-10 15:54:20 +00:00
Christophe Dumez
e5e4bb1111 BUGFIX: Fix some missing icons in the Web UI 2011-01-09 19:41:11 +00:00
Christophe Dumez
75111cdd8a BUGFIX: Really disable torrent addition dialog by default 2011-01-09 14:02:28 +00:00
Christophe Dumez
f5f915eb5d Branched v2.6.x series 2011-01-09 11:08:51 +00:00
294 changed files with 27221 additions and 105631 deletions

14
.gitignore vendored
View File

@@ -1,14 +0,0 @@
src/geoip/GeoIP.dat
src/qbittorrent
qbittorrent.pro.user
conf.pri
Makefile
*.pyc
*.log
# Compiled object files
*.o
# Generated MOC, resource and UI files
moc_*.cpp
qrc_*.cpp
ui_*.h
*.moc

13
AUTHORS
View File

@@ -2,7 +2,6 @@ Author:
* Christophe Dumez <chris@qbittorrent.org> * Christophe Dumez <chris@qbittorrent.org>
Contributors: Contributors:
* Vladimir Golovnev <glassez@yandex.ru>
* Stefanos Antaris <santaris@csd.auth.gr> * Stefanos Antaris <santaris@csd.auth.gr>
* Mohammad Dib <mdib@qbittorrent.org> * Mohammad Dib <mdib@qbittorrent.org>
* Mirco Chinelli <infinity89@fastwebmail.it> * Mirco Chinelli <infinity89@fastwebmail.it>
@@ -50,10 +49,6 @@ Images Authors:
copyright: Greg Houston <gregory.houston@gmail.com> copyright: Greg Houston <gregory.houston@gmail.com>
license: MIT license: MIT
* file: src/Icons/skin/qbittorrent_mono*
copyright: Daniel Eguren <deguren@gmail.com>
license: LGPL
* file: src/search_engine/engines/btjunkie.png * file: src/search_engine/engines/btjunkie.png
copyright: Downloaded from btjunkie.org copyright: Downloaded from btjunkie.org
@@ -74,8 +69,6 @@ Translations authors:
copyright: copyright:
- Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com) - Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)
- Armenian: Hrant Ohanyan (hrantohanyan@mail.am) - Armenian: Hrant Ohanyan (hrantohanyan@mail.am)
- Basque: Xabier Aramendi (azpidatziak@gmail.com)
- Belarusian: Mihas Varantsou (meequz@gmail.com)
- Brazilian: Nick Marinho (nickmarinho@gmail.com) - Brazilian: Nick Marinho (nickmarinho@gmail.com)
- Bulgarian: Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net) - Bulgarian: Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)
- Catalan: Francisco Luque Contreras (frannoe@ya.com) - Catalan: Francisco Luque Contreras (frannoe@ya.com)
@@ -89,15 +82,13 @@ Translations authors:
- Finnish: Niklas Laxström (nikerabbit@users.sourceforge.net) - Finnish: Niklas Laxström (nikerabbit@users.sourceforge.net)
- French: Christophe Dumez (chris@qbittorrent.org) - French: Christophe Dumez (chris@qbittorrent.org)
- Galician: Marcos Lans (marcoslansgarza@gmail.com) - Galician: Marcos Lans (marcoslansgarza@gmail.com)
- Georgian: Beqa Arabuli (arabulibeqa@yahoo.com)
- German: Niels Hoffmann (zentralmaschine@users.sourceforge.net) - German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net) and Stephanos Antaris (santaris@csd.auth.gr) - 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) - Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
- Italian: Matteo Sechi (bu17714@gmail.com) - Italian: Matteo Sechi (bu17714@gmail.com)
- Japanese: Masato Hashimoto (cabezon.hashimoto@gmail.com) - Japanese: Nardog (alphisation@gmail.com)
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net) - Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
- Lithuanian: Naglis Jonaitis (njonaitis@gmail.com) - Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
- Norwegian: Tomaso
- Polish: Mariusz Fik (fisiu@opensuse.org) - Polish: Mariusz Fik (fisiu@opensuse.org)
- Portuguese: Nick Marinho (nickmarinho@gmail.com) - Portuguese: Nick Marinho (nickmarinho@gmail.com)
- Romanian: Obada Denis (obadadenis@users.sourceforge.net) - Romanian: Obada Denis (obadadenis@users.sourceforge.net)

125
Changelog
View File

@@ -1,108 +1,27 @@
* Sun Mar 18 2012 - Christophe Dumez <chris@qbittorrent.org> - v2.9.7 * Sat Jan 15 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.3
- BUGFIX: Fix important HTTP request parsing bug (Web UI) - BUGFIX: Fix possible crashes in full allocation mode
- BUGFIX: Fix icon size issues (Linux, icon theme)
- BUGFIX: Fixed file priority context menu
- BUGFIX: Remove dbus dependency in nox mode
- BUGFIX: Fix compilation on FreeBSD
- I18N: Improve Web UI translation
- I18N: Updated Polish translation
* Sat Mar 17 2012 - Christophe Dumez <chris@qbittorrent.org> - v2.9.6 * Wed Jan 12 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.2
- BUGFIX: Fix download first/last pieces state reporting - BUGFIX: Do not report PeX as being disabled when DHT is
- BUGFIX: Fix name of progress column in torrent content panel - BUGFIX: Fix possible crash on adding magnet links
- BUGFIX: Disable system tray icon on Mac OS X - BUGFIX: Fix torrent import (was not working)
- BUGFIX: RSS downloader should not ignore "Do not start automatically" rule (closes #946910) - I18N: Updated Greek, Croatian, Russian, Unkrainian and Bulgarian translations
- BUGFIX: Fix DHT port setting in Web UI (Closes #952182) - I18N: Added Armenian translation (New)
- BUGFIX: Fix possible Web UI authentication problem when using SSL (closes #941343) - I18N: Remove country flags from program preferences (language selection)
- BUGFIX: Fix possible issues with folder removal when removing a torrent - I18N: Translate locale names (language selection)
- I18N: Add Basque translation
* Sat Feb 18 2012 - Christophe Dumez <chris@qbittorrent.org> - v2.9.5 * Mon Jan 10 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.1
- BUGFIX: Fix crash when disabling then reenabling RSS - BUGFIX: Really disable torrent addition dialog by default
- BUGFIX: Fix duplicate torrent detection when adding a magnet link - BUGFIX: Fix some missing icons in the Web UI
- BUGFIX: Fix import of new trackers when adding a torrent with same hash (Closes #747000) - BUGFIX: Fix magnet torrent name update problem
- BUGFIX: Fix possible redownload of torrents marked as read (Closes #927495) - COSMETIC: Use 24px size for toolbar icons and reduce spacing
- BUGFIX: Properly remove RSS feed settings/history upon feed removal - COSMETIC: Move transfer list filter on the right side of the toolbar
* Sat Feb 18 2012 - Christophe Dumez <chris@qbittorrent.org> - v2.9.4
- BUGFIX: qBittorrent does not handle redirection to relative URLs correctly (Closes #919905)
- BUGFIX: Cmd+M minimizes main window on Mac OS X (Closes #928216)
- BUGFIX: Cmd+Del removes torrents on Mac OS X (Closes #928852)
- BUGFIX: Fix potential bug when moving single file torrents to tmp folder (closes #932861)
- BUGFIX: Fix torrent import dialog layout (Closes #930932)
- BUGFIX: Prevent log window buffer from filling up (Closes #929673)
- I18N: Add Belarusian translation
* Thu Dec 29 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.9.3
- BUGFIX: Fix btdigg plugin (Python3 support + torrent name in magnet links)
- BUGFIX: Fix banning of IPv6 peers (Closes #885021)
- BUGFIX: Fix torrent addition dialog layout problem (Closes #84650522)
- BUGFIX: Do not report any progress for disabled files (Closes #56731485)
- BUGFIX: Make torrent sorting case insensitive (Closes #857154)
- BUGFIX: Improve Web UI usability of small devices
- BUGFIX: Program updater: More reliable version detection / comparison
- I18N: Add Georgian translation
* Sat Oct 29 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.9.2
- BUGFIX: Fix mimimum dimensions for torrent addition dialog
- BUGFIX: Remove dependency on boost-datetime
- BUGFIX: Remove dependency on boost-filesystem (libtorrent v0.16.x)
* Sun Oct 23 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.9.1
- BUGFIX: Add support for speed limits scheduling (Web UI)
- BUGFIX: Fix ratio calculation for purely seeded torrents
- I18N: Update Russian translation
- COSMETIC: Torrent addition dialog layout fixes
* Sat Oct 08 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.9.0
- FEATURE: Add file association settings to program preferences (Windows)
- FEATURE: Add setting to ignore slow torrents in queueing system
- FEATURE: Add advanced setting to announce to all trackers
- FEATURE: Add support for anonymous mode (libtorrent >= v0.16)
- FEATURE: Add quick "set as default save path" checkbox to torrent addition dialog (sledgehammer999)
- BUGFIX: Add tray menu entry for toggling window visibility
- BUGFIX: Fix execution log lines selection and copying
- BUGFIX: Reduce CPU usage when running Web UI
- BUGFIX: Save RSS items to disk regularly for safety
- BUGFIX: Fix ratio calculation (use all_time_download)
- BUGFIX: Fix torrent upload issues (Web UI)
- BUGFIX: Fix some IE incompatibilities (Web UI)
- COSMETIC: Display speed at the beginning of the Window title
- COSMETIC: Several cosmetic fixes to the Web UI
- COSMETIC: Make top toolbar follow system style
- OTHER: Display libraries versions in about dialog (sledgehammer999)
- OTHER: Display qBittorrent version in Web UI about dialog
* Thu Jun 02 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.8.0
- FEATURE: Added full libtorrent v0.16 support (uTP, ...)
- FEATURE: Proxy can be disabled for peer connections
- FEATURE: Added support for secure SMTP connection (SSL)
- FEATURE: Added support for SMTP authentication
- FEATURE: Added UPnP/NAT-PMP port forward for the Web UI port
- FEATURE: qBittorrent can update dynamic DNS services (DynDNS, no-ip)
- FEATURE: Display peer connection type in peer list (BT, uTP, Web)
- FEATURE: Added full regex support to RSS downloader
- FEATURE: Added regex help and validation in RSS downloader
- FEATURE: Added HTTPS support to Web UI (Ishan Arora)
- BUGFIX: Change systray icon on the fly (no restart needed)
- BUGFIX: Remember peer-level rate limits (requires libtorrent v0.16)
- BUGFIX: Stop annoncing to trackers an all tiers (more respectful)
- BUGFIX: Stop sharing private trackers with other peers
- BUGFIX: Tracker exchange extension can be disabled
- BUGFIX: Cleaner program exit on system log out
- BUGFIX: Fix possible magnet link parsing problems
- BUGFIX: Fix possible RSS URL parsing problems
- COSMETIC: Added monochrome icon for light themes
* Sun Mar 20 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.7.0
- FEATURE: Added search field for torrent content
- FEATURE: Added auto-shutdown confirmation dialog
- FEATURE: Added option to skip torrent deletion confirmation (Ville Kiiskinen)
- FEATURE: IP address reported to trackers is now customizable
- FEATURE: Inhibit system sleep when torrents are active (Vladimir Golovnev)
- FEATURE: Added option to bypass Web UI authentication for localhost
- FEATURE: Added option to disable program exit confirmation
- FEATURE: Added per-torrent ratio limiting (Christian Kandeler)
- FEATURE: Torrent content list is now sortable
- BUGFIX: Fix compilation with namespaced Qt (Christian Kandeler)
- BUGFIX: Added length restriction on UI lock password
- COSMETIC: Added monochrome tray icon
- COSMETIC: Improved status bar's style
- OTHER: Make QtDBus dependency optional (X11)
* Sun Jan 9 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.0 * Sun Jan 9 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.0
- FEATURE: Use system icons (Linux, Qt >= 4.6) - FEATURE: Use system icons (Linux, Qt >= 4.6)

14
INSTALL
View File

@@ -10,23 +10,25 @@ qBittorrent - A BitTorrent client in C++ / Qt4
will install and execute qBittorrent hopefully without any problems. will install and execute qBittorrent hopefully without any problems.
Dependencies: Dependencies:
- Qt >= 4.5.0 (libqtgui, libqtcore, libqtnetwork, libqtxml, libqtdbus/optional) - Qt >= 4.5.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
- pkg-config executable - pkg-config executable
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, compatible with v0.15.x/v0.16.x) - libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, compatible with v0.15.x)
-> http://www.libtorrent.net -> http://www.libtorrent.net
Be careful: another library (the one used by rTorrent) uses a similar name. Be careful: another library (the one used by rTorrent) uses a similar name.
- libboost 1.34.x (libboost-filesystem°) + libasio - libboost 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
or or
- libboost >= 1.35.x (libboost-system, libboost-filesystem°) - libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
°libboost-filesystem is not needed if libtorrent-rasterbar >= v0.16.x is used
- python >= 2.3 (needed by search engine) - python >= 2.3 (needed by search engine)
* Run time only dependency * 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) - 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. * 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 * Run time only dependency

245
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -2,22 +2,8 @@ PREFIX = /usr/local
BINDIR = /usr/local/bin BINDIR = /usr/local/bin
DATADIR = /usr/local/share DATADIR = /usr/local/share
# Use pkg-config to get all necessary libtorrent DEFINES INCLUDEPATH += /usr/local/include/libtorrent /usr/include/openssl /usr/include /opt/local/include/boost /opt/local/include
CONFIG += link_pkgconfig LIBS += -ltorrent-rasterbar -lcrypto -L/opt/local/lib -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt -framework Cocoa -framework Carbon
PKGCONFIG += libtorrent-rasterbar
# Special include/libs paths (macports)
INCLUDEPATH += /usr/include/openssl /usr/include /opt/local/include/boost /opt/local/include
LIBS += -L/opt/local/lib
# OpenSSL lib
LIBS += -lssl -lcrypto
# Boost system lib
LIBS += -lboost_system-mt
# Boost filesystem lib (Not needed for libtorrent >= 0.16.0)
LIBS += -lboost_filesystem-mt
# Carbon
LIBS += -framework Carbon -framework IOKit
document_icon.path = Contents/Resources document_icon.path = Contents/Resources
document_icon.files = Icons/qBitTorrentDocument.icns document_icon.files = Icons/qBitTorrentDocument.icns

View File

@@ -1,3 +1,5 @@
INCLUDEPATH += $$PWD
exists(conf.pri) { exists(conf.pri) {
# to the conf.pri goes all system dependent stuff # to the conf.pri goes all system dependent stuff
include(conf.pri) include(conf.pri)
@@ -11,8 +13,5 @@ LIBS += -ltorrent-rasterbar \
RC_FILE = qbittorrent_os2.rc RC_FILE = qbittorrent_os2.rc
# LIBTORRENT DEFINES
DEFINES += WITH_SHIPPED_GEOIP_H
DEFINES += WITH_GEOIP_EMBEDDED DEFINES += WITH_GEOIP_EMBEDDED
message("On eCS(OS/2), GeoIP database must be embedded.") message("On eCS(OS/2), GeoIP database must be embedded.")

View File

@@ -2,17 +2,3 @@ TEMPLATE = subdirs
SUBDIRS += src SUBDIRS += src
include(version.pri)
# Dist
dist.commands += rm -fR ../$${PROJECT_NAME}-$${PROJECT_VERSION}/ &&
dist.commands += git clone . ../$${PROJECT_NAME}-$${PROJECT_VERSION} &&
dist.commands += rm -fR ../$${PROJECT_NAME}-$${PROJECT_VERSION}/.git &&
dist.commands += rm -f ../$${PROJECT_NAME}-$${PROJECT_VERSION}/.gitignore &&
dist.commands += cd .. &&
dist.commands += tar czf $${PROJECT_NAME}-$${PROJECT_VERSION}.tar.gz $${PROJECT_NAME}-$${PROJECT_VERSION} &&
dist.commands += tar cf $${PROJECT_NAME}-$${PROJECT_VERSION}.tar $${PROJECT_NAME}-$${PROJECT_VERSION} &&
dist.commands += xz -f $${PROJECT_NAME}-$${PROJECT_VERSION}.tar &&
dist.commands += rm -fR $${PROJECT_NAME}-$${PROJECT_VERSION}
QMAKE_EXTRA_TARGETS += dist

View File

@@ -6,8 +6,6 @@
<dep type='qt4'> <dep type='qt4'>
<required/> <required/>
</dep> </dep>
<dep type='qt-dbus'>
</dep>
<dep type='pkg-config'> <dep type='pkg-config'>
<required/> <required/>
</dep> </dep>
@@ -17,6 +15,8 @@
<dep type='libboost'> <dep type='libboost'>
<required/> <required/>
</dep> </dep>
<dep type='libnotify'>
</dep>
<dep type='geoip-database'> <dep type='geoip-database'>
</dep> </dep>
<dep type='qtsingleapplication'> <dep type='qtsingleapplication'>

View File

@@ -6,15 +6,12 @@ arg: with-libboost-lib=[path], Path to libboost library files
-----END QCMOD----- -----END QCMOD-----
*/ */
#include <boost/version.hpp> #include <boost/version.hpp>
#include <libtorrent/version.hpp>
class qc_libboost : public ConfObj class qc_libboost : public ConfObj
{ {
public: public:
qc_libboost(Conf *c) : ConfObj(c) {} qc_libboost(Conf *c) : ConfObj(c) {}
QString name() const { return "libboost"; } QString name() const { return "libboost"; }
QString shortname() const { return "libboost"; } QString shortname() const { return "libboost"; }
QString findBoostLib(QString path, QString lib) const { QString findBoostLib(QString path, QString lib) const {
QString name; QString name;
QDir libDir(path); QDir libDir(path);
@@ -38,60 +35,84 @@ public:
} }
return name; return name;
} }
bool exec(){
bool exec(){ QString s;
QStringList sl; s = conf->getenv("QC_WITH_LIBBOOST_INC");
QString s = conf->getenv("QC_WITH_LIBBOOST_INC"); if(!s.isEmpty()) {
if (!s.isEmpty()) if(!conf->checkHeader(s, "boost/format.hpp")) {
sl << s; return false;
sl << "/usr/include"; }
sl << "/usr/local/include"; if(!conf->checkHeader(s, "boost/date_time/posix_time/posix_time.hpp")) {
bool found = false; return false;
foreach (s, sl) { }
if (conf->checkHeader(s, "boost/format.hpp") if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
#if LIBTORRENT_VERSION_MAJOR == 0 && LIBTORRENT_VERSION_MINOR < 16 return false;
&& conf->checkHeader(s, "boost/filesystem/path.hpp") }
#endif if(!conf->checkHeader(s, "boost/thread.hpp")) {
) { return false;
found = true; }
break; }else{
} QStringList sl;
} sl << "/usr/include";
if (!found) sl << "/usr/local/include";
return false; bool found = false;
foreach(s, sl){
conf->addIncludePath(s); if(conf->checkHeader(s, "boost/format.hpp")){
found = true;
// Find library break;
s = conf->getenv("QC_WITH_LIBBOOST_LIB"); }
}
if(!found) {
return false;
}
if(!conf->checkHeader(s, "boost/date_time/posix_time/posix_time.hpp")) {
return false;
}
if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
return false;
}
if(!conf->checkHeader(s, "boost/thread.hpp")) {
return false;
}
}
conf->addIncludePath(s);
// Find library
s = conf->getenv("QC_WITH_LIBBOOST_LIB");
QStringList required_libs; QStringList required_libs;
#if BOOST_VERSION >= 103500 #if BOOST_VERSION >= 103500
required_libs << "system"; required_libs << "system";
#endif #endif
#if LIBTORRENT_VERSION_MAJOR == 0 && LIBTORRENT_VERSION_MINOR < 16 if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
required_libs << "filesystem" ; // Not required by nox
#endif required_libs << "filesystem" << "thread";
required_libs << "thread"; }
QStringList libDirs; QStringList libDirs;
if (!s.isEmpty())
libDirs << s;
libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/"; libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
foreach(const QString& lib, required_libs) { foreach(const QString& lib, required_libs) {
bool found = false; if(!s.isEmpty()) {
foreach(const QString& libDir, libDirs) { QString detected_name = findBoostLib(s, lib);
QString detected_name = findBoostLib(libDir, lib); if(detected_name.isEmpty()) {
if(!detected_name.isEmpty()) { printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
} else {
conf->addLib("-l"+detected_name); conf->addLib("-l"+detected_name);
found = true; }
break; } 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;
} }
} }
if(!found) {
printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
}
} }
return true; return true;
} }
}; };

View File

@@ -19,6 +19,9 @@ public:
return false; return false;
for(int n = 0; n < incs.count(); ++n) for(int n = 0; n < incs.count(); ++n)
conf->addIncludePath(incs[n]); conf->addIncludePath(incs[n]);
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
conf->addLib("-lcrypto");
}
return true; return true;
} }
}; };

View File

@@ -1,31 +0,0 @@
/*
-----BEGIN QCMOD-----
name: qt-dbus
-----END QCMOD-----
*/
// see Conf::findPkgConfig
class qc_qt_dbus : public ConfObj
{
public:
qc_qt_dbus(Conf *c) : ConfObj(c) {}
QString name() const { return "QtDBus >= 4.5"; }
QString shortname() const { return "qt-dbus"; }
QString checkString() const {
if(!conf->getenv("QC_DISABLE_qt_dbus").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
return "";
return ConfObj::checkString();
}
bool exec(){
if(!conf->getenv("QC_DISABLE_qt_dbus").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
return false;
QStringList incs;
QString req_ver = "4.5.0";
QString version, libs, other;
VersionMode mode = VersionMin;
if(conf->findPkgConfig("QtDBus", mode, req_ver, &version, &incs, &libs, &other)) {
conf->addExtra("CONFIG += dbus");
return true;
}
return false;
}
};

View File

@@ -1,31 +0,0 @@
/*
-----BEGIN QCMOD-----
name: qt-svg
-----END QCMOD-----
*/
// see Conf::findPkgConfig
class qc_qt_svg : public ConfObj
{
public:
qc_qt_svg(Conf *c) : ConfObj(c) {}
QString name() const { return "QtSvg >= 4.5"; }
QString shortname() const { return "qt-svg"; }
QString checkString() const {
if(!conf->getenv("QC_DISABLE_qt_svg").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
return "";
return ConfObj::checkString();
}
bool exec(){
if(!conf->getenv("QC_DISABLE_qt_svg").isEmpty() || !conf->getenv("QC_DISABLE_GUI").isEmpty())
return false;
QStringList incs;
QString req_ver = "4.5.0";
QString version, libs, other;
VersionMode mode = VersionMin;
if(conf->findPkgConfig("QtSvg", mode, req_ver, &version, &incs, &libs, &other)) {
conf->addExtra("CONFIG += svg");
return true;
}
return false;
}
};

View File

@@ -19,11 +19,7 @@ public:
} }
// Debug mode // Debug mode
if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) { if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) {
conf->addExtra("CONFIG -= release");
conf->addExtra("CONFIG += debug"); conf->addExtra("CONFIG += debug");
} else {
conf->addExtra("CONFIG -= debug");
conf->addExtra("CONFIG += release");
} }
#ifdef Q_OS_FREEBSD #ifdef Q_OS_FREEBSD
conf->addLib("-lexecinfo"); conf->addLib("-lexecinfo");

BIN
src/Icons/downarrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

View File

@@ -1,39 +1,36 @@
[Desktop Entry] [Desktop Entry]
Categories=Network;FileTransfer;P2P;Qt; Categories=Qt;Network;P2P;
Exec=qbittorrent %U Comment=V2.6.3
GenericName=BitTorrent client Exec=qbittorrent %f
GenericName[ar]=العميل BitTorrent GenericName=Bittorrent client
GenericName[ar]=العميل Bittorrent
GenericName[bg]=Торент клиент GenericName[bg]=Торент клиент
GenericName[cs]=BitTorrent klient GenericName[cs]=Bittorrent klient
GenericName[de]=BitTorren Client GenericName[de]=Bittorren Client
GenericName[el]=BitTorrent πελάτης GenericName[el]=Bittorrent πελάτης
GenericName[es]=Cliente BitTorrent GenericName[es]=Cliente Bittorrent
GenericName[fi]=BitTorrent-ohjelma GenericName[fi]=Bittorrent-ohjelma
GenericName[fr]=Client BitTorrent GenericName[fr]=Client Bittorrent
GenericName[hr]=BitTorrent klijent GenericName[hr]=Bittorrent klijent
GenericName[hu]=BitTorrent kliens GenericName[hu]=Bittorrent kliens
GenericName[it]=Client BitTorrent GenericName[it]=Client Bittorrent
GenericName[ja]=BitTorrent クライアント GenericName[ja]=Bittorrent クライアント
GenericName[ko]=비토렌트 클라이언트 GenericName[ko]=비토렌트 클라이언트
GenericName[lt]=BitTorrent klientas GenericName[nl]=Bittorrent-cliënt
GenericName[nl]=BitTorrent-cliënt GenericName[pl]=Klient Bittorrent
GenericName[pl]=Klient BitTorrent GenericName[pt]=Cliente Bittorrent
GenericName[pt]=Cliente BitTorrent GenericName[pt_BR]=Cliente Bittorrent
GenericName[pt_BR]=Cliente BitTorrent GenericName[ro]=Client Bittorrent
GenericName[ro]=Client BitTorrent GenericName[ru]=клиент Bittorrent
GenericName[ru]=клиент BitTorrent GenericName[sk]=Klient siete Bittorrent
GenericName[sk]=Klient siete BitTorrent GenericName[sr]=Bittorrent-клијент
GenericName[sr]=BitTorrent-клијент GenericName[sv]=Bittorrent-klient
GenericName[sv]=BitTorrent-klient GenericName[tr]=Bittorrent istemcisi
GenericName[tr]=BitTorrent istemcisi GenericName[uk]=Bittorrent-клієнт
GenericName[uk]=BitTorrent-клієнт GenericName[zh]=Bittorrent之用户
GenericName[zh]=BitTorrent之用户 GenericName[zh_TW]=Bittorrent客戶端
GenericName[zh_TW]=BitTorrent客戶端
Comment=Download and share files over BitTorrent
Comment[fr]=Télécharger et partager des fichiers avec BitTorrent
Comment[pl]=Dzielenie się plikami przez BitTorrent
Icon=qbittorrent Icon=qbittorrent
MimeType=application/x-bittorrent;x-scheme-handler/magnet; MimeType=application/x-bittorrent;
Name=qBittorrent Name=qBittorrent
Name[ko]=큐비토런트 Name[ko]=큐비토런트
Terminal=false Terminal=false

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 483 B

BIN
src/Icons/uparrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

View File

@@ -47,7 +47,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleGetInfoString</key> <key>CFBundleGetInfoString</key>
<string>2.9.7</string> <string>2.6.3</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>

File diff suppressed because one or more lines are too long

View File

@@ -33,9 +33,6 @@
#include "ui_about.h" #include "ui_about.h"
#include <QFile> #include <QFile>
#include <QtGlobal>
#include <libtorrent/version.hpp>
#include <boost/version.hpp>
class about : public QDialog, private Ui::AboutDlg{ class about : public QDialog, private Ui::AboutDlg{
Q_OBJECT Q_OBJECT
@@ -64,8 +61,6 @@ class about : public QDialog, private Ui::AboutDlg{
QString trans_txt = "<p>"+tr("I would like to thank the following people who volunteered to translate qBittorrent:")+"</p>"; QString trans_txt = "<p>"+tr("I would like to thank the following people who volunteered to translate qBittorrent:")+"</p>";
trans_txt += QString::fromUtf8("<ul><li><u>Arabic:</u> SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)</li>\ trans_txt += QString::fromUtf8("<ul><li><u>Arabic:</u> SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)</li>\
<li><u>Armenian:</u> Hrant Ohanyan (hrantohanyan@mail.am)</li>\ <li><u>Armenian:</u> Hrant Ohanyan (hrantohanyan@mail.am)</li>\
<li><u>Basque:</u> Xabier Aramendi (azpidatziak@gmail.com)</li>\
<li><u>Belarusian:</u> Mihas Varantsou (meequz@gmail.com)</li>\
<li><u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)</li>\ <li><u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)</li>\
<li><u>Bulgarian:</u> Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)</li>\ <li><u>Bulgarian:</u> Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)</li>\
<li><u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)</li>\ <li><u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)</li>\
@@ -77,15 +72,13 @@ class about : public QDialog, private Ui::AboutDlg{
<li><u>Dutch:</u> Pieter Heyvaert (pieter_heyvaert@hotmail.com)</li>\ <li><u>Dutch:</u> Pieter Heyvaert (pieter_heyvaert@hotmail.com)</li>\
<li><u>Finnish:</u> Niklas Laxström (nikerabbit@users.sourceforge.net) and Pekka Niemi (pekka.niemi@iki.fi)</li>\ <li><u>Finnish:</u> Niklas Laxström (nikerabbit@users.sourceforge.net) and Pekka Niemi (pekka.niemi@iki.fi)</li>\
<li><u>Galician:</u> Marcos Lans (marcoslansgarza@gmail.com)</li>\ <li><u>Galician:</u> Marcos Lans (marcoslansgarza@gmail.com)</li>\
<li><u>Georgian:</u> Beqa Arabuli (arabulibeqa@yahoo.com)</li>\
<li><u>German:</u> Niels Hoffmann (zentralmaschine@users.sourceforge.net)</li>\ <li><u>German:</u> Niels Hoffmann (zentralmaschine@users.sourceforge.net)</li>\
<li><u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)</li>\ <li><u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)</li>\
<li><u>Hungarian:</u> Majoros Péter (majoros.peterj@gmail.com)</li>\ <li><u>Hungarian:</u> Majoros Péter (majoros.peterj@gmail.com)</li>\
<li><u>Italian:</u> Matteo Sechi (bu17714@gmail.com)</li>\ <li><u>Italian:</u> Matteo Sechi (bu17714@gmail.com)</li>\
<li><u>Japanese:</u> Masato Hashimoto (cabezon.hashimoto@gmail.com)</li>\ <li><u>Japanese:</u> Nardog (alphisation@gmail.com)</li>\
<li><u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)</li>\ <li><u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)</li>\
<li><u>Lithuanian:</u> Naglis Jonaitis (njonaitis@gmail.com)</li>\ <li><u>Norwegian:</u> Lars-Erik Labori (hamil@users.sourceforge.net)</li>\
<li><u>Norwegian:</u> Tomaso</li>\
<li><u>Polish:</u> Mariusz Fik (fisiu@opensuse.org)</li>\ <li><u>Polish:</u> Mariusz Fik (fisiu@opensuse.org)</li>\
<li><u>Portuguese:</u> Nick Marinho (nickmarinho@gmail.com)</li>\ <li><u>Portuguese:</u> Nick Marinho (nickmarinho@gmail.com)</li>\
<li><u>Romanian:</u> Obada Denis (obadadenis@users.sourceforge.net)</li>\ <li><u>Romanian:</u> Obada Denis (obadadenis@users.sourceforge.net)</li>\
@@ -105,10 +98,6 @@ class about : public QDialog, private Ui::AboutDlg{
te_license->setHtml(licensefile.readAll()); te_license->setHtml(licensefile.readAll());
licensefile.close(); licensefile.close();
} }
// Libraries
label_11->setText(QT_VERSION_STR);
label_12->setText(LIBTORRENT_VERSION);
label_13->setText(QString::number(BOOST_VERSION / 100000) + "." + QString::number((BOOST_VERSION / 100) % 1000) + "." + QString::number(BOOST_VERSION % 100));
show(); show();
} }
}; };

File diff suppressed because it is too large Load Diff

View File

@@ -1,81 +0,0 @@
/*
* Bittorrent Client using Qt4 and libtorrent.
* Copyright (C) 2011 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 DNSUPDATER_H
#define DNSUPDATER_H
#include <QObject>
#include <QHostAddress>
#include <QNetworkReply>
#include <QDateTime>
#include <QTimer>
#include "preferences.h"
/*!
* Based on http://www.dyndns.com/developers/specs/
*/
class DNSUpdater : public QObject
{
Q_OBJECT
public:
explicit DNSUpdater(QObject *parent = 0);
~DNSUpdater();
static QUrl getRegistrationUrl(int service);
public slots:
void updateCredentials();
private slots:
void checkPublicIP();
void ipRequestFinished(QNetworkReply* reply);
void updateDNSService();
void ipUpdateFinished(QNetworkReply* reply);
private:
QUrl getUpdateUrl() const;
void processIPUpdateReply(const QString &reply);
private:
QHostAddress m_lastIP;
QDateTime m_lastIPCheckTime;
QTimer m_ipCheckTimer;
int m_state;
// Service creds
DNS::Service m_service;
QString m_domain;
QString m_username;
QString m_password;
private:
static const int IP_CHECK_INTERVAL_MS = 1800000; // 30 min
enum State { OK, INVALID_CREDS, FATAL };
};
#endif // DNSUPDATER_H

View File

@@ -38,79 +38,71 @@
#include "downloadthread.h" #include "downloadthread.h"
#include "preferences.h" #include "preferences.h"
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
#include "rsssettings.h" #include "rsssettings.h"
#endif #endif
#include "qinisettings.h" #include "qinisettings.h"
/** Download Thread **/ /** Download Thread **/
DownloadThread::DownloadThread(QObject* parent) : QObject(parent) { downloadThread::downloadThread(QObject* parent) : QObject(parent) {
connect(&m_networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*))); connect(&m_networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*)));
#ifndef QT_NO_OPENSSL #ifndef QT_NO_OPENSSL
connect(&m_networkManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(ignoreSslErrors(QNetworkReply*,QList<QSslError>))); connect(&m_networkManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(ignoreSslErrors(QNetworkReply*,QList<QSslError>)));
#endif #endif
} }
void DownloadThread::processDlFinished(QNetworkReply* reply) { void downloadThread::processDlFinished(QNetworkReply* reply) {
QString url = reply->url().toString(); QString url = reply->url().toString();
qDebug("Download finished: %s", qPrintable(url)); qDebug("Download finished: %s", qPrintable(url));
// Check if the request was successful
if(reply->error() != QNetworkReply::NoError) { if(reply->error() != QNetworkReply::NoError) {
// Failure // Failure
qDebug("Download failure (%s), reason: %s", qPrintable(url), qPrintable(errorCodeToString(reply->error()))); qDebug("Download failure (%s), reason: %s", qPrintable(url), qPrintable(errorCodeToString(reply->error())));
emit downloadFailure(url, errorCodeToString(reply->error())); emit downloadFailure(url, errorCodeToString(reply->error()));
reply->deleteLater(); } else {
return; QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
} if(redirection.isValid()) {
// Check if the server ask us to redirect somewhere lese // We should redirect
const QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); qDebug("Redirecting from %s to %s", qPrintable(url), qPrintable(redirection.toUrl().toString()));
if(redirection.isValid()) { m_redirectMapping.insert(redirection.toUrl().toString(), url);
// We should redirect downloadUrl(redirection.toUrl().toString());
QUrl newUrl = redirection.toUrl(); return;
// Resolve relative urls }
if (newUrl.isRelative()) // Checking if it was redirecting, restoring initial URL
newUrl = reply->url().resolved(newUrl); if(m_redirectMapping.contains(url)) {
const QString newUrlString = newUrl.toString(); url = m_redirectMapping.take(url);
qDebug("Redirecting from %s to %s", qPrintable(url), qPrintable(newUrlString)); }
m_redirectMapping.insert(newUrlString, url); // Success
downloadUrl(newUrlString); QString filePath;
reply->deleteLater(); QTemporaryFile *tmpfile = new QTemporaryFile;
return; tmpfile->setAutoRemove(false);
} if (tmpfile->open()) {
// Checking if it was redirected, restoring initial URL filePath = tmpfile->fileName();
if(m_redirectMapping.contains(url)) { qDebug("Temporary filename is: %s", qPrintable(filePath));
url = m_redirectMapping.take(url); if(reply->open(QIODevice::ReadOnly)) {
} // TODO: Support GZIP compression
// Success tmpfile->write(reply->readAll());
QTemporaryFile *tmpfile = new QTemporaryFile; reply->close();
tmpfile->setAutoRemove(false); tmpfile->close();
if (tmpfile->open()) { delete tmpfile;
QString filePath = tmpfile->fileName(); // Send finished signal
qDebug("Temporary filename is: %s", qPrintable(filePath)); emit downloadFinished(url, filePath);
if(reply->isOpen() || reply->open(QIODevice::ReadOnly)) { } else {
// TODO: Support GZIP compression // Error when reading the request
tmpfile->write(reply->readAll()); tmpfile->close();
tmpfile->close(); delete tmpfile;
// XXX: tmpfile needs to be deleted on Windows before using the file emit downloadFailure(url, tr("I/O Error"));
// or it will complain that the file is used by another process. }
delete tmpfile;
// Send finished signal
emit downloadFinished(url, filePath);
} else { } else {
delete tmpfile; delete tmpfile;
// Error when reading the request
emit downloadFailure(url, tr("I/O Error")); emit downloadFailure(url, tr("I/O Error"));
} }
} else {
delete tmpfile;
emit downloadFailure(url, tr("I/O Error"));
} }
// Clean up // Clean up
reply->deleteLater(); reply->deleteLater();
} }
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
void DownloadThread::loadCookies(const QString &host_name, QString url) { void downloadThread::loadCookies(const QString &host_name, QString url) {
const QList<QByteArray> raw_cookies = RssSettings().getHostNameCookies(host_name); const QList<QByteArray> raw_cookies = RssSettings().getHostNameCookies(host_name);
QNetworkCookieJar *cookie_jar = m_networkManager.cookieJar(); QNetworkCookieJar *cookie_jar = m_networkManager.cookieJar();
QList<QNetworkCookie> cookies; QList<QNetworkCookie> cookies;
@@ -127,24 +119,30 @@ void DownloadThread::loadCookies(const QString &host_name, QString url) {
} }
#endif #endif
void DownloadThread::downloadTorrentUrl(const QString &url) { void downloadThread::downloadTorrentUrl(QString url) {
#ifndef DISABLE_GUI
// Load cookies
QString host_name = QUrl::fromEncoded(url.toLocal8Bit()).host();
if(!host_name.isEmpty())
loadCookies(host_name, url);
#endif
// Process request // Process request
QNetworkReply *reply = downloadUrl(url); QNetworkReply *reply = downloadUrl(url);
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64))); connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64)));
} }
QNetworkReply* DownloadThread::downloadUrl(const QString &url){ QNetworkReply* downloadThread::downloadUrl(QString url){
// Update proxy settings // Update proxy settings
applyProxySettings(); applyProxySettings();
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
// Load cookies // Load cookies
QString host_name = QUrl::fromEncoded(url.toUtf8()).host(); QString host_name = QUrl::fromEncoded(url.toLocal8Bit()).host();
if(!host_name.isEmpty()) if(!host_name.isEmpty())
loadCookies(host_name, url); loadCookies(host_name, url);
#endif #endif
// Process download request // Process download request
qDebug("url is %s", qPrintable(url)); qDebug("url is %s", qPrintable(url));
const QUrl qurl = QUrl::fromEncoded(url.toUtf8()); const QUrl qurl = QUrl::fromEncoded(url.toLocal8Bit());
QNetworkRequest request(qurl); QNetworkRequest request(qurl);
// Spoof Firefox 3.5 user agent to avoid // Spoof Firefox 3.5 user agent to avoid
// Web server banning // Web server banning
@@ -158,28 +156,26 @@ QNetworkReply* DownloadThread::downloadUrl(const QString &url){
return m_networkManager.get(request); return m_networkManager.get(request);
} }
void DownloadThread::checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal) { void downloadThread::checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal) {
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if(!reply) return;
if(bytesTotal > 0) { if(bytesTotal > 0) {
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
// Total number of bytes is available // Total number of bytes is available
if(bytesTotal > 1048576) { if(bytesTotal > 1048576) {
// More than 1MB, this is probably not a torrent file, aborting... // More than 1MB, this is probably not a torrent file, aborting...
reply->abort(); reply->abort();
reply->deleteLater();
} else { } else {
disconnect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64))); disconnect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64)));
} }
} else { } else {
if(bytesReceived > 1048576) { if(bytesReceived > 1048576) {
// More than 1MB, this is probably not a torrent file, aborting... // More than 1MB, this is probably not a torrent file, aborting...
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
reply->abort(); reply->abort();
reply->deleteLater();
} }
} }
} }
void DownloadThread::applyProxySettings() { void downloadThread::applyProxySettings() {
QNetworkProxy proxy; QNetworkProxy proxy;
const Preferences pref; const Preferences pref;
if(pref.isProxyEnabled()) { if(pref.isProxyEnabled()) {
@@ -207,7 +203,7 @@ void DownloadThread::applyProxySettings() {
m_networkManager.setProxy(proxy); m_networkManager.setProxy(proxy);
} }
QString DownloadThread::errorCodeToString(QNetworkReply::NetworkError status) { QString downloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
switch(status){ switch(status){
case QNetworkReply::HostNotFoundError: case QNetworkReply::HostNotFoundError:
return tr("The remote host name was not found (invalid hostname)"); return tr("The remote host name was not found (invalid hostname)");
@@ -257,7 +253,7 @@ QString DownloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
} }
#ifndef QT_NO_OPENSSL #ifndef QT_NO_OPENSSL
void DownloadThread::ignoreSslErrors(QNetworkReply* reply, const QList<QSslError> &errors) { void downloadThread::ignoreSslErrors(QNetworkReply* reply,QList<QSslError> errors) {
Q_UNUSED(errors) Q_UNUSED(errors)
// Ignore all SSL errors // Ignore all SSL errors
reply->ignoreSslErrors(); reply->ignoreSslErrors();

View File

@@ -36,28 +36,26 @@
#include <QHash> #include <QHash>
#include <QSslError> #include <QSslError>
QT_BEGIN_NAMESPACE
class QNetworkAccessManager; class QNetworkAccessManager;
QT_END_NAMESPACE
class DownloadThread : public QObject { class downloadThread : public QObject {
Q_OBJECT Q_OBJECT
public: public:
DownloadThread(QObject* parent = 0); downloadThread(QObject* parent = 0);
QNetworkReply* downloadUrl(const QString &url); QNetworkReply* downloadUrl(QString url);
void downloadTorrentUrl(const QString &url); void downloadTorrentUrl(QString url);
//void setProxy(QString IP, int port, QString username, QString password); //void setProxy(QString IP, int port, QString username, QString password);
signals: signals:
void downloadFinished(const QString &url, const QString &file_path); void downloadFinished(QString url, QString file_path);
void downloadFailure(const QString &url, const QString &reason); void downloadFailure(QString url, QString reason);
private slots: private slots:
void processDlFinished(QNetworkReply* reply); void processDlFinished(QNetworkReply* reply);
void checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal); void checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal);
#ifndef QT_NO_OPENSSL #ifndef QT_NO_OPENSSL
void ignoreSslErrors(QNetworkReply*,const QList<QSslError>&); void ignoreSslErrors(QNetworkReply*,QList<QSslError>);
#endif #endif
private: private:

View File

@@ -1,77 +1,32 @@
/*
* Bittorrent Client using Qt4 and libtorrent.
* Copyright (C) 2011 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
*/
#include <QListWidgetItem>
#include <QLabel>
#include "executionlog.h" #include "executionlog.h"
#include "ui_executionlog.h" #include "ui_executionlog.h"
#include "qbtsession.h" #include "qbtsession.h"
#include "iconprovider.h" #include "iconprovider.h"
#include "loglistwidget.h"
ExecutionLog::ExecutionLog(QWidget *parent) : ExecutionLog::ExecutionLog(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::ExecutionLog), ui(new Ui::ExecutionLog)
m_logList(new LogListWidget(MAX_LOG_MESSAGES)),
m_banList(new LogListWidget(MAX_LOG_MESSAGES))
{ {
ui->setupUi(this); ui->setupUi(this);
ui->tabConsole->setTabIcon(0, IconProvider::instance()->getIcon("view-calendar-journal")); ui->tabConsole->setTabIcon(0, IconProvider::instance()->getIcon("view-calendar-journal"));
ui->tabConsole->setTabIcon(1, IconProvider::instance()->getIcon("view-filter")); ui->tabConsole->setTabIcon(1, IconProvider::instance()->getIcon("view-filter"));
ui->tabGeneral->layout()->addWidget(m_logList); ui->textConsole->setHtml(QBtSession::instance()->getConsoleMessages().join("<br>"));
ui->tabBan->layout()->addWidget(m_banList);
const QStringList log_msgs = QBtSession::instance()->getConsoleMessages();
foreach(const QString& msg, log_msgs)
addLogMessage(msg);
const QStringList ban_msgs = QBtSession::instance()->getPeerBanMessages();
foreach(const QString& msg, ban_msgs)
addBanMessage(msg);
connect(QBtSession::instance(), SIGNAL(newConsoleMessage(QString)), SLOT(addLogMessage(QString))); connect(QBtSession::instance(), SIGNAL(newConsoleMessage(QString)), SLOT(addLogMessage(QString)));
ui->textBannedPeers->setHtml(QBtSession::instance()->getPeerBanMessages().join("<br>"));
connect(QBtSession::instance(), SIGNAL(newBanMessage(QString)), SLOT(addBanMessage(QString))); connect(QBtSession::instance(), SIGNAL(newBanMessage(QString)), SLOT(addBanMessage(QString)));
} }
ExecutionLog::~ExecutionLog() ExecutionLog::~ExecutionLog()
{ {
delete m_logList;
delete m_banList;
delete ui; delete ui;
} }
void ExecutionLog::addLogMessage(const QString &msg) void ExecutionLog::addLogMessage(const QString &msg)
{ {
m_logList->appendLine(msg); ui->textConsole->setHtml(msg+ui->textConsole->toHtml());
} }
void ExecutionLog::addBanMessage(const QString &msg) void ExecutionLog::addBanMessage(const QString &msg)
{ {
m_banList->appendLine(msg); ui->textBannedPeers->setHtml(msg+ui->textBannedPeers->toHtml());
} }

Some files were not shown because too many files have changed in this diff Show More