Browse Source

- Branched trunk in order to work on a major GUI remodeling. I will attempt to:

* Merge download and upload lists
  * Display torrent properties in the same tab (horizontal split)
adaptive-webui-19844
Christophe Dumez 15 years ago
parent
commit
7792b4f849
  1. 4
      AUTHORS
  2. 3
      Changelog
  3. 14
      INSTALL
  4. 90
      configure
  5. 2
      doc/qbittorrent.1
  6. 3
      qbittorrent.qc
  7. 61
      qcm/libcurl.qcm
  8. 9
      qcm/qt4.qcm
  9. 2620
      src/GUI.cpp
  10. 14
      src/GUI.h
  11. 8
      src/about_imp.h
  12. 7
      src/addTorrentDialog.ui
  13. 175
      src/bittorrent.cpp
  14. 299
      src/downloadThread.cpp
  15. 68
      src/downloadThread.h
  16. 1
      src/engineSelectDlg.cpp
  17. BIN
      src/lang/qbittorrent_bg.qm
  18. 530
      src/lang/qbittorrent_bg.ts
  19. BIN
      src/lang/qbittorrent_ca.qm
  20. 548
      src/lang/qbittorrent_ca.ts
  21. BIN
      src/lang/qbittorrent_cs.qm
  22. 530
      src/lang/qbittorrent_cs.ts
  23. BIN
      src/lang/qbittorrent_da.qm
  24. 548
      src/lang/qbittorrent_da.ts
  25. BIN
      src/lang/qbittorrent_de.qm
  26. 532
      src/lang/qbittorrent_de.ts
  27. BIN
      src/lang/qbittorrent_el.qm
  28. 530
      src/lang/qbittorrent_el.ts
  29. 551
      src/lang/qbittorrent_en.ts
  30. BIN
      src/lang/qbittorrent_es.qm
  31. 532
      src/lang/qbittorrent_es.ts
  32. BIN
      src/lang/qbittorrent_fi.qm
  33. 530
      src/lang/qbittorrent_fi.ts
  34. BIN
      src/lang/qbittorrent_fr.qm
  35. 534
      src/lang/qbittorrent_fr.ts
  36. BIN
      src/lang/qbittorrent_hu.qm
  37. 530
      src/lang/qbittorrent_hu.ts
  38. BIN
      src/lang/qbittorrent_it.qm
  39. 530
      src/lang/qbittorrent_it.ts
  40. BIN
      src/lang/qbittorrent_ja.qm
  41. 530
      src/lang/qbittorrent_ja.ts
  42. BIN
      src/lang/qbittorrent_ko.qm
  43. 530
      src/lang/qbittorrent_ko.ts
  44. BIN
      src/lang/qbittorrent_nb.qm
  45. 548
      src/lang/qbittorrent_nb.ts
  46. BIN
      src/lang/qbittorrent_nl.qm
  47. 119
      src/lang/qbittorrent_nl.ts
  48. BIN
      src/lang/qbittorrent_pl.qm
  49. 119
      src/lang/qbittorrent_pl.ts
  50. BIN
      src/lang/qbittorrent_pt.qm
  51. 119
      src/lang/qbittorrent_pt.ts
  52. BIN
      src/lang/qbittorrent_pt_BR.qm
  53. 119
      src/lang/qbittorrent_pt_BR.ts
  54. BIN
      src/lang/qbittorrent_ro.qm
  55. 119
      src/lang/qbittorrent_ro.ts
  56. BIN
      src/lang/qbittorrent_ru.qm
  57. 119
      src/lang/qbittorrent_ru.ts
  58. BIN
      src/lang/qbittorrent_sk.qm
  59. 119
      src/lang/qbittorrent_sk.ts
  60. BIN
      src/lang/qbittorrent_sv.qm
  61. 119
      src/lang/qbittorrent_sv.ts
  62. BIN
      src/lang/qbittorrent_tr.qm
  63. 119
      src/lang/qbittorrent_tr.ts
  64. BIN
      src/lang/qbittorrent_uk.qm
  65. 123
      src/lang/qbittorrent_uk.ts
  66. BIN
      src/lang/qbittorrent_zh.qm
  67. 119
      src/lang/qbittorrent_zh.ts
  68. BIN
      src/lang/qbittorrent_zh_TW.qm
  69. 119
      src/lang/qbittorrent_zh_TW.ts
  70. 22
      src/main.cpp
  71. 9
      src/qtorrenthandle.cpp
  72. 3
      src/qtorrenthandle.h
  73. 44
      src/rss.cpp
  74. 30
      src/rss.h
  75. 4
      src/rss_imp.cpp
  76. 7
      src/src.pro
  77. 2
      src/torrentAddition.h
  78. 19
      src/torrentPersistentData.h

4
AUTHORS

@ -2,10 +2,10 @@ Author: @@ -2,10 +2,10 @@ Author:
* Christophe Dumez <chris@qbittorrent.org>
Contributors:
* Arnaud Demaizière <arnaud@qbittorrent.org>
* Stefanos Antaris <santaris@csd.auth.gr>
* Ishan Arora <ishan@qbittorrent.org>
* Arnaud Demaizière <arnaud@qbittorrent.org>
* Grigis Gaëtan <cipher16@gmail.com>
* Stefanos Antaris <santaris@csd.auth.gr>
Code from other projects:
* files src/ico.cpp src/ico.h

3
Changelog

@ -11,6 +11,9 @@ @@ -11,6 +11,9 @@
- FEATURE: Tracker connections are now also subject to IP filtering
- FEATURE: Include DHT traffic in the rate limiter
- FEATURE: Support for bitcomet padding files
- FEATURE: Option to skip file checking and start seeding immediately in torrent addition dialog (Stephanos Antaris)
- FEATURE: Dropped dependency on libcurl
- FEATURE: Dropped Qt 4.3 support (Qt >= 4.4 is required)
* Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
- FEATURE: Added Magnet URI support

14
INSTALL

@ -1,12 +1,6 @@ @@ -1,12 +1,6 @@
qBittorrent - A BitTorrent client in C++ / Qt4
------------------------------------------
*** Necessary if qt3 is default on your system ***
export QTDIR=/usr/include/qt4
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
*** End ***
./configure
make && make install
qbittorrent
@ -14,8 +8,7 @@ qbittorrent @@ -14,8 +8,7 @@ qbittorrent
will install and execute qBittorrent hopefully without any problems.
Dependencies:
- Qt >= 4.3.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
Qt >= 4.4.0 is advised
- Qt >= 4.4.0 (libqt-devel, libqtgui, libqtcore, libqtnetwork, libqtxml)
- libtorrent-rasterbar by Arvid Norberg (>= v0.15.0 REQUIRED)
-> http://www.qbittorrent.org/download.php (advised)
@ -24,13 +17,8 @@ Dependencies: @@ -24,13 +17,8 @@ Dependencies:
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
- libcurl
- python >= 2.3 (needed by search engine)
- libmagick++ (advised, not required)
* Needed for favicons support (RSS / Search plugins)
- libzzip (advised, not required)
* Needed for zip support (Search plugins)

90
configure vendored

