You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-07 09:52:18 +02:00
Compare commits
113 Commits
release-5.
...
release-2.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3d9a128283 | ||
![]() |
39867f4681 | ||
![]() |
30659a353d | ||
![]() |
d4b5f68295 | ||
![]() |
01725b1b55 | ||
![]() |
64654705ca | ||
![]() |
049b08999a | ||
![]() |
0150a05c68 | ||
![]() |
8df71e6c44 | ||
![]() |
cc53b5bb15 | ||
![]() |
e66a956596 | ||
![]() |
799a6f0d85 | ||
![]() |
5d4a660631 | ||
![]() |
a721fd389b | ||
![]() |
5923be57b4 | ||
![]() |
1a9bd1b171 | ||
![]() |
4322d38b87 | ||
![]() |
f16a7e0088 | ||
![]() |
9a24243359 | ||
![]() |
b5e2058b44 | ||
![]() |
ddc803a250 | ||
![]() |
1fd63f0665 | ||
![]() |
2b1399303e | ||
![]() |
82e7a2d724 | ||
![]() |
0dc8773595 | ||
![]() |
1d358dc9a7 | ||
![]() |
1fc0310803 | ||
![]() |
3b35050736 | ||
![]() |
adfdb78821 | ||
![]() |
c3e79b843b | ||
![]() |
ee83c5490e | ||
![]() |
9ccf603c0b | ||
![]() |
ae8d92f7d0 | ||
![]() |
095c8654e8 | ||
![]() |
fae47c8494 | ||
![]() |
65efd657a0 | ||
![]() |
552bc3c689 | ||
![]() |
8d563f9eb6 | ||
![]() |
54cd79201f | ||
![]() |
9c633b0975 | ||
![]() |
67db694494 | ||
![]() |
a42d4afeb7 | ||
![]() |
a8a42fb8f3 | ||
![]() |
2b9692ddde | ||
![]() |
4b3c04439e | ||
![]() |
f0a2efd481 | ||
![]() |
2a44ec9b91 | ||
![]() |
895d5151e1 | ||
![]() |
233d6bbb8d | ||
![]() |
66ee39df9a | ||
![]() |
35e36036be | ||
![]() |
1b0de21b52 | ||
![]() |
536f275ca3 | ||
![]() |
3238336e6e | ||
![]() |
bd8c03ecd8 | ||
![]() |
32ed944ac8 | ||
![]() |
72fbf11f70 | ||
![]() |
0dc4b27cb6 | ||
![]() |
a5aa1a5cab | ||
![]() |
2dbf418f5a | ||
![]() |
04f6d96575 | ||
![]() |
25eb43d3bb | ||
![]() |
cc785c4eea | ||
![]() |
a589cb7fdc | ||
![]() |
4704b50379 | ||
![]() |
f43de35c33 | ||
![]() |
ec61870c9e | ||
![]() |
746ffaf420 | ||
![]() |
c60545977c | ||
![]() |
10020ed520 | ||
![]() |
0aae5f947d | ||
![]() |
11b5965b31 | ||
![]() |
35b2377e68 | ||
![]() |
b0ab072aba | ||
![]() |
4552df5ec2 | ||
![]() |
c19db4fa04 | ||
![]() |
74e2339bc8 | ||
![]() |
991c308423 | ||
![]() |
1867643288 | ||
![]() |
50023bd968 | ||
![]() |
30c5bf3fd6 | ||
![]() |
4e2d9564d1 | ||
![]() |
600186a6e9 | ||
![]() |
ca0e605276 | ||
![]() |
201aaae897 | ||
![]() |
629dc15bef | ||
![]() |
35541e14aa | ||
![]() |
cdede2d3db | ||
![]() |
1f2e34b828 | ||
![]() |
d5aaf975dd | ||
![]() |
4ac59dbaba | ||
![]() |
67802b16ab | ||
![]() |
41883c99c5 | ||
![]() |
d663c7bd3a | ||
![]() |
a6d1090515 | ||
![]() |
7844ce287d | ||
![]() |
c6ce0d35b2 | ||
![]() |
eec56074fc | ||
![]() |
7c180dc57a | ||
![]() |
043b9f2981 | ||
![]() |
229559ef67 | ||
![]() |
5e4b815d0f | ||
![]() |
c98ab55e11 | ||
![]() |
632c2c5e4a | ||
![]() |
bbd9764f9c | ||
![]() |
7437bd4265 | ||
![]() |
1299e75934 | ||
![]() |
514f82a3c9 | ||
![]() |
51a69dc36a | ||
![]() |
737fee79ed | ||
![]() |
e5e4bb1111 | ||
![]() |
75111cdd8a | ||
![]() |
f5f915eb5d |
5
AUTHORS
5
AUTHORS
@@ -2,6 +2,7 @@ Author:
|
||||
* Christophe Dumez <chris@qbittorrent.org>
|
||||
|
||||
Contributors:
|
||||
* Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Stefanos Antaris <santaris@csd.auth.gr>
|
||||
* Mohammad Dib <mdib@qbittorrent.org>
|
||||
* Mirco Chinelli <infinity89@fastwebmail.it>
|
||||
@@ -68,6 +69,7 @@ Translations authors:
|
||||
* files: src/lang/*.ts
|
||||
copyright:
|
||||
- Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)
|
||||
- Armenian: Hrant Ohanyan (hrantohanyan@mail.am)
|
||||
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
|
||||
- Bulgarian: Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)
|
||||
- Catalan: Francisco Luque Contreras (frannoe@ya.com)
|
||||
@@ -87,7 +89,8 @@ Translations authors:
|
||||
- Italian: Matteo Sechi (bu17714@gmail.com)
|
||||
- Japanese: Nardog (alphisation@gmail.com)
|
||||
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
||||
- Norwegian: Lars-Erik Labori (hamil@users.sourceforge.net)
|
||||
- Lithuanian: Naglis Jonaitis (njonaitis@gmail.com)
|
||||
- Norwegian: Tomaso
|
||||
- Polish: Mariusz Fik (fisiu@opensuse.org)
|
||||
- Portuguese: Nick Marinho (nickmarinho@gmail.com)
|
||||
- Romanian: Obada Denis (obadadenis@users.sourceforge.net)
|
||||
|
68
Changelog
68
Changelog
@@ -1,3 +1,71 @@
|
||||
* Sat Feb 26 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.7
|
||||
- BUGFIX: Encoding fixes (Windows)
|
||||
- BUGFIX: Fix "append label to save path" (Windows)
|
||||
- BUGFIX: Disable OS cache for aligned files to reduce memory consumption
|
||||
- BUGFIX: Fix torrent upload from Web UI (Windows)
|
||||
- BUGFIX: Fix cursor problem in torrent addition dialog
|
||||
- BUGFIX: Fix crash when additing an empty tracker URL
|
||||
- BUGFIX: Share ratio can now go over 100
|
||||
- BUGFIX: Fix compilation with boost >= v1.46
|
||||
|
||||
* Tue Feb 8 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.6
|
||||
- FEATURE: IP address reported to trackers is now customizable
|
||||
- BUGFIX: Use slashes instead of antislashes in URLs (Windows)
|
||||
- BUGFIX: Fix articles read state reset problem in RSS
|
||||
- BUGFIX: Fix possible path encoding issues on Windows
|
||||
- BUGFIX: Fix downloads from URLs on Windows
|
||||
- I18N: Added Lithuanian translation
|
||||
- COSMETIC: Improve main window layout
|
||||
- COSMETIC: Improve properties buttons style
|
||||
- COSMETIC: Display pieces being downloaded in green instead of yellow
|
||||
- COSMETIC: Improve piece availability bar appearance
|
||||
|
||||
* Thu Feb 3 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.5
|
||||
- BUGFIX: Make sure the progress is not 100% unless the file is complete
|
||||
- BUGFIX: Fix memory leak in HTTP torrent downloader
|
||||
- BUGFIX: Use native file dialogs (by Vladimir Golovnev)
|
||||
- BUGFIX: Fix encoding problem in torrent moving code (by Vladimir Golovnev)
|
||||
- BUGFIX: Performance improvement on ARM
|
||||
- BUGFIX: RSS code rewrite (more cpu/memory efficient)
|
||||
- I18N: Updated Norwegian translation (Tomaso)
|
||||
|
||||
* Sun Jan 23 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.4
|
||||
- BUGFIX: Added unicode support to email notification
|
||||
- BUGFIX: Improved compatibility with various SMTP servers
|
||||
- BUGFIX: Fix Labeling in RSS downloader
|
||||
- BUGFIX: Avoid main window flashing on startup (closes #703984)
|
||||
- BUGFIX: Improved hostname resolution code
|
||||
- BUGFIX: Dropped dependency on libboost-thread
|
||||
- BUGFIX: Display legal notice on screen center
|
||||
- BUGFIX: Fix renaming of single-file torrents (by Vladimir Golovnev)
|
||||
- I18N: More dialog buttons are now translated (by Vladimir Golovnev)
|
||||
- I18N: Fix translation of size units (by Vladimir Golovnev)
|
||||
|
||||
* Sat Jan 15 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.3
|
||||
- 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
|
||||
|
||||
* Wed Jan 12 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.2
|
||||
- BUGFIX: Do not report PeX as being disabled when DHT is
|
||||
- BUGFIX: Fix possible crash on adding magnet links
|
||||
- BUGFIX: Fix torrent import (was not working)
|
||||
- I18N: Updated Greek, Croatian, Russian, Unkrainian and Bulgarian translations
|
||||
- I18N: Added Armenian translation (New)
|
||||
- I18N: Remove country flags from program preferences (language selection)
|
||||
- I18N: Translate locale names (language selection)
|
||||
|
||||
* Mon Jan 10 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.1
|
||||
- BUGFIX: Really disable torrent addition dialog by default
|
||||
- BUGFIX: Fix some missing icons in the Web UI
|
||||
- BUGFIX: Fix magnet torrent name update problem
|
||||
- COSMETIC: Use 24px size for toolbar icons and reduce spacing
|
||||
- COSMETIC: Move transfer list filter on the right side of the toolbar
|
||||
|
||||
* Sun Jan 9 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.6.0
|
||||
- FEATURE: Use system icons (Linux, Qt >= 4.6)
|
||||
- FEATURE: Improved ETA calculation
|
||||
|
4
INSTALL
4
INSTALL
@@ -18,9 +18,9 @@ qBittorrent - A BitTorrent client in C++ / Qt4
|
||||
-> http://www.libtorrent.net
|
||||
Be careful: another library (the one used by rTorrent) uses a similar name.
|
||||
|
||||
- libboost 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
|
||||
- libboost 1.34.x (libboost-filesystem, libboost-date-time) + libasio
|
||||
or
|
||||
- libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
|
||||
- libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-date-time)
|
||||
|
||||
- python >= 2.3 (needed by search engine)
|
||||
* Run time only dependency
|
||||
|
14
configure
vendored
14
configure
vendored
@@ -346,6 +346,12 @@ public:
|
||||
if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) {
|
||||
conf->addExtra("CONFIG += debug");
|
||||
}
|
||||
#ifdef Q_OS_FREEBSD
|
||||
conf->addLib("-lexecinfo");
|
||||
conf->addExtra("MANPREFIX = \$\$PREFIX");
|
||||
#else
|
||||
conf->addExtra("MANPREFIX = \$\$PREFIX/share");
|
||||
#endif
|
||||
return(QT_VERSION >= 0x040500);
|
||||
}
|
||||
};
|
||||
@@ -445,9 +451,6 @@ public:
|
||||
if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
|
||||
return false;
|
||||
}
|
||||
if(!conf->checkHeader(s, "boost/thread.hpp")) {
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
QStringList sl;
|
||||
sl << "/usr/include";
|
||||
@@ -468,9 +471,6 @@ public:
|
||||
if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
|
||||
return false;
|
||||
}
|
||||
if(!conf->checkHeader(s, "boost/thread.hpp")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
conf->addIncludePath(s);
|
||||
// Find library
|
||||
@@ -481,7 +481,7 @@ public:
|
||||
#endif
|
||||
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
// Not required by nox
|
||||
required_libs << "filesystem" << "thread";
|
||||
required_libs << "filesystem" ;
|
||||
}
|
||||
QStringList libDirs;
|
||||
libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
|
||||
|
@@ -1,5 +1,3 @@
|
||||
INCLUDEPATH += $$PWD
|
||||
|
||||
exists(conf.pri) {
|
||||
# to the conf.pri goes all system dependent stuff
|
||||
include(conf.pri)
|
||||
|
@@ -48,9 +48,6 @@ public:
|
||||
if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
|
||||
return false;
|
||||
}
|
||||
if(!conf->checkHeader(s, "boost/thread.hpp")) {
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
QStringList sl;
|
||||
sl << "/usr/include";
|
||||
@@ -71,9 +68,6 @@ public:
|
||||
if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) {
|
||||
return false;
|
||||
}
|
||||
if(!conf->checkHeader(s, "boost/thread.hpp")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
conf->addIncludePath(s);
|
||||
// Find library
|
||||
@@ -84,7 +78,7 @@ public:
|
||||
#endif
|
||||
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||
// Not required by nox
|
||||
required_libs << "filesystem" << "thread";
|
||||
required_libs << "filesystem" ;
|
||||
}
|
||||
QStringList libDirs;
|
||||
libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
|
||||
|
@@ -21,6 +21,12 @@ public:
|
||||
if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) {
|
||||
conf->addExtra("CONFIG += debug");
|
||||
}
|
||||
#ifdef Q_OS_FREEBSD
|
||||
conf->addLib("-lexecinfo");
|
||||
conf->addExtra("MANPREFIX = $$PREFIX");
|
||||
#else
|
||||
conf->addExtra("MANPREFIX = $$PREFIX/share");
|
||||
#endif
|
||||
return(QT_VERSION >= 0x040500);
|
||||
}
|
||||
};
|
||||
|
@@ -1,34 +1,35 @@
|
||||
[Desktop Entry]
|
||||
Categories=Qt;Network;P2P;
|
||||
Comment=V2.6.0
|
||||
Comment=V2.6.7
|
||||
Exec=qbittorrent %f
|
||||
GenericName=Bittorrent client
|
||||
GenericName[ar]=العميل Bittorrent
|
||||
GenericName=BitTorrent client
|
||||
GenericName[ar]=العميل BitTorrent
|
||||
GenericName[bg]=Торент клиент
|
||||
GenericName[cs]=Bittorrent klient
|
||||
GenericName[de]=Bittorren Client
|
||||
GenericName[el]=Bittorrent πελάτης
|
||||
GenericName[es]=Cliente Bittorrent
|
||||
GenericName[fi]=Bittorrent-ohjelma
|
||||
GenericName[fr]=Client Bittorrent
|
||||
GenericName[hr]=Bittorrent klijent
|
||||
GenericName[hu]=Bittorrent kliens
|
||||
GenericName[it]=Client Bittorrent
|
||||
GenericName[ja]=Bittorrent クライアント
|
||||
GenericName[cs]=BitTorrent klient
|
||||
GenericName[de]=BitTorren Client
|
||||
GenericName[el]=BitTorrent πελάτης
|
||||
GenericName[es]=Cliente BitTorrent
|
||||
GenericName[fi]=BitTorrent-ohjelma
|
||||
GenericName[fr]=Client BitTorrent
|
||||
GenericName[hr]=BitTorrent klijent
|
||||
GenericName[hu]=BitTorrent kliens
|
||||
GenericName[it]=Client BitTorrent
|
||||
GenericName[ja]=BitTorrent クライアント
|
||||
GenericName[ko]=비토렌트 클라이언트
|
||||
GenericName[nl]=Bittorrent-cliënt
|
||||
GenericName[pl]=Klient Bittorrent
|
||||
GenericName[pt]=Cliente Bittorrent
|
||||
GenericName[pt_BR]=Cliente Bittorrent
|
||||
GenericName[ro]=Client Bittorrent
|
||||
GenericName[ru]=клиент Bittorrent
|
||||
GenericName[sk]=Klient siete Bittorrent
|
||||
GenericName[sr]=Bittorrent-клијент
|
||||
GenericName[sv]=Bittorrent-klient
|
||||
GenericName[tr]=Bittorrent istemcisi
|
||||
GenericName[uk]=Bittorrent-клієнт
|
||||
GenericName[zh]=Bittorrent之用户
|
||||
GenericName[zh_TW]=Bittorrent客戶端
|
||||
GenericName[lt]=BitTorrent klientas
|
||||
GenericName[nl]=BitTorrent-cliënt
|
||||
GenericName[pl]=Klient BitTorrent
|
||||
GenericName[pt]=Cliente BitTorrent
|
||||
GenericName[pt_BR]=Cliente BitTorrent
|
||||
GenericName[ro]=Client BitTorrent
|
||||
GenericName[ru]=клиент BitTorrent
|
||||
GenericName[sk]=Klient siete BitTorrent
|
||||
GenericName[sr]=BitTorrent-клијент
|
||||
GenericName[sv]=BitTorrent-klient
|
||||
GenericName[tr]=BitTorrent istemcisi
|
||||
GenericName[uk]=BitTorrent-клієнт
|
||||
GenericName[zh]=BitTorrent之用户
|
||||
GenericName[zh_TW]=BitTorrent客戶端
|
||||
Icon=qbittorrent
|
||||
MimeType=application/x-bittorrent;
|
||||
Name=qBittorrent
|
||||
|
@@ -47,7 +47,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>2.6.0</string>
|
||||
<string>2.6.7</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
|
@@ -60,6 +60,7 @@ class about : public QDialog, private Ui::AboutDlg{
|
||||
// Translation
|
||||
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>\
|
||||
<li><u>Armenian:</u> Hrant Ohanyan (hrantohanyan@mail.am)</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>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)</li>\
|
||||
@@ -77,7 +78,8 @@ class about : public QDialog, private Ui::AboutDlg{
|
||||
<li><u>Italian:</u> Matteo Sechi (bu17714@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>Norwegian:</u> Lars-Erik Labori (hamil@users.sourceforge.net)</li>\
|
||||
<li><u>Lithuanian:</u> Naglis Jonaitis (njonaitis@gmail.com)</li>\
|
||||
<li><u>Norwegian:</u> Tomaso</li>\
|
||||
<li><u>Polish:</u> Mariusz Fik (fisiu@opensuse.org)</li>\
|
||||
<li><u>Portuguese:</u> Nick Marinho (nickmarinho@gmail.com)</li>\
|
||||
<li><u>Romanian:</u> Obada Denis (obadadenis@users.sourceforge.net)</li>\
|
||||
|
@@ -38,7 +38,7 @@
|
||||
#include "downloadthread.h"
|
||||
#include "preferences.h"
|
||||
#ifndef DISABLE_GUI
|
||||
#include "rsssettings.h"
|
||||
#include "rsssettings.h"
|
||||
#endif
|
||||
#include "qinisettings.h"
|
||||
|
||||
@@ -54,48 +54,52 @@ downloadThread::downloadThread(QObject* parent) : QObject(parent) {
|
||||
void downloadThread::processDlFinished(QNetworkReply* reply) {
|
||||
QString url = reply->url().toString();
|
||||
qDebug("Download finished: %s", qPrintable(url));
|
||||
// Check if the request was successful
|
||||
if(reply->error() != QNetworkReply::NoError) {
|
||||
// Failure
|
||||
qDebug("Download failure (%s), reason: %s", qPrintable(url), qPrintable(errorCodeToString(reply->error())));
|
||||
emit downloadFailure(url, errorCodeToString(reply->error()));
|
||||
} else {
|
||||
QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
||||
if(redirection.isValid()) {
|
||||
// We should redirect
|
||||
qDebug("Redirecting from %s to %s", qPrintable(url), qPrintable(redirection.toUrl().toString()));
|
||||
m_redirectMapping.insert(redirection.toUrl().toString(), url);
|
||||
downloadUrl(redirection.toUrl().toString());
|
||||
return;
|
||||
}
|
||||
// Checking if it was redirecting, restoring initial URL
|
||||
if(m_redirectMapping.contains(url)) {
|
||||
url = m_redirectMapping.take(url);
|
||||
}
|
||||
// Success
|
||||
QString filePath;
|
||||
QTemporaryFile *tmpfile = new QTemporaryFile;
|
||||
tmpfile->setAutoRemove(false);
|
||||
if (tmpfile->open()) {
|
||||
filePath = tmpfile->fileName();
|
||||
qDebug("Temporary filename is: %s", qPrintable(filePath));
|
||||
if(reply->open(QIODevice::ReadOnly)) {
|
||||
// TODO: Support GZIP compression
|
||||
tmpfile->write(reply->readAll());
|
||||
reply->close();
|
||||
tmpfile->close();
|
||||
delete tmpfile;
|
||||
// Send finished signal
|
||||
emit downloadFinished(url, filePath);
|
||||
} else {
|
||||
// Error when reading the request
|
||||
tmpfile->close();
|
||||
delete tmpfile;
|
||||
emit downloadFailure(url, tr("I/O Error"));
|
||||
}
|
||||
reply->deleteLater();
|
||||
return;
|
||||
}
|
||||
// Check if the server ask us to redirect somewhere lese
|
||||
const QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
||||
if(redirection.isValid()) {
|
||||
// We should redirect
|
||||
qDebug("Redirecting from %s to %s", qPrintable(url), qPrintable(redirection.toUrl().toString()));
|
||||
m_redirectMapping.insert(redirection.toUrl().toString(), url);
|
||||
downloadUrl(redirection.toUrl().toString());
|
||||
reply->deleteLater();
|
||||
return;
|
||||
}
|
||||
// Checking if it was redirected, restoring initial URL
|
||||
if(m_redirectMapping.contains(url)) {
|
||||
url = m_redirectMapping.take(url);
|
||||
}
|
||||
// Success
|
||||
QTemporaryFile *tmpfile = new QTemporaryFile;
|
||||
tmpfile->setAutoRemove(false);
|
||||
if (tmpfile->open()) {
|
||||
QString filePath = tmpfile->fileName();
|
||||
qDebug("Temporary filename is: %s", qPrintable(filePath));
|
||||
if(reply->isOpen() || reply->open(QIODevice::ReadOnly)) {
|
||||
// TODO: Support GZIP compression
|
||||
tmpfile->write(reply->readAll());
|
||||
tmpfile->close();
|
||||
// XXX: For some reason, tmpfile has to be destroyed before
|
||||
// the signal is sent or the file stays locked on Windows
|
||||
// for some reason.
|
||||
delete tmpfile;
|
||||
// Send finished signal
|
||||
emit downloadFinished(url, filePath);
|
||||
} else {
|
||||
delete tmpfile;
|
||||
// Error when reading the request
|
||||
emit downloadFailure(url, tr("I/O Error"));
|
||||
}
|
||||
} else {
|
||||
delete tmpfile;
|
||||
emit downloadFailure(url, tr("I/O Error"));
|
||||
}
|
||||
// Clean up
|
||||
reply->deleteLater();
|
||||
@@ -119,30 +123,24 @@ void downloadThread::loadCookies(const QString &host_name, QString url) {
|
||||
}
|
||||
#endif
|
||||
|
||||
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
|
||||
void downloadThread::downloadTorrentUrl(const QString &url) {
|
||||
// Process request
|
||||
QNetworkReply *reply = downloadUrl(url);
|
||||
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64)));
|
||||
}
|
||||
|
||||
QNetworkReply* downloadThread::downloadUrl(QString url){
|
||||
QNetworkReply* downloadThread::downloadUrl(const QString &url){
|
||||
// Update proxy settings
|
||||
applyProxySettings();
|
||||
#ifndef DISABLE_GUI
|
||||
// Load cookies
|
||||
QString host_name = QUrl::fromEncoded(url.toLocal8Bit()).host();
|
||||
QString host_name = QUrl::fromEncoded(url.toUtf8()).host();
|
||||
if(!host_name.isEmpty())
|
||||
loadCookies(host_name, url);
|
||||
#endif
|
||||
// Process download request
|
||||
qDebug("url is %s", qPrintable(url));
|
||||
const QUrl qurl = QUrl::fromEncoded(url.toLocal8Bit());
|
||||
const QUrl qurl = QUrl::fromEncoded(url.toUtf8());
|
||||
QNetworkRequest request(qurl);
|
||||
// Spoof Firefox 3.5 user agent to avoid
|
||||
// Web server banning
|
||||
@@ -157,20 +155,22 @@ QNetworkReply* downloadThread::downloadUrl(QString url){
|
||||
}
|
||||
|
||||
void downloadThread::checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal) {
|
||||
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
|
||||
if(!reply) return;
|
||||
if(bytesTotal > 0) {
|
||||
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
|
||||
// Total number of bytes is available
|
||||
if(bytesTotal > 1048576) {
|
||||
// More than 1MB, this is probably not a torrent file, aborting...
|
||||
reply->abort();
|
||||
reply->deleteLater();
|
||||
} else {
|
||||
disconnect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64)));
|
||||
}
|
||||
} else {
|
||||
if(bytesReceived > 1048576) {
|
||||
// More than 1MB, this is probably not a torrent file, aborting...
|
||||
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
|
||||
reply->abort();
|
||||
reply->deleteLater();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -253,7 +253,7 @@ QString downloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
|
||||
}
|
||||
|
||||
#ifndef QT_NO_OPENSSL
|
||||
void downloadThread::ignoreSslErrors(QNetworkReply* reply,QList<QSslError> errors) {
|
||||
void downloadThread::ignoreSslErrors(QNetworkReply* reply, const QList<QSslError> &errors) {
|
||||
Q_UNUSED(errors)
|
||||
// Ignore all SSL errors
|
||||
reply->ignoreSslErrors();
|
||||
|
@@ -43,19 +43,19 @@ class downloadThread : public QObject {
|
||||
|
||||
public:
|
||||
downloadThread(QObject* parent = 0);
|
||||
QNetworkReply* downloadUrl(QString url);
|
||||
void downloadTorrentUrl(QString url);
|
||||
QNetworkReply* downloadUrl(const QString &url);
|
||||
void downloadTorrentUrl(const QString &url);
|
||||
//void setProxy(QString IP, int port, QString username, QString password);
|
||||
|
||||
signals:
|
||||
void downloadFinished(QString url, QString file_path);
|
||||
void downloadFailure(QString url, QString reason);
|
||||
void downloadFinished(const QString &url, const QString &file_path);
|
||||
void downloadFailure(const QString &url, const QString &reason);
|
||||
|
||||
private slots:
|
||||
void processDlFinished(QNetworkReply* reply);
|
||||
void checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal);
|
||||
#ifndef QT_NO_OPENSSL
|
||||
void ignoreSslErrors(QNetworkReply*,QList<QSslError>);
|
||||
void ignoreSslErrors(QNetworkReply*,const QList<QSslError>&);
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
@@ -12,7 +12,7 @@
|
||||
#include <QSet>
|
||||
#include <iostream>
|
||||
#include <errno.h>
|
||||
#ifdef Q_WS_MAC
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_FREEBSD)
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
#include <string.h>
|
||||
|
@@ -58,8 +58,11 @@ void IconProvider::drop()
|
||||
QIcon IconProvider::getIcon(const QString &iconId)
|
||||
{
|
||||
#if defined(Q_WS_X11) && (QT_VERSION >= QT_VERSION_CHECK(4,6,0))
|
||||
if(m_useSystemTheme)
|
||||
return QIcon::fromTheme(iconId, QIcon(":/Icons/oxygen/"+iconId+".png"));
|
||||
if(m_useSystemTheme) {
|
||||
QIcon icon = QIcon::fromTheme(iconId, QIcon(":/Icons/oxygen/"+iconId+".png"));
|
||||
icon = generateDifferentSizes(icon);
|
||||
return icon;
|
||||
}
|
||||
#endif
|
||||
return QIcon(":/Icons/oxygen/"+iconId+".png");
|
||||
}
|
||||
@@ -69,6 +72,28 @@ void IconProvider::useSystemIconTheme(bool enable)
|
||||
{
|
||||
m_useSystemTheme = enable;
|
||||
}
|
||||
|
||||
QIcon IconProvider::generateDifferentSizes(const QIcon &icon)
|
||||
{
|
||||
QIcon new_icon;
|
||||
QList<QSize> required_sizes;
|
||||
required_sizes << QSize(16, 16) << QSize(24, 24);
|
||||
QList<QIcon::Mode> modes;
|
||||
modes << QIcon::Normal << QIcon::Active << QIcon::Selected << QIcon::Disabled;
|
||||
foreach(const QSize& size, required_sizes) {
|
||||
foreach(QIcon::Mode mode, modes) {
|
||||
QPixmap pixoff = icon.pixmap(size, mode, QIcon::Off);
|
||||
if(pixoff.height() > size.height())
|
||||
pixoff = pixoff.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
new_icon.addPixmap(pixoff, mode, QIcon::Off);
|
||||
QPixmap pixon = icon.pixmap(size, mode, QIcon::On);
|
||||
if(pixon.height() > size.height())
|
||||
pixon = pixoff.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
new_icon.addPixmap(pixon, mode, QIcon::On);
|
||||
}
|
||||
}
|
||||
return new_icon;
|
||||
}
|
||||
#endif
|
||||
|
||||
QString IconProvider::getIconPath(const QString &iconId)
|
||||
|
@@ -52,6 +52,9 @@ public:
|
||||
public:
|
||||
void useSystemIconTheme(bool enable);
|
||||
|
||||
private:
|
||||
QIcon generateDifferentSizes(const QIcon& icon);
|
||||
|
||||
private:
|
||||
bool m_useSystemTheme;
|
||||
#endif
|
||||
|
@@ -15,6 +15,7 @@
|
||||
<file>lang/qbittorrent_fr.qm</file>
|
||||
<file>lang/qbittorrent_uk.qm</file>
|
||||
<file>lang/qbittorrent_zh.qm</file>
|
||||
<file>lang/qbittorrent_lt.qm</file>
|
||||
<file>lang/qbittorrent_ko.qm</file>
|
||||
<file>lang/qbittorrent_nb.qm</file>
|
||||
<file>lang/qbittorrent_sv.qm</file>
|
||||
@@ -24,6 +25,7 @@
|
||||
<file>lang/qbittorrent_pt_BR.qm</file>
|
||||
<file>lang/qbittorrent_da.qm</file>
|
||||
<file>lang/qbittorrent_cs.qm</file>
|
||||
<file>lang/qbittorrent_hy.qm</file>
|
||||
<file>lang/qbittorrent_pl.qm</file>
|
||||
<file>lang/qbittorrent_bg.qm</file>
|
||||
<file>lang/qbittorrent_ar.qm</file>
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user