diff --git a/AUTHORS b/AUTHORS index 6b33170ec..2cd38abc0 100644 --- a/AUTHORS +++ b/AUTHORS @@ -2,10 +2,10 @@ Author: * Christophe Dumez Contributors: -* Arnaud Demaizière -* Ishan Arora -* Grigis Gaëtan * Stefanos Antaris +* Ishan Arora +* Arnaud Demaizière +* Grigis Gaëtan Code from other projects: * files src/ico.cpp src/ico.h diff --git a/Changelog b/Changelog index 948369cf1..fb40bb483 100644 --- a/Changelog +++ b/Changelog @@ -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 - v1.5.0 - FEATURE: Added Magnet URI support diff --git a/INSTALL b/INSTALL index ae8cb5f3a..44a899a20 100644 --- a/INSTALL +++ b/INSTALL @@ -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 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: - 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) diff --git a/configure b/configure index 2c0a35784..af45cc823 100755 --- a/configure +++ b/configure @@ -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 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 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 { 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: 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 <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 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 diff --git a/doc/qbittorrent.1 b/doc/qbittorrent.1 index e5e50af77..571b258a8 100644 --- a/doc/qbittorrent.1 +++ b/doc/qbittorrent.1 @@ -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 diff --git a/qbittorrent.qc b/qbittorrent.qc index ffb74fe12..d1828ef8a 100644 --- a/qbittorrent.qc +++ b/qbittorrent.qc @@ -12,8 +12,5 @@ - - - diff --git a/qcm/libcurl.qcm b/qcm/libcurl.qcm deleted file mode 100644 index b3af39b4a..000000000 --- a/qcm/libcurl.qcm +++ /dev/null @@ -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; - } -}; diff --git a/qcm/qt4.qcm b/qcm/qt4.qcm index 00c709812..947e36a93 100644 --- a/qcm/qt4.qcm +++ b/qcm/qt4.qcm @@ -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); } }; diff --git a/src/GUI.cpp b/src/GUI.cpp index d48a7d20a..62f98af5c 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -35,15 +35,10 @@ #include #include #include -#ifdef QT_4_4 #include #include #include #include -#else -#include -#include -#endif #include #include #include @@ -189,7 +184,6 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis initWebUi(username, password, port); } // Use a tcp server to allow only one instance of qBittorrent -#ifdef QT_4_4 localServer = new QLocalServer(); QString uid = QString::number(getuid()); #ifdef Q_WS_X11 @@ -200,1471 +194,1461 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis } #endif if (!localServer->listen("qBittorrent-"+uid)) { -#else - localServer = new QTcpServer(); - if (!localServer->listen(QHostAddress::LocalHost)) { -#endif - std::cerr << "Couldn't create socket, single instance mode won't work...\n"; - } -#ifndef QT_4_4 - else { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - settings.setValue(QString::fromUtf8("uniqueInstancePort"), localServer->serverPort()); - } -#endif - connect(localServer, SIGNAL(newConnection()), this, SLOT(acceptConnection())); - // Start connection checking timer - checkConnect = new QTimer(this); - connect(checkConnect, SIGNAL(timeout()), this, SLOT(checkConnectionStatus())); - checkConnect->start(5000); - // Accept drag 'n drops - setAcceptDrops(true); - createKeyboardShortcuts(); - connecStatusLblIcon = new QLabel(); - connecStatusLblIcon->setFrameShape(QFrame::NoFrame); - connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png"))); - connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection status:")+QString::fromUtf8("
")+QString::fromUtf8("")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("")); - dlSpeedLbl = new QLabel(tr("DL: %1 KiB/s").arg("0.0")); - upSpeedLbl = new QLabel(tr("UP: %1 KiB/s").arg("0.0")); - ratioLbl = new QLabel(tr("Ratio: %1").arg("1.0")); - DHTLbl = new QLabel(tr("DHT: %1 nodes").arg(0)); - statusSep1 = new QFrame(); - statusSep1->setFixedWidth(1); - statusSep1->setFrameStyle(QFrame::Box); - statusSep2 = new QFrame(); - statusSep2->setFixedWidth(1); - statusSep2->setFrameStyle(QFrame::Box); - statusSep3 = new QFrame(); - statusSep3->setFixedWidth(1); - statusSep3->setFrameStyle(QFrame::Box); - statusSep4 = new QFrame(); - statusSep4->setFixedWidth(1); - statusSep4->setFrameStyle(QFrame::Box); - QMainWindow::statusBar()->addPermanentWidget(DHTLbl); - QMainWindow::statusBar()->addPermanentWidget(statusSep1); - QMainWindow::statusBar()->addPermanentWidget(connecStatusLblIcon); - QMainWindow::statusBar()->addPermanentWidget(statusSep2); - QMainWindow::statusBar()->addPermanentWidget(dlSpeedLbl); - QMainWindow::statusBar()->addPermanentWidget(statusSep3); - QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl); - QMainWindow::statusBar()->addPermanentWidget(statusSep4); - QMainWindow::statusBar()->addPermanentWidget(ratioLbl); - show(); - if(settings.value(QString::fromUtf8("Preferences/General/StartMinimized"), false).toBool()) { - this->setWindowState(Qt::WindowMinimized); - } - scrapeTimer = new QTimer(this); - connect(scrapeTimer, SIGNAL(timeout()), this, SLOT(scrapeTrackers())); - scrapeTimer->start(20000); - qDebug("GUI Built"); + std::cerr << "Couldn't create socket, single instance mode won't work...\n"; } - - // Destructor - GUI::~GUI() { - qDebug("GUI destruction"); - hide(); - // Do this as soon as possible - BTSession->saveDHTEntry(); - BTSession->saveSessionState(); - BTSession->saveFastResumeData(); - scrapeTimer->stop(); - delete scrapeTimer; - delete dlSpeedLbl; - delete upSpeedLbl; - delete ratioLbl; - delete DHTLbl; - delete statusSep1; - delete statusSep2; - delete statusSep3; - delete statusSep4; - if(rssWidget != 0) + connect(localServer, SIGNAL(newConnection()), this, SLOT(acceptConnection())); + // Start connection checking timer + checkConnect = new QTimer(this); + connect(checkConnect, SIGNAL(timeout()), this, SLOT(checkConnectionStatus())); + checkConnect->start(5000); + // Accept drag 'n drops + setAcceptDrops(true); + createKeyboardShortcuts(); + connecStatusLblIcon = new QLabel(); + connecStatusLblIcon->setFrameShape(QFrame::NoFrame); + connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png"))); + connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection status:")+QString::fromUtf8("
")+QString::fromUtf8("")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("")); + dlSpeedLbl = new QLabel(tr("DL: %1 KiB/s").arg("0.0")); + upSpeedLbl = new QLabel(tr("UP: %1 KiB/s").arg("0.0")); + ratioLbl = new QLabel(tr("Ratio: %1").arg("1.0")); + DHTLbl = new QLabel(tr("DHT: %1 nodes").arg(0)); + statusSep1 = new QFrame(); + statusSep1->setFixedWidth(1); + statusSep1->setFrameStyle(QFrame::Box); + statusSep2 = new QFrame(); + statusSep2->setFixedWidth(1); + statusSep2->setFrameStyle(QFrame::Box); + statusSep3 = new QFrame(); + statusSep3->setFixedWidth(1); + statusSep3->setFrameStyle(QFrame::Box); + statusSep4 = new QFrame(); + statusSep4->setFixedWidth(1); + statusSep4->setFrameStyle(QFrame::Box); + QMainWindow::statusBar()->addPermanentWidget(DHTLbl); + QMainWindow::statusBar()->addPermanentWidget(statusSep1); + QMainWindow::statusBar()->addPermanentWidget(connecStatusLblIcon); + QMainWindow::statusBar()->addPermanentWidget(statusSep2); + QMainWindow::statusBar()->addPermanentWidget(dlSpeedLbl); + QMainWindow::statusBar()->addPermanentWidget(statusSep3); + QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl); + QMainWindow::statusBar()->addPermanentWidget(statusSep4); + QMainWindow::statusBar()->addPermanentWidget(ratioLbl); + show(); + if(settings.value(QString::fromUtf8("Preferences/General/StartMinimized"), false).toBool()) { + this->setWindowState(Qt::WindowMinimized); + } + scrapeTimer = new QTimer(this); + connect(scrapeTimer, SIGNAL(timeout()), this, SLOT(scrapeTrackers())); + scrapeTimer->start(20000); + qDebug("GUI Built"); +} + +// Destructor +GUI::~GUI() { + qDebug("GUI destruction"); + hide(); + // Do this as soon as possible + BTSession->saveDHTEntry(); + BTSession->saveSessionState(); + BTSession->saveFastResumeData(); + scrapeTimer->stop(); + delete scrapeTimer; + delete dlSpeedLbl; + delete upSpeedLbl; + delete ratioLbl; + delete DHTLbl; + delete statusSep1; + delete statusSep2; + delete statusSep3; + delete statusSep4; + if(rssWidget != 0) + delete rssWidget; + delete searchEngine; + delete refresher; + delete downloadingTorrentTab; + delete finishedTorrentTab; + delete checkConnect; + qDebug("1"); + if(systrayCreator) { + delete systrayCreator; + } + if(systrayIntegration) { + delete myTrayIcon; + delete myTrayIconMenu; + } + qDebug("2"); + localServer->close(); + delete localServer; + delete connecStatusLblIcon; + delete tabs; + // HTTP Server + if(httpServer) + delete httpServer; + qDebug("3"); + // Keyboard shortcuts + delete switchSearchShortcut; + delete switchSearchShortcut2; + delete switchDownShortcut; + delete switchUpShortcut; + delete switchRSSShortcut; + qDebug("4"); + delete BTSession; + qDebug("5"); +} + +void GUI::displayRSSTab(bool enable) { + if(enable) { + // RSS tab + if(rssWidget == 0) { + rssWidget = new RSSImp(BTSession); + tabs->addTab(rssWidget, tr("RSS")); + tabs->setTabIcon(3, QIcon(QString::fromUtf8(":/Icons/rss32.png"))); + } + } else { + if(rssWidget != 0) { delete rssWidget; - delete searchEngine; - delete refresher; - delete downloadingTorrentTab; - delete finishedTorrentTab; - delete checkConnect; - qDebug("1"); - if(systrayCreator) { - delete systrayCreator; + rssWidget = 0; } - if(systrayIntegration) { - delete myTrayIcon; - delete myTrayIconMenu; - } - qDebug("2"); - localServer->close(); - delete localServer; - delete connecStatusLblIcon; - delete tabs; - // HTTP Server - if(httpServer) - delete httpServer; - qDebug("3"); - // Keyboard shortcuts - delete switchSearchShortcut; - delete switchSearchShortcut2; - delete switchDownShortcut; - delete switchUpShortcut; - delete switchRSSShortcut; - qDebug("4"); - delete BTSession; - qDebug("5"); } - - void GUI::displayRSSTab(bool enable) { - if(enable) { - // RSS tab - if(rssWidget == 0) { - rssWidget = new RSSImp(BTSession); - tabs->addTab(rssWidget, tr("RSS")); - tabs->setTabIcon(3, QIcon(QString::fromUtf8(":/Icons/rss32.png"))); +} + +void GUI::scrapeTrackers() { + std::vector torrents = BTSession->getTorrents(); + std::vector::iterator torrentIT; + for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { + QTorrentHandle h = QTorrentHandle(*torrentIT); + if(!h.is_valid()) continue; + h.scrape_tracker(); + } +} + +void GUI::updateRatio() { + // Update ratio info + float ratio = 1.; + session_status sessionStatus = BTSession->getSessionStatus(); + if(sessionStatus.total_payload_download == 0) { + if(sessionStatus.total_payload_upload == 0) + ratio = 1.; + else + ratio = 10.; + }else{ + ratio = (double)sessionStatus.total_payload_upload / (double)sessionStatus.total_payload_download; + if(ratio > 10.) + ratio = 10.; + } + ratioLbl->setText(tr("Ratio: %1").arg(QString(QByteArray::number(ratio, 'f', 1)))); + // Update DHT nodes + DHTLbl->setText(tr("DHT: %1 nodes").arg(QString::number(sessionStatus.dht_nodes))); +} + +void GUI::on_actionWebsite_triggered() const { + QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://www.qbittorrent.org"))); +} + +void GUI::on_actionDocumentation_triggered() const { + QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://wiki.qbittorrent.org"))); +} + +void GUI::on_actionBugReport_triggered() const { + QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://bugs.qbittorrent.org"))); +} + +void GUI::writeSettings() { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + settings.beginGroup(QString::fromUtf8("MainWindow")); + settings.setValue(QString::fromUtf8("size"), size()); + settings.setValue(QString::fromUtf8("pos"), pos()); + settings.endGroup(); +} + +// called when a torrent has finished +void GUI::finishedTorrent(QTorrentHandle& h) const { + qDebug("In GUI, a torrent has finished"); + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool show_msg = true; + if(TorrentPersistentData::isSeed(h.hash())) + show_msg = false; + QString fileName = h.name(); + bool useNotificationBalloons = settings.value(QString::fromUtf8("Preferences/General/NotificationBaloons"), true).toBool(); + // Add it to finished tab + QString hash = h.hash(); + if(show_msg) + BTSession->addConsoleMessage(tr("%1 has finished downloading.", "e.g: xxx.avi has finished downloading.").arg(fileName)); + downloadingTorrentTab->deleteTorrent(hash); + finishedTorrentTab->addTorrent(hash); + if(show_msg && systrayIntegration && useNotificationBalloons) { + myTrayIcon->showMessage(tr("Download finished"), tr("%1 has finished downloading.", "e.g: xxx.avi has finished downloading.").arg(fileName), QSystemTrayIcon::Information, TIME_TRAY_BALLOON); + } +} + +void GUI::addedTorrent(QTorrentHandle& h) const { + if(h.is_seed()) { + finishedTorrentTab->addTorrent(h.hash()); + } else { + downloadingTorrentTab->addTorrent(h.hash()); + } +} + +void GUI::pausedTorrent(QTorrentHandle& h) const { + if(h.is_seed()) { + finishedTorrentTab->pauseTorrent(h.hash()); + } else { + downloadingTorrentTab->pauseTorrent(h.hash()); + } +} + +void GUI::resumedTorrent(QTorrentHandle& h) const { + if(h.is_seed()) { + finishedTorrentTab->updateTorrent(h); + } else { + downloadingTorrentTab->updateTorrent(h); + } +} + +void GUI::checkedTorrent(QTorrentHandle& h) const { + if(h.is_seed()) { + // Move torrent to finished tab + downloadingTorrentTab->deleteTorrent(h.hash()); + finishedTorrentTab->addTorrent(h.hash()); + } else { + // Move torrent back to download list (if necessary) + if(TorrentPersistentData::isSeed(h.hash())) { + TorrentPersistentData::saveSeedStatus(h); + finishedTorrentTab->deleteTorrent(h.hash()); + downloadingTorrentTab->addTorrent(h.hash()); + } + } +} + +// Notification when disk is full +void GUI::fullDiskError(QTorrentHandle& h, QString msg) const { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool useNotificationBalloons = settings.value(QString::fromUtf8("Preferences/General/NotificationBaloons"), true).toBool(); + if(systrayIntegration && useNotificationBalloons) { + myTrayIcon->showMessage(tr("I/O Error", "i.e: Input/Output Error"), tr("An I/O error occured for torrent %1.\n Reason: %2", "e.g: An error occured for torrent xxx.avi.\n Reason: disk is full.").arg(h.name()).arg(msg), QSystemTrayIcon::Critical, TIME_TRAY_BALLOON); + } + // Download will be paused by libtorrent. Updating GUI information accordingly + QString hash = h.hash(); + qDebug("Full disk error, pausing torrent %s", hash.toLocal8Bit().data()); + setPaused(h); + BTSession->addConsoleMessage(tr("An error occured (full disk?), '%1' paused.", "e.g: An error occured (full disk?), 'xxx.avi' paused.").arg(h.name())); +} + +void GUI::setPaused(QTorrentHandle &h) const { + if(!h.is_paused()) { + // FIXME in v1.6.0: Add Error state and stop using pause for this + h.pause(); + } + qDebug("Marking torrent %s as paused", h.hash().toLocal8Bit().data()); + if(h.is_seed()) { + // In finished list + qDebug("Automatically paused torrent was in finished list"); + finishedTorrentTab->pauseTorrent(h.hash()); + }else{ + downloadingTorrentTab->pauseTorrent(h.hash()); + } +} + +void GUI::createKeyboardShortcuts() { + actionCreate_torrent->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+N"))); + actionOpen->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+O"))); + actionExit->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Q"))); + switchDownShortcut = new QShortcut(QKeySequence(tr("Alt+1", "shortcut to switch to first tab")), this); + connect(switchDownShortcut, SIGNAL(activated()), this, SLOT(displayDownTab())); + switchUpShortcut = new QShortcut(QKeySequence(tr("Alt+2", "shortcut to switch to second tab")), this); + connect(switchUpShortcut, SIGNAL(activated()), this, SLOT(displayUpTab())); + switchSearchShortcut = new QShortcut(QKeySequence(tr("Alt+3", "shortcut to switch to third tab")), this); + connect(switchSearchShortcut, SIGNAL(activated()), this, SLOT(displaySearchTab())); + switchSearchShortcut2 = new QShortcut(QKeySequence(tr("Ctrl+F", "shortcut to switch to search tab")), this); + connect(switchSearchShortcut2, SIGNAL(activated()), this, SLOT(displaySearchTab())); + switchRSSShortcut = new QShortcut(QKeySequence(tr("Alt+4", "shortcut to switch to fourth tab")), this); + connect(switchRSSShortcut, SIGNAL(activated()), this, SLOT(displayRSSTab())); + actionTorrent_Properties->setShortcut(QKeySequence(QString::fromUtf8("Alt+P"))); + actionOptions->setShortcut(QKeySequence(QString::fromUtf8("Alt+O"))); + actionDelete->setShortcut(QKeySequence(QString::fromUtf8("Del"))); + actionDelete_Permanently->setShortcut(QKeySequence(QString::fromUtf8("Shift+Del"))); + actionStart->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+S"))); + actionStart_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+S"))); + actionPause->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+P"))); + actionPause_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+P"))); + actionDecreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+-"))); + actionIncreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl++"))); +} + +// Keyboard shortcuts slots +void GUI::displayDownTab() const { + tabs->setCurrentIndex(0); +} + +void GUI::displayUpTab() const { + tabs->setCurrentIndex(1); +} + +void GUI::displaySearchTab() const { + tabs->setCurrentIndex(2); +} + +void GUI::displayRSSTab() const { + tabs->setCurrentIndex(3); +} + +// End of keyboard shortcuts slots + +void GUI::readSettings() { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + settings.beginGroup(QString::fromUtf8("MainWindow")); + resize(settings.value(QString::fromUtf8("size"), size()).toSize()); + move(settings.value(QString::fromUtf8("pos"), screenCenter()).toPoint()); + settings.endGroup(); +} + +void GUI::balloonClicked() { + if(isHidden()) { + show(); + if(isMinimized()) { + showNormal(); + } + raise(); + activateWindow(); + } +} + +void GUI::acceptConnection() { + clientConnection = localServer->nextPendingConnection(); + connect(clientConnection, SIGNAL(disconnected()), this, SLOT(readParamsOnSocket())); + qDebug("accepted connection from another instance"); +} + +void GUI::readParamsOnSocket() { + if(clientConnection) { + QByteArray params = clientConnection->readAll(); + if(!params.isEmpty()) { + processParams(QString::fromUtf8(params.data()).split(QString::fromUtf8("\n"))); + qDebug("Received parameters from another instance"); + } + } +} + +void GUI::handleDownloadFromUrlFailure(QString url, QString reason) const{ + // Display a message box + QMessageBox::critical(0, tr("Url download error"), tr("Couldn't download file at url: %1, reason: %2.").arg(url).arg(reason)); +} + +void GUI::on_actionSet_global_upload_limit_triggered() { + qDebug("actionSet_global_upload_limit_triggered"); + new BandwidthAllocationDialog(this, true, BTSession, QStringList()); +} + +void GUI::on_actionShow_console_triggered() { + new consoleDlg(this, BTSession); +} + +void GUI::on_actionSet_global_download_limit_triggered() { + qDebug("actionSet_global_download_limit_triggered"); + new BandwidthAllocationDialog(this, false, BTSession, QStringList()); +} + +void GUI::on_actionPreview_file_triggered() { + QString hash; + switch(tabs->currentIndex()){ + case 0: + hash = downloadingTorrentTab->getSelectedTorrents(true).first(); + break; + case 1: + hash = finishedTorrentTab->getSelectedTorrents(true).first(); + break; + default: + return; + } + QTorrentHandle h = BTSession->getTorrentHandle(hash); + new previewSelect(this, h); +} + +void GUI::openDestinationFolder() const { + QStringList hashes; + switch(tabs->currentIndex()){ + case 0: + hashes = downloadingTorrentTab->getSelectedTorrents(true); + break; + case 1: + hashes = finishedTorrentTab->getSelectedTorrents(true); + break; + default: + return; + } + QStringList pathsList; + foreach(const QString &hash, hashes) { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + QString savePath = h.save_path(); + if(!pathsList.contains(savePath)) { + pathsList.append(savePath); + QDesktopServices::openUrl(QString("file://")+savePath); + } + } +} + +void GUI::copyMagnetURI() const { + QStringList hashes; + switch(tabs->currentIndex()){ + case 0: + hashes = downloadingTorrentTab->getSelectedTorrents(); + break; + case 1: + hashes = finishedTorrentTab->getSelectedTorrents(); + break; + default: + return; + } + QStringList magnet_uris; + foreach(QString hash, hashes) { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + if(h.is_valid()) { + magnet_uris << misc::toQString(make_magnet_uri(h.get_torrent_info())); + } + } + qApp->clipboard()->setText(magnet_uris.join("\n")); +} + +void GUI::goBuyPage() const { + QStringList hashes; + switch(tabs->currentIndex()){ + case 0: + hashes = downloadingTorrentTab->getSelectedTorrents(true); + break; + case 1: + hashes = finishedTorrentTab->getSelectedTorrents(true); + break; + default: + return; + } + QStringList pathsList; + foreach(const QString &hash, hashes) { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + QDesktopServices::openUrl("http://match.sharemonkey.com/?info_hash="+hash+"&n="+h.name()+"&cid=33"); + } +} + +// Necessary if we want to close the window +// in one time if "close to systray" is enabled +void GUI::on_actionExit_triggered() { + force_exit = true; + close(); +} + +void GUI::previewFile(QString filePath) { + QDesktopServices::openUrl(QString("file://")+filePath); +} + +int GUI::getCurrentTabIndex() const{ + if(isMinimized() || isHidden()) + return -1; + return tabs->currentIndex(); +} + +void GUI::setTabText(int index, QString text) const { + tabs->setTabText(index, text); +} + +// Toggle Main window visibility +void GUI::toggleVisibility(QSystemTrayIcon::ActivationReason e) { + if(e == QSystemTrayIcon::Trigger || e == QSystemTrayIcon::DoubleClick) { + if(isHidden()) { + show(); + if(isMinimized()) { + if(isMaximized()) { + showMaximized(); + }else{ + showNormal(); + } } + raise(); + activateWindow(); + }else{ + hide(); + } + } +} + +// Center window +QPoint GUI::screenCenter() const{ + int scrn = 0; + QWidget *w = this->topLevelWidget(); + + if(w) + scrn = QApplication::desktop()->screenNumber(w); + else if(QApplication::desktop()->isVirtualDesktop()) + scrn = QApplication::desktop()->screenNumber(QCursor::pos()); + else + scrn = QApplication::desktop()->screenNumber(this); + + QRect desk(QApplication::desktop()->availableGeometry(scrn)); + return QPoint((desk.width() - this->frameGeometry().width()) / 2, (desk.height() - this->frameGeometry().height()) / 2); +} + +// Display About Dialog +void GUI::on_actionAbout_triggered() { + //About dialog + new about(this); +} + +void GUI::showEvent(QShowEvent *e) { + qDebug("** Show Event **"); + updateLists(true); + e->accept(); +} + +// Called when we close the program +void GUI::closeEvent(QCloseEvent *e) { + + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool goToSystrayOnExit = settings.value(QString::fromUtf8("Preferences/General/CloseToTray"), false).toBool(); + if(!force_exit && systrayIntegration && goToSystrayOnExit && !this->isHidden()) { + hide(); + //e->ignore(); + e->accept(); + return; + } + if(settings.value(QString::fromUtf8("Preferences/General/ExitConfirm"), true).toBool() && downloadingTorrentTab->getNbTorrentsInList()) { + show(); + if(!isMaximized()) + showNormal(); + if(e->spontaneous() == true || force_exit == true) { + if(QMessageBox::question(this, + tr("Are you sure you want to quit?")+QString::fromUtf8(" -- ")+tr("qBittorrent"), + tr("The download list is not empty.\nAre you sure you want to quit qBittorrent?"), + tr("&Yes"), tr("&No"), + QString(), 0, 1)) { + e->ignore(); + force_exit = false; + return; + } + } + } + hide(); + if(systrayIntegration) { + // Hide tray icon + myTrayIcon->hide(); + } + // Save window size, columns size + writeSettings(); + // Accept exit + e->accept(); + qApp->exit(); +} + + +// Display window to create a torrent +void GUI::on_actionCreate_torrent_triggered() { + createtorrent *ct = new createtorrent(this); + connect(ct, SIGNAL(torrent_to_seed(QString)), this, SLOT(addTorrent(QString))); +} + +bool GUI::event(QEvent * e) { + if(e->type() == QEvent::WindowStateChange) { + //Now check to see if the window is minimised + if(isMinimized()) { + qDebug("minimisation"); + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + if(systrayIntegration && settings.value(QString::fromUtf8("Preferences/General/MinimizeToTray"), false).toBool()) { + hide(); + } + } + } + return QMainWindow::event(e); +} + +// Action executed when a file is dropped +void GUI::dropEvent(QDropEvent *event) { + event->acceptProposedAction(); + QStringList files; + if(event->mimeData()->hasUrls()) { + QList urls = event->mimeData()->urls(); + foreach(const QUrl &url, urls) { + QString tmp = url.toString().trimmed(); + if(!tmp.isEmpty()) + files << url.toString(); + } + } else { + files = event->mimeData()->text().split(QString::fromUtf8("\n")); + } + // Add file to download list + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); + foreach(QString file, files) { + file = file.trimmed().replace(QString::fromUtf8("file://"), QString::fromUtf8(""), Qt::CaseInsensitive); + qDebug("Dropped file %s on download list", file.toLocal8Bit().data()); + if(file.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || file.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || file.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) { + BTSession->downloadFromUrl(file); + continue; + } + if(file.startsWith("magnet:", Qt::CaseInsensitive)) { + // FIXME: Possibly skipped torrent addition dialog + BTSession->addMagnetUri(file); + continue; + } + if(useTorrentAdditionDialog) { + torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); + dialog->showLoad(file); + }else{ + BTSession->addTorrent(file); + } + } +} + +// Decode if we accept drag 'n drop or not +void GUI::dragEnterEvent(QDragEnterEvent *event) { + foreach(const QString &mime, event->mimeData()->formats()){ + qDebug("mimeData: %s", mime.toLocal8Bit().data()); + } + if (event->mimeData()->hasFormat(QString::fromUtf8("text/plain")) || event->mimeData()->hasFormat(QString::fromUtf8("text/uri-list"))) { + event->acceptProposedAction(); + } +} + +/***************************************************** + * * + * Torrent * + * * + *****************************************************/ + +// Display a dialog to allow user to add +// torrents to download list +void GUI::on_actionOpen_triggered() { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + // Open File Open Dialog + // Note: it is possible to select more than one file + QStringList pathsList = QFileDialog::getOpenFileNames(0, + tr("Open Torrent Files"), settings.value(QString::fromUtf8("MainWindowLastDir"), QDir::homePath()).toString(), + tr("Torrent Files")+QString::fromUtf8(" (*.torrent)")); + if(!pathsList.empty()) { + bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); + unsigned int listSize = pathsList.size(); + for(unsigned int i=0; ishowLoad(pathsList.at(i)); + }else{ + BTSession->addTorrent(pathsList.at(i)); + } + } + // Save last dir to remember it + QStringList top_dir = pathsList.at(0).split(QDir::separator()); + top_dir.removeLast(); + settings.setValue(QString::fromUtf8("MainWindowLastDir"), top_dir.join(QDir::separator())); + } +} + +// delete from download list AND from hard drive +void GUI::on_actionDelete_Permanently_triggered() { + QStringList hashes; + bool inDownloadList = true; + switch(tabs->currentIndex()){ + case 0: + hashes = downloadingTorrentTab->getSelectedTorrents(); + break; + case 1: + hashes = finishedTorrentTab->getSelectedTorrents(); + inDownloadList = false; + break; + default: + return; + } + if(hashes.empty()) return; + int ret; + if(inDownloadList) { + ret = QMessageBox::question( + this, + tr("Are you sure? -- qBittorrent"), + tr("Are you sure you want to delete the selected item(s) from download list and from hard drive?"), + tr("&Yes"), tr("&No"), + QString(), 0, 1); + }else{ + ret = QMessageBox::question( + this, + tr("Are you sure? -- qBittorrent"), + tr("Are you sure you want to delete the selected item(s) from finished list and from hard drive?"), + tr("&Yes"), tr("&No"), + QString(), 0, 1); + } + if(ret) return; + //User clicked YES + foreach(const QString &hash, hashes) { + // Get the file name + QTorrentHandle h = BTSession->getTorrentHandle(hash); + QString fileName = h.name(); + // Remove the torrent + BTSession->deleteTorrent(hash, true); + } +} + +void GUI::deleteTorrent(QString hash) { + // Delete item from list + downloadingTorrentTab->deleteTorrent(hash); + finishedTorrentTab->deleteTorrent(hash); +} + +// delete selected items in the list +void GUI::on_actionDelete_triggered() { + QStringList hashes; + bool inDownloadList = true; + switch(tabs->currentIndex()){ + case 0: // DL + hashes = downloadingTorrentTab->getSelectedTorrents(); + break; + case 1: // SEED + hashes = finishedTorrentTab->getSelectedTorrents(); + inDownloadList = false; + break; + case 3: //RSSImp + rssWidget->deleteSelectedItems(); + return; + default: + return; + } + if(hashes.empty()) return; + int ret; + if(inDownloadList) { + ret = QMessageBox::question( + this, + tr("Are you sure? -- qBittorrent"), + tr("Are you sure you want to delete the selected item(s) in download list?"), + tr("&Yes"), tr("&No"), + QString(), 0, 1); + } else { + ret = QMessageBox::question( + this, + tr("Are you sure? -- qBittorrent"), + tr("Are you sure you want to delete the selected item(s) in finished list?"), + tr("&Yes"), tr("&No"), + QString(), 0, 1); + } + if(ret) return; + //User clicked YES + foreach(const QString &hash, hashes) { + // Get the file name + QTorrentHandle h = BTSession->getTorrentHandle(hash); + QString fileName = h.name(); + // Remove the torrent + BTSession->deleteTorrent(hash, false); + } +} + +// As program parameters, we can get paths or urls. +// This function parse the parameters and call +// the right addTorrent function, considering +// the parameter type. +void GUI::processParams(const QStringList& params) { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); + foreach(QString param, params) { + param = param.trimmed(); + if(param.startsWith("--")) continue; + if(param.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) { + BTSession->downloadFromUrl(param); + }else{ + if(param.startsWith("magnet:", Qt::CaseInsensitive)) { + // FIXME: Possibily skipped torrent addition dialog + BTSession->addMagnetUri(param); + } else { + if(useTorrentAdditionDialog) { + torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); + dialog->showLoad(param); + }else{ + BTSession->addTorrent(param); + } + } + } + } +} + +void GUI::addTorrent(QString path) { + BTSession->addTorrent(path); +} + +void GUI::processDownloadedFiles(QString path, QString url) { + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); + if(useTorrentAdditionDialog) { + torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); + dialog->showLoad(path, url); + }else{ + BTSession->addTorrent(path, false, url); + } +} + +// Set BT session configuration +void GUI::configureSession(bool deleteOptions) { + qDebug("Configuring session"); + // General + bool new_displaySpeedInTitle = options->speedInTitleBar(); + if(!new_displaySpeedInTitle && new_displaySpeedInTitle != displaySpeedInTitle) { + // Reset title + setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION))); + } + displaySpeedInTitle = new_displaySpeedInTitle; + if(options->isToolbarDisplayed()) { + toolBar->setVisible(true); + toolBar->layout()->setSpacing(7); + } else { + toolBar->setVisible(false); + } + unsigned int new_refreshInterval = options->getRefreshInterval(); + if(refreshInterval != new_refreshInterval) { + refreshInterval = new_refreshInterval; + refresher->start(refreshInterval); + } + // Downloads + // * Save path + BTSession->setDefaultSavePath(options->getSavePath()); + if(options->isTempPathEnabled()) { + BTSession->setDefaultTempPath(options->getTempPath()); + } else { + BTSession->setDefaultTempPath(QString::null); + } + BTSession->preAllocateAllFiles(options->preAllocateAllFiles()); + BTSession->startTorrentsInPause(options->addTorrentsInPause()); + // * Scan dir + if(options->getScanDir().isNull()) { + BTSession->disableDirectoryScanning(); + }else{ + //Interval first + BTSession->enableDirectoryScanning(options->getScanDir()); + } + // Connection + // * Ports binding + unsigned short old_listenPort = BTSession->getListenPort(); + BTSession->setListeningPort(options->getPort()); + unsigned short new_listenPort = BTSession->getListenPort(); + if(new_listenPort != old_listenPort) { + BTSession->addConsoleMessage(tr("qBittorrent is bound to port: TCP/%1", "e.g: qBittorrent is bound to port: 6881").arg( misc::toQString(new_listenPort))); + } + // * Global download limit + QPair limits = options->getGlobalBandwidthLimits(); + if(limits.first <= 0) { + // Download limit disabled + BTSession->setDownloadRateLimit(-1); + } else { + // Enabled + BTSession->setDownloadRateLimit(limits.first*1024); + } + // * Global Upload limit + if(limits.second <= 0) { + // Upload limit disabled + BTSession->setUploadRateLimit(-1); + } else { + // Enabled + BTSession->setUploadRateLimit(limits.second*1024); + } + // * UPnP + if(options->isUPnPEnabled()) { + BTSession->enableUPnP(true); + BTSession->addConsoleMessage(tr("UPnP support [ON]"), QString::fromUtf8("blue")); + } else { + BTSession->enableUPnP(false); + BTSession->addConsoleMessage(tr("UPnP support [OFF]"), QString::fromUtf8("blue")); + } + // * NAT-PMP + if(options->isNATPMPEnabled()) { + BTSession->enableNATPMP(true); + BTSession->addConsoleMessage(tr("NAT-PMP support [ON]"), QString::fromUtf8("blue")); + } else { + BTSession->enableNATPMP(false); + BTSession->addConsoleMessage(tr("NAT-PMP support [OFF]"), QString::fromUtf8("blue")); + } + // * Session settings + session_settings sessionSettings; + if(options->shouldSpoofAzureus()) { + sessionSettings.user_agent = "Azureus 3.0.5.2"; + } else { + sessionSettings.user_agent = "qBittorrent "VERSION; + } + sessionSettings.upnp_ignore_nonrouters = true; + sessionSettings.use_dht_as_fallback = false; + // To keep same behavior as in qbittorrent v1.2.0 + sessionSettings.rate_limit_ip_overhead = false; + // Queueing System + if(options->isQueueingSystemEnabled()) { + if(!BTSession->isQueueingEnabled()) { + downloadingTorrentTab->hidePriorityColumn(false); + actionDecreasePriority->setVisible(true); + actionIncreasePriority->setVisible(true); + prioSeparator->setVisible(true); + prioSeparator2->setVisible(true); + toolBar->layout()->setSpacing(7); + } + int max_torrents = options->getMaxActiveTorrents(); + int max_uploads = options->getMaxActiveUploads(); + int max_downloads = options->getMaxActiveDownloads(); + sessionSettings.active_downloads = max_downloads; + sessionSettings.active_seeds = max_uploads; + sessionSettings.active_limit = max_torrents; + sessionSettings.dont_count_slow_torrents = false; + BTSession->setQueueingEnabled(true); + } else { + if(BTSession->isQueueingEnabled()) { + sessionSettings.active_downloads = -1; + sessionSettings.active_seeds = -1; + sessionSettings.active_limit = -1; + BTSession->setQueueingEnabled(false); + downloadingTorrentTab->hidePriorityColumn(true); + actionDecreasePriority->setVisible(false); + actionIncreasePriority->setVisible(false); + prioSeparator->setVisible(false); + prioSeparator2->setVisible(false); + toolBar->layout()->setSpacing(7); + } + } + BTSession->setSessionSettings(sessionSettings); + // Bittorrent + // * Max connections limit + BTSession->setMaxConnections(options->getMaxConnecs()); + // * Max connections per torrent limit + BTSession->setMaxConnectionsPerTorrent(options->getMaxConnecsPerTorrent()); + // * Max uploads per torrent limit + BTSession->setMaxUploadsPerTorrent(options->getMaxUploadsPerTorrent()); + // * DHT + if(options->isDHTEnabled()) { + // Set DHT Port + BTSession->setDHTPort(options->getDHTPort()); + if(BTSession->enableDHT(true)) { + int dht_port = new_listenPort; + if(options->getDHTPort()) + dht_port = options->getDHTPort(); + BTSession->addConsoleMessage(tr("DHT support [ON], port: UDP/%1").arg(dht_port), QString::fromUtf8("blue")); } else { - if(rssWidget != 0) { - delete rssWidget; - rssWidget = 0; + BTSession->addConsoleMessage(tr("DHT support [OFF]"), QString::fromUtf8("red")); + } + } else { + BTSession->enableDHT(false); + BTSession->addConsoleMessage(tr("DHT support [OFF]"), QString::fromUtf8("blue")); + } + // * PeX + BTSession->addConsoleMessage(tr("PeX support [ON]"), QString::fromUtf8("blue")); + // * LSD + if(options->isLSDEnabled()) { + BTSession->enableLSD(true); + BTSession->addConsoleMessage(tr("Local Peer Discovery [ON]"), QString::fromUtf8("blue")); + } else { + BTSession->enableLSD(false); + BTSession->addConsoleMessage(tr("Local Peer Discovery support [OFF]"), QString::fromUtf8("blue")); + } + // * Encryption + int encryptionState = options->getEncryptionSetting(); + // The most secure, rc4 only so that all streams and encrypted + pe_settings encryptionSettings; + encryptionSettings.allowed_enc_level = pe_settings::rc4; + encryptionSettings.prefer_rc4 = true; + switch(encryptionState) { + case 0: //Enabled + encryptionSettings.out_enc_policy = pe_settings::enabled; + encryptionSettings.in_enc_policy = pe_settings::enabled; + BTSession->addConsoleMessage(tr("Encryption support [ON]"), QString::fromUtf8("blue")); + break; + case 1: // Forced + encryptionSettings.out_enc_policy = pe_settings::forced; + encryptionSettings.in_enc_policy = pe_settings::forced; + BTSession->addConsoleMessage(tr("Encryption support [FORCED]"), QString::fromUtf8("blue")); + break; + default: // Disabled + encryptionSettings.out_enc_policy = pe_settings::disabled; + encryptionSettings.in_enc_policy = pe_settings::disabled; + BTSession->addConsoleMessage(tr("Encryption support [OFF]"), QString::fromUtf8("blue")); + } + BTSession->applyEncryptionSettings(encryptionSettings); + // * Desired ratio + BTSession->setGlobalRatio(options->getDesiredRatio()); + // * Maximum ratio + BTSession->setDeleteRatio(options->getDeleteRatio()); + // Ip Filter + if(options->isFilteringEnabled()) { + BTSession->enableIPFilter(options->getFilter()); + }else{ + BTSession->disableIPFilter(); + } + // RSS + if(options->isRSSEnabled()) { + displayRSSTab(true); + } else { + displayRSSTab(false); + } + // * Proxy settings + proxy_settings proxySettings; + if(options->isProxyEnabled()) { + qDebug("Enabling P2P proxy"); + proxySettings.hostname = options->getProxyIp().toStdString(); + qDebug("hostname is %s", proxySettings.hostname.c_str()); + proxySettings.port = options->getProxyPort(); + qDebug("port is %d", proxySettings.port); + if(options->isProxyAuthEnabled()) { + + proxySettings.username = options->getProxyUsername().toStdString(); + proxySettings.password = options->getProxyPassword().toStdString(); + qDebug("username is %s", proxySettings.username.c_str()); + qDebug("password is %s", proxySettings.password.c_str()); + } + switch(options->getProxyType()) { + case HTTP: + qDebug("type: http"); + proxySettings.type = proxy_settings::http; + break; + case HTTP_PW: + qDebug("type: http_pw"); + proxySettings.type = proxy_settings::http_pw; + break; + case SOCKS5: + qDebug("type: socks5"); + proxySettings.type = proxy_settings::socks5; + break; + default: + qDebug("type: socks5_pw"); + proxySettings.type = proxy_settings::socks5_pw; + break; + } + qDebug("booleans: %d %d %d %d", options->useProxyForTrackers(), options->useProxyForPeers(), options->useProxyForWebseeds(), options->useProxyForDHT()); + BTSession->setProxySettings(proxySettings, options->useProxyForTrackers(), options->useProxyForPeers(), options->useProxyForWebseeds(), options->useProxyForDHT()); + } else { + qDebug("Disabling P2P proxy"); + BTSession->setProxySettings(proxySettings, false, false, false, false); + } + if(options->isHTTPProxyEnabled()) { + qDebug("Enabling Search HTTP proxy"); + // HTTP Proxy + QString proxy_str; + switch(options->getHTTPProxyType()) { + case HTTP_PW: + proxy_str = misc::toQString("http://")+options->getHTTPProxyUsername()+":"+options->getHTTPProxyPassword()+"@"+options->getHTTPProxyIp()+":"+misc::toQString(options->getHTTPProxyPort()); + break; + default: + proxy_str = misc::toQString("http://")+options->getHTTPProxyIp()+":"+misc::toQString(options->getHTTPProxyPort()); + } + // We need this for urllib in search engine plugins +#ifdef Q_WS_WIN + char proxystr[512]; + snprintf(proxystr, 512, "http_proxy=%s", proxy_str.toLocal8Bit().data()); + putenv(proxystr); +#else + qDebug("HTTP: proxy string: %s", proxy_str.toLocal8Bit().data()); + setenv("http_proxy", proxy_str.toLocal8Bit().data(), 1); +#endif + } else { + qDebug("Disabling search proxy"); +#ifdef Q_WS_WIN + putenv("http_proxy="); +#else + unsetenv("http_proxy"); +#endif + } + // Clean up + if(deleteOptions && options) { + qDebug("Deleting options"); + //delete options; + options->deleteLater(); + } + qDebug("Session configured"); +} + +void GUI::updateUnfinishedTorrentNumber(unsigned int nb) { + unsigned int paused = BTSession->getUnfinishedPausedTorrentsNb(); + tabs->setTabText(0, tr("Downloads") +QString::fromUtf8(" (")+misc::toQString(nb-paused)+"/"+misc::toQString(nb)+QString::fromUtf8(")")); +} + +void GUI::updateFinishedTorrentNumber(unsigned int nb) { + unsigned int paused = BTSession->getFinishedPausedTorrentsNb(); + tabs->setTabText(1, tr("Finished") +QString::fromUtf8(" (")+misc::toQString(nb-paused)+"/"+misc::toQString(nb)+QString::fromUtf8(")")); +} + +// Allow to change action on double-click +void GUI::torrentDoubleClicked(QString hash, bool finished) { + int action; + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); + QTorrentHandle h = BTSession->getTorrentHandle(hash); + + if(finished) { + action = settings.value(QString::fromUtf8("Preferences/Downloads/DblClOnTorFN"), 0).toInt(); + } else { + action = settings.value(QString::fromUtf8("Preferences/Downloads/DblClOnTorDl"), 0).toInt(); + } + + switch(action) { + case TOGGLE_PAUSE: + this->togglePausedState(hash); + break; + case OPEN_DEST: { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + QString savePath = h.save_path(); + QDesktopServices::openUrl(QUrl(savePath)); + break; + } + case SHOW_PROPERTIES : + if(finished) { + finishedTorrentTab->showPropertiesFromHash(hash); + } else { + downloadingTorrentTab->showPropertiesFromHash(hash); + } + break; + } +} + +// Toggle paused state of selected torrent +void GUI::togglePausedState(QString hash) { + if(tabs->currentIndex() > 1) return; + bool inDownloadList = true; + if(tabs->currentIndex() == 1) + inDownloadList = false; + QTorrentHandle h = BTSession->getTorrentHandle(hash); + if(h.is_paused()) { + h.resume(); + resumedTorrent(h); + if(inDownloadList) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + }else{ + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); + } + }else{ + h.pause(); + pausedTorrent(h); + if(inDownloadList) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + }else{ + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); + } + } +} + +// Pause All Downloads in DL list +void GUI::on_actionPause_All_triggered() { + bool change = false; + std::vector torrents = BTSession->getTorrents(); + std::vector::iterator torrentIT; + for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { + QTorrentHandle h = QTorrentHandle(*torrentIT); + if(!h.is_valid() || h.is_paused()) continue; + change = true; + h.pause(); + pausedTorrent(h); + } + if(change) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); + } +} + +void GUI::on_actionIncreasePriority_triggered() { + if(tabs->currentIndex() != 0) + return; + QStringList hashes = downloadingTorrentTab->getSelectedTorrents(); + foreach(const QString &hash, hashes) { + BTSession->increaseDlTorrentPriority(hash); + } + updateLists(); +} + +void GUI::on_actionDecreasePriority_triggered() { + Q_ASSERT(tabs->currentIndex() == 0); + QStringList hashes = downloadingTorrentTab->getSelectedTorrents(); + foreach(const QString &hash, hashes) { + BTSession->decreaseDlTorrentPriority(hash); + } + updateLists(); +} + +// pause selected items in the list +void GUI::on_actionPause_triggered() { + bool inDownloadList = true; + if(tabs->currentIndex() > 1) return; + if(tabs->currentIndex() == 1) + inDownloadList = false; + QStringList hashes; + if(inDownloadList) { + hashes = downloadingTorrentTab->getSelectedTorrents(); + } else { + hashes = finishedTorrentTab->getSelectedTorrents(); + } + qDebug("nb hashes: %d", hashes.size()); + foreach(const QString &hash, hashes) { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + if(!h.is_paused()){ + h.pause(); + pausedTorrent(h); + if(inDownloadList) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + } else { + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); } } } - - void GUI::scrapeTrackers() { +} + +// Resume All Downloads in DL list +void GUI::on_actionStart_All_triggered() { + bool change = false; + std::vector torrents = BTSession->getTorrents(); + std::vector::iterator torrentIT; + for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { + QTorrentHandle h = QTorrentHandle(*torrentIT); + if(!h.is_valid() || !h.is_paused()) continue; + change = true; + h.resume(); + resumedTorrent(h); + } + if(change) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); + } +} + +// start selected items in the list +void GUI::on_actionStart_triggered() { + bool inDownloadList = true; + if(tabs->currentIndex() > 1) return; + if(tabs->currentIndex() == 1) + inDownloadList = false; + QStringList hashes; + if(inDownloadList) { + hashes = downloadingTorrentTab->getSelectedTorrents(); + } else { + hashes = finishedTorrentTab->getSelectedTorrents(); + } + foreach(const QString &hash, hashes) { + QTorrentHandle h = BTSession->getTorrentHandle(hash); + if(h.is_paused()){ + h.resume(); + resumedTorrent(h); + if(inDownloadList) { + updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); + } else { + updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); + } + } + } +} + +void GUI::addUnauthenticatedTracker(QPair tracker) { + // Trackers whose authentication was cancelled + if(unauthenticated_trackers.indexOf(tracker) < 0) { + unauthenticated_trackers << tracker; + } +} + +// display properties of selected items +void GUI::on_actionTorrent_Properties_triggered() { + if(tabs->currentIndex() > 1) return; + switch(tabs->currentIndex()){ + case 1: // DL List + finishedTorrentTab->propertiesSelection(); + break; + default: + downloadingTorrentTab->propertiesSelection(); + } +} + +void GUI::updateLists(bool force) { + if(isVisible() || force) { + // update global informations + dlSpeedLbl->setText(tr("DL: %1 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1)))); + upSpeedLbl->setText(tr("UP: %1 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1)))); std::vector torrents = BTSession->getTorrents(); std::vector::iterator torrentIT; for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { QTorrentHandle h = QTorrentHandle(*torrentIT); if(!h.is_valid()) continue; - h.scrape_tracker(); - } - } - - void GUI::updateRatio() { - // Update ratio info - float ratio = 1.; - session_status sessionStatus = BTSession->getSessionStatus(); - if(sessionStatus.total_payload_download == 0) { - if(sessionStatus.total_payload_upload == 0) - ratio = 1.; - else - ratio = 10.; - }else{ - ratio = (double)sessionStatus.total_payload_upload / (double)sessionStatus.total_payload_download; - if(ratio > 10.) - ratio = 10.; - } - ratioLbl->setText(tr("Ratio: %1").arg(QString(QByteArray::number(ratio, 'f', 1)))); - // Update DHT nodes - DHTLbl->setText(tr("DHT: %1 nodes").arg(QString::number(sessionStatus.dht_nodes))); - } - - void GUI::on_actionWebsite_triggered() const { - QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://www.qbittorrent.org"))); - } - - void GUI::on_actionDocumentation_triggered() const { - QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://wiki.qbittorrent.org"))); - } - - void GUI::on_actionBugReport_triggered() const { - QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://bugs.qbittorrent.org"))); - } - - void GUI::writeSettings() { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - settings.beginGroup(QString::fromUtf8("MainWindow")); - settings.setValue(QString::fromUtf8("size"), size()); - settings.setValue(QString::fromUtf8("pos"), pos()); - settings.endGroup(); - } - - // called when a torrent has finished - void GUI::finishedTorrent(QTorrentHandle& h) const { - qDebug("In GUI, a torrent has finished"); - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool show_msg = true; - if(TorrentPersistentData::isSeed(h.hash())) - show_msg = false; - QString fileName = h.name(); - bool useNotificationBalloons = settings.value(QString::fromUtf8("Preferences/General/NotificationBaloons"), true).toBool(); - // Add it to finished tab - QString hash = h.hash(); - if(show_msg) - BTSession->addConsoleMessage(tr("%1 has finished downloading.", "e.g: xxx.avi has finished downloading.").arg(fileName)); - downloadingTorrentTab->deleteTorrent(hash); - finishedTorrentTab->addTorrent(hash); - if(show_msg && systrayIntegration && useNotificationBalloons) { - myTrayIcon->showMessage(tr("Download finished"), tr("%1 has finished downloading.", "e.g: xxx.avi has finished downloading.").arg(fileName), QSystemTrayIcon::Information, TIME_TRAY_BALLOON); - } - } - - void GUI::addedTorrent(QTorrentHandle& h) const { - if(h.is_seed()) { - finishedTorrentTab->addTorrent(h.hash()); - } else { - downloadingTorrentTab->addTorrent(h.hash()); - } - } - - void GUI::pausedTorrent(QTorrentHandle& h) const { - if(h.is_seed()) { - finishedTorrentTab->pauseTorrent(h.hash()); - } else { - downloadingTorrentTab->pauseTorrent(h.hash()); - } - } - - void GUI::resumedTorrent(QTorrentHandle& h) const { - if(h.is_seed()) { - finishedTorrentTab->updateTorrent(h); - } else { - downloadingTorrentTab->updateTorrent(h); - } - } - - void GUI::checkedTorrent(QTorrentHandle& h) const { - if(h.is_seed()) { - // Move torrent to finished tab - downloadingTorrentTab->deleteTorrent(h.hash()); - finishedTorrentTab->addTorrent(h.hash()); - } else { - // Move torrent back to download list (if necessary) - if(TorrentPersistentData::isSeed(h.hash())) { - TorrentPersistentData::saveSeedStatus(h); - finishedTorrentTab->deleteTorrent(h.hash()); - downloadingTorrentTab->addTorrent(h.hash()); + try { + if(h.is_seed()) { + // Update in finished list + finishedTorrentTab->updateTorrent(h); + } else { + // Update in download list + if(downloadingTorrentTab->updateTorrent(h)) { + // Torrent was added, we may need to remove it from finished tab + finishedTorrentTab->deleteTorrent(h.hash()); + TorrentPersistentData::saveSeedStatus(h); + } + } + } catch(invalid_handle e) { + qDebug("Caught Invalid handle exception, lucky us."); } } } - - // Notification when disk is full - void GUI::fullDiskError(QTorrentHandle& h, QString msg) const { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool useNotificationBalloons = settings.value(QString::fromUtf8("Preferences/General/NotificationBaloons"), true).toBool(); - if(systrayIntegration && useNotificationBalloons) { - myTrayIcon->showMessage(tr("I/O Error", "i.e: Input/Output Error"), tr("An I/O error occured for torrent %1.\n Reason: %2", "e.g: An error occured for torrent xxx.avi.\n Reason: disk is full.").arg(h.name()).arg(msg), QSystemTrayIcon::Critical, TIME_TRAY_BALLOON); - } - // Download will be paused by libtorrent. Updating GUI information accordingly - QString hash = h.hash(); - qDebug("Full disk error, pausing torrent %s", hash.toLocal8Bit().data()); - setPaused(h); - BTSession->addConsoleMessage(tr("An error occured (full disk?), '%1' paused.", "e.g: An error occured (full disk?), 'xxx.avi' paused.").arg(h.name())); - } - - void GUI::setPaused(QTorrentHandle &h) const { - if(!h.is_paused()) { - // FIXME in v1.6.0: Add Error state and stop using pause for this - h.pause(); - } - qDebug("Marking torrent %s as paused", h.hash().toLocal8Bit().data()); - if(h.is_seed()) { - // In finished list - qDebug("Automatically paused torrent was in finished list"); - finishedTorrentTab->pauseTorrent(h.hash()); - }else{ - downloadingTorrentTab->pauseTorrent(h.hash()); - } - } - - void GUI::createKeyboardShortcuts() { - actionCreate_torrent->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+N"))); - actionOpen->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+O"))); - actionExit->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Q"))); - switchDownShortcut = new QShortcut(QKeySequence(tr("Alt+1", "shortcut to switch to first tab")), this); - connect(switchDownShortcut, SIGNAL(activated()), this, SLOT(displayDownTab())); - switchUpShortcut = new QShortcut(QKeySequence(tr("Alt+2", "shortcut to switch to second tab")), this); - connect(switchUpShortcut, SIGNAL(activated()), this, SLOT(displayUpTab())); - switchSearchShortcut = new QShortcut(QKeySequence(tr("Alt+3", "shortcut to switch to third tab")), this); - connect(switchSearchShortcut, SIGNAL(activated()), this, SLOT(displaySearchTab())); - switchSearchShortcut2 = new QShortcut(QKeySequence(tr("Ctrl+F", "shortcut to switch to search tab")), this); - connect(switchSearchShortcut2, SIGNAL(activated()), this, SLOT(displaySearchTab())); - switchRSSShortcut = new QShortcut(QKeySequence(tr("Alt+4", "shortcut to switch to fourth tab")), this); - connect(switchRSSShortcut, SIGNAL(activated()), this, SLOT(displayRSSTab())); - actionTorrent_Properties->setShortcut(QKeySequence(QString::fromUtf8("Alt+P"))); - actionOptions->setShortcut(QKeySequence(QString::fromUtf8("Alt+O"))); - actionDelete->setShortcut(QKeySequence(QString::fromUtf8("Del"))); - actionDelete_Permanently->setShortcut(QKeySequence(QString::fromUtf8("Shift+Del"))); - actionStart->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+S"))); - actionStart_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+S"))); - actionPause->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+P"))); - actionPause_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+P"))); - actionDecreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+-"))); - actionIncreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl++"))); - } - - // Keyboard shortcuts slots - void GUI::displayDownTab() const { - tabs->setCurrentIndex(0); - } - - void GUI::displayUpTab() const { - tabs->setCurrentIndex(1); - } - - void GUI::displaySearchTab() const { - tabs->setCurrentIndex(2); - } - - void GUI::displayRSSTab() const { - tabs->setCurrentIndex(3); - } - - // End of keyboard shortcuts slots - - void GUI::readSettings() { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - settings.beginGroup(QString::fromUtf8("MainWindow")); - resize(settings.value(QString::fromUtf8("size"), size()).toSize()); - move(settings.value(QString::fromUtf8("pos"), screenCenter()).toPoint()); - settings.endGroup(); - } - - void GUI::balloonClicked() { - if(isHidden()) { - show(); - if(isMinimized()) { - showNormal(); - } - raise(); - activateWindow(); - } - } - - void GUI::acceptConnection() { - clientConnection = localServer->nextPendingConnection(); - connect(clientConnection, SIGNAL(disconnected()), this, SLOT(readParamsOnSocket())); - qDebug("accepted connection from another instance"); - } - - void GUI::readParamsOnSocket() { - if(clientConnection) { - QByteArray params = clientConnection->readAll(); - if(!params.isEmpty()) { - processParams(QString::fromUtf8(params.data()).split(QString::fromUtf8("\n"))); - qDebug("Received parameters from another instance"); - } - } - } - - void GUI::handleDownloadFromUrlFailure(QString url, QString reason) const{ - // Display a message box - QMessageBox::critical(0, tr("Url download error"), tr("Couldn't download file at url: %1, reason: %2.").arg(url).arg(reason)); - } - - void GUI::on_actionSet_global_upload_limit_triggered() { - qDebug("actionSet_global_upload_limit_triggered"); - new BandwidthAllocationDialog(this, true, BTSession, QStringList()); - } - - void GUI::on_actionShow_console_triggered() { - new consoleDlg(this, BTSession); - } - - void GUI::on_actionSet_global_download_limit_triggered() { - qDebug("actionSet_global_download_limit_triggered"); - new BandwidthAllocationDialog(this, false, BTSession, QStringList()); - } - - void GUI::on_actionPreview_file_triggered() { - QString hash; - switch(tabs->currentIndex()){ - case 0: - hash = downloadingTorrentTab->getSelectedTorrents(true).first(); - break; - case 1: - hash = finishedTorrentTab->getSelectedTorrents(true).first(); - break; - default: - return; - } - QTorrentHandle h = BTSession->getTorrentHandle(hash); - new previewSelect(this, h); - } - - void GUI::openDestinationFolder() const { - QStringList hashes; - switch(tabs->currentIndex()){ - case 0: - hashes = downloadingTorrentTab->getSelectedTorrents(true); - break; - case 1: - hashes = finishedTorrentTab->getSelectedTorrents(true); - break; - default: - return; - } - QStringList pathsList; - foreach(const QString &hash, hashes) { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - QString savePath = h.save_path(); - if(!pathsList.contains(savePath)) { - pathsList.append(savePath); - QDesktopServices::openUrl(QString("file://")+savePath); - } - } + if(displaySpeedInTitle) { + QString dl_rate = QByteArray::number(BTSession->getSessionStatus().payload_download_rate/1024, 'f', 1); + QString up_rate = QByteArray::number(BTSession->getSessionStatus().payload_upload_rate/1024, 'f', 1); + setWindowTitle(tr("qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s)", "%1 is qBittorrent version").arg(QString::fromUtf8(VERSION)).arg(dl_rate).arg(up_rate)); } +} - void GUI::copyMagnetURI() const { - QStringList hashes; - switch(tabs->currentIndex()){ - case 0: - hashes = downloadingTorrentTab->getSelectedTorrents(); - break; - case 1: - hashes = finishedTorrentTab->getSelectedTorrents(); - break; - default: - return; - } - QStringList magnet_uris; - foreach(QString hash, hashes) { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - if(h.is_valid()) { - magnet_uris << misc::toQString(make_magnet_uri(h.get_torrent_info())); - } - } - qApp->clipboard()->setText(magnet_uris.join("\n")); +// Called when a tracker requires authentication +void GUI::trackerAuthenticationRequired(QTorrentHandle& h) { + if(unauthenticated_trackers.indexOf(QPair(h, h.current_tracker())) < 0) { + // Tracker login + new trackerLogin(this, h); } - - void GUI::goBuyPage() const { - QStringList hashes; - switch(tabs->currentIndex()){ - case 0: - hashes = downloadingTorrentTab->getSelectedTorrents(true); - break; - case 1: - hashes = finishedTorrentTab->getSelectedTorrents(true); - break; - default: - return; - } - QStringList pathsList; - foreach(const QString &hash, hashes) { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - QDesktopServices::openUrl("http://match.sharemonkey.com/?info_hash="+hash+"&n="+h.name()+"&cid=33"); - } - } - - // Necessary if we want to close the window - // in one time if "close to systray" is enabled - void GUI::on_actionExit_triggered() { - force_exit = true; - close(); - } - - void GUI::previewFile(QString filePath) { - QDesktopServices::openUrl(QString("file://")+filePath); - } - - int GUI::getCurrentTabIndex() const{ - if(isMinimized() || isHidden()) - return -1; - return tabs->currentIndex(); - } - - void GUI::setTabText(int index, QString text) const { - tabs->setTabText(index, text); - } - - // Toggle Main window visibility - void GUI::toggleVisibility(QSystemTrayIcon::ActivationReason e) { - if(e == QSystemTrayIcon::Trigger || e == QSystemTrayIcon::DoubleClick) { - if(isHidden()) { - show(); - if(isMinimized()) { - if(isMaximized()) { - showMaximized(); - }else{ - showNormal(); - } - } - raise(); - activateWindow(); - }else{ - hide(); - } - } - } - - // Center window - QPoint GUI::screenCenter() const{ - int scrn = 0; - QWidget *w = this->topLevelWidget(); - - if(w) - scrn = QApplication::desktop()->screenNumber(w); - else if(QApplication::desktop()->isVirtualDesktop()) - scrn = QApplication::desktop()->screenNumber(QCursor::pos()); - else - scrn = QApplication::desktop()->screenNumber(this); - - QRect desk(QApplication::desktop()->availableGeometry(scrn)); - return QPoint((desk.width() - this->frameGeometry().width()) / 2, (desk.height() - this->frameGeometry().height()) / 2); - } - - // Display About Dialog - void GUI::on_actionAbout_triggered() { - //About dialog - new about(this); - } - - void GUI::showEvent(QShowEvent *e) { - qDebug("** Show Event **"); - updateLists(true); - e->accept(); - } - - // Called when we close the program - void GUI::closeEvent(QCloseEvent *e) { - - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool goToSystrayOnExit = settings.value(QString::fromUtf8("Preferences/General/CloseToTray"), false).toBool(); - if(!force_exit && systrayIntegration && goToSystrayOnExit && !this->isHidden()) { - hide(); - //e->ignore(); - e->accept(); - return; - } - if(settings.value(QString::fromUtf8("Preferences/General/ExitConfirm"), true).toBool() && downloadingTorrentTab->getNbTorrentsInList()) { - show(); - if(!isMaximized()) - showNormal(); - if(e->spontaneous() == true || force_exit == true) { - if(QMessageBox::question(this, - tr("Are you sure you want to quit?")+QString::fromUtf8(" -- ")+tr("qBittorrent"), - tr("The download list is not empty.\nAre you sure you want to quit qBittorrent?"), - tr("&Yes"), tr("&No"), - QString(), 0, 1)) { - e->ignore(); - force_exit = false; - return; - } - } - } - hide(); - if(systrayIntegration) { - // Hide tray icon - myTrayIcon->hide(); - } - // Save window size, columns size - writeSettings(); - // Accept exit - e->accept(); - qApp->exit(); - } - - - // Display window to create a torrent - void GUI::on_actionCreate_torrent_triggered() { - createtorrent *ct = new createtorrent(this); - connect(ct, SIGNAL(torrent_to_seed(QString)), this, SLOT(addTorrent(QString))); - } - - bool GUI::event(QEvent * e) { - if(e->type() == QEvent::WindowStateChange) { - //Now check to see if the window is minimised - if(isMinimized()) { - qDebug("minimisation"); - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - if(systrayIntegration && settings.value(QString::fromUtf8("Preferences/General/MinimizeToTray"), false).toBool()) { - hide(); - } - } - } - return QMainWindow::event(e); - } - - // Action executed when a file is dropped - void GUI::dropEvent(QDropEvent *event) { - event->acceptProposedAction(); - QStringList files; - if(event->mimeData()->hasUrls()) { - QList urls = event->mimeData()->urls(); - foreach(const QUrl &url, urls) { - QString tmp = url.toString().trimmed(); - if(!tmp.isEmpty()) - files << url.toString(); - } - } else { - files = event->mimeData()->text().split(QString::fromUtf8("\n")); - } - // Add file to download list - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); - foreach(QString file, files) { - file = file.trimmed().replace(QString::fromUtf8("file://"), QString::fromUtf8(""), Qt::CaseInsensitive); - qDebug("Dropped file %s on download list", file.toLocal8Bit().data()); - if(file.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || file.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || file.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) { - BTSession->downloadFromUrl(file); - continue; - } - if(file.startsWith("magnet:", Qt::CaseInsensitive)) { - // FIXME: Possibly skipped torrent addition dialog - BTSession->addMagnetUri(file); - continue; - } - if(useTorrentAdditionDialog) { - torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); - dialog->showLoad(file); - }else{ - BTSession->addTorrent(file); - } - } - } - - // Decode if we accept drag 'n drop or not - void GUI::dragEnterEvent(QDragEnterEvent *event) { - foreach(const QString &mime, event->mimeData()->formats()){ - qDebug("mimeData: %s", mime.toLocal8Bit().data()); - } - if (event->mimeData()->hasFormat(QString::fromUtf8("text/plain")) || event->mimeData()->hasFormat(QString::fromUtf8("text/uri-list"))) { - event->acceptProposedAction(); - } - } - - /***************************************************** - * * - * Torrent * - * * - *****************************************************/ - - // Display a dialog to allow user to add - // torrents to download list - void GUI::on_actionOpen_triggered() { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - // Open File Open Dialog - // Note: it is possible to select more than one file - QStringList pathsList = QFileDialog::getOpenFileNames(0, - tr("Open Torrent Files"), settings.value(QString::fromUtf8("MainWindowLastDir"), QDir::homePath()).toString(), - tr("Torrent Files")+QString::fromUtf8(" (*.torrent)")); - if(!pathsList.empty()) { - bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); - unsigned int listSize = pathsList.size(); - for(unsigned int i=0; ishowLoad(pathsList.at(i)); - }else{ - BTSession->addTorrent(pathsList.at(i)); - } - } - // Save last dir to remember it - QStringList top_dir = pathsList.at(0).split(QDir::separator()); - top_dir.removeLast(); - settings.setValue(QString::fromUtf8("MainWindowLastDir"), top_dir.join(QDir::separator())); - } - } - - // delete from download list AND from hard drive - void GUI::on_actionDelete_Permanently_triggered() { - QStringList hashes; - bool inDownloadList = true; - switch(tabs->currentIndex()){ - case 0: - hashes = downloadingTorrentTab->getSelectedTorrents(); - break; - case 1: - hashes = finishedTorrentTab->getSelectedTorrents(); - inDownloadList = false; - break; - default: - return; - } - if(hashes.empty()) return; - int ret; - if(inDownloadList) { - ret = QMessageBox::question( - this, - tr("Are you sure? -- qBittorrent"), - tr("Are you sure you want to delete the selected item(s) from download list and from hard drive?"), - tr("&Yes"), tr("&No"), - QString(), 0, 1); - }else{ - ret = QMessageBox::question( - this, - tr("Are you sure? -- qBittorrent"), - tr("Are you sure you want to delete the selected item(s) from finished list and from hard drive?"), - tr("&Yes"), tr("&No"), - QString(), 0, 1); - } - if(ret) return; - //User clicked YES - foreach(const QString &hash, hashes) { - // Get the file name - QTorrentHandle h = BTSession->getTorrentHandle(hash); - QString fileName = h.name(); - // Remove the torrent - BTSession->deleteTorrent(hash, true); - } - } - - void GUI::deleteTorrent(QString hash) { - // Delete item from list - downloadingTorrentTab->deleteTorrent(hash); - finishedTorrentTab->deleteTorrent(hash); - } - - // delete selected items in the list - void GUI::on_actionDelete_triggered() { - QStringList hashes; - bool inDownloadList = true; - switch(tabs->currentIndex()){ - case 0: // DL - hashes = downloadingTorrentTab->getSelectedTorrents(); - break; - case 1: // SEED - hashes = finishedTorrentTab->getSelectedTorrents(); - inDownloadList = false; - break; - case 3: //RSSImp - rssWidget->deleteSelectedItems(); - return; - default: - return; - } - if(hashes.empty()) return; - int ret; - if(inDownloadList) { - ret = QMessageBox::question( - this, - tr("Are you sure? -- qBittorrent"), - tr("Are you sure you want to delete the selected item(s) in download list?"), - tr("&Yes"), tr("&No"), - QString(), 0, 1); - } else { - ret = QMessageBox::question( - this, - tr("Are you sure? -- qBittorrent"), - tr("Are you sure you want to delete the selected item(s) in finished list?"), - tr("&Yes"), tr("&No"), - QString(), 0, 1); - } - if(ret) return; - //User clicked YES - foreach(const QString &hash, hashes) { - // Get the file name - QTorrentHandle h = BTSession->getTorrentHandle(hash); - QString fileName = h.name(); - // Remove the torrent - BTSession->deleteTorrent(hash, false); - } - } - - // As program parameters, we can get paths or urls. - // This function parse the parameters and call - // the right addTorrent function, considering - // the parameter type. - void GUI::processParams(const QStringList& params) { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); - foreach(QString param, params) { - param = param.trimmed(); - if(param.startsWith("--")) continue; - if(param.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) { - BTSession->downloadFromUrl(param); - }else{ - if(param.startsWith("magnet:", Qt::CaseInsensitive)) { - // FIXME: Possibily skipped torrent addition dialog - BTSession->addMagnetUri(param); - } else { - if(useTorrentAdditionDialog) { - torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); - dialog->showLoad(param); - }else{ - BTSession->addTorrent(param); - } - } - } - } - } - - void GUI::addTorrent(QString path) { - BTSession->addTorrent(path); - } - - void GUI::processDownloadedFiles(QString path, QString url) { - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool(); - if(useTorrentAdditionDialog) { - torrentAdditionDialog *dialog = new torrentAdditionDialog(this, BTSession); - dialog->showLoad(path, url); - }else{ - BTSession->addTorrent(path, false, url); - } - } - - // Set BT session configuration - void GUI::configureSession(bool deleteOptions) { - qDebug("Configuring session"); - // General - bool new_displaySpeedInTitle = options->speedInTitleBar(); - if(!new_displaySpeedInTitle && new_displaySpeedInTitle != displaySpeedInTitle) { - // Reset title - setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION))); - } - displaySpeedInTitle = new_displaySpeedInTitle; - if(options->isToolbarDisplayed()) { - toolBar->setVisible(true); - toolBar->layout()->setSpacing(7); - } else { - toolBar->setVisible(false); - } - unsigned int new_refreshInterval = options->getRefreshInterval(); - if(refreshInterval != new_refreshInterval) { - refreshInterval = new_refreshInterval; - refresher->start(refreshInterval); - } - // Downloads - // * Save path - BTSession->setDefaultSavePath(options->getSavePath()); - if(options->isTempPathEnabled()) { - BTSession->setDefaultTempPath(options->getTempPath()); - } else { - BTSession->setDefaultTempPath(QString::null); - } - BTSession->preAllocateAllFiles(options->preAllocateAllFiles()); - BTSession->startTorrentsInPause(options->addTorrentsInPause()); - // * Scan dir - if(options->getScanDir().isNull()) { - BTSession->disableDirectoryScanning(); - }else{ - //Interval first - BTSession->enableDirectoryScanning(options->getScanDir()); - } - // Connection - // * Ports binding - unsigned short old_listenPort = BTSession->getListenPort(); - BTSession->setListeningPort(options->getPort()); - unsigned short new_listenPort = BTSession->getListenPort(); - if(new_listenPort != old_listenPort) { - BTSession->addConsoleMessage(tr("qBittorrent is bound to port: TCP/%1", "e.g: qBittorrent is bound to port: 6881").arg( misc::toQString(new_listenPort))); - } - // * Global download limit - QPair limits = options->getGlobalBandwidthLimits(); - if(limits.first <= 0) { - // Download limit disabled - BTSession->setDownloadRateLimit(-1); - } else { - // Enabled - BTSession->setDownloadRateLimit(limits.first*1024); - } - // * Global Upload limit - if(limits.second <= 0) { - // Upload limit disabled - BTSession->setUploadRateLimit(-1); - } else { - // Enabled - BTSession->setUploadRateLimit(limits.second*1024); - } - // * UPnP - if(options->isUPnPEnabled()) { - BTSession->enableUPnP(true); - BTSession->addConsoleMessage(tr("UPnP support [ON]"), QString::fromUtf8("blue")); - } else { - BTSession->enableUPnP(false); - BTSession->addConsoleMessage(tr("UPnP support [OFF]"), QString::fromUtf8("blue")); - } - // * NAT-PMP - if(options->isNATPMPEnabled()) { - BTSession->enableNATPMP(true); - BTSession->addConsoleMessage(tr("NAT-PMP support [ON]"), QString::fromUtf8("blue")); - } else { - BTSession->enableNATPMP(false); - BTSession->addConsoleMessage(tr("NAT-PMP support [OFF]"), QString::fromUtf8("blue")); - } - // * Session settings - session_settings sessionSettings; - if(options->shouldSpoofAzureus()) { - sessionSettings.user_agent = "Azureus 3.0.5.2"; - } else { - sessionSettings.user_agent = "qBittorrent "VERSION; - } - sessionSettings.upnp_ignore_nonrouters = true; - sessionSettings.use_dht_as_fallback = false; - // To keep same behavior as in qbittorrent v1.2.0 - sessionSettings.rate_limit_ip_overhead = false; - // Queueing System - if(options->isQueueingSystemEnabled()) { - if(!BTSession->isQueueingEnabled()) { - downloadingTorrentTab->hidePriorityColumn(false); - actionDecreasePriority->setVisible(true); - actionIncreasePriority->setVisible(true); - prioSeparator->setVisible(true); - prioSeparator2->setVisible(true); - toolBar->layout()->setSpacing(7); - } - int max_torrents = options->getMaxActiveTorrents(); - int max_uploads = options->getMaxActiveUploads(); - int max_downloads = options->getMaxActiveDownloads(); - sessionSettings.active_downloads = max_downloads; - sessionSettings.active_seeds = max_uploads; - sessionSettings.active_limit = max_torrents; - sessionSettings.dont_count_slow_torrents = false; - BTSession->setQueueingEnabled(true); - } else { - if(BTSession->isQueueingEnabled()) { - sessionSettings.active_downloads = -1; - sessionSettings.active_seeds = -1; - sessionSettings.active_limit = -1; - BTSession->setQueueingEnabled(false); - downloadingTorrentTab->hidePriorityColumn(true); - actionDecreasePriority->setVisible(false); - actionIncreasePriority->setVisible(false); - prioSeparator->setVisible(false); - prioSeparator2->setVisible(false); - toolBar->layout()->setSpacing(7); - } - } - BTSession->setSessionSettings(sessionSettings); - // Bittorrent - // * Max connections limit - BTSession->setMaxConnections(options->getMaxConnecs()); - // * Max connections per torrent limit - BTSession->setMaxConnectionsPerTorrent(options->getMaxConnecsPerTorrent()); - // * Max uploads per torrent limit - BTSession->setMaxUploadsPerTorrent(options->getMaxUploadsPerTorrent()); - // * DHT - if(options->isDHTEnabled()) { - // Set DHT Port - BTSession->setDHTPort(options->getDHTPort()); - if(BTSession->enableDHT(true)) { - int dht_port = new_listenPort; - if(options->getDHTPort()) - dht_port = options->getDHTPort(); - BTSession->addConsoleMessage(tr("DHT support [ON], port: UDP/%1").arg(dht_port), QString::fromUtf8("blue")); - } else { - BTSession->addConsoleMessage(tr("DHT support [OFF]"), QString::fromUtf8("red")); - } - } else { - BTSession->enableDHT(false); - BTSession->addConsoleMessage(tr("DHT support [OFF]"), QString::fromUtf8("blue")); - } - // * PeX - BTSession->addConsoleMessage(tr("PeX support [ON]"), QString::fromUtf8("blue")); - // * LSD - if(options->isLSDEnabled()) { - BTSession->enableLSD(true); - BTSession->addConsoleMessage(tr("Local Peer Discovery [ON]"), QString::fromUtf8("blue")); - } else { - BTSession->enableLSD(false); - BTSession->addConsoleMessage(tr("Local Peer Discovery support [OFF]"), QString::fromUtf8("blue")); - } - // * Encryption - int encryptionState = options->getEncryptionSetting(); - // The most secure, rc4 only so that all streams and encrypted - pe_settings encryptionSettings; - encryptionSettings.allowed_enc_level = pe_settings::rc4; - encryptionSettings.prefer_rc4 = true; - switch(encryptionState) { - case 0: //Enabled - encryptionSettings.out_enc_policy = pe_settings::enabled; - encryptionSettings.in_enc_policy = pe_settings::enabled; - BTSession->addConsoleMessage(tr("Encryption support [ON]"), QString::fromUtf8("blue")); - break; - case 1: // Forced - encryptionSettings.out_enc_policy = pe_settings::forced; - encryptionSettings.in_enc_policy = pe_settings::forced; - BTSession->addConsoleMessage(tr("Encryption support [FORCED]"), QString::fromUtf8("blue")); - break; - default: // Disabled - encryptionSettings.out_enc_policy = pe_settings::disabled; - encryptionSettings.in_enc_policy = pe_settings::disabled; - BTSession->addConsoleMessage(tr("Encryption support [OFF]"), QString::fromUtf8("blue")); - } - BTSession->applyEncryptionSettings(encryptionSettings); - // * Desired ratio - BTSession->setGlobalRatio(options->getDesiredRatio()); - // * Maximum ratio - BTSession->setDeleteRatio(options->getDeleteRatio()); - // Ip Filter - if(options->isFilteringEnabled()) { - BTSession->enableIPFilter(options->getFilter()); - }else{ - BTSession->disableIPFilter(); - } - // RSS - if(options->isRSSEnabled()) { - displayRSSTab(true); - } else { - displayRSSTab(false); - } - // * Proxy settings - proxy_settings proxySettings; - if(options->isProxyEnabled()) { - qDebug("Enabling P2P proxy"); - proxySettings.hostname = options->getProxyIp().toStdString(); - qDebug("hostname is %s", proxySettings.hostname.c_str()); - proxySettings.port = options->getProxyPort(); - qDebug("port is %d", proxySettings.port); - if(options->isProxyAuthEnabled()) { - - proxySettings.username = options->getProxyUsername().toStdString(); - proxySettings.password = options->getProxyPassword().toStdString(); - qDebug("username is %s", proxySettings.username.c_str()); - qDebug("password is %s", proxySettings.password.c_str()); - } - switch(options->getProxyType()) { - case HTTP: - qDebug("type: http"); - proxySettings.type = proxy_settings::http; - break; - case HTTP_PW: - qDebug("type: http_pw"); - proxySettings.type = proxy_settings::http_pw; - break; - case SOCKS5: - qDebug("type: socks5"); - proxySettings.type = proxy_settings::socks5; - break; - default: - qDebug("type: socks5_pw"); - proxySettings.type = proxy_settings::socks5_pw; - break; - } - qDebug("booleans: %d %d %d %d", options->useProxyForTrackers(), options->useProxyForPeers(), options->useProxyForWebseeds(), options->useProxyForDHT()); - BTSession->setProxySettings(proxySettings, options->useProxyForTrackers(), options->useProxyForPeers(), options->useProxyForWebseeds(), options->useProxyForDHT()); - } else { - qDebug("Disabling P2P proxy"); - BTSession->setProxySettings(proxySettings, false, false, false, false); - } - if(options->isHTTPProxyEnabled()) { - qDebug("Enabling Search HTTP proxy"); - // HTTP Proxy - QString proxy_str; - switch(options->getHTTPProxyType()) { - case HTTP_PW: - proxy_str = misc::toQString("http://")+options->getHTTPProxyUsername()+":"+options->getHTTPProxyPassword()+"@"+options->getHTTPProxyIp()+":"+misc::toQString(options->getHTTPProxyPort()); - break; - default: - proxy_str = misc::toQString("http://")+options->getHTTPProxyIp()+":"+misc::toQString(options->getHTTPProxyPort()); - } - // We need this for urllib in search engine plugins +} + +// Check connection status and display right icon +void GUI::checkConnectionStatus() { + // qDebug("Checking connection status"); + // Update Ratio + updateRatio(); + // update global informations + if(systrayIntegration) { #ifdef Q_WS_WIN - char proxystr[512]; - snprintf(proxystr, 512, "http_proxy=%s", proxy_str.toLocal8Bit().data()); - putenv(proxystr); + // Windows does not support html here + QString html =tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1))); + html += "\n"; + html += tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1))); #else - qDebug("HTTP: proxy string: %s", proxy_str.toLocal8Bit().data()); - setenv("http_proxy", proxy_str.toLocal8Bit().data(), 1); + QString html = "
"; + html += tr("qBittorrent"); + html += "
"; + html += "
"; + html += " "+tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1))); + html += "
"; + html += "
"; + html += " "+tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1))); + html += "
"; #endif - } else { - qDebug("Disabling search proxy"); -#ifdef Q_WS_WIN - putenv("http_proxy="); -#else - unsetenv("http_proxy"); -#endif - } - // Clean up - if(deleteOptions && options) { - qDebug("Deleting options"); - //delete options; - options->deleteLater(); - } - qDebug("Session configured"); + myTrayIcon->setToolTip(html); // tray icon } - - void GUI::updateUnfinishedTorrentNumber(unsigned int nb) { - unsigned int paused = BTSession->getUnfinishedPausedTorrentsNb(); - tabs->setTabText(0, tr("Downloads") +QString::fromUtf8(" (")+misc::toQString(nb-paused)+"/"+misc::toQString(nb)+QString::fromUtf8(")")); + session_status sessionStatus = BTSession->getSessionStatus(); + if(sessionStatus.has_incoming_connections) { + // Connection OK + connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/connected.png"))); + connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection Status:")+QString::fromUtf8("
")+tr("Online")); + }else{ + connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png"))); + connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection status:")+QString::fromUtf8("
")+QString::fromUtf8("")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("")); } - - void GUI::updateFinishedTorrentNumber(unsigned int nb) { - unsigned int paused = BTSession->getFinishedPausedTorrentsNb(); - tabs->setTabText(1, tr("Finished") +QString::fromUtf8(" (")+misc::toQString(nb-paused)+"/"+misc::toQString(nb)+QString::fromUtf8(")")); - } - - // Allow to change action on double-click - void GUI::torrentDoubleClicked(QString hash, bool finished) { - int action; - QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); - QTorrentHandle h = BTSession->getTorrentHandle(hash); - - if(finished) { - action = settings.value(QString::fromUtf8("Preferences/Downloads/DblClOnTorFN"), 0).toInt(); - } else { - action = settings.value(QString::fromUtf8("Preferences/Downloads/DblClOnTorDl"), 0).toInt(); - } - - switch(action) { - case TOGGLE_PAUSE: - this->togglePausedState(hash); - break; - case OPEN_DEST: { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - QString savePath = h.save_path(); - QDesktopServices::openUrl(QUrl(savePath)); - break; - } - case SHOW_PROPERTIES : - if(finished) { - finishedTorrentTab->showPropertiesFromHash(hash); - } else { - downloadingTorrentTab->showPropertiesFromHash(hash); - } - break; - } - } - - // Toggle paused state of selected torrent - void GUI::togglePausedState(QString hash) { - if(tabs->currentIndex() > 1) return; - bool inDownloadList = true; - if(tabs->currentIndex() == 1) - inDownloadList = false; - QTorrentHandle h = BTSession->getTorrentHandle(hash); - if(h.is_paused()) { - h.resume(); - resumedTorrent(h); - if(inDownloadList) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - }else{ - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - }else{ - h.pause(); - pausedTorrent(h); - if(inDownloadList) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - }else{ - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - } - } - - // Pause All Downloads in DL list - void GUI::on_actionPause_All_triggered() { - bool change = false; - std::vector torrents = BTSession->getTorrents(); - std::vector::iterator torrentIT; - for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { - QTorrentHandle h = QTorrentHandle(*torrentIT); - if(!h.is_valid() || h.is_paused()) continue; - change = true; - h.pause(); - pausedTorrent(h); - } - if(change) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - } - - void GUI::on_actionIncreasePriority_triggered() { - if(tabs->currentIndex() != 0) - return; - QStringList hashes = downloadingTorrentTab->getSelectedTorrents(); - foreach(const QString &hash, hashes) { - BTSession->increaseDlTorrentPriority(hash); - } - updateLists(); - } - - void GUI::on_actionDecreasePriority_triggered() { - Q_ASSERT(tabs->currentIndex() == 0); - QStringList hashes = downloadingTorrentTab->getSelectedTorrents(); - foreach(const QString &hash, hashes) { - BTSession->decreaseDlTorrentPriority(hash); - } - updateLists(); - } - - // pause selected items in the list - void GUI::on_actionPause_triggered() { - bool inDownloadList = true; - if(tabs->currentIndex() > 1) return; - if(tabs->currentIndex() == 1) - inDownloadList = false; - QStringList hashes; - if(inDownloadList) { - hashes = downloadingTorrentTab->getSelectedTorrents(); - } else { - hashes = finishedTorrentTab->getSelectedTorrents(); - } - qDebug("nb hashes: %d", hashes.size()); - foreach(const QString &hash, hashes) { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - if(!h.is_paused()){ - h.pause(); - pausedTorrent(h); - if(inDownloadList) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - } else { - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - } - } - } - - // Resume All Downloads in DL list - void GUI::on_actionStart_All_triggered() { - bool change = false; - std::vector torrents = BTSession->getTorrents(); - std::vector::iterator torrentIT; - for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { - QTorrentHandle h = QTorrentHandle(*torrentIT); - if(!h.is_valid() || !h.is_paused()) continue; - change = true; - h.resume(); - resumedTorrent(h); - } - if(change) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - } - - // start selected items in the list - void GUI::on_actionStart_triggered() { - bool inDownloadList = true; - if(tabs->currentIndex() > 1) return; - if(tabs->currentIndex() == 1) - inDownloadList = false; - QStringList hashes; - if(inDownloadList) { - hashes = downloadingTorrentTab->getSelectedTorrents(); - } else { - hashes = finishedTorrentTab->getSelectedTorrents(); - } - foreach(const QString &hash, hashes) { - QTorrentHandle h = BTSession->getTorrentHandle(hash); - if(h.is_paused()){ - h.resume(); - resumedTorrent(h); - if(inDownloadList) { - updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList()); - } else { - updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList()); - } - } - } - } - - void GUI::addUnauthenticatedTracker(QPair tracker) { - // Trackers whose authentication was cancelled - if(unauthenticated_trackers.indexOf(tracker) < 0) { - unauthenticated_trackers << tracker; - } - } - - // display properties of selected items - void GUI::on_actionTorrent_Properties_triggered() { - if(tabs->currentIndex() > 1) return; - switch(tabs->currentIndex()){ - case 1: // DL List - finishedTorrentTab->propertiesSelection(); - break; - default: - downloadingTorrentTab->propertiesSelection(); - } - } - - void GUI::updateLists(bool force) { - if(isVisible() || force) { - // update global informations - dlSpeedLbl->setText(tr("DL: %1 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1)))); - upSpeedLbl->setText(tr("UP: %1 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1)))); - std::vector torrents = BTSession->getTorrents(); - std::vector::iterator torrentIT; - for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { - QTorrentHandle h = QTorrentHandle(*torrentIT); - if(!h.is_valid()) continue; - try { - if(h.is_seed()) { - // Update in finished list - finishedTorrentTab->updateTorrent(h); - } else { - // Update in download list - if(downloadingTorrentTab->updateTorrent(h)) { - // Torrent was added, we may need to remove it from finished tab - finishedTorrentTab->deleteTorrent(h.hash()); - TorrentPersistentData::saveSeedStatus(h); - } - } - } catch(invalid_handle e) { - qDebug("Caught Invalid handle exception, lucky us."); - } - } - } - if(displaySpeedInTitle) { - QString dl_rate = QByteArray::number(BTSession->getSessionStatus().payload_download_rate/1024, 'f', 1); - QString up_rate = QByteArray::number(BTSession->getSessionStatus().payload_upload_rate/1024, 'f', 1); - setWindowTitle(tr("qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s)", "%1 is qBittorrent version").arg(QString::fromUtf8(VERSION)).arg(dl_rate).arg(up_rate)); - } - } - - // Called when a tracker requires authentication - void GUI::trackerAuthenticationRequired(QTorrentHandle& h) { - if(unauthenticated_trackers.indexOf(QPair(h, h.current_tracker())) < 0) { - // Tracker login - new trackerLogin(this, h); - } - } - - // Check connection status and display right icon - void GUI::checkConnectionStatus() { - // qDebug("Checking connection status"); - // Update Ratio - updateRatio(); - // update global informations - if(systrayIntegration) { -#ifdef Q_WS_WIN - // Windows does not support html here - QString html =tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1))); - html += "\n"; - html += tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1))); -#else - QString html = "
"; - html += tr("qBittorrent"); - html += "
"; - html += "
"; - html += " "+tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1))); - html += "
"; - html += "
"; - html += " "+tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString(QByteArray::number(BTSession->getPayloadUploadRate()/1024., 'f', 1))); - html += "
"; -#endif - myTrayIcon->setToolTip(html); // tray icon - } - session_status sessionStatus = BTSession->getSessionStatus(); - if(sessionStatus.has_incoming_connections) { - // Connection OK - connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/connected.png"))); - connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection Status:")+QString::fromUtf8("
")+tr("Online")); - }else{ - connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png"))); - connecStatusLblIcon->setToolTip(QString::fromUtf8("")+tr("Connection status:")+QString::fromUtf8("
")+QString::fromUtf8("")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("")); - } - } - - /***************************************************** +} + +/***************************************************** * * * Utils * * * *****************************************************/ - - void GUI::downloadFromURLList(const QStringList& url_list) { - foreach(const QString url, url_list) { - if(url.startsWith("magnet:", Qt::CaseInsensitive)) { - BTSession->addMagnetUri(url); - } else { - BTSession->downloadFromUrl(url); - } + +void GUI::downloadFromURLList(const QStringList& url_list) { + foreach(const QString url, url_list) { + if(url.startsWith("magnet:", Qt::CaseInsensitive)) { + BTSession->addMagnetUri(url); + } else { + BTSession->downloadFromUrl(url); } } - - /***************************************************** +} + +/***************************************************** * * * Options * * * *****************************************************/ - - void GUI::createSystrayDelayed() { - static int timeout = 10; - if(QSystemTrayIcon::isSystemTrayAvailable()) { - // Ok, systray integration is now supported - // Create systray icon - createTrayIcon(); - systrayIntegration = true; - delete systrayCreator; + +void GUI::createSystrayDelayed() { + static int timeout = 10; + if(QSystemTrayIcon::isSystemTrayAvailable()) { + // Ok, systray integration is now supported + // Create systray icon + createTrayIcon(); + systrayIntegration = true; + delete systrayCreator; + } else { + if(timeout) { + // Retry a bit later + systrayCreator->start(1000); + --timeout; } else { - if(timeout) { - // Retry a bit later - systrayCreator->start(1000); - --timeout; - } else { - // Timed out, apparently system really does not - // support systray icon - delete systrayCreator; - } + // Timed out, apparently system really does not + // support systray icon + delete systrayCreator; } } - - void GUI::createTrayIcon() { - // Tray icon +} + +void GUI::createTrayIcon() { + // Tray icon #ifdef Q_WS_WIN - myTrayIcon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent16.png")), this); + myTrayIcon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent16.png")), this); #endif #ifndef Q_WS_WIN - myTrayIcon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent22.png")), this); + myTrayIcon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent22.png")), this); #endif - // Tray icon Menu - myTrayIconMenu = new QMenu(this); - myTrayIconMenu->addAction(actionOpen); - myTrayIconMenu->addAction(actionDownload_from_URL); - myTrayIconMenu->addSeparator(); - myTrayIconMenu->addAction(actionSet_global_download_limit); - myTrayIconMenu->addAction(actionSet_global_upload_limit); - myTrayIconMenu->addSeparator(); - myTrayIconMenu->addAction(actionStart_All); - myTrayIconMenu->addAction(actionPause_All); - myTrayIconMenu->addSeparator(); - myTrayIconMenu->addAction(actionExit); - myTrayIcon->setContextMenu(myTrayIconMenu); - connect(myTrayIcon, SIGNAL(messageClicked()), this, SLOT(balloonClicked())); - // End of Icon Menu - connect(myTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(toggleVisibility(QSystemTrayIcon::ActivationReason))); - myTrayIcon->show(); - } - - // Display Program Options - void GUI::on_actionOptions_triggered() { - options = new options_imp(this); - connect(options, SIGNAL(status_changed(bool)), this, SLOT(OptionsSaved(bool))); - options->show(); - } - - // Is executed each time options are saved - void GUI::OptionsSaved(bool deleteOptions) { - BTSession->addConsoleMessage(tr("Options were saved successfully.")); - bool newSystrayIntegration = options->systrayIntegration(); - if(newSystrayIntegration != systrayIntegration) { - if(newSystrayIntegration) { - // create the trayicon - createTrayIcon(); - } else { - // Destroy trayicon - delete myTrayIcon; - delete myTrayIconMenu; - } - systrayIntegration = newSystrayIntegration; + // Tray icon Menu + myTrayIconMenu = new QMenu(this); + myTrayIconMenu->addAction(actionOpen); + myTrayIconMenu->addAction(actionDownload_from_URL); + myTrayIconMenu->addSeparator(); + myTrayIconMenu->addAction(actionSet_global_download_limit); + myTrayIconMenu->addAction(actionSet_global_upload_limit); + myTrayIconMenu->addSeparator(); + myTrayIconMenu->addAction(actionStart_All); + myTrayIconMenu->addAction(actionPause_All); + myTrayIconMenu->addSeparator(); + myTrayIconMenu->addAction(actionExit); + myTrayIcon->setContextMenu(myTrayIconMenu); + connect(myTrayIcon, SIGNAL(messageClicked()), this, SLOT(balloonClicked())); + // End of Icon Menu + connect(myTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(toggleVisibility(QSystemTrayIcon::ActivationReason))); + myTrayIcon->show(); +} + +// Display Program Options +void GUI::on_actionOptions_triggered() { + options = new options_imp(this); + connect(options, SIGNAL(status_changed(bool)), this, SLOT(OptionsSaved(bool))); + options->show(); +} + +// Is executed each time options are saved +void GUI::OptionsSaved(bool deleteOptions) { + BTSession->addConsoleMessage(tr("Options were saved successfully.")); + bool newSystrayIntegration = options->systrayIntegration(); + if(newSystrayIntegration != systrayIntegration) { + if(newSystrayIntegration) { + // create the trayicon + createTrayIcon(); + } else { + // Destroy trayicon + delete myTrayIcon; + delete myTrayIconMenu; } - // Update Web UI - if (options->isWebUiEnabled()) { - quint16 port = options->webUiPort(); - QString username = options->webUiUsername(); - QString password = options->webUiPassword(); - initWebUi(username, password, port); - } else if(httpServer) { - delete httpServer; - } - // Update session - configureSession(deleteOptions); + systrayIntegration = newSystrayIntegration; } - - bool GUI::initWebUi(QString username, QString password, int port) { - if(httpServer) - httpServer->close(); - else - httpServer = new HttpServer(BTSession, 3000, this); - httpServer->setAuthorization(username, password); - bool success = httpServer->listen(QHostAddress::Any, port); - if (success) - qDebug("Web UI listening on port %d", port); - else - QMessageBox::critical(this, "Web User Interface Error", "Unable to initialize HTTP Server on port " + misc::toQString(port)); - return success; + // Update Web UI + if (options->isWebUiEnabled()) { + quint16 port = options->webUiPort(); + QString username = options->webUiUsername(); + QString password = options->webUiPassword(); + initWebUi(username, password, port); + } else if(httpServer) { + delete httpServer; } - - /***************************************************** + // Update session + configureSession(deleteOptions); +} + +bool GUI::initWebUi(QString username, QString password, int port) { + if(httpServer) + httpServer->close(); + else + httpServer = new HttpServer(BTSession, 3000, this); + httpServer->setAuthorization(username, password); + bool success = httpServer->listen(QHostAddress::Any, port); + if (success) + qDebug("Web UI listening on port %d", port); + else + QMessageBox::critical(this, "Web User Interface Error", "Unable to initialize HTTP Server on port " + misc::toQString(port)); + return success; +} + +/***************************************************** * * * HTTP Downloader * * * *****************************************************/ - - // Display an input dialog to prompt user for - // an url - void GUI::on_actionDownload_from_URL_triggered() { - downloadFromURL *downloadFromURLDialog = new downloadFromURL(this); - connect(downloadFromURLDialog, SIGNAL(urlsReadyToBeDownloaded(const QStringList&)), BTSession, SLOT(downloadFromURLList(const QStringList&))); - } - + +// Display an input dialog to prompt user for +// an url +void GUI::on_actionDownload_from_URL_triggered() { + downloadFromURL *downloadFromURLDialog = new downloadFromURL(this); + connect(downloadFromURLDialog, SIGNAL(urlsReadyToBeDownloaded(const QStringList&)), BTSession, SLOT(downloadFromURLList(const QStringList&))); +} + diff --git a/src/GUI.h b/src/GUI.h index 3c81d2b06..1c789f7fc 100644 --- a/src/GUI.h +++ b/src/GUI.h @@ -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{ // Web UI QPointer httpServer; // Misc -#ifdef QT_4_4 QLocalServer *localServer; QLocalSocket *clientConnection; -#else - QTcpServer *localServer; - QTcpSocket *clientConnection; -#endif protected slots: // GUI related slots diff --git a/src/about_imp.h b/src/about_imp.h index 190688094..67120768b 100644 --- a/src/about_imp.h +++ b/src/about_imp.h @@ -52,10 +52,10 @@ class about : public QDialog, private Ui::AboutDlg{ lb_name->setText(QString::fromUtf8("