@ -19,8 +19,6 @@ Main options: @@ -19,8 +19,6 @@ Main options:
Dependency options:
--with-libboost-inc=[path] Path to libboost include files
--with-libcurl-inc=[path] Path to libcurl include files
--with-libcurl-lib=[path] Path to libcurl library files
--disable-libzzip Disable use of libzzip
--with-libzzip-inc=[path] Path to libzzip++ include files
--with-libzzip-lib=[path] Path to libzzip++ library files
@ -145,16 +143,6 @@ while [ $# -gt 0 ]; do @@ -145,16 +143,6 @@ while [ $# -gt 0 ]; do
shift
;;
--with-libcurl-inc=*)
QC_WITH_LIBCURL_INC=$optarg
shift
;;
--with-libcurl-lib=*)
QC_WITH_LIBCURL_LIB=$optarg
shift
;;
--disable-libzzip)
QC_DISABLE_libzzip="Y"
shift
@ -192,8 +180,6 @@ echo BINDIR=$BINDIR @@ -192,8 +180,6 @@ echo BINDIR=$BINDIR
echo DATADIR=$DATADIR
echo EX_QTDIR=$EX_QTDIR
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
echo QC_WITH_LIBCURL_INC=$QC_WITH_LIBCURL_INC
echo QC_WITH_LIBCURL_LIB=$QC_WITH_LIBCURL_LIB
echo QC_DISABLE_libzzip=$QC_DISABLE_libzzip
echo QC_WITH_LIBZZIP_INC=$QC_WITH_LIBZZIP_INC
echo QC_WITH_LIBZZIP_LIB=$QC_WITH_LIBZZIP_LIB
@ -308,14 +294,11 @@ class qc_qt4 : public ConfObj @@ -308,14 +294,11 @@ class qc_qt4 : public ConfObj
{
public:
qc_qt4(Conf *c) : ConfObj(c) {}
QString name() const { return "Qt >= 4.3"; }
QString shortname() const { return "Qt 4.3"; }
QString name() const { return "Qt >= 4.4"; }
QString shortname() const { return "Qt 4.4"; }
bool exec()
{
if(QT_VERSION >= 0x040400) {
conf->addDefine("QT_4_4");
}
return(QT_VERSION >= 0x040300);
return(QT_VERSION >= 0x040400);
}
};
@ -403,68 +386,6 @@ public: @@ -403,68 +386,6 @@ public:
return true;
}
};
#line 1 "libcurl.qcm"
/*
-----BEGIN QCMOD-----
name: libcommoncpp2
arg: with-libcurl-inc=[path], Path to libcurl include files
arg: with-libcurl-lib=[path], Path to libcurl library files
-----END QCMOD-----
*/
class qc_libcurl : public ConfObj
{
public:
qc_libcurl(Conf *c) : ConfObj(c) {}
QString name() const { return "libcurl"; }
QString shortname() const { return "libcurl"; }
bool exec(){
QString s;
s = conf->getenv("QC_WITH_LIBCURL_INC");
if(!s.isEmpty()) {
if(!conf->checkHeader(s, "curl/curl.h")) {
return false;
}
}else{
QStringList sl;
sl << "/usr/include";
sl << "/usr/local/include";
bool found = false;
foreach(s, sl){
if(conf->checkHeader(s, "curl/curl.h")){
found = true;
break;
}
}
if(!found) {
return false;
}
}
conf->addIncludePath(s);
s = conf->getenv("QC_WITH_LIBCURL_LIB");
if(!s.isEmpty()) {
if(!QFile::exists(s+QString("/libcurl.so")))
return false;
conf->addLib(QString("-L") + s);
}else{
QStringList sl;
sl << "/usr/lib/";
sl << "/usr/lib64/";
sl << "/usr/local/lib/";
sl << "/usr/local/lib64/";
bool found = false;
foreach(s, sl){
if(QFile::exists(s+QString("libcurl.so"))){
found = true;
break;
}
}
if(!found) return false;
conf->addLib(QString("-L") + s);
}
return true;
}
};
#line 1 "libzzip.qcm"
/*
-----BEGIN QCMOD-----
@ -549,9 +470,6 @@ cat >$1/modules_new.cpp <<EOT @@ -549,9 +470,6 @@ cat >$1/modules_new.cpp <<EOT
o = new qc_libboost(conf);
o->required = true;
o->disabled = false;
o = new qc_libcurl(conf);
o->required = true;
o->disabled = false;
o = new qc_libzzip(conf);
o->required = false;
o->disabled = false;
@ -1501,8 +1419,6 @@ export BINDIR @@ -1501,8 +1419,6 @@ export BINDIR
export DATADIR
export EX_QTDIR
export QC_WITH_LIBBOOST_INC
export QC_WITH_LIBCURL_INC
export QC_WITH_LIBCURL_LIB
export QC_DISABLE_libzzip
export QC_WITH_LIBZZIP_INC
export QC_WITH_LIBZZIP_LIB

2
doc/qbittorrent.1

@ -8,7 +8,7 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4 @@ -8,7 +8,7 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4
.SH "SYNOPSIS"
\fBqbittorrent\fR [--no-splash] [TORRENT_FILE | URL]...
\fBqbittorrent\fR [\-\-no-splash] [TORRENT_FILE | URL]...
\fBqbittorrent\fR \-\-help

3
qbittorrent.qc

@ -12,8 +12,5 @@ @@ -12,8 +12,5 @@
<dep type='libboost'>
<required/>
</dep>
<dep type='libcurl'>
<required/>
</dep>
<dep type='libzzip'/>
</qconf>

61
qcm/libcurl.qcm

@ -1,61 +0,0 @@ @@ -1,61 +0,0 @@
/*
-----BEGIN QCMOD-----
name: libcommoncpp2
arg: with-libcurl-inc=[path], Path to libcurl include files
arg: with-libcurl-lib=[path], Path to libcurl library files
-----END QCMOD-----
*/
class qc_libcurl : public ConfObj
{
public:
qc_libcurl(Conf *c) : ConfObj(c) {}
QString name() const { return "libcurl"; }
QString shortname() const { return "libcurl"; }
bool exec(){
QString s;
s = conf->getenv("QC_WITH_LIBCURL_INC");
if(!s.isEmpty()) {
if(!conf->checkHeader(s, "curl/curl.h")) {
return false;
}
}else{
QStringList sl;
sl << "/usr/include";
sl << "/usr/local/include";
bool found = false;
foreach(s, sl){
if(conf->checkHeader(s, "curl/curl.h")){
found = true;
break;
}
}
if(!found) {
return false;
}
}
conf->addIncludePath(s);
s = conf->getenv("QC_WITH_LIBCURL_LIB");
if(!s.isEmpty()) {
if(!QFile::exists(s+QString("/libcurl.so")))
return false;
conf->addLib(QString("-L") + s);
}else{
QStringList sl;
sl << "/usr/lib/";
sl << "/usr/lib64/";
sl << "/usr/local/lib/";
sl << "/usr/local/lib64/";
bool found = false;
foreach(s, sl){
if(QFile::exists(s+QString("libcurl.so"))){
found = true;
break;
}
}
if(!found) return false;
conf->addLib(QString("-L") + s);
}
return true;
}
};

9
qcm/qt4.qcm

@ -7,14 +7,11 @@ class qc_qt4 : public ConfObj @@ -7,14 +7,11 @@ class qc_qt4 : public ConfObj
{
public:
qc_qt4(Conf *c) : ConfObj(c) {}
QString name() const { return "Qt >= 4.3"; }
QString shortname() const { return "Qt 4.3"; }
QString name() const { return "Qt >= 4.4"; }
QString shortname() const { return "Qt 4.4"; }
bool exec()
{
if(QT_VERSION >= 0x040400) {
conf->addDefine("QT_4_4");
}
return(QT_VERSION >= 0x040300);
return(QT_VERSION >= 0x040400);
}
};

2620
src/GUI.cpp

File diff suppressed because it is too large Load Diff

14
src/GUI.h

@ -44,13 +44,8 @@ class DownloadingTorrents; @@ -44,13 +44,8 @@ class DownloadingTorrents;
class FinishedTorrents;
class downloadFromURL;
class SearchEngine;
#ifdef QT_4_4
class QLocalServer;
class QLocalSocket;
#else
class QTcpServer;
class QTcpSocket;
#endif
class QLocalServer;
class QLocalSocket;
class QCloseEvent;
class RSSImp;
class QShortcut;
@ -109,13 +104,8 @@ class GUI : public QMainWindow, private Ui::MainWindow{ @@ -109,13 +104,8 @@ class GUI : public QMainWindow, private Ui::MainWindow{
// Web UI
QPointer<HttpServer> httpServer;
// Misc
#ifdef QT_4_4
QLocalServer *localServer;
QLocalSocket *clientConnection;
#else
QTcpServer *localServer;
QTcpSocket *clientConnection;
#endif
protected slots:
// GUI related slots

8
src/about_imp.h

@ -52,10 +52,10 @@ class about : public QDialog, private Ui::AboutDlg{ @@ -52,10 +52,10 @@ class about : public QDialog, private Ui::AboutDlg{
lb_name->setText(QString::fromUtf8("<b><h1>")+tr("qBittorrent")+QString::fromUtf8(" "VERSION"</h1></b>"));
// Thanks
te_thanks->append(QString::fromUtf8("<a name='top'></a>"));
te_thanks->append(QString::fromUtf8("<ul><li>I would like to thank sourceforge.net for hosting qBittorrent project.</li>"));
te_thanks->append(QString::fromUtf8("<li>I am happy that Ishan Arora and Arnaud Demaizière are contributing to the project as developers. Their help is greatly appreciated</li>"));
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, RPM packager, for his help and support.</li>"));
te_thanks->append(QString::fromUtf8("<li>I am grateful to Peter Koeleman (peter@qbittorrent.org) who is helping port qBittorrent to Windows.</li>"));
te_thanks->append(QString::fromUtf8("<ul><li>I would first like to thank sourceforge.net for hosting qBittorrent project and for their support.</li>"));
te_thanks->append(QString::fromUtf8("<li>I am pleased that people from all over the world are contributing to qBittorrent: Ishan Arora (India), Arnaud Demaizière (France) and Stephanos Antaris (Greece). Their help is greatly appreciated</li>"));
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, for his help and support since the beginning of this project.</li>"));
te_thanks->append(QString::fromUtf8("<li>I am grateful to Peter Koeleman (peter@qbittorrent.org) for working on qBittorrent port to Windows.</li>"));
te_thanks->append(QString::fromUtf8("<li>Thanks a lot to our graphist Mateusz Toboła (tobejodok@qbittorrent.org) for his great work.</li></ul><br><br>"));
te_thanks->scrollToAnchor(QString::fromUtf8("top"));
// Translation

7
src/addTorrentDialog.ui

@ -207,6 +207,13 @@ @@ -207,6 +207,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="addInSeed">
<property name="text">
<string>Skip file checking and start seeding immediately</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="addInPause">
<property name="text">

175
src/bittorrent.cpp

@ -64,8 +64,8 @@ bittorrent::bittorrent() : DHTEnabled(false), preAllocateAll(false), addInPause( @@ -64,8 +64,8 @@ bittorrent::bittorrent() : DHTEnabled(false), preAllocateAll(false), addInPause(
// Check if we should spoof utorrent
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
if(settings.value(QString::fromUtf8("Preferences/Bittorrent/AzureusSpoof"), false).toBool()) {
s = new session(fingerprint("UT", 1, 8, 4, 0), 0);
qDebug("Peer ID: %s", fingerprint("UT", 1, 8, 4, 0).to_string().c_str());
s = new session(fingerprint("UT", 1, 8, 5, 0), 0);
qDebug("Peer ID: %s", fingerprint("UT", 1, 8, 5, 0).to_string().c_str());
} else {
s = new session(fingerprint("qB", VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, 0), 0);
qDebug("Peer ID: %s", fingerprint("qB", VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, 0).to_string().c_str());
@ -581,6 +581,14 @@ QTorrentHandle bittorrent::addTorrent(QString path, bool fromScanDir, QString fr @@ -581,6 +581,14 @@ QTorrentHandle bittorrent::addTorrent(QString path, bool fromScanDir, QString fr
} else {
p.save_path = defaultTempPath.toLocal8Bit().data();
}
// Skip checking and directly start seeding (new in libtorrent v0.15)
if(TorrentTempData::isSeedingMode(hash)){
p.seed_mode=true;
} else {
p.seed_mode=false;
}
// TODO: Remove in v1.6.0: For backward compatibility only
if(QFile::exists(misc::qBittorrentPath()+"BT_backup"+QDir::separator()+hash+".finished")) {
p.save_path = savePath.toLocal8Bit().data();
@ -858,7 +866,8 @@ void bittorrent::loadFilesPriorities(QTorrentHandle &h) { @@ -858,7 +866,8 @@ void bittorrent::loadFilesPriorities(QTorrentHandle &h) {
qDebug("Setting file piority to %d", priority);
v.push_back(priority);
}
h.prioritize_files(v);
if(v.size() == (unsigned int)h.num_files())
h.prioritize_files(v);
}
float bittorrent::getRealRatio(QString hash) const{
@ -983,6 +992,12 @@ void bittorrent::scanDirectory(QString scan_dir) { @@ -983,6 +992,12 @@ void bittorrent::scanDirectory(QString scan_dir) {
FSMutex->lock();
qDebug("Scanning directory: %s", scan_dir.toLocal8Bit().data());
QDir dir(scan_dir);
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
// Check that scan dir is not BT_backup (silly but who knows...)
if(dir == torrentBackup) {
std::cerr << "Scan directory cannot be qBittorrent backup folder!" << std::endl;
return;
}
QStringList filters;
filters << "*.torrent";
QStringList files = dir.entryList(filters, QDir::Files, QDir::Unsorted);
@ -1522,14 +1537,31 @@ void bittorrent::applyEncryptionSettings(pe_settings se) { @@ -1522,14 +1537,31 @@ void bittorrent::applyEncryptionSettings(pe_settings se) {
// backup directory
void bittorrent::startUpTorrents() {
qDebug("Resuming unfinished torrents");
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
QStringList fileNames;
QStringList known_torrents = TorrentPersistentData::knownTorrents();
if(known_torrents.empty()) {
if(known_torrents.empty() && !settings.value("v1_4_x_torrent_imported", false).toBool()) {
qDebug("No known torrent, importing old torrents");
importOldTorrents();
return;
}
// Safety measure because some people reported torrent loss since
// we switch the v1.5 way of resuming torrents on startup
QStringList filters;
filters << "*.torrent";
QStringList torrents_on_hd = torrentBackup.entryList(filters, QDir::Files, QDir::Unsorted);
foreach(QString hash, torrents_on_hd) {
hash.chop(8); // remove trailing .torrent
if(!known_torrents.contains(hash)) {
std::cerr << "ERROR Detected!!! Adding back torrent " << hash.toLocal8Bit().data() << " which got lost for some reason." << std::endl;
addTorrent(torrentBackup.path()+QDir::separator()+hash+".torrent", false, QString(), true);
}
}
// End of safety measure
qDebug("Starting up torrents");
if(isQueueingEnabled()) {
QList<QPair<int, QString> > hashes;
@ -1690,79 +1722,78 @@ void bittorrent::applyFormerAttributeFiles(QTorrentHandle h) { @@ -1690,79 +1722,78 @@ void bittorrent::applyFormerAttributeFiles(QTorrentHandle h) {
// TODO: Remove in qBittorrent v1.6.0
void bittorrent::importOldTorrents() {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
if(!settings.value("v1_4_x_torrent_imported", false).toBool()) {
// Import old torrent
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
QStringList fileNames;
QStringList filters;
filters << "*.torrent";
fileNames = torrentBackup.entryList(filters, QDir::Files, QDir::Unsorted);
if(isQueueingEnabled()) {
QList<QPair<int, QString> > filePaths;
foreach(const QString &fileName, fileNames) {
QString filePath = torrentBackup.path()+QDir::separator()+fileName;
int prio = 99999;
// Get priority
QString prioPath = filePath;
prioPath.replace(".torrent", ".prio");
if(QFile::exists(prioPath)) {
QFile prio_file(prioPath);
if(prio_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
bool ok = false;
prio = prio_file.readAll().toInt(&ok);
if(!ok)
prio = 99999;
prio_file.close();
}
Q_ASSERT(!settings.value("v1_4_x_torrent_imported", false).toBool());
// Import old torrent
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
QStringList fileNames;
QStringList filters;
filters << "*.torrent";
fileNames = torrentBackup.entryList(filters, QDir::Files, QDir::Unsorted);
if(isQueueingEnabled()) {
QList<QPair<int, QString> > filePaths;
foreach(const QString &fileName, fileNames) {
QString filePath = torrentBackup.path()+QDir::separator()+fileName;
int prio = 99999;
// Get priority
QString prioPath = filePath;
prioPath.replace(".torrent", ".prio");
if(QFile::exists(prioPath)) {
QFile prio_file(prioPath);
if(prio_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
bool ok = false;
prio = prio_file.readAll().toInt(&ok);
if(!ok)
prio = 99999;
prio_file.close();
}
misc::insertSort2<QString>(filePaths, qMakePair(prio, filePath));
}
// Resume downloads
QPair<int, QString> fileName;
foreach(fileName, filePaths) {
importOldTempData(fileName.second);
QTorrentHandle h = addTorrent(fileName.second, false, QString(), true);
// Sequential download
if(TorrentTempData::hasTempData(h.hash())) {
qDebug("addTorrent: Setting download as sequential (from tmp data)");
h.set_sequential_download(TorrentTempData::isSequential(h.hash()));
}
applyFormerAttributeFiles(h);
QString savePath = TorrentTempData::getSavePath(h.hash());
// Save persistent data for new torrent
TorrentPersistentData::saveTorrentPersistentData(h);
// Save save_path
if(!defaultTempPath.isEmpty() && !savePath.isNull()) {
qDebug("addTorrent: Saving save_path in persistent data: %s", savePath.toLocal8Bit().data());
TorrentPersistentData::saveSavePath(h.hash(), savePath);
}
misc::insertSort2<QString>(filePaths, qMakePair(prio, filePath));
}
// Resume downloads
QPair<int, QString> fileName;
foreach(fileName, filePaths) {
importOldTempData(fileName.second);
QTorrentHandle h = addTorrent(fileName.second, false, QString(), true);
// Sequential download
if(TorrentTempData::hasTempData(h.hash())) {
qDebug("addTorrent: Setting download as sequential (from tmp data)");
h.set_sequential_download(TorrentTempData::isSequential(h.hash()));
}
} else {
QStringList filePaths;
foreach(const QString &fileName, fileNames) {
filePaths.append(torrentBackup.path()+QDir::separator()+fileName);
applyFormerAttributeFiles(h);
QString savePath = TorrentTempData::getSavePath(h.hash());
// Save persistent data for new torrent
TorrentPersistentData::saveTorrentPersistentData(h);
// Save save_path
if(!defaultTempPath.isEmpty() && !savePath.isNull()) {
qDebug("addTorrent: Saving save_path in persistent data: %s", savePath.toLocal8Bit().data());
TorrentPersistentData::saveSavePath(h.hash(), savePath);
}
// Resume downloads
foreach(const QString &fileName, filePaths) {
importOldTempData(fileName);
QTorrentHandle h = addTorrent(fileName, false, QString(), true);
// Sequential download
if(TorrentTempData::hasTempData(h.hash())) {
qDebug("addTorrent: Setting download as sequential (from tmp data)");
h.set_sequential_download(TorrentTempData::isSequential(h.hash()));
}
applyFormerAttributeFiles(h);
QString savePath = TorrentTempData::getSavePath(h.hash());
// Save persistent data for new torrent
TorrentPersistentData::saveTorrentPersistentData(h);
// Save save_path
if(!defaultTempPath.isEmpty() && !savePath.isNull()) {
qDebug("addTorrent: Saving save_path in persistent data: %s", savePath.toLocal8Bit().data());
TorrentPersistentData::saveSavePath(h.hash(), savePath);
}
}
} else {
QStringList filePaths;
foreach(const QString &fileName, fileNames) {
filePaths.append(torrentBackup.path()+QDir::separator()+fileName);
}
// Resume downloads
foreach(const QString &fileName, filePaths) {
importOldTempData(fileName);
QTorrentHandle h = addTorrent(fileName, false, QString(), true);
// Sequential download
if(TorrentTempData::hasTempData(h.hash())) {
qDebug("addTorrent: Setting download as sequential (from tmp data)");
h.set_sequential_download(TorrentTempData::isSequential(h.hash()));
}
applyFormerAttributeFiles(h);
QString savePath = TorrentTempData::getSavePath(h.hash());
// Save persistent data for new torrent
TorrentPersistentData::saveTorrentPersistentData(h);
// Save save_path
if(!defaultTempPath.isEmpty() && !savePath.isNull()) {
qDebug("addTorrent: Saving save_path in persistent data: %s", savePath.toLocal8Bit().data());
TorrentPersistentData::saveSavePath(h.hash(), savePath);
}
}
settings.setValue("v1_4_x_torrent_imported", true);
std::cout << "Successfully imported torrents from v1.4.x (or previous) instance" << std::endl;
}
settings.setValue("v1_4_x_torrent_imported", true);
std::cout << "Successfully imported torrents from v1.4.x (or previous) instance" << std::endl;
}

299
src/downloadThread.cpp

@ -29,215 +29,140 @@ @@ -29,215 +29,140 @@
*/
#include "downloadThread.h"
#include <iostream>
#include <QTemporaryFile>
#include <QSettings>
#include <stdio.h>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkProxy>
#define MAX_THREADS 3
/** Download Thread **/
// http://curl.rtin.bz/libcurl/c/libcurl-errors.html
QString subDownloadThread::errorCodeToString(CURLcode status) {
switch(status){
case CURLE_FTP_CANT_GET_HOST:
case CURLE_COULDNT_RESOLVE_HOST:
return tr("Host is unreachable");
case CURLE_READ_ERROR:
case CURLE_FILE_COULDNT_READ_FILE:
return tr("File was not found (404)");
case CURLE_FTP_ACCESS_DENIED:
case CURLE_LOGIN_DENIED:
case CURLE_FTP_USER_PASSWORD_INCORRECT:
return tr("Connection was denied");
case CURLE_URL_MALFORMAT:
return tr("Url is invalid");
case CURLE_COULDNT_RESOLVE_PROXY:
return tr("Could not resolve proxy");
//case 5:
// return tr("Connection forbidden (403)");
//case 6:
// return tr("Connection was not authorized (401)");
//case 7:
// return tr("Content has moved (301)");
case CURLE_COULDNT_CONNECT:
return tr("Connection failure");
case CURLE_OPERATION_TIMEOUTED:
return tr("Connection was timed out");
case CURLE_INTERFACE_FAILED:
return tr("Incorrect network interface");
default:
return tr("Unknown error");
}
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*)));
}
subDownloadThread::subDownloadThread(QObject *parent, QString url) : QThread(parent), url(url), abort(false){}
subDownloadThread::~subDownloadThread(){
abort = true;
wait();
downloadThread::~downloadThread(){
delete networkManager;
}
void subDownloadThread::run(){
// Get a unique filename
QString filePath;
QTemporaryFile tmpfile;
tmpfile.setAutoRemove(false);
if (tmpfile.open()) {
filePath = tmpfile.fileName();
qDebug("Temporary filename is: %s", filePath.toLocal8Bit().data());
void downloadThread::processDlFinished(QNetworkReply* reply) {
QString url = reply->url().toString();
if(reply->error() != QNetworkReply::NoError) {
// Failure
emit downloadFailure(url, errorCodeToString(reply->error()));
} else {
emit downloadFailureST(this, url, tr("I/O Error"));
return;
}
tmpfile.close();
// Now temporary file is created but closed so that
// curl can use it
FILE *f = fopen(filePath.toLocal8Bit().data(), "wb");
if(!f) {
std::cerr << "couldn't open destination file" << "\n";
return;
}
CURL *curl;
CURLcode res = (CURLcode)-1;
curl = curl_easy_init();
if(curl) {
std::string c_url = url.toLocal8Bit().data();
curl_easy_setopt(curl, CURLOPT_URL, c_url.c_str());
// SSL support
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
// PROXY SUPPORT
QSettings settings("qBittorrent", "qBittorrent");
int intValue = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxyType"), 0).toInt();
if(intValue > 0) {
// Proxy enabled
QString IP = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/IP"), "0.0.0.0").toString();
QString port = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Port"), 8080).toString();
qDebug("Using proxy: %s", (IP+QString(":")+port).toLocal8Bit().data());
curl_easy_setopt(curl, CURLOPT_PROXYPORT, (IP+QString(":")+port).toLocal8Bit().data());
// Default proxy type is HTTP, we must change if it is SOCKS5
if(intValue%2==0) {
qDebug("Proxy is SOCKS5, not HTTP");
curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
}
// Authentication?
if(intValue > 2) {
qDebug("Proxy requires authentication, authenticating");
QString username = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Username"), QString()).toString();
QString password = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Password"), QString()).toString();
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (username+QString(":")+password).toLocal8Bit().data());
// Success
QString filePath;
QTemporaryFile tmpfile;
tmpfile.setAutoRemove(false);
if (tmpfile.open()) {
filePath = tmpfile.fileName();
qDebug("Temporary filename is: %s", filePath.toLocal8Bit().data());
if(reply->open(QIODevice::ReadOnly)) {
tmpfile.write(reply->readAll());
reply->close();
tmpfile.close();
// Send finished signal
emit downloadFinished(url, filePath);
} else {
// Error when reading the request
tmpfile.close();
emit downloadFailure(url, tr("I/O Error"));
}
}
// We have to define CURLOPT_WRITEFUNCTION or it will crash on windows
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, f);
// Verbose
//curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
// No progress info (we don't use it)
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
// Redirections
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, -1);
qDebug("Downloading %s", url.toLocal8Bit().data());
if(!abort)
res = curl_easy_perform(curl);
qDebug("done downloading %s", url.toLocal8Bit().data());
/* always cleanup */
curl_easy_cleanup(curl);
fclose(f);
if(abort)
return;
if(res) {
emit downloadFailureST(this, url, errorCodeToString(res));
} else {
emit downloadFinishedST(this, url, filePath);
emit downloadFailure(url, tr("I/O Error"));
}
qDebug("%s Raised the signal", url.toLocal8Bit().data());
} else {
std::cerr << "Could not initialize CURL" << "\n";
}
}
/** Download Thread **/
downloadThread::downloadThread(QObject* parent) : QThread(parent), abort(false){}
downloadThread::~downloadThread(){
mutex.lock();
abort = true;
condition.wakeOne();
mutex.unlock();
//qDebug("downloadThread deleting subthreads...");
qDeleteAll(subThreads);
//qDebug("downloadThread deleted subthreads");
wait();
// Clean up
reply->deleteLater();
}
void downloadThread::downloadUrl(QString url){
QMutexLocker locker(&mutex);
urls_queue.enqueue(url);
if(!isRunning()){
start();
}else{
condition.wakeOne();
}
// Update proxy settings
applyProxySettings();
// Process download request
networkManager->get(QNetworkRequest(QUrl(url)));
}
void downloadThread::run(){
forever{
if(abort) {
qDebug("DownloadThread aborting...");
return;
void downloadThread::applyProxySettings() {
QNetworkProxy proxy;
QSettings settings("qBittorrent", "qBittorrent");
int intValue = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxyType"), 0).toInt();
if(intValue > 0) {
// Proxy enabled
QString IP = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/IP"), "0.0.0.0").toString();
proxy.setHostName(IP);
QString port = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Port"), 8080).toString();
qDebug("Using proxy: %s", (IP+QString(":")+port).toLocal8Bit().data());
proxy.setPort(port.toUShort());
// Default proxy type is HTTP, we must change if it is SOCKS5
if(intValue%2==0) {
qDebug("Proxy is SOCKS5, not HTTP");
proxy.setType(QNetworkProxy::Socks5Proxy);
} else {
proxy.setType(QNetworkProxy::HttpProxy);
}
mutex.lock();
if(!urls_queue.empty() && subThreads.size() < MAX_THREADS){
QString url = urls_queue.dequeue();
mutex.unlock();
//qDebug("DownloadThread downloading %s...", url.toLocal8Bit().data());
subDownloadThread *st = new subDownloadThread(0, url);
subThreads << st;
connect(st, SIGNAL(downloadFinishedST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadedFile(subDownloadThread*, QString, QString)));
connect(st, SIGNAL(downloadFailureST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadFailure(subDownloadThread*, QString, QString)));
st->start();
}else{
//qDebug("DownloadThread sleeping...");
condition.wait(&mutex);
//qDebug("DownloadThread woke up");
mutex.unlock();
// Authentication?
if(intValue > 2) {
qDebug("Proxy requires authentication, authenticating");
QString username = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Username"), QString()).toString();
proxy.setUser(username);
QString password = settings.value(QString::fromUtf8("Preferences/Connection/HTTPProxy/Password"), QString()).toString();
proxy.setPassword(password);
}
}
}
void downloadThread::propagateDownloadedFile(subDownloadThread* st, QString url, QString path){
qDebug("Downloading %s was successful", url.toLocal8Bit().data());
mutex.lock();
int index = subThreads.indexOf(st);
Q_ASSERT(index != -1);
subThreads.removeAt(index);
mutex.unlock();
qDebug("Deleting subthread");
delete st;
emit downloadFinished(url, path);
mutex.lock();
if(!urls_queue.empty()) {
condition.wakeOne();
} else {
proxy.setType(QNetworkProxy::NoProxy);
}
mutex.unlock();
qDebug("Out of propagateDownloadedFile");
networkManager->setProxy(proxy);
}
void downloadThread::propagateDownloadFailure(subDownloadThread* st, QString url, QString reason){
qDebug("Downloading %s failed", url.toLocal8Bit().data());
mutex.lock();
int index = subThreads.indexOf(st);
Q_ASSERT(index != -1);
subThreads.removeAt(index);
mutex.unlock();
delete st;
emit downloadFailure(url, reason);
mutex.lock();
if(!urls_queue.empty()) {
condition.wakeOne();
QString downloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
switch(status){
case QNetworkReply::HostNotFoundError:
return tr("The remote host name was not found (invalid hostname)");
case QNetworkReply::OperationCanceledError:
return tr("The operation was canceled");
case QNetworkReply::RemoteHostClosedError:
return tr("The remote server closed the connection prematurely, before the entire reply was received and processed");
case QNetworkReply::TimeoutError:
return tr("The connection to the remote server timed out");
case QNetworkReply::SslHandshakeFailedError:
return tr("SSL/TLS handshake failed");
case QNetworkReply::ConnectionRefusedError:
return tr("The remote server refused the connection");
case QNetworkReply::ProxyConnectionRefusedError:
return tr("The connection to the proxy server was refused");
case QNetworkReply::ProxyConnectionClosedError:
return tr("The proxy server closed the connection prematurely");
case QNetworkReply::ProxyNotFoundError:
return tr("The proxy host name was not found");
case QNetworkReply::ProxyTimeoutError:
return tr("The connection to the proxy timed out or the proxy did not reply in time to the request sent");
case QNetworkReply::ProxyAuthenticationRequiredError:
return tr("The proxy requires authentication in order to honour the request but did not accept any credentials offered");
case QNetworkReply::ContentAccessDenied:
return tr("The access to the remote content was denied (401)");
case QNetworkReply::ContentOperationNotPermittedError:
return tr("The operation requested on the remote content is not permitted");
case QNetworkReply::ContentNotFoundError:
return tr("The remote content was not found at the server (404)");
case QNetworkReply::AuthenticationRequiredError:
return tr("The remote server requires authentication to serve the content but the credentials provided were not accepted");
case QNetworkReply::ProtocolUnknownError:
return tr("The Network Access API cannot honor the request because the protocol is not known");
case QNetworkReply::ProtocolInvalidOperationError:
return tr("The requested operation is invalid for this protocol");
case QNetworkReply::UnknownNetworkError:
return tr("An unknown network-related error was detected");
case QNetworkReply::UnknownProxyError:
return tr("An unknown proxy-related error was detected");
case QNetworkReply::UnknownContentError:
return tr("An unknown error related to the remote content was detected");
case QNetworkReply::ProtocolFailure:
return tr("A breakdown in protocol was detected");
default:
return tr("Unknown error");
}
mutex.unlock();
}

68
src/downloadThread.h

@ -31,64 +31,34 @@ @@ -31,64 +31,34 @@
#ifndef DOWNLOADTHREAD_H
#define DOWNLOADTHREAD_H
#include <QThread>
#include <QFile>
#include <QTemporaryFile>
#include <QMutex>
#include <QMutexLocker>
#include <QWaitCondition>
#include <QStringList>
#include <curl/curl.h>
#include <QQueue>
#include <QNetworkReply>
#include <QObject>
class subDownloadThread : public QThread {
Q_OBJECT
private:
QString url;
bool abort;
public:
subDownloadThread(QObject *parent, QString url);
~subDownloadThread();
QString errorCodeToString(CURLcode status);
signals:
// For subthreads
void downloadFinishedST(subDownloadThread* st, QString url, QString file_path);
void downloadFailureST(subDownloadThread* st, QString url, QString reason);
class QNetworkAccessManager;
protected:
void run();
};
class downloadThread : public QThread {
class downloadThread : public QObject {
Q_OBJECT
private:
QQueue<QString> urls_queue;
QMutex mutex;
QWaitCondition condition;
bool abort;
QList<subDownloadThread*> subThreads;
signals:
void downloadFinished(QString url, QString file_path);
void downloadFailure(QString url, QString reason);
private:
QNetworkAccessManager *networkManager;
public:
downloadThread(QObject* parent);
signals:
void downloadFinished(QString url, QString file_path);
void downloadFailure(QString url, QString reason);
~downloadThread();
public:
downloadThread(QObject* parent);
~downloadThread();
void downloadUrl(QString url);
//void setProxy(QString IP, int port, QString username, QString password);
void downloadUrl(QString url);
void setProxy(QString IP, int port, QString username, QString password);
protected:
QString errorCodeToString(QNetworkReply::NetworkError status);
void applyProxySettings();
protected:
void run();
protected slots:
void processDlFinished(QNetworkReply* reply);
protected slots:
void propagateDownloadedFile(subDownloadThread* st, QString url, QString path);
void propagateDownloadFailure(subDownloadThread* st, QString url, QString reason);
};
#endif

1
src/engineSelectDlg.cpp

@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
#include <QFileDialog>
#include <QDropEvent>
#include <QInputDialog>
#include <QTemporaryFile>
#ifdef HAVE_ZZIP
#include <zzip/zzip.h>

BIN
src/lang/qbittorrent_bg.qm

Binary file not shown.

530
src/lang/qbittorrent_bg.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_ca.qm

Binary file not shown.

548
src/lang/qbittorrent_ca.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_cs.qm

Binary file not shown.

530
src/lang/qbittorrent_cs.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_da.qm

Binary file not shown.

548
src/lang/qbittorrent_da.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_de.qm

Binary file not shown.

532
src/lang/qbittorrent_de.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_el.qm

Binary file not shown.

530
src/lang/qbittorrent_el.ts

File diff suppressed because it is too large Load Diff

551
src/lang/qbittorrent_en.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_es.qm

Binary file not shown.

532
src/lang/qbittorrent_es.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_fi.qm

Binary file not shown.

530
src/lang/qbittorrent_fi.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_fr.qm

Binary file not shown.

534
src/lang/qbittorrent_fr.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_hu.qm

Binary file not shown.

530
src/lang/qbittorrent_hu.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_it.qm

Binary file not shown.

530
src/lang/qbittorrent_it.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_ja.qm

Binary file not shown.

530
src/lang/qbittorrent_ja.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_ko.qm

Binary file not shown.

530
src/lang/qbittorrent_ko.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_nb.qm

Binary file not shown.

548
src/lang/qbittorrent_nb.ts

File diff suppressed because it is too large Load Diff

BIN
src/lang/qbittorrent_nl.qm

Binary file not shown.

119
src/lang/qbittorrent_nl.ts

@ -3191,6 +3191,10 @@ Changelog: @@ -3191,6 +3191,10 @@ Changelog:
<source>Expand all</source>
<translation>Alles uitklappen</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3603,6 +3607,101 @@ Changelog: @@ -3603,6 +3607,101 @@ Changelog:
<translation>Typ op zijn minst één URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">I/O Fout</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Onbekende fout</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4703,23 +4802,23 @@ selecteer alstublieft een er van:</translation> @@ -4703,23 +4802,23 @@ selecteer alstublieft een er van:</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Host is onbereikbaar</translation>
<translation type="obsolete">Host is onbereikbaar</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Bestand niet gevonden (404)</translation>
<translation type="obsolete">Bestand niet gevonden (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Verbinding niet toegestaan</translation>
<translation type="obsolete">Verbinding niet toegestaan</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Url is ongeldig</translation>
<translation type="obsolete">Url is ongeldig</translation>
</message>
<message>
<source>I/O Error</source>
<translation>I/O Fout</translation>
<translation type="obsolete">I/O Fout</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4735,23 +4834,23 @@ selecteer alstublieft een er van:</translation> @@ -4735,23 +4834,23 @@ selecteer alstublieft een er van:</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Verbindingsfout</translation>
<translation type="obsolete">Verbindingsfout</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Verbinding verlopen</translation>
<translation type="obsolete">Verbinding verlopen</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Verkeerde netwerkinterface</translation>
<translation type="obsolete">Verkeerde netwerkinterface</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Onbekende fout</translation>
<translation type="obsolete">Onbekende fout</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Kon proxy niet herleiden</translation>
<translation type="obsolete">Kon proxy niet herleiden</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_pl.qm

Binary file not shown.

119
src/lang/qbittorrent_pl.ts

@ -3286,6 +3286,10 @@ Zmiany: @@ -3286,6 +3286,10 @@ Zmiany:
<source>Expand all</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3710,6 +3714,101 @@ Zmiany: @@ -3710,6 +3714,101 @@ Zmiany:
<translation>Proszę podać przynajmniej jeden adres URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">Błąd We/Wy</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Nieznany błąd</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4816,23 +4915,23 @@ Jednak tamte wtyczki były wyłączone.</translation> @@ -4816,23 +4915,23 @@ Jednak tamte wtyczki były wyłączone.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Host jest niedostępny</translation>
<translation type="obsolete">Host jest niedostępny</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Nie znaleziono pliku (404)</translation>
<translation type="obsolete">Nie znaleziono pliku (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Połączenie odrzucone</translation>
<translation type="obsolete">Połączenie odrzucone</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Błędny URL</translation>
<translation type="obsolete">Błędny URL</translation>
</message>
<message>
<source>I/O Error</source>
<translation type="unfinished">Błąd We/Wy</translation>
<translation type="obsolete">Błąd We/Wy</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4848,23 +4947,23 @@ Jednak tamte wtyczki były wyłączone.</translation> @@ -4848,23 +4947,23 @@ Jednak tamte wtyczki były wyłączone.</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Brak połączenia</translation>
<translation type="obsolete">Brak połączenia</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Upłynął czas połączenia</translation>
<translation type="obsolete">Upłynął czas połączenia</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Niepoprawny interfejs sieci</translation>
<translation type="obsolete">Niepoprawny interfejs sieci</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Nieznany błąd</translation>
<translation type="obsolete">Nieznany błąd</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Nie można określić proxy</translation>
<translation type="obsolete">Nie można określić proxy</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_pt.qm

Binary file not shown.

119
src/lang/qbittorrent_pt.ts

@ -3198,6 +3198,10 @@ Log de mudanças:</translation> @@ -3198,6 +3198,10 @@ Log de mudanças:</translation>
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Baixar em ordem de sequência (mais lento porém melhor para visualizar)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3622,6 +3626,101 @@ Log de mudanças:</translation> @@ -3622,6 +3626,101 @@ Log de mudanças:</translation>
<translation>Por favor digite uma URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Erro desconhecido</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation> @@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>O host é inalcançável</translation>
<translation type="obsolete">O host é inalcançável</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Arquivo não encontrado (404)</translation>
<translation type="obsolete">Arquivo não encontrado (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Conexão foi negada</translation>
<translation type="obsolete">Conexão foi negada</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Url é inválida</translation>
<translation type="obsolete">Url é inválida</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation> @@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Conexão falhou</translation>
<translation type="obsolete">Conexão falhou</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Conexão esgotou o tempo</translation>
<translation type="obsolete">Conexão esgotou o tempo</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Relação da rede incorreta</translation>
<translation type="obsolete">Relação da rede incorreta</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Erro desconhecido</translation>
<translation type="obsolete">Erro desconhecido</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Não pude resolver proxy</translation>
<translation type="obsolete">Não pude resolver proxy</translation>
</message>
<message>
<source>I/O Error</source>
<translation>Erro de entrada e saída</translation>
<translation type="obsolete">Erro de entrada e saída</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_pt_BR.qm

Binary file not shown.

119
src/lang/qbittorrent_pt_BR.ts

@ -3198,6 +3198,10 @@ Log de mudanças:</translation> @@ -3198,6 +3198,10 @@ Log de mudanças:</translation>
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Baixar em ordem de sequência (mais lento porém melhor para visualizar)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3622,6 +3626,101 @@ Log de mudanças:</translation> @@ -3622,6 +3626,101 @@ Log de mudanças:</translation>
<translation>Por favor digite uma URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Erro desconhecido</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation> @@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>O host é inalcançável</translation>
<translation type="obsolete">O host é inalcançável</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Arquivo não encontrado (404)</translation>
<translation type="obsolete">Arquivo não encontrado (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Conexão foi negada</translation>
<translation type="obsolete">Conexão foi negada</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Url é inválida</translation>
<translation type="obsolete">Url é inválida</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation> @@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Conexão falhou</translation>
<translation type="obsolete">Conexão falhou</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Conexão esgotou o tempo</translation>
<translation type="obsolete">Conexão esgotou o tempo</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Relação da rede incorreta</translation>
<translation type="obsolete">Relação da rede incorreta</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Erro desconhecido</translation>
<translation type="obsolete">Erro desconhecido</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Não pude resolver proxy</translation>
<translation type="obsolete">Não pude resolver proxy</translation>
</message>
<message>
<source>I/O Error</source>
<translation>Erro de entrada e saída</translation>
<translation type="obsolete">Erro de entrada e saída</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_ro.qm

Binary file not shown.

119
src/lang/qbittorrent_ro.ts

@ -3027,6 +3027,10 @@ Changelog: @@ -3027,6 +3027,10 @@ Changelog:
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Descarcă în ordine secvențială (încet dar bine pentru preview)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3451,6 +3455,101 @@ Changelog: @@ -3451,6 +3455,101 @@ Changelog:
<translation> rugăm introduceţi cel puţin un URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">Eroare de intrare/eşire</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Eroare necunoscută</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4520,19 +4619,19 @@ Numai acele adăugate de dvs. pot fi dezinstalate. @@ -4520,19 +4619,19 @@ Numai acele adăugate de dvs. pot fi dezinstalate.
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Calculatorul nu poate fi accesat</translation>
<translation type="obsolete">Calculatorul nu poate fi accesat</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Fişierul nu a fost găsit(404)</translation>
<translation type="obsolete">Fişierul nu a fost găsit(404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Conectarea a fost interzisă</translation>
<translation type="obsolete">Conectarea a fost interzisă</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Adresa URL nu este validă</translation>
<translation type="obsolete">Adresa URL nu este validă</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4548,27 +4647,27 @@ Numai acele adăugate de dvs. pot fi dezinstalate. @@ -4548,27 +4647,27 @@ Numai acele adăugate de dvs. pot fi dezinstalate.
</message>
<message>
<source>Connection failure</source>
<translation>Conectarea eşuată</translation>
<translation type="obsolete">Conectarea eşuată</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Timpul de conectare expirat</translation>
<translation type="obsolete">Timpul de conectare expirat</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Interfaţa de reţea incorectă</translation>
<translation type="obsolete">Interfaţa de reţea incorectă</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Eroare necunoscută</translation>
<translation type="obsolete">Eroare necunoscută</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Proxy nu a putut fi rezolvata</translation>
<translation type="obsolete">Proxy nu a putut fi rezolvata</translation>
</message>
<message>
<source>I/O Error</source>
<translation>Eroare de intrare/eşire</translation>
<translation type="obsolete">Eroare de intrare/eşire</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_ru.qm

Binary file not shown.

119
src/lang/qbittorrent_ru.ts

@ -3216,6 +3216,10 @@ Changelog: @@ -3216,6 +3216,10 @@ Changelog:
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Загружать последовательно (медленнее но удобнее для предпросмотра)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3632,6 +3636,101 @@ Changelog: @@ -3632,6 +3636,101 @@ Changelog:
<translation>Пожалуста введите минимум один URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">Ошибка ввода/вывода</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Неизвестная ошибка</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4730,19 +4829,19 @@ However, those plugins were disabled.</source> @@ -4730,19 +4829,19 @@ However, those plugins were disabled.</source>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Хост недоступен</translation>
<translation type="obsolete">Хост недоступен</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Файл не был найден (404)</translation>
<translation type="obsolete">Файл не был найден (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Подключение было отклонено</translation>
<translation type="obsolete">Подключение было отклонено</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>URL некорректен</translation>
<translation type="obsolete">URL некорректен</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4758,27 +4857,27 @@ However, those plugins were disabled.</source> @@ -4758,27 +4857,27 @@ However, those plugins were disabled.</source>
</message>
<message>
<source>Connection failure</source>
<translation>Соединение не установлено</translation>
<translation type="obsolete">Соединение не установлено</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Тайм-аут соединения</translation>
<translation type="obsolete">Тайм-аут соединения</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Неправильный интерфейс сети</translation>
<translation type="obsolete">Неправильный интерфейс сети</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Неизвестная ошибка</translation>
<translation type="obsolete">Неизвестная ошибка</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Не удалось соединиться с Прокси</translation>
<translation type="obsolete">Не удалось соединиться с Прокси</translation>
</message>
<message>
<source>I/O Error</source>
<translation>Ошибка ввода/вывода</translation>
<translation type="obsolete">Ошибка ввода/вывода</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_sk.qm

Binary file not shown.

119
src/lang/qbittorrent_sk.ts

@ -3134,6 +3134,10 @@ Záznam zmien:</translation> @@ -3134,6 +3134,10 @@ Záznam zmien:</translation>
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Sťahovať v postupnom poradí (pomalšie, ale lepšie pre náhľady)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3562,6 +3566,101 @@ Záznam zmien:</translation> @@ -3562,6 +3566,101 @@ Záznam zmien:</translation>
<translation>Prosím, napíšte aspoň jedno URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">V/V Chyba</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Neznáma chyba</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4699,19 +4798,19 @@ Tieto moduly však boli vypnuté.</translation> @@ -4699,19 +4798,19 @@ Tieto moduly však boli vypnuté.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Hostiteľ je nedostupný</translation>
<translation type="obsolete">Hostiteľ je nedostupný</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Súbor nebol nájdený (404)</translation>
<translation type="obsolete">Súbor nebol nájdený (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Spojenie bolo odmietnuté</translation>
<translation type="obsolete">Spojenie bolo odmietnuté</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>URL je neplatné</translation>
<translation type="obsolete">URL je neplatné</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4727,27 +4826,27 @@ Tieto moduly však boli vypnuté.</translation> @@ -4727,27 +4826,27 @@ Tieto moduly však boli vypnuté.</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Chyba spojenia</translation>
<translation type="obsolete">Chyba spojenia</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Časový limit spojenia vypršal</translation>
<translation type="obsolete">Časový limit spojenia vypršal</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Nesprávne sieťové rozhranie</translation>
<translation type="obsolete">Nesprávne sieťové rozhranie</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Neznáma chyba</translation>
<translation type="obsolete">Neznáma chyba</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Nebolo možné preložiť adresu proxy</translation>
<translation type="obsolete">Nebolo možné preložiť adresu proxy</translation>
</message>
<message>
<source>I/O Error</source>
<translation>V/V Chyba</translation>
<translation type="obsolete">V/V Chyba</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_sv.qm

Binary file not shown.

119
src/lang/qbittorrent_sv.ts

@ -1870,6 +1870,10 @@ p, li { white-space: pre-wrap; } @@ -1870,6 +1870,10 @@ p, li { white-space: pre-wrap; }
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Hämta i sekventiell ordning (långsammare men bra för förhandsvisning)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -2210,6 +2214,101 @@ p, li { white-space: pre-wrap; } @@ -2210,6 +2214,101 @@ p, li { white-space: pre-wrap; }
<translation>Ange åtminstone en url.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">In/Ut-fel</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Okänt fel</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -2952,43 +3051,43 @@ Dock har dessa insticksmoduler blivit inaktiverade.</translation> @@ -2952,43 +3051,43 @@ Dock har dessa insticksmoduler blivit inaktiverade.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Värden är inte nåbar</translation>
<translation type="obsolete">Värden är inte nåbar</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Filen kunde inte hittas (404)</translation>
<translation type="obsolete">Filen kunde inte hittas (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Anslutningen nekades</translation>
<translation type="obsolete">Anslutningen nekades</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Url:en är ogiltig</translation>
<translation type="obsolete">Url:en är ogiltig</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Anslutningsfel</translation>
<translation type="obsolete">Anslutningsfel</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Tidsgränsen för anslutningen överstegs</translation>
<translation type="obsolete">Tidsgränsen för anslutningen överstegs</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Felaktigt nätverksgränssnitt</translation>
<translation type="obsolete">Felaktigt nätverksgränssnitt</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Okänt fel</translation>
<translation type="obsolete">Okänt fel</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Kunde inte slå upp proxy</translation>
<translation type="obsolete">Kunde inte slå upp proxy</translation>
</message>
<message>
<source>I/O Error</source>
<translation>In/Ut-fel</translation>
<translation type="obsolete">In/Ut-fel</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_tr.qm

Binary file not shown.

119
src/lang/qbittorrent_tr.ts

@ -3197,6 +3197,10 @@ Changelog: @@ -3197,6 +3197,10 @@ Changelog:
<source>Download in sequential order (slower but good for previewing)</source>
<translation>Doğru düzende indir (yavaş ama önizleme için iyi)</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3609,6 +3613,101 @@ Changelog: @@ -3609,6 +3613,101 @@ Changelog:
<translation>Lütfen en az bir adres girin.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Bilinmeyen hata</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4683,19 +4782,19 @@ Bununla birlikte, o eklentiler devre dışı.</translation> @@ -4683,19 +4782,19 @@ Bununla birlikte, o eklentiler devre dışı.</translation>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Sunucuya erişilemiyor</translation>
<translation type="obsolete">Sunucuya erişilemiyor</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Dosya bulunamadı (404)</translation>
<translation type="obsolete">Dosya bulunamadı (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Bağlantı reddedildi</translation>
<translation type="obsolete">Bağlantı reddedildi</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Adres geçersiz</translation>
<translation type="obsolete">Adres geçersiz</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4711,27 +4810,27 @@ Bununla birlikte, o eklentiler devre dışı.</translation> @@ -4711,27 +4810,27 @@ Bununla birlikte, o eklentiler devre dışı.</translation>
</message>
<message>
<source>Connection failure</source>
<translation>Bağlantı hatası</translation>
<translation type="obsolete">Bağlantı hatası</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Bağlantı zaman aşımına uğradı</translation>
<translation type="obsolete">Bağlantı zaman aşımına uğradı</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Geçersiz arayüzü</translation>
<translation type="obsolete">Geçersiz arayüzü</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Bilinmeyen hata</translation>
<translation type="obsolete">Bilinmeyen hata</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation>Vekil çözümlenemedi</translation>
<translation type="obsolete">Vekil çözümlenemedi</translation>
</message>
<message>
<source>I/O Error</source>
<translation>Girdi/Çıktı Hatası</translation>
<translation type="obsolete">Girdi/Çıktı Hatası</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_uk.qm

Binary file not shown.

123
src/lang/qbittorrent_uk.ts

@ -3147,6 +3147,10 @@ Changelog: @@ -3147,6 +3147,10 @@ Changelog:
<source>Download in sequential order (slower but good for previewing)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3571,6 +3575,101 @@ Changelog: @@ -3571,6 +3575,101 @@ Changelog:
<translation>Буд-ласка, введіть хоча б один URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished">Невідома помилка</translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4647,19 +4746,19 @@ However, those plugins were disabled.</source> @@ -4647,19 +4746,19 @@ However, those plugins were disabled.</source>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation>Хост недоступний</translation>
<translation type="obsolete">Хост недоступний</translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>Файл не знайдено (404)</translation>
<translation type="obsolete">Файл не знайдено (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation>Відмовлено у з&apos;єднанні</translation>
<translation type="obsolete">Відмовлено у з&apos;єднанні</translation>
</message>
<message>
<source>Url is invalid</source>
<translation>Неправильний URL</translation>
<translation type="obsolete">Неправильний URL</translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -4675,27 +4774,19 @@ However, those plugins were disabled.</source> @@ -4675,27 +4774,19 @@ However, those plugins were disabled.</source>
</message>
<message>
<source>Connection failure</source>
<translation>Відмовлено у з&apos;єднанні</translation>
<translation type="obsolete">Відмовлено у з&apos;єднанні</translation>
</message>
<message>
<source>Connection was timed out</source>
<translation>Вичерпано час на з&apos;єднання</translation>
<translation type="obsolete">Вичерпано час на з&apos;єднання</translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation>Неправильний мережевий інтерфейс</translation>
<translation type="obsolete">Неправильний мережевий інтерфейс</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Невідома помилка</translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>I/O Error</source>
<translation type="unfinished"></translation>
<translation type="obsolete">Невідома помилка</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_zh.qm

Binary file not shown.

119
src/lang/qbittorrent_zh.ts

@ -3379,6 +3379,10 @@ previewing)</source> @@ -3379,6 +3379,10 @@ previewing)</source>
<source>Download in sequential order (slower but good for previewing)</source>
<translation>()</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -3804,6 +3808,101 @@ enabled)</source> @@ -3804,6 +3808,101 @@ enabled)</source>
<translation>URL.</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">/</translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -4973,19 +5072,19 @@ network.</source> @@ -4973,19 +5072,19 @@ network.</source>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>File was not found (404)</source>
<translation>404</translation>
<translation type="obsolete">404</translation>
</message>
<message>
<source>Connection was denied</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Url is invalid</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Connection forbidden (403)</source>
@ -5001,27 +5100,27 @@ network.</source> @@ -5001,27 +5100,27 @@ network.</source>
</message>
<message>
<source>Connection failure</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Connection was timed out</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Unknown error</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>I/O Error</source>
<translation>/</translation>
<translation type="obsolete">/</translation>
</message>
</context>
<context>

BIN
src/lang/qbittorrent_zh_TW.qm

Binary file not shown.

119
src/lang/qbittorrent_zh_TW.ts

@ -1965,6 +1965,10 @@ p, li { white-space: pre-wrap; } @@ -1965,6 +1965,10 @@ p, li { white-space: pre-wrap; }
<source>Download in sequential order (slower but good for previewing)</source>
<translation> ()</translation>
</message>
<message>
<source>Skip file checking and start seeding immediately</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>authentication</name>
@ -2305,6 +2309,101 @@ p, li { white-space: pre-wrap; } @@ -2305,6 +2309,101 @@ p, li { white-space: pre-wrap; }
<translation> URL</translation>
</message>
</context>
<context>
<name>downloadThread</name>
<message>
<source>I/O Error</source>
<translation type="unfinished">I/O </translation>
</message>
<message>
<source>The remote host name was not found (invalid hostname)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation was canceled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the remote server timed out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SSL/TLS handshake failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server refused the connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy server was refused</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy server closed the connection prematurely</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy host name was not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The access to the remote content was denied (401)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The operation requested on the remote content is not permitted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote content was not found at the server (404)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Network Access API cannot honor the request because the protocol is not known</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The requested operation is invalid for this protocol</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown network-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown proxy-related error was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An unknown error related to the remote content was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A breakdown in protocol was detected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>downloading</name>
<message>
@ -3067,43 +3166,43 @@ However, those plugins were disabled.</source> @@ -3067,43 +3166,43 @@ However, those plugins were disabled.</source>
<name>subDownloadThread</name>
<message>
<source>Host is unreachable</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>File was not found (404)</source>
<translation> (404)</translation>
<translation type="obsolete"> (404)</translation>
</message>
<message>
<source>Connection was denied</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Url is invalid</source>
<translation>URL </translation>
<translation type="obsolete">URL </translation>
</message>
<message>
<source>Connection failure</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Connection was timed out</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Incorrect network interface</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Unknown error</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>Could not resolve proxy</source>
<translation></translation>
<translation type="obsolete"></translation>
</message>
<message>
<source>I/O Error</source>
<translation>I/O </translation>
<translation type="obsolete">I/O </translation>
</message>
</context>
<context>

22
src/main.cpp

@ -34,14 +34,9 @@ @@ -34,14 +34,9 @@
#include <QFile>
#include <QSplashScreen>
#include <QSettings>
#ifdef QT_4_4
#include <QLocalSocket>
#include <unistd.h>
#include <sys/types.h>
#else
#include <QTcpSocket>
#include <QHostAddress>
#endif
#include <QPlastiqueStyle>
#include "qgnomelook.h"
#include <QMotifStyle>
@ -143,19 +138,9 @@ int main(int argc, char *argv[]){ @@ -143,19 +138,9 @@ int main(int argc, char *argv[]){
std::cerr << "Couldn't set environment variable...\n";
}
//Check if there is another instance running
#ifdef QT_4_4
QLocalSocket localSocket;
QString uid = QString::number(getuid());
#else
QTcpSocket localSocket;
#endif
#ifdef QT_4_4
localSocket.connectToServer("qBittorrent-"+uid, QIODevice::WriteOnly);
#else
int serverPort = settings.value(QString::fromUtf8("uniqueInstancePort"), -1).toInt();
if(serverPort != -1) {
localSocket.connectToHost(QHostAddress::LocalHost, serverPort, QIODevice::WriteOnly);
#endif
if (localSocket.waitForConnected(1000)){
std::cout << "Another qBittorrent instance is already running...\n";
// Send parameters
@ -174,19 +159,12 @@ int main(int argc, char *argv[]){ @@ -174,19 +159,12 @@ int main(int argc, char *argv[]){
}else{
std::cerr << "Writing to the socket timed out\n";
}
#ifdef QT_4_4
localSocket.disconnectFromServer();
#else
localSocket.disconnectFromHost();
#endif
std::cout << "disconnected\n";
}
localSocket.close();
return 0;
}
#ifndef QT_4_4
}
#endif
app = new QApplication(argc, argv);
useStyle(app, settings.value("Preferences/General/Style", 0).toInt());
app->setStyleSheet("QStatusBar::item { border-width: 0; }");

9
src/qtorrenthandle.cpp

@ -163,11 +163,6 @@ QString QTorrentHandle::save_path() const { @@ -163,11 +163,6 @@ QString QTorrentHandle::save_path() const {
return misc::toQString(h.save_path().string());
}
fs::path QTorrentHandle::save_path_boost() const {
Q_ASSERT(h.is_valid());
return h.save_path();
}
bool QTorrentHandle::super_seeding() const {
Q_ASSERT(h.is_valid());
return h.super_seeding();
@ -239,9 +234,9 @@ size_type QTorrentHandle::filesize_at(unsigned int index) const { @@ -239,9 +234,9 @@ size_type QTorrentHandle::filesize_at(unsigned int index) const {
return h.get_torrent_info().file_at(index).size;
}
std::vector<announce_entry> const& QTorrentHandle::trackers() const {
std::vector<announce_entry> QTorrentHandle::trackers() const {
Q_ASSERT(h.is_valid());
return h.get_torrent_info().trackers();
return h.trackers();
}
torrent_status::state_t QTorrentHandle::state() const {

3
src/qtorrenthandle.h

@ -81,7 +81,6 @@ class QTorrentHandle { @@ -81,7 +81,6 @@ class QTorrentHandle {
int num_incomplete() const;
void scrape_tracker() const;
QString save_path() const;
fs::path save_path_boost() const;
QStringList url_seeds() const;
size_type actual_size() const;
int download_limit() const;
@ -93,7 +92,7 @@ class QTorrentHandle { @@ -93,7 +92,7 @@ class QTorrentHandle {
bool is_queued() const;
QString file_at(unsigned int index) const;
size_type filesize_at(unsigned int index) const;
std::vector<announce_entry> const& trackers() const;
std::vector<announce_entry> trackers() const;
torrent_status::state_t state() const;
QString creator() const;
QString comment() const;

44
src/rss.cpp

@ -561,31 +561,37 @@ short RssStream::readDoc(const QDomDocument& doc) { @@ -561,31 +561,37 @@ short RssStream::readDoc(const QDomDocument& doc) {
image = property.text();
else if(property.tagName() == "item") {
RssItem * item = new RssItem(this, property);
if(item->isValid() && !itemAlreadyExists(item->getTitle())) {
(*this)[item->getTitle()] = item;
if(item->isValid()) {
bool already_exists = itemAlreadyExists(item->getTitle());
if(!already_exists) {
(*this)[item->getTitle()] = item;
}
if(item->has_attachment()) {
has_attachments = true;
// Check if the item should be automatically downloaded
FeedFilter * matching_filter = FeedFilters::getFeedFilters(url).matches(item->getTitle());
if(matching_filter != 0) {
// Download the torrent
BTSession->addConsoleMessage(tr("Automatically downloading %1 torrent from %2 RSS feed...").arg(item->getTitle()).arg(getName()));
if(matching_filter->isValid()) {
QString save_path = matching_filter->getSavePath();
if(save_path.isEmpty())
if(!already_exists || !(*this)[item->getTitle()]->isRead()) {
FeedFilter * matching_filter = FeedFilters::getFeedFilters(url).matches(item->getTitle());
if(matching_filter != 0) {
// Download the torrent
BTSession->addConsoleMessage(tr("Automatically downloading %1 torrent from %2 RSS feed...").arg(item->getTitle()).arg(getName()));
if(matching_filter->isValid()) {
QString save_path = matching_filter->getSavePath();
if(save_path.isEmpty())
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl());
else
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl(), save_path);
} else {
// All torrents are downloaded from this feed
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl());
else
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl(), save_path);
} else {
// All torrents are downloaded from this feed
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl());
}
// Item was downloaded, consider it as Read
(*this)[item->getTitle()]->setRead();
// Clean up
delete matching_filter;
}
// Item was downloaded, consider it as Read
item->setRead();
// Clean up
delete matching_filter;
}
}
} else {
delete item;
}
@ -604,7 +610,7 @@ void RssStream::resizeList() { @@ -604,7 +610,7 @@ void RssStream::resizeList() {
unsigned int max_articles = settings.value(QString::fromUtf8("Preferences/RSS/RSSMaxArticlesPerFeed"), 100).toInt();
unsigned int nb_articles = this->size();
if(nb_articles > max_articles) {
QList<RssItem*> listItem = sortNewsList(this->values());
QList<RssItem*> listItem = RssManager::sortNewsList(this->values());
int excess = nb_articles - max_articles;
for(int i=0; i<excess; ++i){
RssItem *lastItem = listItem.takeLast();

30
src/rss.h

@ -492,23 +492,25 @@ public slots: @@ -492,23 +492,25 @@ public slots:
public:
RssManager(bittorrent *BTSession);
~RssManager();
static void insertSortElem(QList<RssItem*> &list, RssItem *item) {
int i = 0;
while(i < list.size() && item->getDate() < list.at(i)->getDate()) {
++i;
}
list.insert(i, item);
}
static QList<RssItem*> sortNewsList(QList<RssItem*> news_list) {
QList<RssItem*> new_list;
foreach(RssItem *item, news_list) {
insertSortElem(new_list, item);
}
return new_list;
}
};
static void insertSortElem(QList<RssItem*> &list, RssItem *item) {
int i = 0;
while(i < list.size() && item->getDate() < list.at(i)->getDate()) {
++i;
}
list.insert(i, item);
}
static QList<RssItem*> sortNewsList(QList<RssItem*> news_list) {
QList<RssItem*> new_list;
foreach(RssItem *item, news_list) {
insertSortElem(new_list, item);
}
return new_list;
}
#endif

4
src/rss_imp.cpp

@ -431,9 +431,9 @@ void RSSImp::refreshNewsList(QTreeWidgetItem* item) { @@ -431,9 +431,9 @@ void RSSImp::refreshNewsList(QTreeWidgetItem* item) {
qDebug("Getting the list of news");
QList<RssItem*> news;
if(rss_item == rssmanager)
news = sortNewsList(rss_item->getUnreadNewsList());
news = RssManager::sortNewsList(rss_item->getUnreadNewsList());
else
news = sortNewsList(rss_item->getNewsList());
news = RssManager::sortNewsList(rss_item->getNewsList());
// Clear the list first
textBrowser->clear();
previous_news = 0;

7
src/src.pro

@ -14,7 +14,7 @@ CONFIG += qt \ @@ -14,7 +14,7 @@ CONFIG += qt \
network
# Update this VERSION for each release
DEFINES += VERSION=\\\"v1.6.0alpha2\\\"
DEFINES += VERSION=\\\"v1.6.0beta1\\\"
DEFINES += VERSION_MAJOR=1
DEFINES += VERSION_MINOR=6
DEFINES += VERSION_BUGFIX=0
@ -90,15 +90,14 @@ contains(DEBUG_MODE, 0) { @@ -90,15 +90,14 @@ contains(DEBUG_MODE, 0) {
# QMAKE_CXXFLAGS_DEBUG += -fwrapv
unix:QMAKE_LFLAGS_SHAPP += -rdynamic
CONFIG += link_pkgconfig
PKGCONFIG += "libtorrent-rasterbar libcurl"
PKGCONFIG += "libtorrent-rasterbar"
QT += network \
xml
DEFINES += QT_NO_CAST_TO_ASCII
# QT_NO_CAST_FROM_ASCII
# Windows
# usually built as static
# win32:LIBS += -ltorrent -lcurl -lboost_system
# win32:LIBS += -ltorrent -lboost_system
# win32:LIBS += -lz ?
win32:LIBS += -lssl32 \
-lws2_32 \

2
src/torrentAddition.h

@ -444,6 +444,8 @@ public slots: @@ -444,6 +444,8 @@ public slots:
settings.setValue(QString::fromUtf8("LastDirTorrentAdd"), savePathTxt->text());
// Create .incremental file if necessary
TorrentTempData::setSequential(hash, checkIncrementalDL->isChecked());
// Skip file checking and directly start seeding
TorrentTempData::setSeedingMode(hash, addInSeed->isChecked());
// Check if there is at least one selected file
if(allFiltered()){
QMessageBox::warning(0, tr("Invalid file selection"), tr("You must select at least one file in the torrent"));

19
src/torrentPersistentData.h

@ -99,6 +99,25 @@ public: @@ -99,6 +99,25 @@ public:
}
static void setSeedingMode(QString hash,bool seed){
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[hash].toHash();
data["seeding"] = seed;
all_data[hash] = data;
settings.setValue("torrents-tmp", all_data);
}
static bool isSeedingMode(QString hash){
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[hash].toHash();
if(data.contains("seeding"))
return data["seeding"].toBool();
return false;
}
static QString getSavePath(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();

Loading…
Cancel
Save