")+tr("qBittorrent")+QString::fromUtf8(" "VERSION"

")); // Thanks te_thanks->append(QString::fromUtf8("")); - te_thanks->append(QString::fromUtf8("
  • I would like to thank sourceforge.net for hosting qBittorrent project.
  • ")); - te_thanks->append(QString::fromUtf8("
  • I am happy that Ishan Arora and Arnaud Demaizière are contributing to the project as developers. Their help is greatly appreciated
  • ")); - te_thanks->append(QString::fromUtf8("
  • I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, RPM packager, for his help and support.
  • ")); - te_thanks->append(QString::fromUtf8("
  • I am grateful to Peter Koeleman (peter@qbittorrent.org) who is helping port qBittorrent to Windows.
  • ")); + te_thanks->append(QString::fromUtf8("
    • I would first like to thank sourceforge.net for hosting qBittorrent project and for their support.
    • ")); + te_thanks->append(QString::fromUtf8("
    • 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
    • ")); + te_thanks->append(QString::fromUtf8("
    • I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, for his help and support since the beginning of this project.
    • ")); + te_thanks->append(QString::fromUtf8("
    • I am grateful to Peter Koeleman (peter@qbittorrent.org) for working on qBittorrent port to Windows.
    • ")); te_thanks->append(QString::fromUtf8("
    • Thanks a lot to our graphist Mateusz Toboła (tobejodok@qbittorrent.org) for his great work.


    ")); te_thanks->scrollToAnchor(QString::fromUtf8("top")); // Translation diff --git a/src/addTorrentDialog.ui b/src/addTorrentDialog.ui index 7f0004d21..7a6efd96a 100644 --- a/src/addTorrentDialog.ui +++ b/src/addTorrentDialog.ui @@ -207,6 +207,13 @@ + + + + Skip file checking and start seeding immediately + + + diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index 1afcb2a73..281de1b89 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -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 } 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) { 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) { 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) { // 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 > hashes; @@ -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 > 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(filePaths, qMakePair(prio, filePath)); - } - // Resume downloads - QPair 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); + 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 > 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(); } } - } else { - QStringList filePaths; - foreach(const QString &fileName, fileNames) { - filePaths.append(torrentBackup.path()+QDir::separator()+fileName); + misc::insertSort2(filePaths, qMakePair(prio, filePath)); + } + // Resume downloads + QPair 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())); } - // 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); - } + 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; } diff --git a/src/downloadThread.cpp b/src/downloadThread.cpp index 2f90c74a4..2c83dbd8a 100644 --- a/src/downloadThread.cpp +++ b/src/downloadThread.cpp @@ -29,215 +29,140 @@ */ #include "downloadThread.h" -#include +#include #include -#include - -#define MAX_THREADS 3 - -// 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"); - } -} - -subDownloadThread::subDownloadThread(QObject *parent, QString url) : QThread(parent), url(url), abort(false){} - -subDownloadThread::~subDownloadThread(){ - abort = true; - wait(); -} - -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()); - } 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()); - } - } - // 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); - } - qDebug("%s Raised the signal", url.toLocal8Bit().data()); - } else { - std::cerr << "Could not initialize CURL" << "\n"; - } -} +#include +#include +#include /** Download Thread **/ -downloadThread::downloadThread(QObject* parent) : QThread(parent), abort(false){} +downloadThread::downloadThread(QObject* parent) : QObject(parent) { + networkManager = new QNetworkAccessManager(this); + connect(networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*))); +} downloadThread::~downloadThread(){ - mutex.lock(); - abort = true; - condition.wakeOne(); - mutex.unlock(); - //qDebug("downloadThread deleting subthreads..."); - qDeleteAll(subThreads); - //qDebug("downloadThread deleted subthreads"); - wait(); + delete networkManager; +} + +void downloadThread::processDlFinished(QNetworkReply* reply) { + QString url = reply->url().toString(); + if(reply->error() != QNetworkReply::NoError) { + // Failure + emit downloadFailure(url, errorCodeToString(reply->error())); + } else { + // 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")); + } + } else { + emit downloadFailure(url, tr("I/O Error")); + } + } + // 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); } + + } else { + proxy.setType(QNetworkProxy::NoProxy); } + networkManager->setProxy(proxy); } -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(); +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(); - qDebug("Out of propagateDownloadedFile"); -} - -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(); - } - mutex.unlock(); } diff --git a/src/downloadThread.h b/src/downloadThread.h index 8bdf58063..af5ee8abc 100644 --- a/src/downloadThread.h +++ b/src/downloadThread.h @@ -31,64 +31,34 @@ #ifndef DOWNLOADTHREAD_H #define DOWNLOADTHREAD_H -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include -class subDownloadThread : public QThread { - Q_OBJECT - private: - QString url; - bool abort; +class QNetworkAccessManager; - 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); - - protected: - void run(); -}; - -class downloadThread : public QThread { +class downloadThread : public QObject { Q_OBJECT - private: - QQueue urls_queue; - QMutex mutex; - QWaitCondition condition; - bool abort; - QList subThreads; +private: + QNetworkAccessManager *networkManager; - signals: - void downloadFinished(QString url, QString file_path); - void downloadFailure(QString url, QString reason); +signals: + void downloadFinished(QString url, QString file_path); + void downloadFailure(QString url, QString reason); - public: - downloadThread(QObject* parent); +public: + downloadThread(QObject* parent); + ~downloadThread(); + void downloadUrl(QString url); + //void setProxy(QString IP, int port, QString username, QString password); - ~downloadThread(); +protected: + QString errorCodeToString(QNetworkReply::NetworkError status); + void applyProxySettings(); - void downloadUrl(QString url); - void setProxy(QString IP, int port, QString username, QString password); +protected slots: + void processDlFinished(QNetworkReply* reply); - protected: - void run(); - - protected slots: - void propagateDownloadedFile(subDownloadThread* st, QString url, QString path); - void propagateDownloadFailure(subDownloadThread* st, QString url, QString reason); }; #endif diff --git a/src/engineSelectDlg.cpp b/src/engineSelectDlg.cpp index 96590d1cf..584d90c71 100644 --- a/src/engineSelectDlg.cpp +++ b/src/engineSelectDlg.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #ifdef HAVE_ZZIP #include diff --git a/src/lang/qbittorrent_bg.qm b/src/lang/qbittorrent_bg.qm index 321110917..9f16816d7 100644 Binary files a/src/lang/qbittorrent_bg.qm and b/src/lang/qbittorrent_bg.qm differ diff --git a/src/lang/qbittorrent_bg.ts b/src/lang/qbittorrent_bg.ts index 9c6a2cb10..0fc769724 100644 --- a/src/lang/qbittorrent_bg.ts +++ b/src/lang/qbittorrent_bg.ts @@ -1705,7 +1705,7 @@ Copyright © 2006 от Christophe Dumez<br> GUI - + Open Torrent Files Отвори Торент Файлове @@ -1726,25 +1726,25 @@ Copyright © 2006 от Christophe Dumez<br> Сигурни ли сте че искате да изтриете всички файлове от списъка за сваляне? - - - - - + + + + + &Yes &Да - - - - - + + + + + &No &Не - + Are you sure you want to delete the selected item(s) in download list? Сигурни ли сте че искате да изтриете избраните файлове от списъка за сваляне? @@ -1761,7 +1761,7 @@ Copyright © 2006 от Christophe Dumez<br> kb/с - + Finished Завършен @@ -1806,7 +1806,7 @@ Copyright © 2006 от Christophe Dumez<br> Не мога да създам директория: - + Torrent Files Торент Файлове @@ -1866,16 +1866,16 @@ Copyright © 2006 от Christophe Dumez<br> qBittorrent - - + + qBittorrent qBittorrent - - - - + + + + Are you sure? -- qBittorrent Сигурни ли сте? -- qBittorrent @@ -2129,7 +2129,7 @@ Please close the other one first. Сигурни ли сте че искате да изтриете избраните файлове от списъка за сваляне и от твърдия диск? - + Download finished Свалянето завърши @@ -2143,15 +2143,15 @@ Please close the other one first. Търсачка - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Състояние на връзката: @@ -2214,15 +2214,15 @@ Please close the other one first. qBittorrent %1 стартиран. - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s DL Скорост %1 KB/с - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s UL Скорост %1 KB/с @@ -2243,7 +2243,7 @@ Please close the other one first. Отложен - + Are you sure you want to quit? Сигурни ли сте че искате да напуснете? @@ -2306,14 +2306,14 @@ Please close the other one first. '%1' бе възстановен. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. '%1' завърши свалянето. - + I/O Error i.e: Input/Output Error В/И Грешка @@ -2329,12 +2329,12 @@ Please close the other one first. Намерена грешка (пълен диск?), '%1' е в пауза. - + Connection Status: Състояние на връзката: - + Online Свързан @@ -2370,18 +2370,18 @@ Please close the other one first. Сваляне на '%1', моля изчакайте... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Намерена грешка (пълен диск?), '%1' е в пауза. - + Search Търси - + RSS RSS @@ -2395,13 +2395,13 @@ Please close the other one first. DHT поддръжка [ВКЛ], порт: %1 - - + + DHT support [OFF] DHT поддръжка [ИЗКЛ] - + PeX support [ON] PeX поддръжка [ВКЛ] @@ -2410,51 +2410,51 @@ Please close the other one first. PeX поддръжка [ИЗКЛ] - + The download list is not empty. Are you sure you want to quit qBittorrent? Листата за сваляне не е празна. Сигурни ли сте че искате да напуснете qBittorrent? - - + + Downloads Сваляне - + Are you sure you want to delete the selected item(s) in finished list? Сигурни ли сте че искате да изтриете избраните файлове от списъка на завършените сваляния? - + UPnP support [ON] UPnP поддръжка [ВКЛ] - + Encryption support [ON] Поддръжка кодиране [ВКЛ] - + Encryption support [FORCED] Поддръжка кодиране [ФОРСИРАНА] - + Encryption support [OFF] Поддръжка кодиране [ИЗКЛ] - + Alt+1 shortcut to switch to first tab Alt+1 - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2463,34 +2463,34 @@ Are you sure you want to quit qBittorrent? Причина:%2 - + Alt+2 shortcut to switch to second tab Alt+2 - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Грешка при сваляне от Url - + Couldn't download file at url: %1, reason: %2. Невъзможно сваляне на файл от url: %1, причина: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Сигурни ли сте че искате да изтриете избраните от списъка за сваляне или от твърдия диск? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Сигурни ли сте че искате да изтриете избраните от списъка на свалените или от твърдия диск? @@ -2500,50 +2500,50 @@ Are you sure you want to quit qBittorrent? '%1' бе премахнат завинаги. - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent се прехвърля на порт: TCP/%1 - + UPnP support [OFF] UPnP поддръжка [ИЗКЛ] - + NAT-PMP support [ON] NAT-PMP поддръжка [ВКЛ] - + NAT-PMP support [OFF] NAT-PMP поддръжка [ИЗКЛ] - + DHT support [ON], port: UDP/%1 DHT поддръжка [ВКЛ], порт: UDP/%1 - + Local Peer Discovery [ON] Търсене на локални връзки [ВКЛ] - + Local Peer Discovery support [OFF] Търсене на локални връзки [ИЗКЛ] @@ -2553,48 +2553,48 @@ Are you sure you want to quit qBittorrent? '%1' бе премахнат защото съотношението му надвишава определеното. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s DL: %1 KB/с - - + + UP: %1 KiB/s UP: %1 KB/с - - + + Ratio: %1 Съотношение: %1 - - + + DHT: %1 nodes DHT: %1 възли - - + + No direct connections. This may indicate network configuration problems. Няма директни връзки. Това може да е от проблеми в мрежовата настройка. - + Uploads Качени - + Options were saved successfully. Опциите бяха съхранени успешно. @@ -3318,12 +3318,12 @@ p, li { white-space: pre-wrap; } Програма за търсене - + Empty search pattern Празен образец за търсене - + Please type a search pattern first Моля първо въведете образец за търсене @@ -3336,13 +3336,13 @@ p, li { white-space: pre-wrap; } Трябва да изберете поне една търсачка. - - + + Results Резултати - + Searching... Търсене... @@ -3385,65 +3385,65 @@ Changelog: Вашата добавка за търсене е вече обновена. - + Cut Отрежи - + Copy Копирай - + Paste Залепи - + Clear field Изчисти полето - + Clear completion history Изчисти листа на завършените - + Search Engine Търсачка - - + + Search has finished Търсенето завърши - + An error occured during search... Намерена грешка при търсенето... - + Search aborted Търсенето е прекъснато - + Search returned no results Търсене завършено без резултат - + Results i.e: Search results Резултати - - + + Unknown Неизвестен @@ -3621,6 +3621,11 @@ Changelog: Download in sequential order (slower but good for previewing) Сваляне поред (по-бавно но удобно за преглед) + + + Skip file checking and start seeding immediately + + File name Име файл @@ -3638,17 +3643,17 @@ Changelog: Сваляне в правилен ред (по-бавен, но добър за оглед на файловете) - + Add to download list in paused state Добави в листа за сваляне в състояние на пауза - + Add Добави - + Cancel Прекъсни @@ -3665,22 +3670,22 @@ Changelog: Избери - + Ignored Игнорирано - + Normal Нормален - + High Висок - + Maximum Максимален @@ -3754,18 +3759,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. %1 използва максималното разрешено от вас отношение. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' бе премахнат завинаги. - + '%1' was removed. 'xxx.avi' was removed. '%1' бе премахнат. @@ -3781,96 +3786,96 @@ Changelog: '%1' бе възстановен. - + '%1' is not a valid magnet URI. '%1' е невалиден magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' вече е в листа за сваляне. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' бе възстановен. (бързо възстановяване) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' добавен в листа за сваляне. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Не мога да декодирам торент-файла: '%1' - + This file is either corrupted or this isn't a torrent. Този файла или е разрушен или не е торент. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>бе блокиран от вашия IP филтър</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>бе прекъснат поради разрушени части</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Програмирано сваляне на файл %1 вмъкнато в торент %2 - + Unable to decode %1 torrent file. Не мога да декодирам %1 торент-файла. - + Couldn't listen on any of the given ports. Невъзможно изчакване от дадените портове. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Грешка при следене на порт, съобщение: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Следене на порт успешно, съобщение: %1 - + Fast resume data was rejected for torrent %1, checking again... Бърза пауза бе отхвърлена за торент %1, нова проверка... - + Url seed lookup failed for url: %1, message: %2 Url споделяне провалено за url: %1, съобщение: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Сваляне на '%1', моля изчакайте... @@ -4203,6 +4208,125 @@ Changelog: Моля въведете поне един URL. + + downloadThread + + + + I/O Error + + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Неизвестна грешка + + downloading @@ -4428,12 +4552,12 @@ Changelog: Грешно - + Uninstall warning Предупреждение за деинсталиране - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4442,7 +4566,7 @@ However, those plugins were disabled. Обаче добавките бяха изключени. - + Uninstall success Успешно деинсталиране @@ -4451,62 +4575,62 @@ However, those plugins were disabled. Всички избрани добавки бяха успешно деинсталирани - + Select search plugins Избери добавки за търсене - - + + qBittorrent search plugins qBittorrent добавки за търсене - - - - - - - - + + + + + + + + Search plugin install Инсталиране на добавка за търсене - - - + + + Yes Да - - - - + + + + No Не - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine По-нова версия на %1 добавката за търсене вече е инсталирана. @@ -4522,17 +4646,17 @@ However, those plugins were disabled. %1 добавка на търсачката беше успешно инсталирана. - - - - - + + + + + Search plugin update Добавката за търсене е обновена - - + + Sorry, update server is temporarily unavailable. Съжалявам, сървъра за обновяване е временно недостъпен. @@ -4547,60 +4671,60 @@ However, those plugins were disabled. Съжалявам, %1 обновяването на добавката бе неуспешно. - + All your plugins are already up to date. Всички ваши добавки са вече обновени. - + All selected plugins were uninstalled successfully Всички избрани добавки бяха успешно деинсталирани - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine %1 добавка на търсачката не бе обновена, запазване на досегашната версия. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine %1 добавка на търсачката не бе инсталирана. - + %1 search engine plugin was successfully updated. %1 is the name of the search engine %1 добавка на търсачката беше успешно обновена. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine %1 добавка на търсачката беше успешно обновена. - + Search engine plugin archive could not be read. Файла за добавки на търсачката не бе прочетен. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Съжалявам, инсталацията на %1 добавката за търсене бе неуспешна. - + New search engine plugin URL Нов URL за добавки на търсачката - + URL: URL: @@ -5502,29 +5626,24 @@ However, those plugins were disabled. subDownloadThread - Host is unreachable - Хоста е недостъпен + Хоста е недостъпен - File was not found (404) - Файла не е намерен (404) + Файла не е намерен (404) - Connection was denied - Връзката е отхвърлена + Връзката е отхвърлена - Url is invalid - Невалиден Url + Невалиден Url - I/O Error - В/И Грешка + В/И Грешка Connection forbidden (403) @@ -5539,29 +5658,24 @@ However, those plugins were disabled. Съдържанието бе преместено (301) - Connection failure - Неуспешна връзка + Неуспешна връзка - Connection was timed out - Връзката изтече + Връзката изтече - Incorrect network interface - Неточен интерфейс на мрежата + Неточен интерфейс на мрежата - Unknown error - Неизвестна грешка + Неизвестна грешка - Could not resolve proxy - Не намерено прокси + Не намерено прокси @@ -5627,12 +5741,12 @@ However, those plugins were disabled. Не мога да създам път за съхранение - + Invalid file selection Невалиден избор на файл - + You must select at least one file in the torrent Трябва да изберете поне един файл в торента diff --git a/src/lang/qbittorrent_ca.qm b/src/lang/qbittorrent_ca.qm index 746d05d6c..995ec3126 100644 Binary files a/src/lang/qbittorrent_ca.qm and b/src/lang/qbittorrent_ca.qm differ diff --git a/src/lang/qbittorrent_ca.ts b/src/lang/qbittorrent_ca.ts index 462b51b37..7988bfa1c 100644 --- a/src/lang/qbittorrent_ca.ts +++ b/src/lang/qbittorrent_ca.ts @@ -1508,8 +1508,8 @@ p, li { white-space: pre-wrap; } iniciat. - - + + qBittorrent qBittorrent @@ -1526,12 +1526,12 @@ p, li { white-space: pre-wrap; } Vel. Pujada: - + Open Torrent Files Arxius Torrent oberts - + Torrent Files Arxius Torrent @@ -1569,10 +1569,10 @@ p, li { white-space: pre-wrap; } Aquest arxiu està corrupte o no es un arxiu torrent. - - - - + + + + Are you sure? -- qBittorrent Estàs segur? -- qBittorrent @@ -1581,20 +1581,20 @@ p, li { white-space: pre-wrap; } Estàs segur de que vols buidar la llista de descàrregues? - - - - - + + + + + &Yes &Yes - - - - - + + + + + &No &No @@ -1603,7 +1603,7 @@ p, li { white-space: pre-wrap; } Llista de descàrregues buidada. - + Are you sure you want to delete the selected item(s) in download list? Estàs segur de que vols esborrar les descàrregues seleccionades? @@ -1672,7 +1672,7 @@ p, li { white-space: pre-wrap; } /s - + Finished Finalitzat @@ -1944,7 +1944,7 @@ Si et plau tanca l'altre primer. Estàs segur que vols esborrar els objectes seleccionats de la llista de descàrregues i del disc dur? - + Download finished @@ -1958,15 +1958,15 @@ Si et plau tanca l'altre primer. Motor de Busqueda - - + + qBittorrent %1 e.g: qBittorrent v0.x - - + + Connection status: @@ -2011,15 +2011,15 @@ Si et plau tanca l'altre primer. Leechers - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s @@ -2035,7 +2035,7 @@ Si et plau tanca l'altre primer. Validant... - + Are you sure you want to quit? @@ -2050,25 +2050,25 @@ Si et plau tanca l'altre primer. Conectant... - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. - + I/O Error i.e: Input/Output Error I/O Error - + Connection Status: - + Online @@ -2078,115 +2078,115 @@ Si et plau tanca l'altre primer. Resultats - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. - + Search Cercar - + RSS - - + + DHT support [OFF] - + PeX support [ON] - + The download list is not empty. Are you sure you want to quit qBittorrent? - - + + Downloads Descarregues - + Are you sure you want to delete the selected item(s) in finished list? - + UPnP support [ON] - + Encryption support [ON] - + Encryption support [FORCED] - + Encryption support [OFF] - + Alt+1 shortcut to switch to first tab - + Alt+2 shortcut to switch to second tab - + Alt+4 shortcut to switch to fourth tab - + Url download error - + Couldn't download file at url: %1, reason: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? - + Alt+3 shortcut to switch to third tab - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2194,90 +2194,90 @@ Are you sure you want to quit qBittorrent? - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + UPnP support [OFF] - + NAT-PMP support [ON] - + NAT-PMP support [OFF] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] - + Local Peer Discovery support [OFF] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + Options were saved successfully. @@ -2932,12 +2932,12 @@ p, li { white-space: pre-wrap; } Motor per cercar - + Empty search pattern Busqueda pare buida - + Please type a search pattern first Si us plau introduïu una busqueda pare primer @@ -2946,13 +2946,13 @@ p, li { white-space: pre-wrap; } Has de seleccionar un motor de busqueda. - - + + Results Resultats - + Searching... Cercant... @@ -2987,65 +2987,65 @@ Log: El teu plugin de recerca torna a estar actualitzat. - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Search Engine Motor de Busqueda - - + + Search has finished - + An error occured during search... Hi ha hagut un error durant la recerca... - + Search aborted Recerca abortada - + Search returned no results La recerca no ha tornat Resultats - + Results i.e: Search results Resultats - - + + Unknown Desconegut @@ -3215,6 +3215,11 @@ Log: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name Nom del fitxer @@ -3232,17 +3237,17 @@ Log: Descarrega en l'ordre correcte (més lent però més bona previsualització) - + Add to download list in paused state Afegeix a la llista de descàrregues en estat pausat - + Add Afegir - + Cancel Cancelar @@ -3255,22 +3260,22 @@ Log: Desseleccionat - + Ignored - + Normal - + High - + Maximum @@ -3340,113 +3345,113 @@ Log: bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. - + '%1' was removed. 'xxx.avi' was removed. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' - + This file is either corrupted or this isn't a torrent. Aquest arxiu està corrupte o no es un arxiu torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. No es pot obrir el port especificat. - + UPnP/NAT-PMP: Port mapping failure, message: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 - + Fast resume data was rejected for torrent %1, checking again... - + Url seed lookup failed for url: %1, message: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... @@ -3751,6 +3756,125 @@ Log: Si et plau entra mínimament una URL. + + downloadThread + + + + I/O Error + I/O Error + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + + + downloading @@ -3968,153 +4092,153 @@ Log: Fals - + Uninstall warning - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. - + Uninstall success - + Select search plugins - - + + qBittorrent search plugins - - - - - - - - + + + + + + + + Search plugin install - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine - - - - - + + + + + Search plugin update - - + + Sorry, update server is temporarily unavailable. Ho sento, el servidor per actualitzar està temporalment no disponible. - + All your plugins are already up to date. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine - + All selected plugins were uninstalled successfully - + %1 search engine plugin was successfully updated. %1 is the name of the search engine - + %1 search engine plugin was successfully installed. %1 is the name of the search engine - + Search engine plugin archive could not be read. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine - + New search engine plugin URL - + URL: @@ -4967,54 +5091,8 @@ However, those plugins were disabled. subDownloadThread - - Host is unreachable - - - - - File was not found (404) - - - - - Connection was denied - - - - - Url is invalid - - - - - Connection failure - - - - - Connection was timed out - - - - - Incorrect network interface - - - - - Unknown error - - - - I/O Error - I/O Error - - - - Could not resolve proxy - + I/O Error @@ -5080,12 +5158,12 @@ However, those plugins were disabled. No es pot creat la ruta guardada - + Invalid file selection Seleció invàlida de fitxer - + You must select at least one file in the torrent Has de seleccionar mínimament un fitxer en el torrent diff --git a/src/lang/qbittorrent_cs.qm b/src/lang/qbittorrent_cs.qm index 349269df1..17d187b44 100644 Binary files a/src/lang/qbittorrent_cs.qm and b/src/lang/qbittorrent_cs.qm differ diff --git a/src/lang/qbittorrent_cs.ts b/src/lang/qbittorrent_cs.ts index 74a7d4d70..dc082d56c 100644 --- a/src/lang/qbittorrent_cs.ts +++ b/src/lang/qbittorrent_cs.ts @@ -1274,61 +1274,61 @@ Copyright © 2006 by Christophe Dumez<br> GUI - + Open Torrent Files Otevřít torrent soubory - - - - - + + + + + &Yes &Ano - - - - - + + + + + &No &Ne - + Are you sure you want to delete the selected item(s) in download list? Jste si jist, že chcete smazat vybrané položky ze seznamu stahování? - + Torrent Files Torrent soubory - - - - + + + + Are you sure? -- qBittorrent Jste si jist? -- qBittorrent - + Download finished Stahování dokončeno - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Stav připojení: @@ -1341,27 +1341,27 @@ Copyright © 2006 by Christophe Dumez<br> Nebyly nalezeny žádné peery... - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Rychlost stahování: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Rychlost nahrávání: %1 KiB/s - + Are you sure you want to quit? Opravdu ukončit program? @@ -1389,14 +1389,14 @@ Copyright © 2006 by Christophe Dumez<br> '%1' obnoven. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. Stahování %1 bylo dokončeno. - + I/O Error i.e: Input/Output Error Chyba I/O @@ -1407,12 +1407,12 @@ Copyright © 2006 by Christophe Dumez<br> Nastala chyba při pokusu o čtení či zápis %1. Disk je provděpodobně plný, stahování bylo pozastaveno - + Connection Status: Stav připojení: - + Online Online @@ -1426,18 +1426,18 @@ Copyright © 2006 by Christophe Dumez<br> Žádná příchozí spojení... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Nastala chyba (plný disk?), '%1' pozastaven. - + Search Hledat - + RSS RSS @@ -1451,13 +1451,13 @@ Copyright © 2006 by Christophe Dumez<br> Podpora DHT [ZAP], port: %1 - - + + DHT support [OFF] Podpora DHT [VYP] - + PeX support [ON] Podpora PeX [ZAP] @@ -1466,56 +1466,56 @@ Copyright © 2006 by Christophe Dumez<br> Podpora PeX [VYP] - + The download list is not empty. Are you sure you want to quit qBittorrent? Seznam stahování není prázdný. Opravdu chcete ukončit qBittorrent? - - + + Downloads Stahování - + Finished Dokončeno - + Are you sure you want to delete the selected item(s) in finished list? Jste si jist, že chcete smazat vybrané položky ze seznamu dokončených? - + UPnP support [ON] Podpora UPnP [ZAP] - + Encryption support [ON] Podpora šifrování [ZAP] - + Encryption support [FORCED] Podpora šifrování [VYNUCENO] - + Encryption support [OFF] Podpora šifrování [VYP] - + Alt+1 shortcut to switch to first tab Alt+1 - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -1524,34 +1524,34 @@ Opravdu chcete ukončit qBittorrent? Důvod: %2 - + Alt+2 shortcut to switch to second tab Alt+2 - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Chyba stahování URL - + Couldn't download file at url: %1, reason: %2. Nemohu stáhnout soubor na URL: %1, důvod: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Jste si jist, že chcete smazat vybrané položky ze seznamu stahování a pevného disku? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Jste si jist, že chcete smazat vybrané položky ze seznamu dokončených a pevného disku? @@ -1561,50 +1561,50 @@ Opravdu chcete ukončit qBittorrent? '%1' byl trvale odstraněn. - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent naslouchá na portu: TCP/%1 - + UPnP support [OFF] Podpora UPnP [VYP] - + NAT-PMP support [ON] Podpora NAT-PMP [ZAP] - + NAT-PMP support [OFF] Podpora NAT-PMP [VYP] - + DHT support [ON], port: UDP/%1 Podpora DHT [ZAP], port: UDP/%1 - + Local Peer Discovery [ON] Local Peer Discovery [ZAP] - + Local Peer Discovery support [OFF] Podpora Local Peer Discovery [VYP] @@ -1614,48 +1614,48 @@ Opravdu chcete ukončit qBittorrent? '%1' byl odstraněn protože jeho poměr dosáhl nastaveného maxima. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (Stahování: %2KiB/s, Nahrávání: %3KiB/s) - - + + DL: %1 KiB/s Stahování: %1 KiB/s - - + + UP: %1 KiB/s Nahrávání: %1 KiB/s - - + + Ratio: %1 Poměr: %1 - - + + DHT: %1 nodes DHT: %1 uzlů - - + + No direct connections. This may indicate network configuration problems. Žádná přímá spojení. To může značit problémy s nastavením sítě. - + Uploads Nahrávání - + Options were saved successfully. Nastavení bylo úspěšně uloženo. @@ -2204,86 +2204,86 @@ p, li { white-space: pre-wrap; } SearchEngine - + Cut Vyjmout - + Copy Kopírovat - + Paste Vložit - + Clear field Vyprázdnit pole - + Clear completion history Vymazat historii - + Empty search pattern Prázdný hledaný řetězec - + Please type a search pattern first Nejdříve prosím napište hledaný řetězec - - + + Results Výsledky - + Searching... Hledám... - + Search Engine Vyhledávač - - + + Search has finished Hledání ukončeno - + An error occured during search... Během hledání nastala chyba... - + Search aborted Hledání přerušeno - + Search returned no results Nebyly nalezeny žádné výsledky - + Results i.e: Search results Výsledky - - + + Unknown Neznámý @@ -2394,42 +2394,47 @@ p, li { white-space: pre-wrap; } Download in sequential order (slower but good for previewing) Stahovat v sekvenčním pořadí (pomalejší, ale dobré pro náhled) + + + Skip file checking and start seeding immediately + + Download in correct order (slower but good for previewing) Stahovat ve správném pořadí (pomalejší, ale dobré pro náhled) - + Add to download list in paused state Přidat do seznamu stahování jako pozastavené - + Add Přidat - + Cancel Zrušit - + Ignored Ignorovat - + Normal Normální - + High Vysoká - + Maximum Maximální @@ -2499,18 +2504,18 @@ p, li { white-space: pre-wrap; } bittorrent - + %1 reached the maximum ratio you set. '%1' - poměr dosáhl nastaveného maxima. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' byl trvale odstraněn. - + '%1' was removed. 'xxx.avi' was removed. '%1' byl odstraněn. @@ -2526,96 +2531,96 @@ p, li { white-space: pre-wrap; } '%1' obnoven. - + '%1' is not a valid magnet URI. '%1' není platný magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' už je v seznamu stahování. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' obnoven. (rychlé obnovení) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' přidán do seznamu stahování. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Nelze dekódovat soubor torrentu: '%1' - + This file is either corrupted or this isn't a torrent. Tento soubor je buď poškozen, nebo to není soubor torrentu. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>byl zablokován kvůli filtru IP</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>byl zakázán kvůli poškozeným částem</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Rekurzivní stahování souboru %1 vloženého v torrentu %2 - + Unable to decode %1 torrent file. Nelze dekódovat soubor torrentu %1. - + Couldn't listen on any of the given ports. Nelze naslouchat na žádném z udaných portů. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Namapování portů selhalo, zpráva: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Namapování portů bylo úspěšné, zpráva: %1 - + Fast resume data was rejected for torrent %1, checking again... Rychlé obnovení torrentu %1 bylo odmítnuto, zkouším znovu... - + Url seed lookup failed for url: %1, message: %2 Vyhledání URL seedu selhalo pro URL: %1, zpráva: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Stahuji '%1', prosím čekejte... @@ -2864,6 +2869,125 @@ p, li { white-space: pre-wrap; } Prosím napište alespoň jedno URL. + + downloadThread + + + + I/O Error + Chyba I/O + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Neznámá chyba + + downloading @@ -3073,12 +3197,12 @@ p, li { white-space: pre-wrap; } Ne - + Uninstall warning Upozornění na odstranění - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -3087,141 +3211,141 @@ Můžete odstranit pouze moduly, které jste sám přidal. Nicméně, tyto moduly byly vypnuty. - + Uninstall success Odstranění bylo úspěšné - + Select search plugins Vybrat vyhledávače - - + + qBittorrent search plugins qBittorrent - vyhledávače - - - - - - - - + + + + + + + + Search plugin install Nainstalovat vyhledávač - - - + + + Yes Ano - - - - + + + + No Ne - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine V systému je již nainstalována novější verze vyhledávače %1. - - - - - + + + + + Search plugin update Aktualizovat vyhledávač - - + + Sorry, update server is temporarily unavailable. Omlouvám se, server s aktualizacemi je dočasně nedostupný. - + All your plugins are already up to date. Všechny zásuvné moduly jsou aktuální. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine Vyhledávač %1 nelze aktualizovat, ponechávám starou verzi. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine Vyhledávač %1 nelze nainstalovat. - + All selected plugins were uninstalled successfully Všechny zásuvné moduly byly úspěšně odstraněny - + %1 search engine plugin was successfully updated. %1 is the name of the search engine Vyhledávač %1 byl úspěšně aktualizován. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine Vyhledávač %1 byl úspěšně nainstalován. - + Search engine plugin archive could not be read. Nelze přečíst zásuvný modul vyhledávače. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Omlouvám se, instalace vyhledávače %1 selhala. - + New search engine plugin URL URL nového zásuvného modulu - + URL: URL: @@ -3832,54 +3956,44 @@ Nicméně, tyto moduly byly vypnuty. subDownloadThread - Host is unreachable - Hostitel je nedostupný + Hostitel je nedostupný - File was not found (404) - Soubor nenalezen (404) + Soubor nenalezen (404) - Connection was denied - Spojení bylo odepřeno + Spojení bylo odepřeno - Url is invalid - URL je neplatné + URL je neplatné - Connection failure - Chyba spojení + Chyba spojení - Connection was timed out - Spojení vypršelo + Spojení vypršelo - Incorrect network interface - Nesprávné síťové rozhraní + Nesprávné síťové rozhraní - Unknown error - Neznámá chyba + Neznámá chyba - I/O Error - Chyba I/O + Chyba I/O - Could not resolve proxy - Nemohu přeložit adresu proxy + Nemohu přeložit adresu proxy @@ -3937,12 +4051,12 @@ Nicméně, tyto moduly byly vypnuty. Nemohu vytvořit cestu pro uložení - + Invalid file selection Neplatný výběr souboru - + You must select at least one file in the torrent Musíte v torrentu vybrat alespoň jeden soubor diff --git a/src/lang/qbittorrent_da.qm b/src/lang/qbittorrent_da.qm index d9cba79c3..0219e9863 100644 Binary files a/src/lang/qbittorrent_da.qm and b/src/lang/qbittorrent_da.qm differ diff --git a/src/lang/qbittorrent_da.ts b/src/lang/qbittorrent_da.ts index 9f58d5b8a..5cd8d23fc 100644 --- a/src/lang/qbittorrent_da.ts +++ b/src/lang/qbittorrent_da.ts @@ -1401,7 +1401,7 @@ Copyright © 2006 by Christophe Dumez<br> GUI - + Open Torrent Files Åbn Torrent Filer @@ -1410,25 +1410,25 @@ Copyright © 2006 by Christophe Dumez<br> Denne fil er enten korrupt eller ikke en torrent. - - - - - + + + + + &Yes &Ja - - - - - + + + + + &No &Nej - + Are you sure you want to delete the selected item(s) in download list? Er du sikker på at du vil slette det markerede fra download listen? @@ -1441,15 +1441,15 @@ Copyright © 2006 by Christophe Dumez<br> Downloader... - + Torrent Files Torrent Filer - - - - + + + + Are you sure? -- qBittorrent Er du sikker? -- qBittorrent @@ -1538,7 +1538,7 @@ Luk venglist denne først. Overførsler - + Download finished Download afsluttet @@ -1555,15 +1555,15 @@ Luk venglist denne først. Er du sikker på at du vil slette de markerede elementer i download listen og på harddisken? - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Forbindelses status: @@ -1626,21 +1626,21 @@ Luk venglist denne først. qBittorrent %1 startet. - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s DL hastighed: %1 KB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s UP hastighed: %1 KB/s @@ -1661,7 +1661,7 @@ Luk venglist denne først. Gået i stå - + Are you sure you want to quit? Er du sikker på at du vil afslutte? @@ -1724,14 +1724,14 @@ Luk venglist denne først. '%1' fortsat. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 er hentet færdig. - + I/O Error i.e: Input/Output Error I/O Fejl @@ -1742,12 +1742,12 @@ Luk venglist denne først. Der opstod en fejl under forsøget på at skrive %1. Disken er måske fuld, downloaden er sat på pause - + Connection Status: Forbindelses Status: - + Online Online @@ -1783,120 +1783,120 @@ Luk venglist denne først. Downloader '%1', vent venligst... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Der opstod en fejl (fuld disk?), '%1' sat på pause. - + Search Søg - + RSS - - + + DHT support [OFF] - + PeX support [ON] - + The download list is not empty. Are you sure you want to quit qBittorrent? - - + + Downloads - + Finished Færdig - + Are you sure you want to delete the selected item(s) in finished list? - + UPnP support [ON] - + Encryption support [ON] - + Encryption support [FORCED] - + Encryption support [OFF] - + Alt+1 shortcut to switch to first tab - + Alt+2 shortcut to switch to second tab - + Alt+4 shortcut to switch to fourth tab - + Url download error - + Couldn't download file at url: %1, reason: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? - + Alt+3 shortcut to switch to third tab - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -1904,90 +1904,90 @@ Are you sure you want to quit qBittorrent? - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + UPnP support [OFF] - + NAT-PMP support [ON] - + NAT-PMP support [OFF] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] - + Local Peer Discovery support [OFF] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + Options were saved successfully. Indstillingerne blev gemt. @@ -2567,12 +2567,12 @@ p, li { white-space: pre-wrap; } Søgemaskine - + Empty search pattern Tomt søge kriterie - + Please type a search pattern first Indtast venligst et søge kriterie først @@ -2585,13 +2585,13 @@ p, li { white-space: pre-wrap; } Du skal vælge mindst en søgemaskine. - - + + Results Resultater - + Searching... Søger... @@ -2634,65 +2634,65 @@ Changelog: Dit søge plugin er allerede opdateret fuldt ud. - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Search Engine Søgemaskine - - + + Search has finished Søgningen er færdig - + An error occured during search... Der opstod en fejl under søgningen... - + Search aborted Søgning afbrudt - + Search returned no results Søgningen gav intet resultat - + Results i.e: Search results Resultater - - + + Unknown Ukendt @@ -2846,6 +2846,11 @@ Changelog: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name Fil navn @@ -2863,17 +2868,17 @@ Changelog: Download i korrekt rækkefølge (langsommere, men godt for smugkig) - + Add to download list in paused state Tilføj til download listen som sat på pause - + Add Tilføj - + Cancel Annuller @@ -2886,22 +2891,22 @@ Changelog: Vælg - + Ignored - + Normal - + High - + Maximum @@ -2971,18 +2976,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. - + '%1' was removed. 'xxx.avi' was removed. '%1' blev fjernet. @@ -2998,96 +3003,96 @@ Changelog: '%1' fortsat. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' findes allerede i download listen. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' fortsat. (hurtig fortsættelse) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' lagt til download listen. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Kan ikke dekode torrent filen: '%1' - + This file is either corrupted or this isn't a torrent. Denne fil er enten korrupt eller ikke en torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. Kunne ikke lytte på de opgivne porte. - + UPnP/NAT-PMP: Port mapping failure, message: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 - + Fast resume data was rejected for torrent %1, checking again... - + Url seed lookup failed for url: %1, message: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Downloader '%1', vent venligst... @@ -3372,6 +3377,125 @@ Changelog: Indtast venligst mindst en URL. + + downloadThread + + + + I/O Error + I/O Fejl + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + + + downloading @@ -3589,153 +3713,153 @@ Changelog: Falsk - + Uninstall warning - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. - + Uninstall success - + Select search plugins - - + + qBittorrent search plugins - - - - - - - - + + + + + + + + Search plugin install - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine - - - - - + + + + + Search plugin update Søge plugin opdatering - - + + Sorry, update server is temporarily unavailable. Beklager, opdaterings-serveren er midlertidigt utilgængelig. - + All your plugins are already up to date. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine - + All selected plugins were uninstalled successfully - + %1 search engine plugin was successfully updated. %1 is the name of the search engine - + %1 search engine plugin was successfully installed. %1 is the name of the search engine - + Search engine plugin archive could not be read. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine - + New search engine plugin URL - + URL: @@ -4441,54 +4565,8 @@ However, those plugins were disabled. subDownloadThread - - Host is unreachable - - - - - File was not found (404) - - - - - Connection was denied - - - - - Url is invalid - - - - - Connection failure - - - - - Connection was timed out - - - - - Incorrect network interface - - - - - Unknown error - - - - I/O Error - I/O Fejl - - - - Could not resolve proxy - + I/O Fejl @@ -4554,12 +4632,12 @@ However, those plugins were disabled. Kunne ikke oprette mappe svarende til den indtastede sti - + Invalid file selection Valg af filer ugyldigt - + You must select at least one file in the torrent Du skal vælge mindst en fil per torrent diff --git a/src/lang/qbittorrent_de.qm b/src/lang/qbittorrent_de.qm index 6ead51309..7ce1a7607 100644 Binary files a/src/lang/qbittorrent_de.qm and b/src/lang/qbittorrent_de.qm differ diff --git a/src/lang/qbittorrent_de.ts b/src/lang/qbittorrent_de.ts index 087fb2fd8..48485c691 100644 --- a/src/lang/qbittorrent_de.ts +++ b/src/lang/qbittorrent_de.ts @@ -1657,8 +1657,8 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen :: By Christophe Dumez :: Copyright (c) 2006 - - + + qBittorrent qBittorrent @@ -1679,12 +1679,12 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen UP Geschwindigkeit: - + Open Torrent Files Öffne Torrent-Dateien - + Torrent Files Torrent-Dateien @@ -1726,10 +1726,10 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen Diese Datei ist entweder beschädigt, oder kein torrent. - - - - + + + + Are you sure? -- qBittorrent Sind Sie sicher? -- qBittorrent @@ -1738,20 +1738,20 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen Wollen Sie wirklich alle Dateien aus der Download Liste löschen? - - - - - + + + + + &Yes &Ja - - - - - + + + + + &No &Nein @@ -1760,7 +1760,7 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen Download Liste gelöscht. - + Are you sure you want to delete the selected item(s) in download list? Wollen Sie wirklich die ausgewählten Elemente aus der Download-Liste löschen? @@ -1820,7 +1820,7 @@ qBittorrent beobachtet das Verzeichniss und starten den Download von vorhandenen <b>qBittorrent</b><br>DL Geschwindigkeit: - + Finished Beendet @@ -2081,7 +2081,7 @@ Bitte schliessen Sie diesen zuerst. Wollen Sie wirklich die ausgewählten Elemente aus der Download Liste und von der Festplatte löschen? - + Download finished Download abgeschlossen @@ -2095,15 +2095,15 @@ Bitte schliessen Sie diesen zuerst. Suchmaschine - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Verbindungs-Status: @@ -2166,15 +2166,15 @@ Bitte schliessen Sie diesen zuerst. qBittorrent %1 gestartet. - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s DL Geschwindigkeit: %1 KB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s UP Geschwindigkeit: %1 KiB/s @@ -2195,7 +2195,7 @@ Bitte schliessen Sie diesen zuerst. Angehalten - + Are you sure you want to quit? Wollen Sie wirklich beenden? @@ -2258,14 +2258,14 @@ Bitte schliessen Sie diesen zuerst. '%1' fortgesetzt. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 vollständig heruntergeladen. - + I/O Error i.e: Input/Output Error I/O Error @@ -2281,12 +2281,12 @@ Bitte schliessen Sie diesen zuerst. Ein Fehler ist aufgetreten (Festplatte voll?), '%1' angehalten. - + Connection Status: Verbindungs-Status: - + Online Online @@ -2322,23 +2322,23 @@ Bitte schliessen Sie diesen zuerst. Lade '%1', bitte warten... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Ein Fehler ist aufgetreten (Festplatte voll?), '%1' angehalten. - + Search Suche - + RSS RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2355,13 +2355,13 @@ Bitte schliessen Sie diesen zuerst. DHT Unterstützung [Aktiviert], port: %1 - - + + DHT support [OFF] DHT Unterstützung [Deaktiviert] - + PeX support [ON] PeX Unterstützung [Aktiviert] @@ -2370,15 +2370,15 @@ Bitte schliessen Sie diesen zuerst. PeX Unterstützung [Deaktiviert] - + The download list is not empty. Are you sure you want to quit qBittorrent? Die Download Liste ist nicht leer. Möchten sie qBittorrent wirklich beenden? - - + + Downloads Downloads @@ -2387,12 +2387,12 @@ Möchten sie qBittorrent wirklich beenden? Wollen Sie wirklich die ausgewählten Elemente aus der Beendet Liste und von der Festplatte löschen? - + Are you sure you want to delete the selected item(s) in finished list? Wollen Sie wirklich die ausgewählten Elemente aus der Beendet Liste löschen? - + UPnP support [ON] UPNP Unterstützung [Aktiviert] @@ -2401,17 +2401,17 @@ Möchten sie qBittorrent wirklich beenden? ACHTUNG! Die Verbreitung von urheberrechlich geschütztem Material ist gegen das Gesetz. - + Encryption support [ON] Verschlüsselung Unterstützung [Aktiviert] - + Encryption support [FORCED] Verschlüsselung Unterstützung [Erzwungen] - + Encryption support [OFF] Verschlüsselungs-Unterstützung [Deaktiviert] @@ -2425,13 +2425,13 @@ Möchten sie qBittorrent wirklich beenden? Verhältnis - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -2442,18 +2442,18 @@ Möchten sie qBittorrent wirklich beenden? Alt+3, Strg+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error URL Download Fehler - + Couldn't download file at url: %1, reason: %2. Konnte Datei von URL: %1 nicht laden, Begründung: %2. @@ -2462,12 +2462,12 @@ Möchten sie qBittorrent wirklich beenden? Fast-Resume Daten wurden zurückgewiesen für torrent %1, prüfe nochmal... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Sind Sie sicher, daß Sie die ausgewählten Einträge aus der Download Liste und von der Festplatte löschen möchten? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Sind Sie sicher, daß Sie die ausgewählten Einträge aus der Beendet Liste und von der Festplatte löschen möchten? @@ -2481,50 +2481,50 @@ Möchten sie qBittorrent wirklich beenden? URL Seed Lookup fehlgeschlagen für URL: %1, Begründung: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Strg+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent lauscht auf Port: TCP/%1 - + UPnP support [OFF] UPnP Unterstützung [AUS] - + NAT-PMP support [ON] NAT-PMP Unterstützung [AN] - + NAT-PMP support [OFF] NAT-PMP Unterstützung [AUS] - + DHT support [ON], port: UDP/%1 DHT Unterstützung [EIN], Port: UDP/%1 - + Local Peer Discovery [ON] Lokale Peer Auffindung [AN] - + Local Peer Discovery support [OFF] Unterstützung für Lokale Peer Auffindung [AUS] @@ -2534,48 +2534,48 @@ Möchten sie qBittorrent wirklich beenden? '%1' wurde entfernt, weil das von Ihnen eingestellte maximale Verhältnis erreicht wurde. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s DL: %1 KiB/s - - + + UP: %1 KiB/s UP: %1 KiB/s - - + + Ratio: %1 Verhältnis: %1 - - + + DHT: %1 nodes DHT: %1 Nodes - - + + No direct connections. This may indicate network configuration problems. Keine direkten Verbindungen. Es könnte bedeuten, daß Sie Probleme mit Ihrer Netzwerkkonfiguration haben. - + Uploads Uploads - + Options were saved successfully. Optionen wurden erfolgreich gespeichert. @@ -3303,12 +3303,12 @@ p, li { white-space: pre-wrap; } Suchmaschine - + Empty search pattern Leere Suchanfrage - + Please type a search pattern first Bitte geben Sie zuerst eine Suchanfrage ein @@ -3321,13 +3321,13 @@ p, li { white-space: pre-wrap; } Sie müssen mindestens eine Suchmaschine auswählen. - - + + Results Ergebnisse - + Searching... Suche... @@ -3370,58 +3370,58 @@ Changelog: "Such"-Plugin ist schon auf dem neuesten Stand. - + Cut Ausschneiden - + Copy Kopieren - + Paste Einfügen - + Clear field Feld leeren - + Clear completion history Vervollständigungshistorie löschen - + Search Engine Suchmaschine - - + + Search has finished Suche abgeschlossen - + An error occured during search... Während der Suche ist ein Fehler aufgetreten ... - + Search aborted Suche abgebrochen - + Search returned no results Suche lieferte keine Ergebnisse - + Results i.e: Search results Ergebnisse @@ -3435,8 +3435,8 @@ Changelog: Konnte Such-Plugin Update nicht von URL: %1 laden, Begründung: %2. - - + + Unknown Unbekannt @@ -3614,6 +3614,11 @@ Changelog: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name Datei Name @@ -3631,17 +3636,17 @@ Changelog: In richtiger Reihenfolge herunterladen (langsamer, aber besser zum Vorschauen) - + Add to download list in paused state Der Download Liste im Pause-Modus hinzufügen - + Add Hinzufügen - + Cancel Abbrechen @@ -3658,22 +3663,22 @@ Changelog: Auswählen - + Ignored Ignoriert - + Normal Normal - + High Hoch - + Maximum Maximum @@ -3743,18 +3748,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. %1 hat das gesetzte maximale Verhältnis erreicht. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' wurde endgültig entfernt. - + '%1' was removed. 'xxx.avi' was removed. '%1' wurde entfernt. @@ -3770,96 +3775,96 @@ Changelog: '%1' wird fortgesetzt. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' befindet sich bereits in der Download-Liste. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' wird fortgesetzt. (Schnelles Fortsetzen) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' wurde der Download-Liste hinzugefügt. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Kann Torrent Datei nicht dekodieren: '%1' - + This file is either corrupted or this isn't a torrent. Diese Datei ist entweder beschädigt, oder kein Torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>wurde geblockt aufgrund Ihrer IP Filter</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>wurde gebannt aufgrund von beschädigten Teilen</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. Konnte nicht auf den angegebenen Ports lauschen. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Port Mapping Fehler, Fehlermeldung: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Port Mapping erfolgreich, Meldung: %1 - + Fast resume data was rejected for torrent %1, checking again... Fast-Resume Daten für den Torrent %1 wurden zurückgewiesen, prüfe erneut... - + Url seed lookup failed for url: %1, message: %2 URL Seed Lookup für die URL: %1 ist fehlgeschlagen, Meldung: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Lade '%1', bitte warten... @@ -4192,6 +4197,125 @@ Changelog: Bitte geben Sie mindestens eine URL an. + + downloadThread + + + + I/O Error + + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Unbekannter Fehler + + downloading @@ -4417,12 +4541,12 @@ Changelog: Falsch - + Uninstall warning Deinstallations Warnung - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4431,7 +4555,7 @@ However, those plugins were disabled. Die Plugins wurden jedoch deaktiviert. - + Uninstall success Deinstallation erfolgreich @@ -4440,62 +4564,62 @@ Die Plugins wurden jedoch deaktiviert. Alle ausgewählten Plugins wurden erfolgreich deinstalliert - + Select search plugins Wähle Suchplugin - - + + qBittorrent search plugins qBittorrent Suchplugins - - - - - - - - + + + + + + + + Search plugin install Suchplugin installieren - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Eine neuere Version des Suchmaschinen Plugins %1 ist bereits installiert. @@ -4511,17 +4635,17 @@ Die Plugins wurden jedoch deaktiviert. Das Suchmaschinen Plugin wurde erfolgreich installiert. - - - - - + + + + + Search plugin update Such-Plugin update - - + + Sorry, update server is temporarily unavailable. Update Server vorübergehend nicht erreichbar. @@ -4536,60 +4660,60 @@ Die Plugins wurden jedoch deaktiviert. Update des Suchplugins %1 fehlgeschlagen. - + All your plugins are already up to date. Alle Plugins sind auf dem neuesten Stand. - + All selected plugins were uninstalled successfully Alle ausgewählten Plugins wurden erfolgreich deinstalliert - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine %1 Suchmaschinen Plugin konnte nich aktualisiert werden, behalte alte Version. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine %1 Suchmaschinen Plugin konnte nicht installiert werden. - + %1 search engine plugin was successfully updated. %1 is the name of the search engine %1 Suchmaschinen Plugin wurder erfolgreich geupdated. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine %1 Suchmaschinen Plugin wurde erfolgreich installiert. - + Search engine plugin archive could not be read. Konnte Suchmaschinen Plugin Archiv nicht lesen. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Installation des Suchmaschinen Plugins %1 fehlgeschlagen. - + New search engine plugin URL Neue Suchmaschinen Plugin URL - + URL: URL: @@ -5521,29 +5645,20 @@ Die Plugins wurden jedoch deaktiviert. subDownloadThread - Host is unreachable - Host ist unerreichbar + Host ist unerreichbar - File was not found (404) - Datei nicht gefunden (404) + Datei nicht gefunden (404) - Connection was denied - Verbindung verweigert + Verbindung verweigert - Url is invalid - URL ist ungültig - - - - I/O Error - + URL ist ungültig Connection forbidden (403) @@ -5558,29 +5673,24 @@ Die Plugins wurden jedoch deaktiviert. Inhalt wurde verschoben (301) - Connection failure - Verbindungs-Fehler + Verbindungs-Fehler - Connection was timed out - Verbidung wurde unterbrochen + Verbidung wurde unterbrochen - Incorrect network interface - Falsches Netzwerk Interface + Falsches Netzwerk Interface - Unknown error - Unbekannter Fehler + Unbekannter Fehler - Could not resolve proxy - Der Proxy konnte nicht aufgelöst werden + Der Proxy konnte nicht aufgelöst werden @@ -5646,12 +5756,12 @@ Die Plugins wurden jedoch deaktiviert. Speicher-Pfad konnte nicht erstellt werden - + Invalid file selection Ungültige Datei Auswahl - + You must select at least one file in the torrent Sie müssen mindestens eine Datei aus dem Torrent selektieren diff --git a/src/lang/qbittorrent_el.qm b/src/lang/qbittorrent_el.qm index 258436f96..979a392ac 100644 Binary files a/src/lang/qbittorrent_el.qm and b/src/lang/qbittorrent_el.qm differ diff --git a/src/lang/qbittorrent_el.ts b/src/lang/qbittorrent_el.ts index f57662ce3..5610920f1 100644 --- a/src/lang/qbittorrent_el.ts +++ b/src/lang/qbittorrent_el.ts @@ -1724,7 +1724,7 @@ Copyright © 2006 από τον Christophe Dumez<br> GUI - + Open Torrent Files Άνοιγμα Αρχείων τορεντ @@ -1745,25 +1745,25 @@ Copyright © 2006 από τον Christophe Dumez<br> Σίγουρα θέλετε να διαγράψετε όλα τα αρχεία στην λίστα κατεβάσματος? - - - - - + + + + + &Yes &Ναι - - - - - + + + + + &No &Όχι - + Are you sure you want to delete the selected item(s) in download list? Είστε σίγουρος οτι θέλετε να διαγράψετε το(α) επιλεγμλένα αντικείμενο(α) από την λίστα κατεβάσματος? @@ -1780,7 +1780,7 @@ Copyright © 2006 από τον Christophe Dumez<br> kb/s - + Finished Τελείωσε @@ -1825,7 +1825,7 @@ Copyright © 2006 από τον Christophe Dumez<br> Δεν μπόρεσε να δημιουργηθεί η κατηγορία: - + Torrent Files Αρχεία Τορεντ @@ -1885,16 +1885,16 @@ Copyright © 2006 από τον Christophe Dumez<br> qBittorrent - - + + qBittorrent qBittorrent - - - - + + + + Are you sure? -- qBittorrent Είστε σίγουρος? -- qBittorrent @@ -2172,7 +2172,7 @@ Please close the other one first. Είστε σίγουρος/η οτι θέλετε να διαγράψετε το(α) επιλεγμένο(α) αντικείμενο(α) από τη λίστα κατεβάσματος και το σκληρό δίσκο? - + Download finished Το κατέβασμα τελείωσε @@ -2186,15 +2186,15 @@ Please close the other one first. Μηχανή Αναζήτησης - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Κατάσταση Σύνδεσης: @@ -2257,15 +2257,15 @@ Please close the other one first. Εκκινήθηκε το qBittorrent %1. - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Ταχύτητα Κατεβάσματος: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Ταχύτητα Ανεβάσματος: %1 KiB/s @@ -2286,7 +2286,7 @@ Please close the other one first. Αποτυχία λειτουργίας - + Are you sure you want to quit? Είστε σίγουρος/η οτι θέλετε να κλείσετε την εφαρμογή? @@ -2349,14 +2349,14 @@ Please close the other one first. Το '%1' ξανάρχισε. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. Έχει τελειώσει το κατέβασμα του '%1'. - + I/O Error i.e: Input/Output Error I/O Λάθος @@ -2372,12 +2372,12 @@ Please close the other one first. Ένα σφάλμα προέκυψε (δίσκος πλήρης?), το '%1' είναι σε παύση. - + Connection Status: Κατάσταση Σύνδεσης: - + Online Online @@ -2413,23 +2413,23 @@ Please close the other one first. Κατέβασμα του '%1', παρακαλώ περιμένετε... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Ένα σφάλμα προέκυψε (δίσκος πλήρης?), το '%1' είναι σε παύση. - + Search Εύρεση - + RSS RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2447,13 +2447,13 @@ Please close the other one first. Υποστήριξη DHT [ΝΑΙ], θύρα: %1 - - + + DHT support [OFF] Υποστήριξη DHT [ΟΧΙ] - + PeX support [ON] Υποστήριξη PeX [ΝΑΙ] @@ -2462,25 +2462,25 @@ Please close the other one first. Υποστήριξη PeX [ΟΧΙ] - + The download list is not empty. Are you sure you want to quit qBittorrent? Η λίστα κατεβάσματος δεν είναι άδεια. Σίγουρα θέλετε να κλείσετε το qBittorrent? - - + + Downloads Κατέβασματα - + Are you sure you want to delete the selected item(s) in finished list? Είστε σίγουρος οτι θέλετε να διαγράψετε το(α) επιλεγμλένα αντικείμενο(α) από την λίστα των ολοκληρωμένων? - + UPnP support [ON] Υποστήριξη UPnP [ΝΑΙ] @@ -2489,17 +2489,17 @@ Are you sure you want to quit qBittorrent? Προσοχή, η διακίνηση υλικού προστατευόμενου από πνευματικά δικαιώματα χωρίς άδεια είναι παράνομη. - + Encryption support [ON] Υποστήριξη κρυπτογράφησης [ΝΑΙ] - + Encryption support [FORCED] Υποστήριξη κρυπτογράφησης [ΑΝΑΓΚΑΣΤΙΚΑ] - + Encryption support [OFF] Υποστήριξη κρυπτογράφησης [ΟΧΙ] @@ -2513,13 +2513,13 @@ Are you sure you want to quit qBittorrent? Αναλογία - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -2530,18 +2530,18 @@ Are you sure you want to quit qBittorrent? Alt+3, Ctrl+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Σφάλμα κατεβάσματος url - + Couldn't download file at url: %1, reason: %2. Αδύνατο κατέβασμα αρχείου από το url: %1,αιτία: %2. @@ -2550,12 +2550,12 @@ Are you sure you want to quit qBittorrent? Γρήγορη συνέχεια κατεβάσματος αρχείων απορρίφθηκε για το τορεντ %1, επανέλεγχος... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Είστε σίγουρος οτι θέλετε να διαγράψετε το(α) επιλεγμλένα αντικείμενο(α) από την λίστα κατεβάσματος και από το σκληρό δίσκο? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Είστε σίγουρος οτι θέλετε να διαγράψετε το(α) επιλεγμλένα αντικείμενο(α) από το σκληρό δίσκο? @@ -2569,50 +2569,50 @@ Are you sure you want to quit qBittorrent? Αποτυχία ελέγχου url μοιράσματος για το url: %1, μήνυμα: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 Το qBittorrent χρησιμοποιεί τη θύρα: TCP/%1 - + UPnP support [OFF] Υποστήριξη UPnP [ΟΧΙ] - + NAT-PMP support [ON] Υποστήριξη NAT-PMP [NAI] - + NAT-PMP support [OFF] Υποστήριξη NAT-PMP [OXI] - + DHT support [ON], port: UDP/%1 Υποστήριξη DHT [NAI], θύρα: UDP/%1 - + Local Peer Discovery [ON] Ανακάλυψη Τοπικών Συνδέσεων [ΝΑΙ] - + Local Peer Discovery support [OFF] Ανακάλυψη Τοπικών Συνδέσεων [ΟΧΙ] @@ -2622,48 +2622,48 @@ Are you sure you want to quit qBittorrent? Το '%1' αφαιρέθηκε επειδή η αναλογία του έφτασε τη μέγιστη τιμή που θέσατε. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s DL: %1 KiB/s - - + + UP: %1 KiB/s UP: %1 KiB/s - - + + Ratio: %1 Αναλογία: %1 - - + + DHT: %1 nodes DHT: %1 κόμβοι - - + + No direct connections. This may indicate network configuration problems. Χωρίς απευθείας συνδέσεις. Αυτό μπορεί να οφείλεται σε προβλήματα ρυθμίσεων δικτύου. - + Uploads Ανεβάσματα - + Options were saved successfully. Οι επιλογές αποθηκεύτηκαν επιτυχώς. @@ -3400,12 +3400,12 @@ p, li { white-space: pre-wrap; } Μηχανή αναζήτησης - + Empty search pattern Κενό πρότυπο εύρεσης - + Please type a search pattern first Παρακαλώ εισάγετε ένα σχέδιο εύρεσης πρώτα @@ -3418,13 +3418,13 @@ p, li { white-space: pre-wrap; } Πρέπει να επιλέξετε τουλάχιστο μια μηχανή αναζήτησης. - - + + Results Αποτελέσματα - + Searching... Αναζήτηση... @@ -3467,58 +3467,58 @@ Changelog: Το plugin αναζήτησης είναι ήδη αναβαθμισμένο. - + Cut Αποκοπή - + Copy Αντιγραφή - + Paste Επικόλληση - + Clear field Εκκαθάριση πεδίου - + Clear completion history Εκκαθάριση ιστορικού φόρμας - + Search Engine Μηχανή Αναζήτησης - - + + Search has finished Η αναζήτηση τελείωσε - + An error occured during search... Σφάλμα κατά την εύρεση... - + Search aborted Αναζήτηση διεκόπη - + Search returned no results Η αναζήτηση δεν έφερε αποτελέσματα - + Results i.e: Search results Αποτελέσματα @@ -3532,8 +3532,8 @@ Changelog: Αδύνατο κατέβασμα plugin αναζήτησης από το url: %1,αιτία: %2. - - + + Unknown Άγνωστο @@ -3711,6 +3711,11 @@ Changelog: Download in sequential order (slower but good for previewing) Κατέβασμα σε συνεχόμενη σειρά (πιο αργό αλλά καλό για preview) + + + Skip file checking and start seeding immediately + + File name Όνομα αρχείου @@ -3728,17 +3733,17 @@ Changelog: Κατέβασμα στη σωστή σειρά (πιο αργό αλλα καλό για προεπισκόπηση) - + Add to download list in paused state Προσθήκη στη λίστα κατεβάσματος σε κατάσταση παύσης - + Add Προσθήκη - + Cancel Ακύρωση @@ -3755,22 +3760,22 @@ Changelog: Επιλογή - + Ignored Αγνοήθηκε - + Normal Κανονικό - + High Υψηλό - + Maximum Μέγιστο @@ -3844,18 +3849,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. Το %1 έφτασε στη μέγιστη αναλογία που θέσατε. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' διαγράφηκε για πάντα. - + '%1' was removed. 'xxx.avi' was removed. Το '%1' αφαιρέθηκε. @@ -3871,96 +3876,96 @@ Changelog: Το '%1' ξανάρχισε. - + '%1' is not a valid magnet URI. Το '%1' δεν είναι ένα έγκυρο magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. Το '%1' είναι ήδη στη λίστα κατεβάσματος. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) Το '%1' ξανάρχισε. (γρήγορη επανασύνδεση) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. Το '%1' προστέθηκε στη λίστα κατεβάσματος. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Αδύνατο να αποκωδικοποιηθεί το αρχείο τορεντ: '%1' - + This file is either corrupted or this isn't a torrent. Το αρχείο είτε είναι κατεστραμμένο, ή δεν ειναι τορεντ. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>μπλοκαρίστηκε εξαιτίας του IP φίλτρου</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>απαγορεύτηκε εξαιτίας κατεστραμμένων κομματιών</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Προγραμματισμένο κατέβασμα του αρχείου %1,που βρίσκεται στο τόρεντ %2 - + Unable to decode %1 torrent file. Αδύνατο να αποκωδικοποιηθεί το αρχείο τόρεντ %1. - + Couldn't listen on any of the given ports. Δεν "ακροάστηκα" καμία σπό τις δωσμένες θύρες. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Σφάλμα χαρτογράφησης θυρών, μήνυμα: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Χαρτογράφηση θυρών επιτυχής, μήνυμα: %1 - + Fast resume data was rejected for torrent %1, checking again... Γρήγορη συνέχεια κατεβάσματος αρχείων απορρίφθηκε για το τορεντ %1, επανέλεγχος... - + Url seed lookup failed for url: %1, message: %2 Αποτυχία ελέγχου url μοιράσματος για το url: %1, μήνυμα: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Κατέβασμα του '%1', παρακαλώ περιμένετε... @@ -4293,6 +4298,125 @@ Changelog: Παρακαλώ εισάγετε τουλάχιστο ένα URL. + + downloadThread + + + + I/O Error + + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Άγνωστο σφάλμα + + downloading @@ -4518,12 +4642,12 @@ Changelog: Λάθος - + Uninstall warning Προειδοποίηση απεγκατάστασης - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4532,7 +4656,7 @@ However, those plugins were disabled. Ωστόσο, αυτά τα plugin απενεργοποιήθηκαν. - + Uninstall success Επιτυχής απεγκατάσταση @@ -4541,62 +4665,62 @@ However, those plugins were disabled. Όλα τα επιλεγμένα plugin απεγκαταστήθηκαν επιτυχώς - + Select search plugins Επιλέξτε plugin αναζήτησης - - + + qBittorrent search plugins plugin αναζήτησης του qBittorrent - - - - - - - - + + + + + + + + Search plugin install Εγκατάσταση plugin αναζήτησης - - - + + + Yes Ναι - - - - + + + + No Όχι - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Μια πιο πρόσφατη έκδοση plugin αναζήτησης %1 έχει ήδη εγκατασταθεί. @@ -4612,17 +4736,17 @@ However, those plugins were disabled. Το plugin αναζήτησης %1 εγκαταστήθηκε επιτυχώς. - - - - - + + + + + Search plugin update Αναβάθμιση plugin αναζήτησης - - + + Sorry, update server is temporarily unavailable. Λυπούμαστε, ο εξυπηρετητής αναβάθμισης δεν είναι προσωρινά διαθέσιμος. @@ -4637,60 +4761,60 @@ However, those plugins were disabled. Λυπούμαστε, η αναβάθμιση του plugin αναζήτησης %1 απέτυχε. - + All your plugins are already up to date. Όλα τα plugin σας είναι ήδη αναβαθμισμένα. - + All selected plugins were uninstalled successfully Όλα τα επιλεγμένα plugin απεγκαταστάθηκαν επιτυχώς - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine Το plugin αναζήτησης %1 δεν ήταν δυνατό να αναβαθμιστεί, παραμένει η παλιά έκδοση. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine Το plugin αναζήτησης %1 δεν ήταν δυνατό να εγκατασταθεί. - + %1 search engine plugin was successfully updated. %1 is the name of the search engine Το plugin αναζήτησης %1 αναβαθμίστηκε επιτυχώς. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine Το plugin αναζήτησης %1 εγκαταστάθηκε επιτυχώς. - + Search engine plugin archive could not be read. Το αρχείο του plugin αναζήτησης δεν ήταν δυνατό να διαβαστεί. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Λυπούμαστε, η εγκατάσταση του plugin αναζήτησης %1 απέτυχε. - + New search engine plugin URL Νέο URL plugin αναζήτησης - + URL: URL: @@ -5601,29 +5725,24 @@ However, those plugins were disabled. subDownloadThread - Host is unreachable - Ο φορέας δεν βρέθηκε + Ο φορέας δεν βρέθηκε - File was not found (404) - Το αρχείο δε βρέθηκε (404) + Το αρχείο δε βρέθηκε (404) - Connection was denied - Άρνηση σύνδεσης + Άρνηση σύνδεσης - Url is invalid - Άκυρο url + Άκυρο url - I/O Error - Σφάλμα I/O + Σφάλμα I/O Connection forbidden (403) @@ -5638,29 +5757,24 @@ However, those plugins were disabled. Το περιεχόμενο έχει μετακινηθεί (301) - Connection failure - Σφάλμα σύνδεσης + Σφάλμα σύνδεσης - Connection was timed out - Τέλος χρόνου σύνδεσης + Τέλος χρόνου σύνδεσης - Incorrect network interface - Λανθασμένο interface δικτύου + Λανθασμένο interface δικτύου - Unknown error - Άγνωστο σφάλμα + Άγνωστο σφάλμα - Could not resolve proxy - Δεν μπόρεσε να βρεθεί το proxy + Δεν μπόρεσε να βρεθεί το proxy @@ -5726,12 +5840,12 @@ However, those plugins were disabled. Δεν μπόρεσε να δημιουργηθεί η διαδρομή αποθήκευσης - + Invalid file selection Άκυρη επιλογή αρχείου - + You must select at least one file in the torrent Πρέπει να επιλέξετε τουλάχιστο ένα αρχείο του τορεντ diff --git a/src/lang/qbittorrent_en.ts b/src/lang/qbittorrent_en.ts index cee2bfaf1..74794e385 100644 --- a/src/lang/qbittorrent_en.ts +++ b/src/lang/qbittorrent_en.ts @@ -1092,227 +1092,227 @@ p, li { white-space: pre-wrap; } GUI - + Open Torrent Files - - - - - + + + + + &Yes - - - - - + + + + + &No - + Are you sure you want to delete the selected item(s) in download list? - + Torrent Files - - - - + + + + Are you sure? -- qBittorrent - + Download finished - - + + qBittorrent %1 e.g: qBittorrent v0.x - - + + Connection status: - - + + qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s - + Are you sure you want to quit? - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. - + I/O Error i.e: Input/Output Error - + Connection Status: - + Online - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. - + Search - + RSS - - + + DHT support [OFF] - + PeX support [ON] - + The download list is not empty. Are you sure you want to quit qBittorrent? - - + + Downloads - + Finished - + Are you sure you want to delete the selected item(s) in finished list? - + UPnP support [ON] - + Encryption support [ON] - + Encryption support [FORCED] - + Encryption support [OFF] - + Alt+1 shortcut to switch to first tab - + Alt+2 shortcut to switch to second tab - + Alt+4 shortcut to switch to fourth tab - + Url download error - + Couldn't download file at url: %1, reason: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? - + Alt+3 shortcut to switch to third tab - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -1320,90 +1320,90 @@ Are you sure you want to quit qBittorrent? - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + UPnP support [OFF] - + NAT-PMP support [ON] - + NAT-PMP support [OFF] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] - + Local Peer Discovery support [OFF] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + Options were saved successfully. @@ -1875,86 +1875,86 @@ p, li { white-space: pre-wrap; } SearchEngine - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Empty search pattern - + Please type a search pattern first - - + + Results - + Searching... - + Search Engine - - + + Search has finished - + An error occured during search... - + Search aborted - + Search returned no results - + Results i.e: Search results - - + + Unknown @@ -2067,36 +2067,41 @@ p, li { white-space: pre-wrap; } + Skip file checking and start seeding immediately + + + + Add to download list in paused state - + Add - + Cancel - + Ignored - + Normal - + High - + Maximum @@ -2166,113 +2171,113 @@ p, li { white-space: pre-wrap; } bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. - + '%1' was removed. 'xxx.avi' was removed. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' - + This file is either corrupted or this isn't a torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. - + UPnP/NAT-PMP: Port mapping failure, message: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 - + Fast resume data was rejected for torrent %1, checking again... - + Url seed lookup failed for url: %1, message: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... @@ -2505,6 +2510,125 @@ p, li { white-space: pre-wrap; } + + downloadThread + + + + I/O Error + + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + + + downloading @@ -2694,153 +2818,153 @@ p, li { white-space: pre-wrap; } engineSelectDlg - + Uninstall warning - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. - + Uninstall success - + Select search plugins - - + + qBittorrent search plugins - - - - - - - - + + + + + + + + Search plugin install - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine - - - - - + + + + + Search plugin update - - + + Sorry, update server is temporarily unavailable. - + All your plugins are already up to date. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine - + All selected plugins were uninstalled successfully - + %1 search engine plugin was successfully updated. %1 is the name of the search engine - + %1 search engine plugin was successfully installed. %1 is the name of the search engine - + Search engine plugin archive could not be read. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine - + New search engine plugin URL - + URL: @@ -3408,59 +3532,6 @@ However, those plugins were disabled. - - subDownloadThread - - - Host is unreachable - - - - - File was not found (404) - - - - - Connection was denied - - - - - Url is invalid - - - - - Connection failure - - - - - Connection was timed out - - - - - Incorrect network interface - - - - - Unknown error - - - - - I/O Error - - - - - Could not resolve proxy - - - torrentAdditionDialog @@ -3508,12 +3579,12 @@ However, those plugins were disabled. - + Invalid file selection - + You must select at least one file in the torrent diff --git a/src/lang/qbittorrent_es.qm b/src/lang/qbittorrent_es.qm index f85243dfc..56e3cafa4 100644 Binary files a/src/lang/qbittorrent_es.qm and b/src/lang/qbittorrent_es.qm differ diff --git a/src/lang/qbittorrent_es.ts b/src/lang/qbittorrent_es.ts index 91fc6e001..7f58c5dbe 100644 --- a/src/lang/qbittorrent_es.ts +++ b/src/lang/qbittorrent_es.ts @@ -1670,12 +1670,12 @@ p, li { white-space: pre-wrap; } No se pudo crear el directorio: - + Open Torrent Files Abrir archivos Torrent - + Torrent Files Archivos Torrent @@ -1717,20 +1717,20 @@ p, li { white-space: pre-wrap; } ¿Seguro que quieres eliminar todos los archivos de la lista de descargas? - - - - - + + + + + &Yes &Sí - - - - - + + + + + &No &No @@ -1739,7 +1739,7 @@ p, li { white-space: pre-wrap; } Lista de descargas borrada. - + Are you sure you want to delete the selected item(s) in download list? ¿Seguro que quieres borrar el o los elemento(s) seleccionados de la lista de descargas? @@ -1775,7 +1775,7 @@ p, li { white-space: pre-wrap; } continuada. - + Finished Terminada @@ -1819,16 +1819,16 @@ p, li { white-space: pre-wrap; } qBittorrent - - + + qBittorrent qBittorrent - - - - + + + + Are you sure? -- qBittorrent ¿Estás seguro? -- qBittorrent @@ -2086,7 +2086,7 @@ Por favor cierra el otro antes. ¿Seguro que deseas borrar el o los elementos seleccionados de la lista de descargas y del disco duro? - + Download finished Descarga terminada @@ -2100,15 +2100,15 @@ Por favor cierra el otro antes. Motor de Búsqueda - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Estado de la conexión: @@ -2171,15 +2171,15 @@ Por favor cierra el otro antes. qBittorrent %1 iniciado. - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Velocidad de Descarga: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Velocidad de subida: %1 KiB/s @@ -2200,7 +2200,7 @@ Por favor cierra el otro antes. Detenida - + Are you sure you want to quit? ¿Estás seguro de que deseas salir? @@ -2263,14 +2263,14 @@ Por favor cierra el otro antes. '%1' reiniciado. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 ha terminado de descargarse. - + I/O Error i.e: Input/Output Error Error de Entrada/Salida @@ -2286,12 +2286,12 @@ Por favor cierra el otro antes. Un error ocurrió (¿disco lleno?), '%1' pausado. - + Connection Status: Estado de la conexión: - + Online En línea @@ -2327,23 +2327,23 @@ Por favor cierra el otro antes. Descargando '%1', por favor espera... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Un error ocurrió (¿disco lleno?), '%1' pausado. - + Search Buscar - + RSS RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2360,13 +2360,13 @@ Por favor cierra el otro antes. Soporte para DHT [encendido], puerto: %1 - - + + DHT support [OFF] Soporte para DHT [apagado] - + PeX support [ON] Soporte para PeX [encendido] @@ -2375,31 +2375,31 @@ Por favor cierra el otro antes. Soporte para PeX [apagado] - + The download list is not empty. Are you sure you want to quit qBittorrent? La lista de descargas no está vacía. ¿En verdad deseas salir de qBittorrent? - - + + Downloads Descargas - + Are you sure you want to delete the selected item(s) in finished list? ¿Estás seguro de que deseas borrar los íconos seleccionados en la lista de terminados? - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + UPnP support [ON] Soporte para UPnP [encendido] @@ -2408,17 +2408,17 @@ Are you sure you want to quit qBittorrent? Ten cuidado, compartir material protegido sin permiso es ilegal. - + Encryption support [ON] Soporte para encriptado [encendido] - + Encryption support [FORCED] Soporte para encriptado [forzado] - + Encryption support [OFF] Sopote para encriptado [apagado] @@ -2432,13 +2432,13 @@ Are you sure you want to quit qBittorrent? Radio - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -2449,18 +2449,18 @@ Are you sure you want to quit qBittorrent? Alt+3, Ctrl+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Error de descarga de Url - + Couldn't download file at url: %1, reason: %2. No se pudo descargar el archivo en la url: %1, razón: %2. @@ -2469,12 +2469,12 @@ Are you sure you want to quit qBittorrent? Se negaron los datos para reinicio rápido del torrent: %1, verificando de nuevo... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? ¿Estás seguro de que deseas borrar los elementos seleccionados de la lista de descargas y el disco duro? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? ¿Estás seguro de que deseas borrar los elementos selccionados de la lista de terminados y el disco duro? @@ -2488,13 +2488,13 @@ Are you sure you want to quit qBittorrent? Falló la búsqueda de semilla por Url para la url: %1, mensaje: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl + F @@ -2505,78 +2505,78 @@ Are you sure you want to quit qBittorrent? '%1' fue eliminado porque su radio llegó al valor máximo que estableciste. - + UPnP support [OFF] Soporte para UPnP [Apagado] - + NAT-PMP support [ON] Soporte para NAT-PMP [Encendido] - + NAT-PMP support [OFF] Soporte para NAT-PMP[Apagado] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] Descubrimiento local de Peers [Encendido] - + Local Peer Discovery support [OFF] Soporte para descubrimiento local de Peers [Apagado] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + Options were saved successfully. Opciones guardadas exitosamente. @@ -3304,12 +3304,12 @@ p, li { white-space: pre-wrap; } Motor de búsqueda - + Empty search pattern Patrón de búsqueda vacío - + Please type a search pattern first Por favor escriba un patrón de búsqueda primero @@ -3322,13 +3322,13 @@ p, li { white-space: pre-wrap; } Debes seleccionar al menos un motor de búsqueda. - - + + Results Resultados - + Searching... Buscando... @@ -3371,58 +3371,58 @@ Log: Tu plugin de búsqueda vuelve a estar actualizado. - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Search Engine Motor de Búsqueda - - + + Search has finished Búsqueda terminada - + An error occured during search... Ocurrió un error durante la búsqueda... - + Search aborted Búsqueda abortada - + Search returned no results La búsqueda no devolvió resultados - + Results i.e: Search results Resultados @@ -3436,8 +3436,8 @@ Log: No se pudo descargar la actualización del plugin de búsqueda en la url: %1, razón: %2. - - + + Unknown Desconocido @@ -3615,6 +3615,11 @@ Log: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name Nombre del archivo @@ -3632,17 +3637,17 @@ Log: Descargar por orden (mas lento pero mejor para previsualizar) - + Add to download list in paused state Agregar a la lista de descargas en estado de pausa - + Add Agregar - + Cancel Cancelar @@ -3659,22 +3664,22 @@ Log: Seleccionar - + Ignored Ignorado - + Normal Normal - + High Alta - + Maximum Máxima @@ -3744,18 +3749,18 @@ Log: bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' fue borrado permanentemente. - + '%1' was removed. 'xxx.avi' was removed. '%1' fue removido. @@ -3771,96 +3776,96 @@ Log: '%1' reiniciado. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' ya está en la lista de descargas. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' reiniciado. (reinicio rápido) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' agregado a la lista de descargas. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Imposible decodificar el archivo torrent: '%1' - + This file is either corrupted or this isn't a torrent. Este archivo puede estar corrupto, o no ser un torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. No se pudo escuchar en ninguno de los puertos brindados. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Falló el mapeo del puerto, mensaje: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Mapeo del puerto exitoso, mensaje: %1 - + Fast resume data was rejected for torrent %1, checking again... Se negaron los datos para reinicio rápido del torrent: %1, verificando de nuevo... - + Url seed lookup failed for url: %1, message: %2 Falló la búsqueda de semilla por Url para la url: %1, mensaje: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Descargando '%1', por favor espera... @@ -4193,6 +4198,125 @@ Log: Por favor escribe al menos una URL. + + downloadThread + + + + I/O Error + + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Error desconocido + + downloading @@ -4418,12 +4542,12 @@ Log: Falso - + Uninstall warning Alerta de desinstalación - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4432,83 +4556,83 @@ Solamente los que has agregado por tí mismo pueden ser desinstalados. De cualquier forma, esos plugins fueron deshabilitados. - + Uninstall success Éxito de desinstalación - + Select search plugins Selecciona los plugins de búsqueda - - + + qBittorrent search plugins Plugins de búsqueda de qBittorrent - - - - - - - - + + + + + + + + Search plugin install Instalar plugin de búsqueda - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Una versión más reciente del plugin de motor de búsqueda %1 ya está instalada. - - - - - + + + + + Search plugin update Actualización del plugin de búsqueda - - + + Sorry, update server is temporarily unavailable. Lo siento, el servidor de actualización esta temporalmente no disponible. @@ -4518,37 +4642,37 @@ De cualquier forma, esos plugins fueron deshabilitados. Lo lamento, la actualización del plugin de búsqueda %1 ha fallado. - + All your plugins are already up to date. Todos tus plugins ya están actualizados. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine El plugin de motor de búsqueda %1 no pudo ser actualizado, manteniendo la versión antigua. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine El plugin de motor de búsqueda %1 no pudo ser instalado. - + All selected plugins were uninstalled successfully Todos los plugins seleccionados fueron instalados exitosamente - + %1 search engine plugin was successfully updated. %1 is the name of the search engine El plugin de motor de búsqueda %1 fue actualizado exitosamente. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine El plugin de motor de búsqueda %1 fue instalado exitosamente. @@ -4559,24 +4683,24 @@ De cualquier forma, esos plugins fueron deshabilitados. El plugin de búsqueda %1 fué actualizado exitosamente. - + Search engine plugin archive could not be read. El archivo de plugin de motor de búsqueda no pudo ser leído. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Lo lamento, la instalación del plugin de búsqueda %1 ha fallado. - + New search engine plugin URL URL del nuevo plugin de motor de búsqueda - + URL: URL: @@ -5515,29 +5639,20 @@ De cualquier forma, esos plugins fueron deshabilitados. subDownloadThread - Host is unreachable - El host no se puede alcanzar + El host no se puede alcanzar - File was not found (404) - El archivo no fue encontrado (404) + El archivo no fue encontrado (404) - Connection was denied - La conexión fue negada + La conexión fue negada - Url is invalid - La url es inválida - - - - I/O Error - + La url es inválida Connection forbidden (403) @@ -5552,29 +5667,24 @@ De cualquier forma, esos plugins fueron deshabilitados. El contenido ha sido cambiado de lugar (301) - Connection failure - Falla de conexión + Falla de conexión - Connection was timed out - El tiempo de espera para la conexión se ha agotado + El tiempo de espera para la conexión se ha agotado - Incorrect network interface - Interfaz de red incorrecta + Interfaz de red incorrecta - Unknown error - Error desconocido + Error desconocido - Could not resolve proxy - No se pudo resolver el proxy + No se pudo resolver el proxy @@ -5640,12 +5750,12 @@ De cualquier forma, esos plugins fueron deshabilitados. No se pudo crear la ruta de guardado - + Invalid file selection Selección de archivo inválida - + You must select at least one file in the torrent Debes seleccionar al menos un arcihvo en el torrent diff --git a/src/lang/qbittorrent_fi.qm b/src/lang/qbittorrent_fi.qm index 0252a0b99..fdc647282 100644 Binary files a/src/lang/qbittorrent_fi.qm and b/src/lang/qbittorrent_fi.qm differ diff --git a/src/lang/qbittorrent_fi.ts b/src/lang/qbittorrent_fi.ts index 381189302..00a33c2b1 100644 --- a/src/lang/qbittorrent_fi.ts +++ b/src/lang/qbittorrent_fi.ts @@ -1525,10 +1525,10 @@ p, li { white-space: pre-wrap; } Haun aika tapahtui virhe... - - - - + + + + Are you sure? -- qBittorrent Oletko varma? — qBittorrent @@ -1537,7 +1537,7 @@ p, li { white-space: pre-wrap; } Haluatko varmasti poistaa kaikki tiedostot latauslistasta? - + Are you sure you want to delete the selected item(s) in download list? Haluatko varmasti poistaa valitut tiedostot latauslistasta? @@ -1599,7 +1599,7 @@ p, li { white-space: pre-wrap; } Latausnopeus - + Download finished Lataus valmistui @@ -1625,7 +1625,7 @@ p, li { white-space: pre-wrap; } ETA - + Finished Valmis @@ -1655,11 +1655,11 @@ p, li { white-space: pre-wrap; } Nimi - - - - - + + + + + &No &Ei @@ -1672,7 +1672,7 @@ p, li { white-space: pre-wrap; } Hakupalvelua ei ole valittu - + Open Torrent Files Avaa torrent-tiedostoja @@ -1802,7 +1802,7 @@ Uutta esikatselua ei voi aloittaa. Tiedosto ei ole kelvollinen torrent-tiedosto. - + Torrent Files Torrent-tiedostot @@ -1823,11 +1823,11 @@ Uutta esikatselua ei voi aloittaa. Lähetysnopeus: - - - - - + + + + + &Yes &Kyllä @@ -1844,15 +1844,15 @@ Uutta esikatselua ei voi aloittaa. I/O-virhe - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Yhteyden tila: @@ -1905,21 +1905,21 @@ Uutta esikatselua ei voi aloittaa. Lataajia - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Latausnopeus: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Lähetysnopeus: %1 KiB/s @@ -1940,7 +1940,7 @@ Uutta esikatselua ei voi aloittaa. Seisahtunut - + Are you sure you want to quit? Haluatko varmasti poistua? @@ -1978,14 +1978,14 @@ Uutta esikatselua ei voi aloittaa. Torrentin ”%1” lataamista jatkettiin. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. Lataus ”%1” tuli valmiiksi. - + I/O Error i.e: Input/Output Error I/O-virhe @@ -1996,12 +1996,12 @@ Uutta esikatselua ei voi aloittaa. Tiedostoon %1 kirjoittaminen tai lukeminen epäonnistui. Levy saattaa olla täynnä. Lataus pysäytettiin. - + Connection Status: Yhteyden tila: - + Online Ei verkkoyhteyttä @@ -2020,18 +2020,18 @@ Uutta esikatselua ei voi aloittaa. Tulokset - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Tapahtui virhe (levy on täynnä?). Lataus ”%1” pysäytettiin. - + Search Etsi - + RSS RSS @@ -2045,13 +2045,13 @@ Uutta esikatselua ei voi aloittaa. DHT-tuki [PÄÄLLÄ] portissa %1 - - + + DHT support [OFF] DHT-tuki [EI PÄÄLLÄ] - + PeX support [ON] PeX-tuki [PÄÄLLÄ] @@ -2060,51 +2060,51 @@ Uutta esikatselua ei voi aloittaa. PeX-tuki [EI PÄÄLLÄ] - + The download list is not empty. Are you sure you want to quit qBittorrent? Latauslista ei ole tyhjä. Haluatko varmasti lopettaa? - - + + Downloads Lataukset - + Are you sure you want to delete the selected item(s) in finished list? Haluatko poistaa valitut kohteet listalta? - + UPnP support [ON] UPnP-tuki [PÄÄLLÄ] - + Encryption support [ON] Salaus [KÄYTÖSSÄ] - + Encryption support [FORCED] Salaus [PAKOTETTU] - + Encryption support [OFF] Salaus [EI KÄYTÖSSÄ] - + Alt+1 shortcut to switch to first tab Alt+1 - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2113,34 +2113,34 @@ Haluatko varmasti lopettaa? Syy: %2 - + Alt+2 shortcut to switch to second tab Alt+2 - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Latausvirhe - + Couldn't download file at url: %1, reason: %2. Tiedoston lataaminen osoitteesta %1 epäonnistui: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Haluatko varmasti poistaa valitut tiedostot listalta ja kovalevyltä? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Haluatko varmasti poistaa valitut tiedostot listalta ja kovalevyltä? @@ -2150,50 +2150,50 @@ Haluatko varmasti lopettaa? ”%1” poistettiin pysyvästi. - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent käyttää porttia: TCP/%1 - + UPnP support [OFF] UPnP-tuki [EI PÄÄLLÄ] - + NAT-PMP support [ON] NAT-PMP-tuki [PÄÄLLÄ] - + NAT-PMP support [OFF] NAT-PMP-tuki [EI PÄÄLLÄ] - + DHT support [ON], port: UDP/%1 DHT-tuki [KÄYTÖSSÄ], portti: UDP/%1 - + Local Peer Discovery [ON] Paikallinen käyttäjien löytäminen [PÄÄLLÄ] - + Local Peer Discovery support [OFF] Paikallinen käyttäjien löytäminen [EI PÄÄLLÄ] @@ -2203,48 +2203,48 @@ Haluatko varmasti lopettaa? ”%1% poistettiin, koska sen jakosuhde saavutti asettamasi enimmäisarvon. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (↓ %2 KiB/s | ↑ %3 KiB/s) - - + + DL: %1 KiB/s ↓%1 KiB/s - - + + UP: %1 KiB/s ↑%1 KiB/s - - + + Ratio: %1 Suhde: %1 - - + + DHT: %1 nodes DHT: %1 solmua - - + + No direct connections. This may indicate network configuration problems. Ei suoria yhteyksiä. Tämä voi olla merkki verkko-ongelmista. - + Uploads Lähetykset - + Options were saved successfully. Asetukset tallennettiin. @@ -2905,12 +2905,12 @@ p, li { white-space: pre-wrap; } Hakupalvelu - + Empty search pattern Tyhjä hakulauseke - + Please type a search pattern first Kirjoita ensin hakulauseke @@ -2919,13 +2919,13 @@ p, li { white-space: pre-wrap; } Valitse ensin ainakin yksi hakupalvelu. - - + + Results Tulokset - + Searching... Etsitään... @@ -2960,65 +2960,65 @@ Muutoshistoria: Hakuliitännäinen on ajan tasalla. - + Cut Leikkaa - + Copy Kopioi - + Paste Liitä - + Clear field Tyhjennä kenttä - + Clear completion history Tyhjennä hakuhistoria - + Search Engine Hakupalvelu - - + + Search has finished Haku on päättynyt - + An error occured during search... Haun aikana tapahtui virhe... - + Search aborted Haku keskeytetty - + Search returned no results Haku ei palauttanut tuloksia - + Results i.e: Search results Tulokset - - + + Unknown Tuntematon @@ -3158,17 +3158,22 @@ Muutoshistoria: Lataa järjestyksessä (hitaampi, mutta mahdollistaa aikaisemman esikatselun) - + + Skip file checking and start seeding immediately + + + + Add Lisää - + Add to download list in paused state Lisää latauslistaan pysäytettynä - + Cancel Peru @@ -3212,22 +3217,22 @@ Muutoshistoria: Poista valinta - + Ignored Ei ladata - + Normal Normaali - + High Korkea - + Maximum Korkein @@ -3301,18 +3306,18 @@ Muutoshistoria: bittorrent - + %1 reached the maximum ratio you set. %1 on saavuttanut asetetun jakosuhdeluvun. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. ”%1” poistettiin pysyvästi. - + '%1' was removed. 'xxx.avi' was removed. ”%1” poistettiin. @@ -3328,96 +3333,96 @@ Muutoshistoria: Torrentin ”%1” lataamista jatkettiin. - + '%1' is not a valid magnet URI. ”%1” ei kelpaa magnet-URI:ksi. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. ”%1” on jo latauslistassa. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) Torrentin "%1” latausta jatkettiin. (nopea palautuminen) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. ”%1” lisättiin latauslistaan. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Viallinen torrent-tiedosto: ”%1” - + This file is either corrupted or this isn't a torrent. Tiedosto ei ole kelvollinen torrent-tiedosto. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <i>IP-suodatin on estänyt osoitteen</i> <font color='red'>%1</font> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>on estetty korruptuneiden osien takia</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Rekursiivinen tiedoston %1 lataus torrentissa %2 - + Unable to decode %1 torrent file. Torrent-tiedostoa %1 ei voitu tulkita. - + Couldn't listen on any of the given ports. Minkään annetun portin käyttäminen ei onnistunut. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: portin varaaminen epäonnistui: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: portin varaaminen onnistui: %1 - + Fast resume data was rejected for torrent %1, checking again... Nopean jatkamisen tiedot eivät kelpaa torrentille %1. Tarkistetaan uudestaan... - + Url seed lookup failed for url: %1, message: %2 Jakajien haku osoitteesta %1 epäonnistui: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Ladataa torrenttia ”%1”. Odota... @@ -3722,6 +3727,125 @@ Muutoshistoria: Anna vähintään yksi URL-osoite. + + downloadThread + + + + I/O Error + I/O-virhe + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Tuntematon virhe + + downloading @@ -3947,12 +4071,12 @@ Muutoshistoria: Ei - + Uninstall warning Poistovaroitus - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -3961,141 +4085,141 @@ However, those plugins were disabled. Kyseiset liitänäiset poistettiin kuitenkin käytöstä. - + Uninstall success Poisto onnistui - + Select search plugins Valitse hakuliitännäiset - - + + qBittorrent search plugins qBittorrentin hakuliitännäiset - - - - - - - - + + + + + + + + Search plugin install Hakuliitännäisen asennus - - - + + + Yes Kyllä - - - - + + + + No Ei - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Uudempi versio hakuliitännäisestä %1 on jo asennettu. - - - - - + + + + + Search plugin update Hakuliitännäisen päivitys - - + + Sorry, update server is temporarily unavailable. Päivityspalvelin ei ole tällä hetkellä saavutettavissa. - + All your plugins are already up to date. Kaikki liitännäiset ovat ajan tasalla. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine Hakuliitännäisen %1 päivitys epäonnistui. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine Hakuliitännäisen %1 asennus epäonnistui. - + All selected plugins were uninstalled successfully Kaikki valitut liitännäiset poistettiin - + %1 search engine plugin was successfully updated. %1 is the name of the search engine Hakuliitännäinen %1 päivitettiin. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine Hakuliitännäinen %1 asennettiin. - + Search engine plugin archive could not be read. Hakuliitännäisarkiston lukeminen epäonnistui. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Hakuliitännäisen %1 asennus epäonnistui. - + New search engine plugin URL Uusi hakukoneliitännäisen osoite - + URL: URL: @@ -4937,54 +5061,44 @@ Kyseiset liitänäiset poistettiin kuitenkin käytöstä. subDownloadThread - Host is unreachable - Kohdekone ei ole saavutettavissa + Kohdekone ei ole saavutettavissa - File was not found (404) - Tiedostoa ei löytynyt (404) + Tiedostoa ei löytynyt (404) - Connection was denied - Yhteys evättiin + Yhteys evättiin - Url is invalid - URL ei ole kelvollinen + URL ei ole kelvollinen - Connection failure - Yhteysvirhe + Yhteysvirhe - Connection was timed out - Yhteys aikakatkaistiin + Yhteys aikakatkaistiin - Incorrect network interface - Väärä verkkoliitäntä + Väärä verkkoliitäntä - Unknown error - Tuntematon virhe + Tuntematon virhe - I/O Error - I/O-virhe + I/O-virhe - Could not resolve proxy - Välityspalvelimen osoitteen selvittäminen epäonnistui + Välityspalvelimen osoitteen selvittäminen epäonnistui @@ -5010,7 +5124,7 @@ Kyseiset liitänäiset poistettiin kuitenkin käytöstä. Ei - + Invalid file selection Virheellinen tiedostovalinta @@ -5055,7 +5169,7 @@ Kyseiset liitänäiset poistettiin kuitenkin käytöstä. Torrent-tiedoston purkaminen ei onnistunut: - + You must select at least one file in the torrent Valitse ainakin yksi torrent-tiedosto diff --git a/src/lang/qbittorrent_fr.qm b/src/lang/qbittorrent_fr.qm index 4ad01e5dc..47d48cc80 100644 Binary files a/src/lang/qbittorrent_fr.qm and b/src/lang/qbittorrent_fr.qm differ diff --git a/src/lang/qbittorrent_fr.ts b/src/lang/qbittorrent_fr.ts index a973618a8..c67ac2c46 100644 --- a/src/lang/qbittorrent_fr.ts +++ b/src/lang/qbittorrent_fr.ts @@ -787,7 +787,7 @@ Copyright © 2006 par Christophe DUMEZ<br> Disable splash screen - + Désactiver l'écran de démarrage @@ -1725,7 +1725,7 @@ Copyright © 2006 par Christophe DUMEZ<br> Super seeding mode - + Mode de partage optimal @@ -1752,7 +1752,7 @@ Copyright © 2006 par Christophe DUMEZ<br> Impossible de trouver le dossier : ' - + Open Torrent Files Ouvrir fichiers torrent @@ -1781,10 +1781,10 @@ Copyright © 2006 par Christophe DUMEZ<br> Ce fichier est corrompu ou il ne s'agit pas d'un torrent. - - - - + + + + Are you sure? -- qBittorrent Etes vous sûr ? -- qBittorrent @@ -1793,25 +1793,25 @@ Copyright © 2006 par Christophe DUMEZ<br> Etes-vous sûr de vouloir enlever tous les fichiers de la liste de téléchargement ? - - - - - + + + + + &Yes &Oui - - - - - + + + + + &No &Non - + Are you sure you want to delete the selected item(s) in download list? Etes-vous sûr de vouloir enlever tous les fichiers sélectionnés de la liste de téléchargement ? @@ -1832,7 +1832,7 @@ Copyright © 2006 par Christophe DUMEZ<br> ko/s - + Finished Terminé @@ -1877,7 +1877,7 @@ Copyright © 2006 par Christophe DUMEZ<br> Impossible de créer le dossier : - + Torrent Files Fichiers Torrent @@ -2217,7 +2217,7 @@ Veuillez d'abord le quitter. Transferts - + Download finished Téléchargement terminé @@ -2239,15 +2239,15 @@ Veuillez d'abord le quitter. Etes-vous certain de vouloir supprimer les fichiers sélectionnés depuis la liste de téléchargement ainsi que le disque dur ? - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Statut de la connexion : @@ -2310,21 +2310,21 @@ Veuillez d'abord le quitter. qBittorrent %1 démarré. - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Vitesse DL : %1 Ko/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Vitesse UP : %1 Ko/s @@ -2345,7 +2345,7 @@ Veuillez d'abord le quitter. En attente - + Are you sure you want to quit? Etes vous certain de vouloir quitter ? @@ -2408,14 +2408,14 @@ Veuillez d'abord le quitter. '%1' a été relancé. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. Le téléchargement de %1 est terminé. - + I/O Error i.e: Input/Output Error Erreur E/S @@ -2431,12 +2431,12 @@ Veuillez d'abord le quitter. Une erreur s'est produite (disque plein ?), '%1' a été mis en pause. - + Connection Status: Etat de la connexion : - + Online Connecté @@ -2472,23 +2472,23 @@ Veuillez d'abord le quitter. Téléchargement de '%1', veuillez patienter... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Une erreur s'est produite (disque plein ?), '%1' a été mis en pause. - + Search Recherche - + RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2506,13 +2506,13 @@ Raison : %2 Support DHT [ON], port : %1 - - + + DHT support [OFF] Support DHT [OFF] - + PeX support [ON] Support PeX [ON] @@ -2521,15 +2521,15 @@ Raison : %2 Support PeX [OFF] - + The download list is not empty. Are you sure you want to quit qBittorrent? La liste de téléchargement n'est pas vide. Etes-vous certain de vouloir quitter qBittorrent ? - - + + Downloads Téléchargements @@ -2538,12 +2538,12 @@ Etes-vous certain de vouloir quitter qBittorrent ? Etes-vous certain de vouloir supprimer les torrents sélectionnés dans la liste de partage et sur le disque dur ? - + Are you sure you want to delete the selected item(s) in finished list? Etes-vous certain de vouloir supprimer les torrents sélectionnés de la liste de partage ? - + UPnP support [ON] Support UPnP [ON] @@ -2552,17 +2552,17 @@ Etes-vous certain de vouloir quitter qBittorrent ? Attention, partager des oeuvres sous copyright sans en avoir la permission est illégal. - + Encryption support [ON] Support cryptage [ON] - + Encryption support [FORCED] Support cryptage [Forcé] - + Encryption support [OFF] Support cryptage [OFF] @@ -2576,13 +2576,13 @@ Etes-vous certain de vouloir quitter qBittorrent ? Ratio - + Alt+1 shortcut to switch to first tab Alt+& - + Alt+2 shortcut to switch to second tab Alt+é @@ -2593,18 +2593,18 @@ Etes-vous certain de vouloir quitter qBittorrent ? Qt::CTRL+Qt::Key_F, Qt::Alt+Qt::Key_QuoteDbl - + Alt+4 shortcut to switch to fourth tab Alt+' - + Url download error Erreur téléchargement url - + Couldn't download file at url: %1, reason: %2. Impossible de télécharger le fichier à l'url : %1, raison : %2. @@ -2613,12 +2613,12 @@ Etes-vous certain de vouloir quitter qBittorrent ? Le relancement rapide a échoué pour le torrent %1, revérification... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Etes-vous certain de vouloir supprimer les fichiers sélectionnés depuis la liste de téléchargement ainsi que le disque dur ? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Etes-vous certain de vouloir supprimer les torrents sélectionnés dans la liste de partage et sur le disque dur ? @@ -2632,50 +2632,50 @@ Etes-vous certain de vouloir quitter qBittorrent ? Le contact de la source HTTP a échoué à l'url : %1, message : %2 - + Alt+3 shortcut to switch to third tab Alt+" - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent écoute sur le port : TCP/%1 - + UPnP support [OFF] Support UPNP [OFF] - + NAT-PMP support [ON] Support NAT-PMP [ON] - + NAT-PMP support [OFF] Support NAT-PMP [OFF] - + DHT support [ON], port: UDP/%1 Support DHT [ON], port : UDP/%1 - + Local Peer Discovery [ON] Découverte locale de sources [ON] - + Local Peer Discovery support [OFF] Découverte locale de sources [OFF] @@ -2685,48 +2685,48 @@ Etes-vous certain de vouloir quitter qBittorrent ? '%1' a été supprimé car son ratio a atteint la limite que vous avez fixée. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2Ko/s, UP: %3Ko/s) - - + + DL: %1 KiB/s R : %1 Ko/s - - + + UP: %1 KiB/s E : %1 Ko/s - - + + Ratio: %1 Ratio : %1 - - + + DHT: %1 nodes DHT : %1 noeuds - - + + No direct connections. This may indicate network configuration problems. Aucune connexion directe. Ceci peut être signe d'une mauvaise configuration réseau. - + Uploads Partages - + Options were saved successfully. Préférences sauvegardées avec succès. @@ -3474,12 +3474,12 @@ p, li { white-space: pre-wrap; } Moteur de recherche - + Empty search pattern Motif de recherche vide - + Please type a search pattern first Veuillez entrer un motif de recherche d'abord @@ -3492,13 +3492,13 @@ p, li { white-space: pre-wrap; } Vous devez sélectionner au moins un moteur de recherche. - - + + Results Résultats - + Searching... Recherche en cours... @@ -3541,58 +3541,58 @@ Changements: Votre greffon de recherche est déjà à jour. - + Cut Couper - + Copy Copier - + Paste Coller - + Clear field Vider le champ - + Clear completion history Vider l'historique d'autocomplétion - + Search Engine Moteur de recherche - - + + Search has finished Fin de la recherche - + An error occured during search... Une erreur s'est produite lors de la recherche... - + Search aborted La recherche a été interrompue - + Search returned no results La recherche n'a retourné aucun résultat - + Results i.e: Search results Résultats @@ -3606,8 +3606,8 @@ Changements: Impossible de télécharger la mise à jour du greffon de recherche à l'url : %1, raison : %2. - - + + Unknown Inconnu @@ -3781,6 +3781,11 @@ Changements: Download in sequential order (slower but good for previewing) Téléchargement séquentiel (plus lent mais facilite la prévisualisation) + + + Skip file checking and start seeding immediately + Ne pas vérifier les fichiers et commencer directement à partager + File name Nom @@ -3798,17 +3803,17 @@ Changements: Télécharger dans l'ordre (plus lent mais idéal pour la prévisualisation) - + Add to download list in paused state Ajouter à la liste de téléchargement en état de pause - + Add Ajouter - + Cancel Annuler @@ -3825,22 +3830,22 @@ Changements: Sélectionner - + Ignored Ignoré - + Normal Normale - + High Haute - + Maximum Maximale @@ -3914,18 +3919,18 @@ Changements: bittorrent - + %1 reached the maximum ratio you set. %1 a atteint le ratio maximum défini. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' a été supprimé de manière permanente. - + '%1' was removed. 'xxx.avi' was removed. '%1' a été supprimé. @@ -3941,96 +3946,96 @@ Changements: '%1' a été relancé. - + '%1' is not a valid magnet URI. '%1' n'est pas un lien magnet valide. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' est déjà présent dans la liste de téléchargement. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' a été relancé. (relancement rapide) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' a été ajouté à la liste de téléchargement. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Impossible de décoder le torrent : '%1' - + This file is either corrupted or this isn't a torrent. Ce fichier est corrompu ou il ne s'agit pas d'un torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>a été bloqué par votre filtrage IP</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>a été banni suite à l'envoi de données corrompues</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Téléchargement récursif du fichier %1 au sein du torrent %2 - + Unable to decode %1 torrent file. Impossible de décoder le torrent %1. - + Couldn't listen on any of the given ports. Impossible d'écouter sur les ports donnés. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP : Echec de mapping du port, message : %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP : Réussite du mapping de port, message : %1 - + Fast resume data was rejected for torrent %1, checking again... Le relancement rapide a échoué pour le torrent %1, revérification... - + Url seed lookup failed for url: %1, message: %2 Le contact de la source HTTP a échoué à l'url : %1, message : %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Téléchargement de '%1', veuillez patienter... @@ -4379,6 +4384,125 @@ Changements: Veuillez entrer au moins une URL. + + downloadThread + + + + I/O Error + Erreur E/S + + + + The remote host name was not found (invalid hostname) + Hôte distant introuvable (Nom d'hôte invalide) + + + + The operation was canceled + Opération annulée + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + Connexion fermée prématurément par le serveur distant, avant la réception complète de sa réponse + + + + The connection to the remote server timed out + Délai de connexion au serveur distant écoulée + + + + SSL/TLS handshake failed + Erreur poignée de main SSL/TLS + + + + The remote server refused the connection + Connexion refusée par le serveur distant + + + + The connection to the proxy server was refused + Connexion refusée par le serveur mandataire + + + + The proxy server closed the connection prematurely + Connexion fermée prématurément par le serveur mandataire + + + + The proxy host name was not found + Nom d'hôte du serveur mandataire introuvable + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + Délai de connexion au serveur mandataire écoulée + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + Echec d'authentification auprès du serveur mandataire + + + + The access to the remote content was denied (401) + Accès au contenu distant refusé (401) + + + + The operation requested on the remote content is not permitted + L'opération sur le contenu distant n'est pas permise + + + + The remote content was not found at the server (404) + Contenu distant introuvable (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + Echec d'authentification avec le serveur distant + + + + The Network Access API cannot honor the request because the protocol is not known + Protocole inconnu + + + + The requested operation is invalid for this protocol + Opération invalide pour ce protocole + + + + An unknown network-related error was detected + Erreur inconnue relative au réseau + + + + An unknown proxy-related error was detected + Erreur inconnue relative au serveur mandataire + + + + An unknown error related to the remote content was detected + Erreur inconnue relative au serveur distant + + + + A breakdown in protocol was detected + Erreur du protocole + + + + Unknown error + Erreur inconnue + + downloading @@ -4604,12 +4728,12 @@ Changements: Non - + Uninstall warning Désinstallation - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4618,7 +4742,7 @@ However, those plugins were disabled. Cependant, les greffons en question ont été désactivés. - + Uninstall success Désinstallation réussie @@ -4627,62 +4751,62 @@ Cependant, les greffons en question ont été désactivés. Tous les greffons sélectionnés ont été désinstallés avec succès - + Select search plugins Sélectionnez les greffons - - + + qBittorrent search plugins Greffons de recherche de qBittorrent - - - - - - - - + + + + + + + + Search plugin install Installation d'un greffon de recherche - - - + + + Yes Oui - - - - + + + + No Non - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Une version plus récente du greffon %1 est déjà installée. @@ -4698,17 +4822,17 @@ Cependant, les greffons en question ont été désactivés. Le greffon %1 a été installé avec succès. - - - - - + + + + + Search plugin update Mise à jour du greffon de recherche - - + + Sorry, update server is temporarily unavailable. Désolé, le serveur de mise à jour est temporairement indisponible. @@ -4723,37 +4847,37 @@ Cependant, les greffons en question ont été désactivés. Désolé, la mise à jour du greffon %1 a échoué. - + All your plugins are already up to date. Tous vos greffons de recherche sont déjà à jour. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine Le greffon de recherche %1 n'a pas pu être mis à jour, l'ancienne version est conservée. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine Le greffon de recherche %1 n'a pas pu être installé. - + All selected plugins were uninstalled successfully Tous les greffons sélectionnés ont été désinstallés avec succès - + %1 search engine plugin was successfully updated. %1 is the name of the search engine Le greffon %1 a été mis à jour avec succès. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine Le greffon %1 a été installé avec succès. @@ -4764,24 +4888,24 @@ Cependant, les greffons en question ont été désactivés. Le greffon %1 a été mis à jour avec succès. - + Search engine plugin archive could not be read. L'archive contenant le greffon de recherche n'a pas pu être lue. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Désolé, l'installation du greffon de recherche %1 a échouée. - + New search engine plugin URL Adresse du nouveau greffon de recherche - + URL: Adresse : @@ -5712,29 +5836,24 @@ Cependant, les greffons en question ont été désactivés. subDownloadThread - Host is unreachable - L'hôte distant est injoignable + L'hôte distant est injoignable - File was not found (404) - Fichier non trouvé (404) + Fichier non trouvé (404) - Connection was denied - Connexion refusée + Connexion refusée - Url is invalid - Url invalide + Url invalide - I/O Error - Erreur E/S + Erreur E/S Connection forbidden (403) @@ -5749,29 +5868,24 @@ Cependant, les greffons en question ont été désactivés. Le contenu a été déplacé (301) - Connection failure - Echec de la connexion + Echec de la connexion - Connection was timed out - Délai de connexion dépassé + Délai de connexion dépassé - Incorrect network interface - Interface réseau incorrecte + Interface réseau incorrecte - Unknown error - Erreur inconnue + Erreur inconnue - Could not resolve proxy - Impossible de résoudre le nom du serveur mandataire + Impossible de résoudre le nom du serveur mandataire @@ -5837,12 +5951,12 @@ Cependant, les greffons en question ont été désactivés. Impossible de créer le répertoire de destination - + Invalid file selection Sélection de fichiers invalide - + You must select at least one file in the torrent Veuillez sélectionner au moins un fichier dans le torrent diff --git a/src/lang/qbittorrent_hu.qm b/src/lang/qbittorrent_hu.qm index 6dbd7ba97..bd860f11a 100644 Binary files a/src/lang/qbittorrent_hu.qm and b/src/lang/qbittorrent_hu.qm differ diff --git a/src/lang/qbittorrent_hu.ts b/src/lang/qbittorrent_hu.ts index 32a7c8617..5ba613d9b 100644 --- a/src/lang/qbittorrent_hu.ts +++ b/src/lang/qbittorrent_hu.ts @@ -1552,7 +1552,7 @@ Copyright © 2006 by Christophe Dumez<br> GUI - + Open Torrent Files Torrent fájl megnyitása @@ -1561,25 +1561,25 @@ Copyright © 2006 by Christophe Dumez<br> Ez a fájl sérült, vagy nem is torrent. - - - - - + + + + + &Yes &Igen - - - - - + + + + + &No &Nem - + Are you sure you want to delete the selected item(s) in download list? Biztos vagy benne, hogy törlöd a felsorlolt elemeket a letöltési listáról? @@ -1592,15 +1592,15 @@ Copyright © 2006 by Christophe Dumez<br> Letöltés... - + Torrent Files Torrentek - - - - + + + + Are you sure? -- qBittorrent Egészen biztos? -- qBittorrent @@ -1627,7 +1627,7 @@ Please close the other one first. Kérlek előbb azt zárd be. - + Download finished Letöltés elkészült @@ -1636,15 +1636,15 @@ Kérlek előbb azt zárd be. Egészen biztos vagy benne, hogy törlöd a felsorlolt elemeket a letöltési listáról ÉS a merevlemezről? - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Kapcsolat állapota: @@ -1697,21 +1697,21 @@ Kérlek előbb azt zárd be. qBittorrent %1 elindítva. - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Letöltés: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Feltöltés: %1 KiB/s @@ -1727,7 +1727,7 @@ Kérlek előbb azt zárd be. Elakadt - + Are you sure you want to quit? Egészen biztos, hogy kilépsz? @@ -1785,14 +1785,14 @@ Kérlek előbb azt zárd be. '%1' elindítva. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 letöltve. - + I/O Error i.e: Input/Output Error I/O Hiba @@ -1803,12 +1803,12 @@ Kérlek előbb azt zárd be. Hiba történ a(z) %1 írása/olvasása közben. Valószínűleg tele a lemez, így a letöltés megszakítva - + Connection Status: A kapcsolat állapota: - + Online Online @@ -1827,23 +1827,23 @@ Kérlek előbb azt zárd be. Letöltés alatt: '%1', kis türelmet... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Hiba történt (megtelt a merevlemez?), '%1' megállítva. - + Search Keresés - + RSS RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -1860,13 +1860,13 @@ Kérlek előbb azt zárd be. DHT funkció [ON], port: %1 - - + + DHT support [OFF] DHT funkció [OFF] - + PeX support [ON] PeX [ON] @@ -1875,20 +1875,20 @@ Kérlek előbb azt zárd be. PeX [OFF] - + The download list is not empty. Are you sure you want to quit qBittorrent? Letöltés folyamatban. Mégis leállítod a qBittorrentet? - - + + Downloads Letöltések - + Finished Feltöltések @@ -1897,12 +1897,12 @@ Mégis leállítod a qBittorrentet? Egészen biztos vagy benne, hogy törlöd a felsorolt elemeket a feltöltési listáról ÉS a merevlemezről? - + Are you sure you want to delete the selected item(s) in finished list? Biztos vagy benne, hogy törlöd a felsorolt elemeket a feltöltési listáról? - + UPnP support [ON] UPnP támogatás [ON] @@ -1911,17 +1911,17 @@ Mégis leállítod a qBittorrentet? Csak óvatosan a megosztással. Nehogy megsértsd a szerzői jogokat!. - + Encryption support [ON] Titkosítás [ON] - + Encryption support [FORCED] Titkosítás [KÉNYSZERÍTVE] - + Encryption support [OFF] Titkosítás [OFF] @@ -1935,13 +1935,13 @@ Mégis leállítod a qBittorrentet? Arány - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -1952,18 +1952,18 @@ Mégis leállítod a qBittorrentet? Alt+3, Ctrl+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Url letöltés hiba - + Couldn't download file at url: %1, reason: %2. Nem sikerült letölteni url címről: %1, mert: %2. @@ -1972,12 +1972,12 @@ Mégis leállítod a qBittorrentet? Hibás ellenőrző adat ennél a torrentnél: %1, újraellenőrzés... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Egészen biztos vagy benne, hogy törlöd a felsorlolt elemeket a letöltési listáról ÉS a merevlemezről? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Egészen biztos vagy benne, hogy törlöd a felsorlolt elemeket a feltöltési listáról ÉS a merevlemezről? @@ -1991,50 +1991,50 @@ Mégis leállítod a qBittorrentet? Url forrás meghatározása sikertelen: %1, hibaüzenet: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent ezen a porton figyel: TCP/%1 - + UPnP support [OFF] UPnP támogatás [OFF] - + NAT-PMP support [ON] NAT-PMP támogatás [ON] - + NAT-PMP support [OFF] NAT-PMP támogatás [OFF] - + DHT support [ON], port: UDP/%1 DHT támogatás [ON], port: UDP/%1 - + Local Peer Discovery [ON] Local Peer Discovery [ON] - + Local Peer Discovery support [OFF] Local Peer Discovery támogatás [OFF] @@ -2044,48 +2044,48 @@ Mégis leállítod a qBittorrentet? '%1' eltávolítva, mivel elérte a kítűzött megosztási arányt. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (Le: %2KiB/s, Fel: %3KiB/s) - - + + DL: %1 KiB/s Le: %1 KiB/s - - + + UP: %1 KiB/s Fel: %1 KiB/s - - + + Ratio: %1 Arány: %1 - - + + DHT: %1 nodes DHT: %1 csomó - - + + No direct connections. This may indicate network configuration problems. Nincsenek kapcsolatok. Ez lehet hálózat beállítási hiba miatt is. - + Uploads Feltöltések - + Options were saved successfully. Beállítások sikeresen elmentve. @@ -2706,12 +2706,12 @@ p, li { white-space: pre-wrap; } Kereső oldal - + Empty search pattern Hiányzó kulcsszó - + Please type a search pattern first Kérlek adj meg kulcsszót a kereséshez @@ -2724,13 +2724,13 @@ p, li { white-space: pre-wrap; } Válassz legalább egy keresőt. - - + + Results Eredmény - + Searching... Keresés... @@ -2773,58 +2773,58 @@ Changelog: A legújabb keresőt használod. - + Cut Kivágás - + Copy Másolás - + Paste Beillesztés - + Clear field Mező törlése - + Clear completion history Előzmények törlése - + Search Engine Keresőmotor - - + + Search has finished A keresés befejeződött - + An error occured during search... Hiba a keresés közben... - + Search aborted Keresés félbeszakítva - + Search returned no results Eredménytelen keresés - + Results i.e: Search results Találat @@ -2838,8 +2838,8 @@ Changelog: Nem sikerült kereső modult letölteni innen: %1, mert: %2. - - + + Unknown Ismeretlen @@ -2950,42 +2950,47 @@ Changelog: Download in sequential order (slower but good for previewing) Letöltés sorrendben (lassabb, de előnézethez ideális) + + + Skip file checking and start seeding immediately + + Download in correct order (slower but good for previewing) Letöltés sorrendben. Előnézethez kiváló, de lassabb a letöltés - + Add to download list in paused state Letöltés nélkül add a listához - + Add Mehet - + Cancel Mégse - + Ignored Mellőzve - + Normal Átlagos - + High Magas - + Maximum Maximális @@ -3059,18 +3064,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. %1 elérte a megengedett arányt. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' véglegesen törölve. - + '%1' was removed. 'xxx.avi' was removed. '%1' eltávolítva. @@ -3086,96 +3091,96 @@ Changelog: '%1' elindítva. - + '%1' is not a valid magnet URI. '%1' nem hiteles magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' már letöltés alatt. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' visszaállítva. (folytatás) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' felvéve a letöltési listára. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Megfejthetetlen torrent: '%1' - + This file is either corrupted or this isn't a torrent. Ez a fájl sérült, vagy nem is torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>letiltva IP szűrés miatt</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>kitiltva hibás adatküldés miatt</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Fájl ismételt letöltése %1 beágyazva a torrent %2 - + Unable to decode %1 torrent file. Megfejthetetlen torrent: %1. - + Couldn't listen on any of the given ports. A megadott porok zártak. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Port felderítése sikertelen, hibaüzenet: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Port felderítése sikeres, hibaüzenet: %1 - + Fast resume data was rejected for torrent %1, checking again... Hibás ellenőrző adat ennél a torrentnél: %1, újraellenőrzés... - + Url seed lookup failed for url: %1, message: %2 Url forrás meghatározása sikertelen: %1, hibaüzenet: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Letöltés alatt: '%1', kis türelmet... @@ -3460,6 +3465,125 @@ Changelog: Kérlek adj meg legalább egy url címet. + + downloadThread + + + + I/O Error + I/O Hiba + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Ismeretlen hiba + + downloading @@ -3685,12 +3809,12 @@ Changelog: Tiltva - + Uninstall warning Figyelemeztetés - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -3699,83 +3823,83 @@ However, those plugins were disabled. Viszont azok a modulok kikapcsolhatóak. - + Uninstall success Sikeresen eltávolítva - + Select search plugins Modul kiválasztása - - + + qBittorrent search plugins qBittorrent kereső modulok - - - - - - - - + + + + + + + + Search plugin install Kerső telepítése - - - + + + Yes Igen - - - - + + + + No Nem - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine A %1 kereső modul egy újabb verziója már telepítve van. - - - - - + + + + + Search plugin update Kereső modul frissítése - - + + Sorry, update server is temporarily unavailable. A kiszolgálő jelenleg nem elérhető. Bocs. @@ -3785,37 +3909,37 @@ Viszont azok a modulok kikapcsolhatóak. Bocs, nem sikerült frissíteni: %1. - + All your plugins are already up to date. A legújabb kereső modulokat használod. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine %1 keresőt nem lehet frissíteni, előző verzió megtartva. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine %1 kereső modul telepítése sikertelen. - + All selected plugins were uninstalled successfully Kereső modul(ok) sikeresen eltávolítva - + %1 search engine plugin was successfully updated. %1 is the name of the search engine %1 kereső modul sikeresen frissítve. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine %1 kereső modul sikeresen telepítve. @@ -3826,24 +3950,24 @@ Viszont azok a modulok kikapcsolhatóak. %1 kereső modul sikeresen frissítve. - + Search engine plugin archive could not be read. Kereső modul beolvasása sikertelen. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Bocs, %1 kereső modul telepítése sikertelen. - + New search engine plugin URL Új kereső modul címe - + URL: URL: @@ -4557,29 +4681,24 @@ Viszont azok a modulok kikapcsolhatóak. subDownloadThread - Host is unreachable - Kiszolgáló nem elérhető + Kiszolgáló nem elérhető - File was not found (404) - Fájl nem található (404) + Fájl nem található (404) - Connection was denied - Hozzáférés megtagadva + Hozzáférés megtagadva - Url is invalid - Érvénytelen cím + Érvénytelen cím - I/O Error - I/O Hiba + I/O Hiba Connection forbidden (403) @@ -4594,29 +4713,24 @@ Viszont azok a modulok kikapcsolhatóak. Tartalom áthelyezve (301) - Connection failure - Kapcsolódás sikertelen + Kapcsolódás sikertelen - Connection was timed out - Idő túllépés + Idő túllépés - Incorrect network interface - Hibás hálózati csatlakozó + Hibás hálózati csatlakozó - Unknown error - Ismeretlen hiba + Ismeretlen hiba - Could not resolve proxy - Nem sikerült csatlakozni a proxy-hoz + Nem sikerült csatlakozni a proxy-hoz @@ -4674,12 +4788,12 @@ Viszont azok a modulok kikapcsolhatóak. Nem sikerült létrehozni a letöltési könyvtárat. (Írásvédett?) - + Invalid file selection Választás hiánya - + You must select at least one file in the torrent Legalább egy fájlt ki kell választanod diff --git a/src/lang/qbittorrent_it.qm b/src/lang/qbittorrent_it.qm index fa0d8c518..0bc9a912b 100644 Binary files a/src/lang/qbittorrent_it.qm and b/src/lang/qbittorrent_it.qm differ diff --git a/src/lang/qbittorrent_it.ts b/src/lang/qbittorrent_it.ts index 859d68e6e..0080ee550 100644 --- a/src/lang/qbittorrent_it.ts +++ b/src/lang/qbittorrent_it.ts @@ -1593,7 +1593,7 @@ Copyright © 2006 by Christophe Dumez<br> GUI - + Open Torrent Files Apri file torrent @@ -1606,30 +1606,30 @@ Copyright © 2006 by Christophe Dumez<br> Sei sicuro di voler cancellare tutti i file nella lista di download? - - - - - + + + + + &Yes &Sì - - - - - + + + + + &No &No - + Are you sure you want to delete the selected item(s) in download list? Sei sicuro di voler cancellare gli elementi selezionati dalla lista dei download? - + Finished In Upload @@ -1670,7 +1670,7 @@ Copyright © 2006 by Christophe Dumez<br> Impossibile creare la directory: - + Torrent Files File torrent @@ -1715,10 +1715,10 @@ Copyright © 2006 by Christophe Dumez<br> qBittorrent - - - - + + + + Are you sure? -- qBittorrent Sei sicuro? -- qBittorrent @@ -1912,7 +1912,7 @@ Example: Downloading www.example.com/test.torrent Downloading - + Download finished Download completato @@ -1938,15 +1938,15 @@ Example: Downloading www.example.com/test.torrent Errore I/O - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Stato della connessione: @@ -2009,21 +2009,21 @@ Example: Downloading www.example.com/test.torrent qBittorrent %1 avviato. - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Velocità DL: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Velocità UP: %1 KiB/s @@ -2044,7 +2044,7 @@ Example: Downloading www.example.com/test.torrent In Stallo - + Are you sure you want to quit? Sei sicuro di voler uscire? @@ -2107,14 +2107,14 @@ Example: Downloading www.example.com/test.torrent '%1' ripreso. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 è stato scaricato. - + I/O Error i.e: Input/Output Error Errore I/O @@ -2125,12 +2125,12 @@ Example: Downloading www.example.com/test.torrent Errore di scrittura o di lettura con %1. Probabilmente il disco è pieno, il download è stato fermato - + Connection Status: Stato della connessione: - + Online Online @@ -2166,23 +2166,23 @@ Example: Downloading www.example.com/test.torrent Download di '%1' in corso... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Si è verificato un errore (disco pieno?), '%1' fermato. - + Search Ricerca - + RSS RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2200,13 +2200,13 @@ Motivo: %2 Supporto DHT [ON], porta: %1 - - + + DHT support [OFF] Supporto DHT [OFF] - + PeX support [ON] Supporto PeX [ON] @@ -2215,25 +2215,25 @@ Motivo: %2 Supporto PeX [OFF] - + The download list is not empty. Are you sure you want to quit qBittorrent? La lista dei download non è vuota. Sei sicuro di voler uscire da qBittorrent? - - + + Downloads In Download - + Are you sure you want to delete the selected item(s) in finished list? Sei sicuro di voler cancellare gli elementi selezionati dalla lista dei download completati? - + UPnP support [ON] Supporto UPnP [ON] @@ -2242,17 +2242,17 @@ Sei sicuro di voler uscire da qBittorrent? Attenzione, condividere materiale protetto da copyright senza il permesso è illegale. - + Encryption support [ON] Supporto cifratura [ON] - + Encryption support [FORCED] Supporto cifratura [FORZATO] - + Encryption support [OFF] Supporto cifratura [OFF] @@ -2266,13 +2266,13 @@ Sei sicuro di voler uscire da qBittorrent? Rapporto - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -2283,18 +2283,18 @@ Sei sicuro di voler uscire da qBittorrent? Alt+3, Ctrl+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Errore download da indirizzo web - + Couldn't download file at url: %1, reason: %2. Impossibile scaricare il file all'indirizzo: %1, motivo: %2. @@ -2303,12 +2303,12 @@ Sei sicuro di voler uscire da qBittorrent? Il recupero veloce del torrent %1 è stato rifiutato, altro tentativo in corso... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? Sei sicuro di voler rimuovere gli elementi selezionati dalla lista dei download e dal disco? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? Sei sicuro di voler rimuovere gli oggetti selezionati dalla lista dei download completati e dal disco? @@ -2322,50 +2322,50 @@ Sei sicuro di voler uscire da qBittorrent? Fallito seed per l'url: %1, messaggio: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 qBittorrent è in ascolto sulla porta: TCP/%1 - + UPnP support [OFF] Supporto UPnP [OFF] - + NAT-PMP support [ON] Supporto NAT-PMP [ON] - + NAT-PMP support [OFF] Supporto NAT-PMP [OFF] - + DHT support [ON], port: UDP/%1 Supporto DHT [ON], porta: UDP/%1 - + Local Peer Discovery [ON] Supporto scoperta peer locali [ON] - + Local Peer Discovery support [OFF] Supporto scoperta peer locali [OFF] @@ -2375,48 +2375,48 @@ Sei sicuro di voler uscire da qBittorrent? '%1' è stato rimosso perché il suo rapporto di condivisione ha raggiunto il massimo stabilito. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s DL: %1 KiB/s - - + + UP: %1 KiB/s UP: %1 KiB/s - - + + Ratio: %1 Rapporto: %1 - - + + DHT: %1 nodes DHT: %1 nodi - - + + No direct connections. This may indicate network configuration problems. Nessuna connessione diretta. Questo potrebbe indicare problemi di configurazione della rete. - + Uploads Upload - + Options were saved successfully. Le opzioni sono state salvate. @@ -3093,12 +3093,12 @@ p, li { white-space: pre-wrap; } Motore di ricerca - + Empty search pattern Campo di ricerca vuoto - + Please type a search pattern first Per favore inserire prima un campo di ricerca @@ -3111,13 +3111,13 @@ p, li { white-space: pre-wrap; } Selezionare almeno un motore di ricerca. - - + + Results Risultati - + Searching... Ricerca in corso... @@ -3160,58 +3160,58 @@ Changelog: Il plugin di ricerca è già aggiornato. - + Cut Taglia - + Copy Copia - + Paste Incolla - + Clear field Azzera campo - + Clear completion history Azzera cronologia completamento - + Search Engine Motore di Ricerca - - + + Search has finished La ricerca è terminata - + An error occured during search... Si è verificato un errore durante la ricerca... - + Search aborted Ricerca annullata - + Search returned no results La ricerca non ha prodotto risultati - + Results i.e: Search results Risultati @@ -3225,8 +3225,8 @@ Changelog: Impossibile aggiornare il plugin all'url: %1, motivo: %2. - - + + Unknown Sconosciuto @@ -3388,6 +3388,11 @@ Changelog: Download in sequential order (slower but good for previewing) Scarica nell'ordine giusto (più lento ma migliore per le anteprime) + + + Skip file checking and start seeding immediately + + File name Nome del file @@ -3405,17 +3410,17 @@ Changelog: Scarica nell'ordine giusto (più lento ma migliore per le anteprime) - + Add to download list in paused state Aggiungi fra i download mettendolo in pausa - + Add Aggiungi - + Cancel Cancella @@ -3428,22 +3433,22 @@ Changelog: Seleziona - + Ignored Ignora - + Normal Normale - + High Alta - + Maximum Massima @@ -3517,18 +3522,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. %1 ha raggiunto il rapporto massimo impostato. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' è stato cancellato permanentemente. - + '%1' was removed. 'xxx.avi' was removed. '%1' è stato rimosso. @@ -3544,96 +3549,96 @@ Changelog: '%1' ripreso. - + '%1' is not a valid magnet URI. '%1' non è un URI magnetico valido. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' è già nella lista dei download. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' ripreso. (recupero veloce) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' è stato aggiunto alla lista dei download. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Impossibile decifrare il file torrent: '%1' - + This file is either corrupted or this isn't a torrent. Questo file è corrotto o non è un torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>è stato bloccato a causa dei tuoi filtri IP</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>è stato bannato a causa di parti corrotte</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 Download ricorsivo del file %1 incluso nel torrent %2 - + Unable to decode %1 torrent file. Impossibile decifrare il file torrent %1. - + Couldn't listen on any of the given ports. Impossibile mettersi in ascolto sulle porte scelte. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: mappatura porte fallita, messaggio: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: mappatura porte riuscita, messaggio: %1 - + Fast resume data was rejected for torrent %1, checking again... Il recupero veloce del torrent %1 è stato rifiutato, altro tentativo in corso... - + Url seed lookup failed for url: %1, message: %2 Fallito seed web per l'indirizzo: %1, messaggio: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Download di '%1' in corso... @@ -3954,6 +3959,125 @@ Changelog: Per favore inserire almeno un indirizzo web. + + downloadThread + + + + I/O Error + Errore I/O + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + Errore sconosciuto + + downloading @@ -4179,12 +4303,12 @@ Changelog: Falso - + Uninstall warning Avviso di disinstallazione - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4193,7 +4317,7 @@ However, those plugins were disabled. Comunque, quei plugin sono stati disabilitati. - + Uninstall success Disinstallazione riuscita @@ -4202,62 +4326,62 @@ Comunque, quei plugin sono stati disabilitati. Tutti i plugin selezionati sono stati disinstallati con successo - + Select search plugins Seleziona plugin di ricerca - - + + qBittorrent search plugins Plugin di ricerca di qBittorrent - - - - - - - - + + + + + + + + Search plugin install Installare plugin di ricerca - - - + + + Yes - - - - + + + + No No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine Una versione più recente del plugin di ricerca %1 è già installata. @@ -4273,17 +4397,17 @@ Comunque, quei plugin sono stati disabilitati. Il plugin di ricerca %1 è stato installato con successo. - - - - - + + + + + Search plugin update Aggiornato il plugin di ricerca - - + + Sorry, update server is temporarily unavailable. Spiacente, il server è momentaneamente non disponibile. @@ -4298,37 +4422,37 @@ Comunque, quei plugin sono stati disabilitati. Spiacente, l'aggiornamento del plugin di ricerca %1 è fallito. - + All your plugins are already up to date. Tutti i plugin sono già aggiornati. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine Non è stato possibile aggiornare %1, mantengo la versione attuale. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine Non è stato possibile installare il plugin di ricerca %1. - + All selected plugins were uninstalled successfully Tutti i plugin selezionati sono stati disinstallati con successo - + %1 search engine plugin was successfully updated. %1 is the name of the search engine Il plugin di ricerca %1 è stato aggiornato con successo. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine Il plugin di ricerca %1 è stato installato con successo. @@ -4339,24 +4463,24 @@ Comunque, quei plugin sono stati disabilitati. Il plugin di ricerca %1 è stato aggiornato con successo. - + Search engine plugin archive could not be read. Non è stato possibile leggere l'archivio dei plugin dei motori di ricerca. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine Spiacente, l'installazione del plugin di ricerca %1 è fallita. - + New search engine plugin URL Indirizzo del nuovo plugin di ricerca - + URL: Indirizzo web: @@ -5226,29 +5350,24 @@ Comunque, quei plugin sono stati disabilitati. subDownloadThread - Host is unreachable - Host non raggiungibile + Host non raggiungibile - File was not found (404) - File non trovato (404) + File non trovato (404) - Connection was denied - Connessione negata + Connessione negata - Url is invalid - Indirizzo non valido + Indirizzo non valido - I/O Error - Errore I/O + Errore I/O Connection forbidden (403) @@ -5263,29 +5382,24 @@ Comunque, quei plugin sono stati disabilitati. Il contenuto è stato spostato (301) - Connection failure - Connessione fallita + Connessione fallita - Connection was timed out - Connessione scaduta + Connessione scaduta - Incorrect network interface - Interfaccia di rete non corretta + Interfaccia di rete non corretta - Unknown error - Errore sconosciuto + Errore sconosciuto - Could not resolve proxy - Impossibile risolvere proxy + Impossibile risolvere proxy @@ -5351,12 +5465,12 @@ Comunque, quei plugin sono stati disabilitati. Impossibile creare la directory di salvataggio - + Invalid file selection Selezione file non valida - + You must select at least one file in the torrent Devi selezionare almeno un file nel torrent diff --git a/src/lang/qbittorrent_ja.qm b/src/lang/qbittorrent_ja.qm index d56863be9..57a44d704 100644 Binary files a/src/lang/qbittorrent_ja.qm and b/src/lang/qbittorrent_ja.qm differ diff --git a/src/lang/qbittorrent_ja.ts b/src/lang/qbittorrent_ja.ts index c49dd9623..bc41e29de 100644 --- a/src/lang/qbittorrent_ja.ts +++ b/src/lang/qbittorrent_ja.ts @@ -1542,7 +1542,7 @@ Copyright © 2006 by Christophe Dumez<br> GUI - + Open Torrent Files Torrent ファイルを開く @@ -1551,25 +1551,25 @@ Copyright © 2006 by Christophe Dumez<br> このファイルは壊れているかこれは torrent ではないかのどちらかです。 - - - - - + + + + + &Yes はい(&Y) - - - - - + + + + + &No いいえ(&N) - + Are you sure you want to delete the selected item(s) in download list? ダウンロードの一覧にある選択されたアイテムを削除してもよろしいですか? @@ -1582,15 +1582,15 @@ Copyright © 2006 by Christophe Dumez<br> ダウンロードしています.... - + Torrent Files Torrent ファイル - - - - + + + + Are you sure? -- qBittorrent よろしいですか? -- qBittorrent @@ -1617,7 +1617,7 @@ Please close the other one first. まず他の 1 つを閉じてください。 - + Download finished ダウンロードが完了しました @@ -1626,15 +1626,15 @@ Please close the other one first. ダウンロードの一覧およびハード ドライブにある選択されたアイテムを削除してもよろしいですか? - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: 接続状態: @@ -1687,21 +1687,21 @@ Please close the other one first. qBittorrent %1 が開始されました。 - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s DL 速度: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s UP 速度: %1 KiB/s @@ -1717,7 +1717,7 @@ Please close the other one first. 失速しました - + Are you sure you want to quit? 終了してもよろしいですか? @@ -1775,14 +1775,14 @@ Please close the other one first. '%1' が再開されました。 - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 はダウンロードが完了しました。 - + I/O Error i.e: Input/Output Error I/O エラー @@ -1793,12 +1793,12 @@ Please close the other one first. %1 の読み込みまたは書き込みを試行にエラーが発生しました。ディスクはおそらくいっぱいです、ダウンロードは一時停止されました - + Connection Status: 接続状態: - + Online オンライン @@ -1817,18 +1817,18 @@ Please close the other one first. '%1' をダウンロードしています、お待ちください... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. エラーが発生しました (ディスクいっぱい?)、'%1' が停止されました。 - + Search 検索 - + RSS RSS @@ -1850,8 +1850,8 @@ Please close the other one first. DHT サポート [オン]、ポート: %1 - - + + DHT support [OFF] DHT サポート [オフ] @@ -1860,12 +1860,12 @@ Please close the other one first. UPnP サポート [オン]、ポート: %1 - + UPnP support [OFF] UPnP サポート [オフ] - + PeX support [ON] PeX サポート [オン] @@ -1874,20 +1874,20 @@ Please close the other one first. PeX サポート [オフ] - + The download list is not empty. Are you sure you want to quit qBittorrent? ダウンロードの一覧は空ではありません。 qBittorrent を終了してもよろしいですか? - - + + Downloads ダウンロード - + Finished 完了しました @@ -1896,12 +1896,12 @@ qBittorrent を終了してもよろしいですか? 完了済みの一覧およびハード ドライブにある選択されたアイテムを削除してもよろしいですか? - + Are you sure you want to delete the selected item(s) in finished list? ダウンロードの一覧にある選択されたアイテムを削除してもよろしいですか? - + UPnP support [ON] UPnP サポート [オン] @@ -1910,17 +1910,17 @@ qBittorrent を終了してもよろしいですか? ご用心ください、許可なしの著作権のある材料の共有は法律に違反しています。 - + Encryption support [ON] 暗号化サポート [オン] - + Encryption support [FORCED] 暗号化サポート [強制済み] - + Encryption support [OFF] 暗号化サポート [オフ] @@ -1934,13 +1934,13 @@ qBittorrent を終了してもよろしいですか? - + Alt+1 shortcut to switch to first tab Alt+1 - + Alt+2 shortcut to switch to second tab Alt+2 @@ -1951,18 +1951,18 @@ qBittorrent を終了してもよろしいですか? Alt+3、Ctrl+F - + Alt+4 shortcut to switch to fourth tab Alt+4 - + Url download error Url のダウンロード エラー - + Couldn't download file at url: %1, reason: %2. 次の url にあるファイルをダウンロードできませんでした: %1、理由: %2。 @@ -1971,12 +1971,12 @@ qBittorrent を終了してもよろしいですか? 高速再開データは torrent %1 を拒絶しました、再びチェックしています... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? ダウンロードの一覧とハード ドライブから選択されたアイテムを削除してもよろしいですか? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? 完了済みの一覧とハード ドライブから選択されたアイテムを削除してもよろしいですか? @@ -1990,13 +1990,13 @@ qBittorrent を終了してもよろしいですか? 次の url の url シードの参照に失敗しました: %1、メッセージ: %2 - + Alt+3 shortcut to switch to third tab Alt+3 - + Ctrl+F shortcut to switch to search tab Ctrl+F @@ -2007,73 +2007,73 @@ qBittorrent を終了してもよろしいですか? '%1' はその率が設定した最大値を達成したので削除されました。 - + NAT-PMP support [ON] NAT-PMP サポート [オン] - + NAT-PMP support [OFF] NAT-PMP サポート [オフ] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] ローカル ピア ディスカバリ [オン] - + Local Peer Discovery support [OFF] ローカル ピア ディスカバリ [オフ] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version qBittorrent %1 (DL: %2KiB/s、UP: %3KiB/s) - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2081,13 +2081,13 @@ qBittorrent を終了してもよろしいですか? - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + Options were saved successfully. オプションの保存に成功しました。 @@ -2720,12 +2720,12 @@ p, li { white-space: pre-wrap; } 検索エンジン - + Empty search pattern 検索パターンを空にする - + Please type a search pattern first まず検索パターンを入力してください @@ -2738,13 +2738,13 @@ p, li { white-space: pre-wrap; } 少なくとも 1 つの検索エンジンを選択する必要があります。 - - + + Results 結果 - + Searching... 検索しています... @@ -2787,58 +2787,58 @@ Changelog: お使いの検索プラグインはすでに最新です。 - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Search Engine 検索エンジン - - + + Search has finished 検索は完了しました - + An error occured during search... 検索中にエラーが発生しました... - + Search aborted 検索が中止されました - + Search returned no results 検索結果がありません - + Results i.e: Search results 結果 @@ -2852,8 +2852,8 @@ Changelog: 次の url にある検索プラグインの更新をダウンロードできませんでした: %1、理由: %2。 - - + + Unknown 不明 @@ -3007,6 +3007,11 @@ Changelog: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name ファイル名 @@ -3024,17 +3029,17 @@ Changelog: 正しい順にダウンロードする (より遅いがプレビューにはふさわしい) - + Add to download list in paused state 一時停止済み状態でダウンロードの一覧に追加する - + Add 追加 - + Cancel キャンセル @@ -3047,22 +3052,22 @@ Changelog: 選択 - + Ignored 無視済み - + Normal 通常 - + High - + Maximum 最大 @@ -3132,18 +3137,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' は永久に削除されました。 - + '%1' was removed. 'xxx.avi' was removed. '%1' は削除されました。 @@ -3159,96 +3164,96 @@ Changelog: '%1' が再開されました。 - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' はすでにダウンロードの一覧にあります。 - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' が再開されました。 (高速再開) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' がダウンロードの一覧に追加されました。 - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Torrent ファイルをデコードすることができません: '%1' - + This file is either corrupted or this isn't a torrent. このファイルは壊れているかこれは torrent ではないかのどちらかです。 - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. 所定のポートで記入できませんでした。 - + UPnP/NAT-PMP: Port mapping failure, message: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 - + Fast resume data was rejected for torrent %1, checking again... 高速再開データは torrent %1 を拒絶しました、再びチェックしています... - + Url seed lookup failed for url: %1, message: %2 次の url の url シードの参照に失敗しました: %1、メッセージ: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... '%1' をダウンロードしています、お待ちください... @@ -3585,6 +3590,125 @@ Changelog: 少なくとも 1 つの URL を入力してください。 + + downloadThread + + + + I/O Error + I/O エラー + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + 不明なエラーです + + downloading @@ -3810,12 +3934,12 @@ Changelog: False - + Uninstall warning アンインストールの警告 - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -3824,7 +3948,7 @@ However, those plugins were disabled. しかし、それらのプラグインは無効になります。 - + Uninstall success アンインストール成功 @@ -3833,47 +3957,47 @@ However, those plugins were disabled. すべての選択されたプラグインのアンインストールに成功しました - + Select search plugins 検索プラグインの選択 - - + + qBittorrent search plugins qBittorrent 検索プラグイン - - - - - - - - + + + + + + + + Search plugin install 検索プラグインのインストール - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine %1 検索エンジン プラグインのより最近のバージョンはすでにインストールされています。 @@ -3889,17 +4013,17 @@ However, those plugins were disabled. %1 検索エンジン プラグインのインストールに成功しました。 - - - - - + + + + + Search plugin update 検索プラグインの更新 - - + + Sorry, update server is temporarily unavailable. すみません、更新サーバーが一時的に利用不可です。 @@ -3914,75 +4038,75 @@ However, those plugins were disabled. すみません、%1 検索プラグインの更新に失敗しました。 - + All your plugins are already up to date. すべてのお使いのプラグインはすでに最新です。 - + All selected plugins were uninstalled successfully すべての選択されたプラグインのアンインストールに成功しました - - - + + + Yes - - - - + + + + No - + Search engine plugin archive could not be read. 検索エンジン プラグイン アーカイブは読み込めませんでした。 - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine %1 検索エンジン プラグインはインストールできませんでした。 - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine %1 検索エンジン プラグインは更新できませんでした、古いバージョンを維持します。 - + %1 search engine plugin was successfully updated. %1 is the name of the search engine %1 検索エンジン プラグインの更新に成功しました。 - + %1 search engine plugin was successfully installed. %1 is the name of the search engine %1 検索エンジン プラグインのインストールに成功しました。 - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine すみません、%1 検索エンジン プラグインのインストールに失敗しました。 - + New search engine plugin URL 新しい検索エンジン プラグインの URL - + URL: URL: @@ -4708,29 +4832,24 @@ However, those plugins were disabled. subDownloadThread - Host is unreachable - ホストは達成できません + ホストは達成できません - File was not found (404) - ファイルは見つかりませんでした (404) + ファイルは見つかりませんでした (404) - Connection was denied - 接続は拒否されました + 接続は拒否されました - Url is invalid - Url は不正です + Url は不正です - I/O Error - I/O エラー + I/O エラー Connection forbidden (403) @@ -4745,29 +4864,24 @@ However, those plugins were disabled. 内容は移動しました (301) - Connection failure - 接続失敗 + 接続失敗 - Connection was timed out - 接続はタイムアウトしました + 接続はタイムアウトしました - Incorrect network interface - 不正確なネットワーク インターフェイスです + 不正確なネットワーク インターフェイスです - Unknown error - 不明なエラーです + 不明なエラーです - Could not resolve proxy - プロキシを解決できませんでした + プロキシを解決できませんでした @@ -4833,12 +4947,12 @@ However, those plugins were disabled. 保存パスを作成できませんでした - + Invalid file selection 不正なファイル選択 - + You must select at least one file in the torrent Torrent では少なくとも 1 つのファイルを選択する必要があります diff --git a/src/lang/qbittorrent_ko.qm b/src/lang/qbittorrent_ko.qm index 79e9ac36e..ae6fd95c7 100644 Binary files a/src/lang/qbittorrent_ko.qm and b/src/lang/qbittorrent_ko.qm differ diff --git a/src/lang/qbittorrent_ko.ts b/src/lang/qbittorrent_ko.ts index 338b5a605..f2c704873 100644 --- a/src/lang/qbittorrent_ko.ts +++ b/src/lang/qbittorrent_ko.ts @@ -1685,12 +1685,12 @@ list: 업로딩 속도: - + Open Torrent Files 토런트 파일 열기 - + Torrent Files 토런트 파일 @@ -1744,20 +1744,20 @@ list? 파일을 지우고 싶으세요? - - - - - + + + + + &Yes &예 - - - - - + + + + + &No &아니요 @@ -1812,7 +1812,7 @@ download list? 다시 시작됨. - + Finished 완료 @@ -1852,7 +1852,7 @@ download list? 다운로드 목록에 있는 모든 파일을 지우고 싶으세요? - + Are you sure you want to delete the selected item(s) in download list? 다운로딩 목록에서 선택하신 모든 아이템을 삭제하시겠습니까? @@ -1865,16 +1865,16 @@ download list? 개발자: 크리스토프 두메스 :: Copyright (c) 2006 - - + + qBittorrent 큐비토런트 - - - - + + + + Are you sure? -- qBittorrent 재확인해주십시요? -- 큐비토런트 @@ -2133,7 +2133,7 @@ Please close the other one first. 정말로 지금 선택하신 파일들을 다운로드 목록과 하드 드라이브에서 삭제하시겠습니까? - + Download finished 다운로드 완료 @@ -2147,15 +2147,15 @@ Please close the other one first. 검색 엔진 - - + + qBittorrent %1 e.g: qBittorrent v0.x 큐비토런트 %1 - - + + Connection status: 연결 상태: @@ -2218,15 +2218,15 @@ Please close the other one first. 큐비토런트 %1가 시작되었습니다. - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s 다운로딩 속도: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s 업로딩 속도: %1 KiB/s @@ -2247,7 +2247,7 @@ Please close the other one first. 대기중 - + Are you sure you want to quit? 정말로 종료하시겠습니까? @@ -2310,14 +2310,14 @@ Please close the other one first. '%1' 가 다운로드를 다시 시작되었습니다. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1가 다운로드를 완료하였습니다. - + I/O Error i.e: Input/Output Error I/O 에러 @@ -2333,12 +2333,12 @@ Please close the other one first. 오류 발생 (디스크가 꽉찼습니까?), '%1'가 정지 되었습니다. - + Connection Status: 연결 상태: - + Online 온라인 @@ -2374,23 +2374,23 @@ Please close the other one first. '%1'을 다운 중입니다, 잠시 기다려 주세요... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. 오류 발생 (디스크가 꽉찼습니까?), '%1'가 정지 되었습니다. - + Search 검색 - + RSS - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2408,13 +2408,13 @@ Please close the other one first. DHT 지원 [사용함], 포트: %1 - - + + DHT support [OFF] DHT 지원 [사용안함] - + PeX support [ON] Pes 지원 [사용함] @@ -2423,25 +2423,25 @@ Please close the other one first. Pes 지원 [사용안함] - + The download list is not empty. Are you sure you want to quit qBittorrent? 다운로드 리스트가 파일이 있습니다. 큐비토런트를 종료하시겠습니까? - - + + Downloads 다운로드 - + Are you sure you want to delete the selected item(s) in finished list? 현재 완료목록에서 선택된 파일을 지우시겠습니까? - + UPnP support [ON] UPnp 지원 [사용함] @@ -2450,17 +2450,17 @@ Are you sure you want to quit qBittorrent? 허락없이 저작권이 있는 자료를 공유하는 것은 법에 저촉됩니다. - + Encryption support [ON] 암호화(Encryption) 지원 [사용함] - + Encryption support [FORCED] 암호화(Encryption) 지원 [강압적으로 사용] - + Encryption support [OFF] 암호화(Encryption) 지원 [사용안함] @@ -2474,30 +2474,30 @@ Are you sure you want to quit qBittorrent? 비율 - + Alt+1 shortcut to switch to first tab - + Alt+2 shortcut to switch to second tab - + Alt+4 shortcut to switch to fourth tab - + Url download error Url 다운로드 오류 - + Couldn't download file at url: %1, reason: %2. 다음 주소(Url)에서 파일을 다운로드할수 없습니다: %1, 이유:%2. @@ -2506,12 +2506,12 @@ Are you sure you want to quit qBittorrent? 토렌트 %1는 빨리 이어받기가 사용될수 없습니다, 확인중입니다... - + Are you sure you want to delete the selected item(s) from download list and from hard drive? 다운로드 목록에서 선택된 파일을 하드 드라이버에서도 지우시겠습니까? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? 완료 목록에서 선택된 파일을 하드 드라이버에서도 지우시겠습니까? @@ -2525,50 +2525,50 @@ Are you sure you want to quit qBittorrent? 다음 Url 완전체(Url seed)의 검색이 실패하였습니다: %1, 관련내용: %2 - + Alt+3 shortcut to switch to third tab - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 큐비토런트는 다음 포트을 사용하고 있습니다: TCP/%1 - + UPnP support [OFF] UPnP 지원 [사용안함] - + NAT-PMP support [ON] NAT-PMP 지원 [사용함] - + NAT-PMP support [OFF] NAT-PMP 지원 [사용안함] - + DHT support [ON], port: UDP/%1 DHT 지원 [사용함], 포트:'UDP/%1 - + Local Peer Discovery [ON] Local Peer Discovery (로컬 네트웍크내 공유자 찾기) [사용함] - + Local Peer Discovery support [OFF] Local Peer Discovery (로컬 네트웍크내 공유자 찾기) [사용안함] @@ -2578,48 +2578,48 @@ Are you sure you want to quit qBittorrent? 사용자께거 지정하신 할당율에 도달하였기에 '%1'는(은) 목록에서 삭제되었습니다. - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version 큐비토런트 버젼: %1 (DL: %2KiB/s, UP: %3KiB/s) - - + + DL: %1 KiB/s 다운로딩 속도: %1 KiB/s - - + + UP: %1 KiB/s 업로딩 속도: %1 KiB/s - - + + Ratio: %1 비율: %1 - - + + DHT: %1 nodes DHT: %1 노드(nodes) - - + + No direct connections. This may indicate network configuration problems. 직접적으로 연결된 네트워크를 찾지 못했습니다. 네트워크 설정에 의해 발생된 오류일 가능성이 있습니다. - + Uploads 업로드 - + Options were saved successfully. 설정이 성공적으로 저장되었습니다. @@ -3343,12 +3343,12 @@ p, li { white-space: pre-wrap; } 검색 엔진 - + Empty search pattern 검색 양식 지우기 - + Please type a search pattern first 검색 양식을 작성해주십시오 @@ -3361,13 +3361,13 @@ p, li { white-space: pre-wrap; } 적어도 하나 이상의 검색 엔진을 선택해야 합니다. - - + + Results 결과 - + Searching... 검색중... @@ -3410,58 +3410,58 @@ Changelog: 님은 현재 최신 검색 엔진 플로그인을 사용중입니다. - + Cut 잘라내기 - + Copy 복사하기 - + Paste 붙이기 - + Clear field 내용 지우기 - + Clear completion history 완료 내역 지우기 - + Search Engine 검색 엔진 - - + + Search has finished 검색 완료 - + An error occured during search... 검색 중 오류 발생... - + Search aborted 검색이 중단됨 - + Search returned no results 검색 결과가 없음 - + Results i.e: Search results 결과 @@ -3475,8 +3475,8 @@ Changelog: 다음 url에서 검색 플러그인 (Plugin)을 다운로드 할수 없습니다: %1, 이유: %2. - - + + Unknown 알려지지 않음 @@ -3654,6 +3654,11 @@ Changelog: Download in sequential order (slower but good for previewing) 순차적으로 다운받기(느리지만 미리보기에 좋음) + + + Skip file checking and start seeding immediately + + File name 파일 이름 @@ -3671,17 +3676,17 @@ Changelog: 순차적으로 다운받기(느리지만 미리보기에 편합니다) - + Add to download list in paused state 정지 상태로 다운로드 목록에 추가하기 - + Add 추가 - + Cancel 취소 @@ -3698,22 +3703,22 @@ Changelog: 선택 - + Ignored 무시 - + Normal 보통 - + High 높음 - + Maximum 최고 @@ -3783,18 +3788,18 @@ Changelog: bittorrent - + %1 reached the maximum ratio you set. '%1' 는 설정된 최대 공유 비율에 도달했습니다. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. '%1' 는 영구삭제 되었습니다. - + '%1' was removed. 'xxx.avi' was removed. '%1' 가 삭제되었습니다. @@ -3810,96 +3815,96 @@ Changelog: '%1' 가 다운로드를 다시 시작되었습니다. - + '%1' is not a valid magnet URI. '%1'는 유효한 마그넷 URI (magnet URI)가 아닙니다. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1'는/은 이미 다운로드 목록에 포함되어 있습니다. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1'가 다시 시작되었습니다. (빠른 재개) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1'가 다운로드 목록에 추가되었습니다. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' 다음 파일은 해독 할수가 없습니다: '%1' - + This file is either corrupted or this isn't a torrent. 이 파일은 오류가 있거나 토런트 파일이 아닙니다. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked <font color='red'>%1</font> <i>은/는 IP 필터에 의해 접속이 금지되었습니다</i> - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned <font color='red'>%1</font> <i>은/는 유효하지 않은 파일 공유에 의해 접속이 금지되었습니다</i> - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 토렌트 %2 에는 회귀적 다운로드 파일 %1이 포함되어 있습니다 - + Unable to decode %1 torrent file. %1 토렌트를 해독할수 없습니다. - + Couldn't listen on any of the given ports. 설정하신 포트에 연결할수 없습니다. - + UPnP/NAT-PMP: Port mapping failure, message: %1 UPnP/NAT-PMP: Port mapping 실패, 메세지: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 UPnP/NAT-PMP: Port mapping 성공, 메세지: %1 - + Fast resume data was rejected for torrent %1, checking again... 토렌트 %1는 빨리 이어받기가 사용될수 없습니다, 확인중입니다... - + Url seed lookup failed for url: %1, message: %2 다음 Url 완전체(Url seed)의 검색이 실패하였습니다: %1, 관련내용: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... '%1'을 다운 중입니다, 잠시 기다려 주세요... @@ -4232,6 +4237,125 @@ Changelog: 적어도 하나의 주소(URL)를 적어주십시오. + + downloadThread + + + + I/O Error + I/O 에러 + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + 알수 없는 오류 + + downloading @@ -4453,12 +4577,12 @@ Changelog: 아님 - + Uninstall warning 언인스톨 경고 - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. @@ -4468,83 +4592,83 @@ However, those plugins were disabled. - + Uninstall success 제거 완료 - + Select search plugins 검색 플러그인을 선택하십시오 - - + + qBittorrent search plugins 큐비토런트 검색엔진 - - - - - - - - + + + + + + + + Search plugin install 검색 엔진 설치 - - - + + + Yes - - - - + + + + No 아니오 - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent 큐비토런트 - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine 최신 버젼의 %1이 이미 설치되어있습니다. - - - - - + + + + + Search plugin update 검색 엔진 플러그인 업데이트 - - + + Sorry, update server is temporarily unavailable. 죄송합니다. 현재 임시적으로 업데이트 서버가 접속이 불가능합니다. @@ -4554,37 +4678,37 @@ However, those plugins were disabled. 죄송하지만 검색엔진 %1의 업데이트가 실패하였습니다. - + All your plugins are already up to date. 모든 검색엔진이 최신버젼입니다. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine 검색엔진 %1은 업데이트 될수 없습니다. 기존버젼을 유지하겠습니다. - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine 검색엔진 %1은/는 설치될수 없습니다. - + All selected plugins were uninstalled successfully 선택된 모든 플러그인들이 성공적으로 제거 되었습니다 - + %1 search engine plugin was successfully updated. %1 is the name of the search engine 검색엔진 %1이 성공적으로 업데이트 되었습니다. - + %1 search engine plugin was successfully installed. %1 is the name of the search engine 검색엔진 %1이 성공적으로 설치 되었습니다. @@ -4595,24 +4719,24 @@ However, those plugins were disabled. 검색엔진 %1이 성공적으로 업데이트 되었습니다. - + Search engine plugin archive could not be read. 검색엔진 플러그인이 일혀지질 않습니다. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine 죄송하지만, 검색엔진 플로그인, %1,의 설치가 실패하였습니다. - + New search engine plugin URL 새 검색엔진 플러그인 주소(URL) - + URL: @@ -5532,29 +5656,24 @@ However, those plugins were disabled. subDownloadThread - Host is unreachable - 호스트에 도달할수 없습니다 + 호스트에 도달할수 없습니다 - File was not found (404) - 파일을 찾을수 없습니다 (404) + 파일을 찾을수 없습니다 (404) - Connection was denied - 연결 시간이 부인되었습니다 + 연결 시간이 부인되었습니다 - Url is invalid - 주소(Url)가 유효하지 않습니다 + 주소(Url)가 유효하지 않습니다 - I/O Error - I/O 에러 + I/O 에러 Connection forbidden (403) @@ -5569,29 +5688,24 @@ However, those plugins were disabled. 내용이 이동되었습니다 (301) - Connection failure - 연결 실패 + 연결 실패 - Connection was timed out - 연결 시간이 초과하였습니다 + 연결 시간이 초과하였습니다 - Incorrect network interface - 네트웍크 인터페이스(network interface)가 맞지 않습니다. + 네트웍크 인터페이스(network interface)가 맞지 않습니다. - Unknown error - 알수 없는 오류 + 알수 없는 오류 - Could not resolve proxy - 프록시를 설정할수 없습니다 + 프록시를 설정할수 없습니다 @@ -5657,12 +5771,12 @@ However, those plugins were disabled. 저장 경로를 생성할수가 없습니다 - + Invalid file selection 부적당한 파일 선택 - + You must select at least one file in the torrent 토렌트에서 적어도 하나 이상의 파일을 선택해야 합니다 diff --git a/src/lang/qbittorrent_nb.qm b/src/lang/qbittorrent_nb.qm index 84be77a97..64756be44 100644 Binary files a/src/lang/qbittorrent_nb.qm and b/src/lang/qbittorrent_nb.qm differ diff --git a/src/lang/qbittorrent_nb.ts b/src/lang/qbittorrent_nb.ts index 4f506d4bf..35715e753 100644 --- a/src/lang/qbittorrent_nb.ts +++ b/src/lang/qbittorrent_nb.ts @@ -1423,7 +1423,7 @@ Copyright © 2006 av Christophe Dumez<br> GUI - + Open Torrent Files Åpne torrentfiler @@ -1436,30 +1436,30 @@ Copyright © 2006 av Christophe Dumez<br> Ønsker du å slette alle filene in nedlastingslisten? - - - - - + + + + + &Yes &Ja - - - - - + + + + + &No &Nei - + Are you sure you want to delete the selected item(s) in download list? Ønsker du å slette valgt(e) element(er) i nedlastingslisten? - + Finished Ferdig @@ -1500,7 +1500,7 @@ Copyright © 2006 av Christophe Dumez<br> Klarte ikke å opprette mappen: - + Torrent Files Torrentfiler @@ -1545,10 +1545,10 @@ Copyright © 2006 av Christophe Dumez<br> qBittorrent - - - - + + + + Are you sure? -- qBittorrent Er du sikker? -- qBittorrent @@ -1744,7 +1744,7 @@ Vennligst avslutt denne først. Ønsker du å slette valgte element(er) i nedlastningslisten, og fra lagringsenheten? - + Download finished Nedlastingen er fullført @@ -1762,15 +1762,15 @@ Vennligst avslutt denne først. Lese/Skrive feil - - + + qBittorrent %1 e.g: qBittorrent v0.x qBittorrent %1 - - + + Connection status: Tilkoblingsstatus: @@ -1833,21 +1833,21 @@ Vennligst avslutt denne først. qBittorrent %1 er startet. - - + + qBittorrent qBittorrent - - + + DL speed: %1 KiB/s e.g: Download speed: 10 KiB/s Nedlastingshastighet: %1 KiB/s - - + + UP speed: %1 KiB/s e.g: Upload speed: 10 KiB/s Opplastingshastighet: %1 KiB/s @@ -1868,7 +1868,7 @@ Vennligst avslutt denne først. Laster ikke ned - + Are you sure you want to quit? Ønsker du å avslutte qBittorrent? @@ -1931,14 +1931,14 @@ Vennligst avslutt denne først. '%1' gjenopptatt. - - + + %1 has finished downloading. e.g: xxx.avi has finished downloading. %1 er ferdig nedlastet. - + I/O Error i.e: Input/Output Error Lese/Skrive feil @@ -1954,12 +1954,12 @@ Vennligst avslutt denne først. Det har oppstått en feil (full disk?), '%1' er pauset. - + Connection Status: Tilkoblingsstatus: - + Online Tilkoblet @@ -1995,115 +1995,115 @@ Vennligst avslutt denne først. Laster ned '%1'... - + An error occured (full disk?), '%1' paused. e.g: An error occured (full disk?), 'xxx.avi' paused. Det har oppstått en feil (full disk?), '%1' er pauset. - + Search Søk - + RSS - - + + DHT support [OFF] - + PeX support [ON] - + The download list is not empty. Are you sure you want to quit qBittorrent? - - + + Downloads - + Are you sure you want to delete the selected item(s) in finished list? - + UPnP support [ON] - + Encryption support [ON] - + Encryption support [FORCED] - + Encryption support [OFF] - + Alt+1 shortcut to switch to first tab - + Alt+2 shortcut to switch to second tab - + Alt+4 shortcut to switch to fourth tab - + Url download error - + Couldn't download file at url: %1, reason: %2. - + Are you sure you want to delete the selected item(s) from download list and from hard drive? - + Are you sure you want to delete the selected item(s) from finished list and from hard drive? - + Alt+3 shortcut to switch to third tab - + An I/O error occured for torrent %1. Reason: %2 e.g: An error occured for torrent xxx.avi. @@ -2111,90 +2111,90 @@ Are you sure you want to quit qBittorrent? - + Ctrl+F shortcut to switch to search tab - + qBittorrent is bound to port: TCP/%1 e.g: qBittorrent is bound to port: 6881 - + UPnP support [OFF] - + NAT-PMP support [ON] - + NAT-PMP support [OFF] - + DHT support [ON], port: UDP/%1 - + Local Peer Discovery [ON] - + Local Peer Discovery support [OFF] - + qBittorrent %1 (DL: %2KiB/s, UP: %3KiB/s) %1 is qBittorrent version - - + + DL: %1 KiB/s - - + + UP: %1 KiB/s - - + + Ratio: %1 - - + + DHT: %1 nodes - - + + No direct connections. This may indicate network configuration problems. - + Uploads - + Options were saved successfully. Innstillingene ble lagret. @@ -2782,12 +2782,12 @@ p, li { white-space: pre-wrap; } Søkemotor - + Empty search pattern Ingen søketekst - + Please type a search pattern first Skriv en tekst å søke etter først @@ -2800,13 +2800,13 @@ p, li { white-space: pre-wrap; } Du må velge minst en søkemotor. - - + + Results Resultater - + Searching... Søker... @@ -2848,65 +2848,65 @@ Endringer: Ditt søkeprogramtillegg er allerede oppdatert. - + Cut - + Copy - + Paste - + Clear field - + Clear completion history - + Search Engine Søkemotor - - + + Search has finished Søket er ferdig - + An error occured during search... Det oppstod en feil under søket... - + Search aborted Søket er avbrutt - + Search returned no results Søket ga ingen resultater - + Results i.e: Search results Resultater - - + + Unknown @@ -3068,6 +3068,11 @@ Endringer: Download in sequential order (slower but good for previewing) + + + Skip file checking and start seeding immediately + + File name Filnavn @@ -3085,17 +3090,17 @@ Endringer: Last ned i riktig rekkefølge (tregere, men tilpasset forhåndsvisningen) - + Add to download list in paused state Legg til i nedlastningslisten som pauset - + Add Legg til - + Cancel Avbryt @@ -3112,22 +3117,22 @@ Endringer: velg - + Ignored - + Normal - + High - + Maximum @@ -3197,18 +3202,18 @@ Endringer: bittorrent - + %1 reached the maximum ratio you set. - + '%1' was removed permanently. 'xxx.avi' was removed permanently. - + '%1' was removed. 'xxx.avi' was removed. '%1' ble fjernet. @@ -3224,96 +3229,96 @@ Endringer: '%1' gjenopptatt. - + '%1' is not a valid magnet URI. - - - + + + '%1' is already in download list. e.g: 'xxx.avi' is already in download list. '%1' finnes allerede i nedlastingslisten. - - - + + + '%1' resumed. (fast resume) '/home/y/xxx.torrent' was resumed. (fast resume) '%1' ble gjenopptatt (hurtig gjenopptaging) - - - + + + '%1' added to download list. '/home/y/xxx.torrent' was added to download list. '%1' ble lagt til i nedlastingslisten. - - + + Unable to decode torrent file: '%1' e.g: Unable to decode torrent file: '/home/y/xxx.torrent' Klarte ikke å dekode torrentfilen: '%1' - + This file is either corrupted or this isn't a torrent. Denne filen er enten ødelagt, eller det er ikke en torrent. - + <font color='red'>%1</font> <i>was blocked due to your IP filter</i> x.y.z.w was blocked - + <font color='red'>%1</font> <i>was banned due to corrupt pieces</i> x.y.z.w was banned - + Recursive download of file %1 embedded in torrent %2 Recursive download of test.torrent embedded in torrent test2 - + Unable to decode %1 torrent file. - + Couldn't listen on any of the given ports. Klarte ikke å lytte på noen av de oppgitte portene. - + UPnP/NAT-PMP: Port mapping failure, message: %1 - + UPnP/NAT-PMP: Port mapping successful, message: %1 - + Fast resume data was rejected for torrent %1, checking again... - + Url seed lookup failed for url: %1, message: %2 - + Downloading '%1', please wait... e.g: Downloading 'xxx.torrent', please wait... Laster ned '%1'... @@ -3602,6 +3607,125 @@ Endringer: Angi minst en nettadresse. + + downloadThread + + + + I/O Error + Lese/Skrive feil + + + + The remote host name was not found (invalid hostname) + + + + + The operation was canceled + + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + + The connection to the remote server timed out + + + + + SSL/TLS handshake failed + + + + + The remote server refused the connection + + + + + The connection to the proxy server was refused + + + + + The proxy server closed the connection prematurely + + + + + The proxy host name was not found + + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + + The access to the remote content was denied (401) + + + + + The operation requested on the remote content is not permitted + + + + + The remote content was not found at the server (404) + + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + + The Network Access API cannot honor the request because the protocol is not known + + + + + The requested operation is invalid for this protocol + + + + + An unknown network-related error was detected + + + + + An unknown proxy-related error was detected + + + + + An unknown error related to the remote content was detected + + + + + A breakdown in protocol was detected + + + + + Unknown error + + + downloading @@ -3819,153 +3943,153 @@ Endringer: Nei - + Uninstall warning - + Some plugins could not be uninstalled because they are included in qBittorrent. Only the ones you added yourself can be uninstalled. However, those plugins were disabled. - + Uninstall success - + Select search plugins - - + + qBittorrent search plugins - - - - - - - - + + + + + + + + Search plugin install - - - + + + Yes - - - - + + + + No - - - - - - - - - - - - - + + + + + + + + + + + + + qBittorrent qBittorrent - + A more recent version of %1 search engine plugin is already installed. %1 is the name of the search engine - - - - - + + + + + Search plugin update Oppdatering av søkeprogramtillegget - - + + Sorry, update server is temporarily unavailable. Oppdateringstjeneren er midlertidig utilgjengelig. - + All your plugins are already up to date. - + %1 search engine plugin could not be updated, keeping old version. %1 is the name of the search engine - - - + + + %1 search engine plugin could not be installed. %1 is the name of the search engine - + All selected plugins were uninstalled successfully - + %1 search engine plugin was successfully updated. %1 is the name of the search engine - + %1 search engine plugin was successfully installed. %1 is the name of the search engine - + Search engine plugin archive could not be read. - - + + Sorry, %1 search plugin install failed. %1 is the name of the search engine - + New search engine plugin URL - + URL: @@ -4799,54 +4923,8 @@ However, those plugins were disabled. subDownloadThread - - Host is unreachable - - - - - File was not found (404) - - - - - Connection was denied - - - - - Url is invalid - - - - - Connection failure - - - - - Connection was timed out - - - - - Incorrect network interface - - - - - Unknown error - - - - I/O Error - Lese/Skrive feil - - - - Could not resolve proxy - + Lese/Skrive feil @@ -4908,12 +4986,12 @@ However, those plugins were disabled. Kunne ikke opprette nedlastingsfilstien - + Invalid file selection Ugyldig valg av filer - + You must select at least one file in the torrent Du må velge minst en fil fra torrenten diff --git a/src/lang/qbittorrent_nl.qm b/src/lang/qbittorrent_nl.qm index ff1480b5b..4557f2851 100644 Binary files a/src/lang/qbittorrent_nl.qm and b/src/lang/qbittorrent_nl.qm differ diff --git a/src/lang/qbittorrent_nl.ts b/src/lang/qbittorrent_nl.ts index 32a0cccbf..cf8353697 100644 --- a/src/lang/qbittorrent_nl.ts +++ b/src/lang/qbittorrent_nl.ts @@ -3191,6 +3191,10 @@ Changelog: Expand all Alles uitklappen + + Skip file checking and start seeding immediately + + authentication @@ -3603,6 +3607,101 @@ Changelog: Typ op zijn minst één URL. + + downloadThread + + I/O Error + I/O Fout + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Onbekende fout + + downloading @@ -4703,23 +4802,23 @@ selecteer alstublieft een er van: subDownloadThread Host is unreachable - Host is onbereikbaar + Host is onbereikbaar File was not found (404) - Bestand niet gevonden (404) + Bestand niet gevonden (404) Connection was denied - Verbinding niet toegestaan + Verbinding niet toegestaan Url is invalid - Url is ongeldig + Url is ongeldig I/O Error - I/O Fout + I/O Fout Connection forbidden (403) @@ -4735,23 +4834,23 @@ selecteer alstublieft een er van: Connection failure - Verbindingsfout + Verbindingsfout Connection was timed out - Verbinding verlopen + Verbinding verlopen Incorrect network interface - Verkeerde netwerkinterface + Verkeerde netwerkinterface Unknown error - Onbekende fout + Onbekende fout Could not resolve proxy - Kon proxy niet herleiden + Kon proxy niet herleiden diff --git a/src/lang/qbittorrent_pl.qm b/src/lang/qbittorrent_pl.qm index 02b7abb8a..967df4617 100644 Binary files a/src/lang/qbittorrent_pl.qm and b/src/lang/qbittorrent_pl.qm differ diff --git a/src/lang/qbittorrent_pl.ts b/src/lang/qbittorrent_pl.ts index c755fd12e..a5318af30 100644 --- a/src/lang/qbittorrent_pl.ts +++ b/src/lang/qbittorrent_pl.ts @@ -3286,6 +3286,10 @@ Zmiany: Expand all + + Skip file checking and start seeding immediately + + authentication @@ -3710,6 +3714,101 @@ Zmiany: Proszę podać przynajmniej jeden adres URL. + + downloadThread + + I/O Error + Błąd We/Wy + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Nieznany błąd + + downloading @@ -4816,23 +4915,23 @@ Jednak tamte wtyczki były wyłączone. subDownloadThread Host is unreachable - Host jest niedostępny + Host jest niedostępny File was not found (404) - Nie znaleziono pliku (404) + Nie znaleziono pliku (404) Connection was denied - Połączenie odrzucone + Połączenie odrzucone Url is invalid - Błędny URL + Błędny URL I/O Error - Błąd We/Wy + Błąd We/Wy Connection forbidden (403) @@ -4848,23 +4947,23 @@ Jednak tamte wtyczki były wyłączone. Connection failure - Brak połączenia + Brak połączenia Connection was timed out - Upłynął czas połączenia + Upłynął czas połączenia Incorrect network interface - Niepoprawny interfejs sieci + Niepoprawny interfejs sieci Unknown error - Nieznany błąd + Nieznany błąd Could not resolve proxy - Nie można określić proxy + Nie można określić proxy diff --git a/src/lang/qbittorrent_pt.qm b/src/lang/qbittorrent_pt.qm index 937345335..b04d210f1 100644 Binary files a/src/lang/qbittorrent_pt.qm and b/src/lang/qbittorrent_pt.qm differ diff --git a/src/lang/qbittorrent_pt.ts b/src/lang/qbittorrent_pt.ts index 1807257d9..9a48bf137 100644 --- a/src/lang/qbittorrent_pt.ts +++ b/src/lang/qbittorrent_pt.ts @@ -3198,6 +3198,10 @@ Log de mudanças: Download in sequential order (slower but good for previewing) Baixar em ordem de sequência (mais lento porém melhor para visualizar) + + Skip file checking and start seeding immediately + + authentication @@ -3622,6 +3626,101 @@ Log de mudanças: Por favor digite uma URL. + + downloadThread + + I/O Error + + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Erro desconhecido + + downloading @@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados. subDownloadThread Host is unreachable - O host é inalcançável + O host é inalcançável File was not found (404) - Arquivo não encontrado (404) + Arquivo não encontrado (404) Connection was denied - Conexão foi negada + Conexão foi negada Url is invalid - Url é inválida + Url é inválida Connection forbidden (403) @@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados. Connection failure - Conexão falhou + Conexão falhou Connection was timed out - Conexão esgotou o tempo + Conexão esgotou o tempo Incorrect network interface - Relação da rede incorreta + Relação da rede incorreta Unknown error - Erro desconhecido + Erro desconhecido Could not resolve proxy - Não pude resolver proxy + Não pude resolver proxy I/O Error - Erro de entrada e saída + Erro de entrada e saída diff --git a/src/lang/qbittorrent_pt_BR.qm b/src/lang/qbittorrent_pt_BR.qm index 937345335..b04d210f1 100644 Binary files a/src/lang/qbittorrent_pt_BR.qm and b/src/lang/qbittorrent_pt_BR.qm differ diff --git a/src/lang/qbittorrent_pt_BR.ts b/src/lang/qbittorrent_pt_BR.ts index 1807257d9..9a48bf137 100644 --- a/src/lang/qbittorrent_pt_BR.ts +++ b/src/lang/qbittorrent_pt_BR.ts @@ -3198,6 +3198,10 @@ Log de mudanças: Download in sequential order (slower but good for previewing) Baixar em ordem de sequência (mais lento porém melhor para visualizar) + + Skip file checking and start seeding immediately + + authentication @@ -3622,6 +3626,101 @@ Log de mudanças: Por favor digite uma URL. + + downloadThread + + I/O Error + + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Erro desconhecido + + downloading @@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados. subDownloadThread Host is unreachable - O host é inalcançável + O host é inalcançável File was not found (404) - Arquivo não encontrado (404) + Arquivo não encontrado (404) Connection was denied - Conexão foi negada + Conexão foi negada Url is invalid - Url é inválida + Url é inválida Connection forbidden (403) @@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados. Connection failure - Conexão falhou + Conexão falhou Connection was timed out - Conexão esgotou o tempo + Conexão esgotou o tempo Incorrect network interface - Relação da rede incorreta + Relação da rede incorreta Unknown error - Erro desconhecido + Erro desconhecido Could not resolve proxy - Não pude resolver proxy + Não pude resolver proxy I/O Error - Erro de entrada e saída + Erro de entrada e saída diff --git a/src/lang/qbittorrent_ro.qm b/src/lang/qbittorrent_ro.qm index 03db57264..be2db575e 100644 Binary files a/src/lang/qbittorrent_ro.qm and b/src/lang/qbittorrent_ro.qm differ diff --git a/src/lang/qbittorrent_ro.ts b/src/lang/qbittorrent_ro.ts index 809e7b7e1..53e3fa4d3 100644 --- a/src/lang/qbittorrent_ro.ts +++ b/src/lang/qbittorrent_ro.ts @@ -3027,6 +3027,10 @@ Changelog: Download in sequential order (slower but good for previewing) Descarcă în ordine secvențială (încet dar bine pentru preview) + + Skip file checking and start seeding immediately + + authentication @@ -3451,6 +3455,101 @@ Changelog: Vă rugăm să introduceţi cel puţin un URL. + + downloadThread + + I/O Error + Eroare de intrare/eşire + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Eroare necunoscută + + downloading @@ -4520,19 +4619,19 @@ Numai acele adăugate de dvs. pot fi dezinstalate. subDownloadThread Host is unreachable - Calculatorul nu poate fi accesat + Calculatorul nu poate fi accesat File was not found (404) - Fişierul nu a fost găsit(404) + Fişierul nu a fost găsit(404) Connection was denied - Conectarea a fost interzisă + Conectarea a fost interzisă Url is invalid - Adresa URL nu este validă + Adresa URL nu este validă Connection forbidden (403) @@ -4548,27 +4647,27 @@ Numai acele adăugate de dvs. pot fi dezinstalate. Connection failure - Conectarea eşuată + Conectarea eşuată Connection was timed out - Timpul de conectare expirat + Timpul de conectare expirat Incorrect network interface - Interfaţa de reţea incorectă + Interfaţa de reţea incorectă Unknown error - Eroare necunoscută + Eroare necunoscută Could not resolve proxy - Proxy nu a putut fi rezolvata + Proxy nu a putut fi rezolvata I/O Error - Eroare de intrare/eşire + Eroare de intrare/eşire diff --git a/src/lang/qbittorrent_ru.qm b/src/lang/qbittorrent_ru.qm index 77a04b0e9..c2197db2f 100644 Binary files a/src/lang/qbittorrent_ru.qm and b/src/lang/qbittorrent_ru.qm differ diff --git a/src/lang/qbittorrent_ru.ts b/src/lang/qbittorrent_ru.ts index 9155d9db3..f19b02a49 100644 --- a/src/lang/qbittorrent_ru.ts +++ b/src/lang/qbittorrent_ru.ts @@ -3216,6 +3216,10 @@ Changelog: Download in sequential order (slower but good for previewing) Загружать последовательно (медленнее но удобнее для предпросмотра) + + Skip file checking and start seeding immediately + + authentication @@ -3632,6 +3636,101 @@ Changelog: Пожалуста введите минимум один URL. + + downloadThread + + I/O Error + Ошибка ввода/вывода + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Неизвестная ошибка + + downloading @@ -4730,19 +4829,19 @@ However, those plugins were disabled. subDownloadThread Host is unreachable - Хост недоступен + Хост недоступен File was not found (404) - Файл не был найден (404) + Файл не был найден (404) Connection was denied - Подключение было отклонено + Подключение было отклонено Url is invalid - URL некорректен + URL некорректен Connection forbidden (403) @@ -4758,27 +4857,27 @@ However, those plugins were disabled. Connection failure - Соединение не установлено + Соединение не установлено Connection was timed out - Тайм-аут соединения + Тайм-аут соединения Incorrect network interface - Неправильный интерфейс сети + Неправильный интерфейс сети Unknown error - Неизвестная ошибка + Неизвестная ошибка Could not resolve proxy - Не удалось соединиться с Прокси + Не удалось соединиться с Прокси I/O Error - Ошибка ввода/вывода + Ошибка ввода/вывода diff --git a/src/lang/qbittorrent_sk.qm b/src/lang/qbittorrent_sk.qm index dd9cda522..0bfb9e512 100644 Binary files a/src/lang/qbittorrent_sk.qm and b/src/lang/qbittorrent_sk.qm differ diff --git a/src/lang/qbittorrent_sk.ts b/src/lang/qbittorrent_sk.ts index 5c3a5da0e..6a4195b21 100644 --- a/src/lang/qbittorrent_sk.ts +++ b/src/lang/qbittorrent_sk.ts @@ -3134,6 +3134,10 @@ Záznam zmien: Download in sequential order (slower but good for previewing) Sťahovať v postupnom poradí (pomalšie, ale lepšie pre náhľady) + + Skip file checking and start seeding immediately + + authentication @@ -3562,6 +3566,101 @@ Záznam zmien: Prosím, napíšte aspoň jedno URL. + + downloadThread + + I/O Error + V/V Chyba + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Neznáma chyba + + downloading @@ -4699,19 +4798,19 @@ Tieto moduly však boli vypnuté. subDownloadThread Host is unreachable - Hostiteľ je nedostupný + Hostiteľ je nedostupný File was not found (404) - Súbor nebol nájdený (404) + Súbor nebol nájdený (404) Connection was denied - Spojenie bolo odmietnuté + Spojenie bolo odmietnuté Url is invalid - URL je neplatné + URL je neplatné Connection forbidden (403) @@ -4727,27 +4826,27 @@ Tieto moduly však boli vypnuté. Connection failure - Chyba spojenia + Chyba spojenia Connection was timed out - Časový limit spojenia vypršal + Časový limit spojenia vypršal Incorrect network interface - Nesprávne sieťové rozhranie + Nesprávne sieťové rozhranie Unknown error - Neznáma chyba + Neznáma chyba Could not resolve proxy - Nebolo možné preložiť adresu proxy + Nebolo možné preložiť adresu proxy I/O Error - V/V Chyba + V/V Chyba diff --git a/src/lang/qbittorrent_sv.qm b/src/lang/qbittorrent_sv.qm index fe830dd0f..4aabb973a 100644 Binary files a/src/lang/qbittorrent_sv.qm and b/src/lang/qbittorrent_sv.qm differ diff --git a/src/lang/qbittorrent_sv.ts b/src/lang/qbittorrent_sv.ts index 1c8821c4a..98a57a400 100644 --- a/src/lang/qbittorrent_sv.ts +++ b/src/lang/qbittorrent_sv.ts @@ -1870,6 +1870,10 @@ p, li { white-space: pre-wrap; } Download in sequential order (slower but good for previewing) Hämta i sekventiell ordning (långsammare men bra för förhandsvisning) + + Skip file checking and start seeding immediately + + authentication @@ -2210,6 +2214,101 @@ p, li { white-space: pre-wrap; } Ange åtminstone en url. + + downloadThread + + I/O Error + In/Ut-fel + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Okänt fel + + downloading @@ -2952,43 +3051,43 @@ Dock har dessa insticksmoduler blivit inaktiverade. subDownloadThread Host is unreachable - Värden är inte nåbar + Värden är inte nåbar File was not found (404) - Filen kunde inte hittas (404) + Filen kunde inte hittas (404) Connection was denied - Anslutningen nekades + Anslutningen nekades Url is invalid - Url:en är ogiltig + Url:en är ogiltig Connection failure - Anslutningsfel + Anslutningsfel Connection was timed out - Tidsgränsen för anslutningen överstegs + Tidsgränsen för anslutningen överstegs Incorrect network interface - Felaktigt nätverksgränssnitt + Felaktigt nätverksgränssnitt Unknown error - Okänt fel + Okänt fel Could not resolve proxy - Kunde inte slå upp proxy + Kunde inte slå upp proxy I/O Error - In/Ut-fel + In/Ut-fel diff --git a/src/lang/qbittorrent_tr.qm b/src/lang/qbittorrent_tr.qm index 78537a0d1..6c9004801 100644 Binary files a/src/lang/qbittorrent_tr.qm and b/src/lang/qbittorrent_tr.qm differ diff --git a/src/lang/qbittorrent_tr.ts b/src/lang/qbittorrent_tr.ts index fad6b3370..6ec8f2eba 100644 --- a/src/lang/qbittorrent_tr.ts +++ b/src/lang/qbittorrent_tr.ts @@ -3197,6 +3197,10 @@ Changelog: Download in sequential order (slower but good for previewing) Doğru düzende indir (yavaş ama önizleme için iyi) + + Skip file checking and start seeding immediately + + authentication @@ -3609,6 +3613,101 @@ Changelog: Lütfen en az bir adres girin. + + downloadThread + + I/O Error + + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Bilinmeyen hata + + downloading @@ -4683,19 +4782,19 @@ Bununla birlikte, o eklentiler devre dışı. subDownloadThread Host is unreachable - Sunucuya erişilemiyor + Sunucuya erişilemiyor File was not found (404) - Dosya bulunamadı (404) + Dosya bulunamadı (404) Connection was denied - Bağlantı reddedildi + Bağlantı reddedildi Url is invalid - Adres geçersiz + Adres geçersiz Connection forbidden (403) @@ -4711,27 +4810,27 @@ Bununla birlikte, o eklentiler devre dışı. Connection failure - Bağlantı hatası + Bağlantı hatası Connection was timed out - Bağlantı zaman aşımına uğradı + Bağlantı zaman aşımına uğradı Incorrect network interface - Geçersiz ağ arayüzü + Geçersiz ağ arayüzü Unknown error - Bilinmeyen hata + Bilinmeyen hata Could not resolve proxy - Vekil çözümlenemedi + Vekil çözümlenemedi I/O Error - Girdi/Çıktı Hatası + Girdi/Çıktı Hatası diff --git a/src/lang/qbittorrent_uk.qm b/src/lang/qbittorrent_uk.qm index 983305b60..6d0b82553 100644 Binary files a/src/lang/qbittorrent_uk.qm and b/src/lang/qbittorrent_uk.qm differ diff --git a/src/lang/qbittorrent_uk.ts b/src/lang/qbittorrent_uk.ts index c6f2c26d8..ae418589f 100644 --- a/src/lang/qbittorrent_uk.ts +++ b/src/lang/qbittorrent_uk.ts @@ -3147,6 +3147,10 @@ Changelog: Download in sequential order (slower but good for previewing) + + Skip file checking and start seeding immediately + + authentication @@ -3571,6 +3575,101 @@ Changelog: Буд-ласка, введіть хоча б один URL. + + downloadThread + + I/O Error + + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + Невідома помилка + + downloading @@ -4647,19 +4746,19 @@ However, those plugins were disabled. subDownloadThread Host is unreachable - Хост недоступний + Хост недоступний File was not found (404) - Файл не знайдено (404) + Файл не знайдено (404) Connection was denied - Відмовлено у з'єднанні + Відмовлено у з'єднанні Url is invalid - Неправильний URL + Неправильний URL Connection forbidden (403) @@ -4675,27 +4774,19 @@ However, those plugins were disabled. Connection failure - Відмовлено у з'єднанні + Відмовлено у з'єднанні Connection was timed out - Вичерпано час на з'єднання + Вичерпано час на з'єднання Incorrect network interface - Неправильний мережевий інтерфейс + Неправильний мережевий інтерфейс Unknown error - Невідома помилка - - - Could not resolve proxy - - - - I/O Error - + Невідома помилка diff --git a/src/lang/qbittorrent_zh.qm b/src/lang/qbittorrent_zh.qm index 0e44d2cf0..925f3dd3f 100644 Binary files a/src/lang/qbittorrent_zh.qm and b/src/lang/qbittorrent_zh.qm differ diff --git a/src/lang/qbittorrent_zh.ts b/src/lang/qbittorrent_zh.ts index 561e00c7f..00e74001c 100644 --- a/src/lang/qbittorrent_zh.ts +++ b/src/lang/qbittorrent_zh.ts @@ -3379,6 +3379,10 @@ previewing) Download in sequential order (slower but good for previewing) 按顺序下载(速度有所减慢但利于预览) + + Skip file checking and start seeding immediately + + authentication @@ -3804,6 +3808,101 @@ enabled) 请至少输入一个URL. + + downloadThread + + I/O Error + 输入/输出错误 + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + 未知错误 + + downloading @@ -4973,19 +5072,19 @@ network. subDownloadThread Host is unreachable - 无法连接到主机 + 无法连接到主机 File was not found (404) - 文件未找到(404) + 文件未找到(404) Connection was denied - 连接被拒绝 + 连接被拒绝 Url is invalid - 网址无效 + 网址无效 Connection forbidden (403) @@ -5001,27 +5100,27 @@ network. Connection failure - 连接失败 + 连接失败 Connection was timed out - 连接超时 + 连接超时 Incorrect network interface - 不正确的网络关联 + 不正确的网络关联 Unknown error - 未知错误 + 未知错误 Could not resolve proxy - 无法联系到代理服务器 + 无法联系到代理服务器 I/O Error - 输入/输出错误 + 输入/输出错误 diff --git a/src/lang/qbittorrent_zh_TW.qm b/src/lang/qbittorrent_zh_TW.qm index 0ef8e0d80..14e2160dd 100644 Binary files a/src/lang/qbittorrent_zh_TW.qm and b/src/lang/qbittorrent_zh_TW.qm differ diff --git a/src/lang/qbittorrent_zh_TW.ts b/src/lang/qbittorrent_zh_TW.ts index dcf0f4020..2884bac13 100644 --- a/src/lang/qbittorrent_zh_TW.ts +++ b/src/lang/qbittorrent_zh_TW.ts @@ -1965,6 +1965,10 @@ p, li { white-space: pre-wrap; } Download in sequential order (slower but good for previewing) 按照順序下載 (較慢但較好預覽) + + Skip file checking and start seeding immediately + + authentication @@ -2305,6 +2309,101 @@ p, li { white-space: pre-wrap; } 請輸入至少一個 URL。 + + downloadThread + + I/O Error + I/O 錯誤 + + + The remote host name was not found (invalid hostname) + + + + The operation was canceled + + + + The remote server closed the connection prematurely, before the entire reply was received and processed + + + + The connection to the remote server timed out + + + + SSL/TLS handshake failed + + + + The remote server refused the connection + + + + The connection to the proxy server was refused + + + + The proxy server closed the connection prematurely + + + + The proxy host name was not found + + + + The connection to the proxy timed out or the proxy did not reply in time to the request sent + + + + The proxy requires authentication in order to honour the request but did not accept any credentials offered + + + + The access to the remote content was denied (401) + + + + The operation requested on the remote content is not permitted + + + + The remote content was not found at the server (404) + + + + The remote server requires authentication to serve the content but the credentials provided were not accepted + + + + The Network Access API cannot honor the request because the protocol is not known + + + + The requested operation is invalid for this protocol + + + + An unknown network-related error was detected + + + + An unknown proxy-related error was detected + + + + An unknown error related to the remote content was detected + + + + A breakdown in protocol was detected + + + + Unknown error + 未知的錯誤 + + downloading @@ -3067,43 +3166,43 @@ However, those plugins were disabled. subDownloadThread Host is unreachable - 無法連線到主機 + 無法連線到主機 File was not found (404) - 找不到檔案 (404) + 找不到檔案 (404) Connection was denied - 連線被拒絕 + 連線被拒絕 Url is invalid - URL 是無效的 + URL 是無效的 Connection failure - 連線失敗 + 連線失敗 Connection was timed out - 連線逾時 + 連線逾時 Incorrect network interface - 錯誤的網路介面 + 錯誤的網路介面 Unknown error - 未知的錯誤 + 未知的錯誤 Could not resolve proxy - 無法解析代理伺服器 + 無法解析代理伺服器 I/O Error - I/O 錯誤 + I/O 錯誤 diff --git a/src/main.cpp b/src/main.cpp index 1a9eb34de..72e17db15 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,14 +34,9 @@ #include #include #include -#ifdef QT_4_4 #include #include #include -#else -#include -#include -#endif #include #include "qgnomelook.h" #include @@ -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[]){ }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; }"); diff --git a/src/qtorrenthandle.cpp b/src/qtorrenthandle.cpp index e51389244..bb3ccb7ab 100644 --- a/src/qtorrenthandle.cpp +++ b/src/qtorrenthandle.cpp @@ -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 { return h.get_torrent_info().file_at(index).size; } -std::vector const& QTorrentHandle::trackers() const { +std::vector QTorrentHandle::trackers() const { Q_ASSERT(h.is_valid()); - return h.get_torrent_info().trackers(); + return h.trackers(); } torrent_status::state_t QTorrentHandle::state() const { diff --git a/src/qtorrenthandle.h b/src/qtorrenthandle.h index fa10bf54e..090a165b2 100644 --- a/src/qtorrenthandle.h +++ b/src/qtorrenthandle.h @@ -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 { bool is_queued() const; QString file_at(unsigned int index) const; size_type filesize_at(unsigned int index) const; - std::vector const& trackers() const; + std::vector trackers() const; torrent_status::state_t state() const; QString creator() const; QString comment() const; diff --git a/src/rss.cpp b/src/rss.cpp index dd86e80ef..c13e0bf63 100644 --- a/src/rss.cpp +++ b/src/rss.cpp @@ -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() { 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 listItem = sortNewsList(this->values()); + QList listItem = RssManager::sortNewsList(this->values()); int excess = nb_articles - max_articles; for(int i=0; i &list, RssItem *item) { + int i = 0; + while(i < list.size() && item->getDate() < list.at(i)->getDate()) { + ++i; + } + list.insert(i, item); + } + + static QList sortNewsList(QList news_list) { + QList new_list; + foreach(RssItem *item, news_list) { + insertSortElem(new_list, item); + } + return new_list; + } }; -static void insertSortElem(QList &list, RssItem *item) { - int i = 0; - while(i < list.size() && item->getDate() < list.at(i)->getDate()) { - ++i; - } - list.insert(i, item); -} -static QList sortNewsList(QList news_list) { - QList new_list; - foreach(RssItem *item, news_list) { - insertSortElem(new_list, item); - } - return new_list; -} + #endif diff --git a/src/rss_imp.cpp b/src/rss_imp.cpp index 7e484af39..814325085 100644 --- a/src/rss_imp.cpp +++ b/src/rss_imp.cpp @@ -431,9 +431,9 @@ void RSSImp::refreshNewsList(QTreeWidgetItem* item) { qDebug("Getting the list of news"); QList 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; diff --git a/src/src.pro b/src/src.pro index 2d4ae7815..115cc1b1b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -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) { # 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 \ diff --git a/src/torrentAddition.h b/src/torrentAddition.h index fe295fd8a..ba0d6d8a1 100644 --- a/src/torrentAddition.h +++ b/src/torrentAddition.h @@ -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")); diff --git a/src/torrentPersistentData.h b/src/torrentPersistentData.h index 72afc15c7..ab1657804 100644 --- a/src/torrentPersistentData.h +++ b/src/torrentPersistentData.h @@ -99,6 +99,25 @@ public: } + static void setSeedingMode(QString hash,bool seed){ + QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume")); + QHash all_data = settings.value("torrents-tmp", QHash()).toHash(); + QHash 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 all_data = settings.value("torrents-tmp", QHash()).toHash(); + QHash 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 all_data = settings.value("torrents-tmp", QHash()).toHash();