mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-13 16:53:08 -07:00
- Branched trunk in order to work on a major GUI remodeling. I will attempt to:
* Merge download and upload lists * Display torrent properties in the same tab (horizontal split)
This commit is contained in:
parent
edfd93496e
commit
7792b4f849
78 changed files with 7847 additions and 5368 deletions
6
AUTHORS
6
AUTHORS
|
@ -2,10 +2,10 @@ Author:
|
|||
* Christophe Dumez <chris@qbittorrent.org>
|
||||
|
||||
Contributors:
|
||||
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
||||
* Ishan Arora <ishan@qbittorrent.org>
|
||||
* Grigis Gaëtan <cipher16@gmail.com>
|
||||
* Stefanos Antaris <santaris@csd.auth.gr>
|
||||
* Ishan Arora <ishan@qbittorrent.org>
|
||||
* Arnaud Demaizière <arnaud@qbittorrent.org>
|
||||
* Grigis Gaëtan <cipher16@gmail.com>
|
||||
|
||||
Code from other projects:
|
||||
* files src/ico.cpp src/ico.h
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
- FEATURE: Tracker connections are now also subject to IP filtering
|
||||
- FEATURE: Include DHT traffic in the rate limiter
|
||||
- FEATURE: Support for bitcomet padding files
|
||||
- FEATURE: Option to skip file checking and start seeding immediately in torrent addition dialog (Stephanos Antaris)
|
||||
- FEATURE: Dropped dependency on libcurl
|
||||
- FEATURE: Dropped Qt 4.3 support (Qt >= 4.4 is required)
|
||||
|
||||
* Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
|
||||
- FEATURE: Added Magnet URI support
|
||||
|
|
14
INSTALL
14
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)
|
||||
|
||||
|
|
90
configure
vendored
90
configure
vendored
|
@ -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 <<EOT
|
|||
o = new qc_libboost(conf);
|
||||
o->required = true;
|
||||
o->disabled = false;
|
||||
o = new qc_libcurl(conf);
|
||||
o->required = true;
|
||||
o->disabled = false;
|
||||
o = new qc_libzzip(conf);
|
||||
o->required = false;
|
||||
o->disabled = false;
|
||||
|
@ -1501,8 +1419,6 @@ export BINDIR
|
|||
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -12,8 +12,5 @@
|
|||
<dep type='libboost'>
|
||||
<required/>
|
||||
</dep>
|
||||
<dep type='libcurl'>
|
||||
<required/>
|
||||
</dep>
|
||||
<dep type='libzzip'/>
|
||||
</qconf>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
|
@ -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);
|
||||
|
||||
}
|
||||
};
|
||||
|
|
398
src/GUI.cpp
398
src/GUI.cpp
|
@ -35,15 +35,10 @@
|
|||
#include <QStatusBar>
|
||||
#include <QFrame>
|
||||
#include <QClipboard>
|
||||
#ifdef QT_4_4
|
||||
#include <QLocalServer>
|
||||
#include <QLocalSocket>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#else
|
||||
#include <QTcpServer>
|
||||
#include <QTcpSocket>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <QCloseEvent>
|
||||
#include <QShortcut>
|
||||
|
@ -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,18 +194,8 @@ 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);
|
||||
|
@ -257,10 +241,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
connect(scrapeTimer, SIGNAL(timeout()), this, SLOT(scrapeTrackers()));
|
||||
scrapeTimer->start(20000);
|
||||
qDebug("GUI Built");
|
||||
}
|
||||
}
|
||||
|
||||
// Destructor
|
||||
GUI::~GUI() {
|
||||
// Destructor
|
||||
GUI::~GUI() {
|
||||
qDebug("GUI destruction");
|
||||
hide();
|
||||
// Do this as soon as possible
|
||||
|
@ -310,9 +294,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
qDebug("4");
|
||||
delete BTSession;
|
||||
qDebug("5");
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::displayRSSTab(bool enable) {
|
||||
void GUI::displayRSSTab(bool enable) {
|
||||
if(enable) {
|
||||
// RSS tab
|
||||
if(rssWidget == 0) {
|
||||
|
@ -326,9 +310,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
rssWidget = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::scrapeTrackers() {
|
||||
void GUI::scrapeTrackers() {
|
||||
std::vector<torrent_handle> torrents = BTSession->getTorrents();
|
||||
std::vector<torrent_handle>::iterator torrentIT;
|
||||
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
|
||||
|
@ -336,9 +320,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
if(!h.is_valid()) continue;
|
||||
h.scrape_tracker();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::updateRatio() {
|
||||
void GUI::updateRatio() {
|
||||
// Update ratio info
|
||||
float ratio = 1.;
|
||||
session_status sessionStatus = BTSession->getSessionStatus();
|
||||
|
@ -355,30 +339,30 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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 {
|
||||
void GUI::on_actionWebsite_triggered() const {
|
||||
QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://www.qbittorrent.org")));
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::on_actionDocumentation_triggered() const {
|
||||
void GUI::on_actionDocumentation_triggered() const {
|
||||
QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://wiki.qbittorrent.org")));
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::on_actionBugReport_triggered() const {
|
||||
void GUI::on_actionBugReport_triggered() const {
|
||||
QDesktopServices::openUrl(QUrl(QString::fromUtf8("http://bugs.qbittorrent.org")));
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::writeSettings() {
|
||||
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 {
|
||||
// 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;
|
||||
|
@ -395,33 +379,33 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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 {
|
||||
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 {
|
||||
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 {
|
||||
void GUI::resumedTorrent(QTorrentHandle& h) const {
|
||||
if(h.is_seed()) {
|
||||
finishedTorrentTab->updateTorrent(h);
|
||||
} else {
|
||||
downloadingTorrentTab->updateTorrent(h);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::checkedTorrent(QTorrentHandle& h) const {
|
||||
void GUI::checkedTorrent(QTorrentHandle& h) const {
|
||||
if(h.is_seed()) {
|
||||
// Move torrent to finished tab
|
||||
downloadingTorrentTab->deleteTorrent(h.hash());
|
||||
|
@ -434,10 +418,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
downloadingTorrentTab->addTorrent(h.hash());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Notification when disk is full
|
||||
void GUI::fullDiskError(QTorrentHandle& h, QString msg) const {
|
||||
// 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) {
|
||||
|
@ -448,9 +432,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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 {
|
||||
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();
|
||||
|
@ -463,9 +447,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}else{
|
||||
downloadingTorrentTab->pauseTorrent(h.hash());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::createKeyboardShortcuts() {
|
||||
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")));
|
||||
|
@ -489,36 +473,36 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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 {
|
||||
// Keyboard shortcuts slots
|
||||
void GUI::displayDownTab() const {
|
||||
tabs->setCurrentIndex(0);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::displayUpTab() const {
|
||||
void GUI::displayUpTab() const {
|
||||
tabs->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::displaySearchTab() const {
|
||||
void GUI::displaySearchTab() const {
|
||||
tabs->setCurrentIndex(2);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::displayRSSTab() const {
|
||||
void GUI::displayRSSTab() const {
|
||||
tabs->setCurrentIndex(3);
|
||||
}
|
||||
}
|
||||
|
||||
// End of keyboard shortcuts slots
|
||||
// End of keyboard shortcuts slots
|
||||
|
||||
void GUI::readSettings() {
|
||||
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() {
|
||||
void GUI::balloonClicked() {
|
||||
if(isHidden()) {
|
||||
show();
|
||||
if(isMinimized()) {
|
||||
|
@ -527,15 +511,15 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
raise();
|
||||
activateWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::acceptConnection() {
|
||||
void GUI::acceptConnection() {
|
||||
clientConnection = localServer->nextPendingConnection();
|
||||
connect(clientConnection, SIGNAL(disconnected()), this, SLOT(readParamsOnSocket()));
|
||||
qDebug("accepted connection from another instance");
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::readParamsOnSocket() {
|
||||
void GUI::readParamsOnSocket() {
|
||||
if(clientConnection) {
|
||||
QByteArray params = clientConnection->readAll();
|
||||
if(!params.isEmpty()) {
|
||||
|
@ -543,28 +527,28 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
qDebug("Received parameters from another instance");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::handleDownloadFromUrlFailure(QString url, QString reason) const{
|
||||
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() {
|
||||
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() {
|
||||
void GUI::on_actionShow_console_triggered() {
|
||||
new consoleDlg(this, BTSession);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::on_actionSet_global_download_limit_triggered() {
|
||||
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() {
|
||||
void GUI::on_actionPreview_file_triggered() {
|
||||
QString hash;
|
||||
switch(tabs->currentIndex()){
|
||||
case 0:
|
||||
|
@ -578,9 +562,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||
new previewSelect(this, h);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::openDestinationFolder() const {
|
||||
void GUI::openDestinationFolder() const {
|
||||
QStringList hashes;
|
||||
switch(tabs->currentIndex()){
|
||||
case 0:
|
||||
|
@ -601,9 +585,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
QDesktopServices::openUrl(QString("file://")+savePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::copyMagnetURI() const {
|
||||
void GUI::copyMagnetURI() const {
|
||||
QStringList hashes;
|
||||
switch(tabs->currentIndex()){
|
||||
case 0:
|
||||
|
@ -623,9 +607,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
}
|
||||
qApp->clipboard()->setText(magnet_uris.join("\n"));
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::goBuyPage() const {
|
||||
void GUI::goBuyPage() const {
|
||||
QStringList hashes;
|
||||
switch(tabs->currentIndex()){
|
||||
case 0:
|
||||
|
@ -642,31 +626,31 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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() {
|
||||
// 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) {
|
||||
void GUI::previewFile(QString filePath) {
|
||||
QDesktopServices::openUrl(QString("file://")+filePath);
|
||||
}
|
||||
}
|
||||
|
||||
int GUI::getCurrentTabIndex() const{
|
||||
int GUI::getCurrentTabIndex() const{
|
||||
if(isMinimized() || isHidden())
|
||||
return -1;
|
||||
return tabs->currentIndex();
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::setTabText(int index, QString text) const {
|
||||
void GUI::setTabText(int index, QString text) const {
|
||||
tabs->setTabText(index, text);
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle Main window visibility
|
||||
void GUI::toggleVisibility(QSystemTrayIcon::ActivationReason e) {
|
||||
// Toggle Main window visibility
|
||||
void GUI::toggleVisibility(QSystemTrayIcon::ActivationReason e) {
|
||||
if(e == QSystemTrayIcon::Trigger || e == QSystemTrayIcon::DoubleClick) {
|
||||
if(isHidden()) {
|
||||
show();
|
||||
|
@ -683,10 +667,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Center window
|
||||
QPoint GUI::screenCenter() const{
|
||||
// Center window
|
||||
QPoint GUI::screenCenter() const{
|
||||
int scrn = 0;
|
||||
QWidget *w = this->topLevelWidget();
|
||||
|
||||
|
@ -699,22 +683,22 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
|
||||
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() {
|
||||
// Display About Dialog
|
||||
void GUI::on_actionAbout_triggered() {
|
||||
//About dialog
|
||||
new about(this);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::showEvent(QShowEvent *e) {
|
||||
void GUI::showEvent(QShowEvent *e) {
|
||||
qDebug("** Show Event **");
|
||||
updateLists(true);
|
||||
e->accept();
|
||||
}
|
||||
}
|
||||
|
||||
// Called when we close the program
|
||||
void GUI::closeEvent(QCloseEvent *e) {
|
||||
// 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();
|
||||
|
@ -750,16 +734,16 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
// Accept exit
|
||||
e->accept();
|
||||
qApp->exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Display window to create a torrent
|
||||
void GUI::on_actionCreate_torrent_triggered() {
|
||||
// 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) {
|
||||
bool GUI::event(QEvent * e) {
|
||||
if(e->type() == QEvent::WindowStateChange) {
|
||||
//Now check to see if the window is minimised
|
||||
if(isMinimized()) {
|
||||
|
@ -771,10 +755,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
}
|
||||
return QMainWindow::event(e);
|
||||
}
|
||||
}
|
||||
|
||||
// Action executed when a file is dropped
|
||||
void GUI::dropEvent(QDropEvent *event) {
|
||||
// Action executed when a file is dropped
|
||||
void GUI::dropEvent(QDropEvent *event) {
|
||||
event->acceptProposedAction();
|
||||
QStringList files;
|
||||
if(event->mimeData()->hasUrls()) {
|
||||
|
@ -809,27 +793,27 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
BTSession->addTorrent(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Decode if we accept drag 'n drop or not
|
||||
void GUI::dragEnterEvent(QDragEnterEvent *event) {
|
||||
// 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() {
|
||||
// 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
|
||||
|
@ -852,10 +836,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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() {
|
||||
// delete from download list AND from hard drive
|
||||
void GUI::on_actionDelete_Permanently_triggered() {
|
||||
QStringList hashes;
|
||||
bool inDownloadList = true;
|
||||
switch(tabs->currentIndex()){
|
||||
|
@ -895,16 +879,16 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
// Remove the torrent
|
||||
BTSession->deleteTorrent(hash, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::deleteTorrent(QString hash) {
|
||||
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() {
|
||||
// delete selected items in the list
|
||||
void GUI::on_actionDelete_triggered() {
|
||||
QStringList hashes;
|
||||
bool inDownloadList = true;
|
||||
switch(tabs->currentIndex()){
|
||||
|
@ -947,13 +931,13 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
// 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) {
|
||||
// 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) {
|
||||
|
@ -975,13 +959,13 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::addTorrent(QString path) {
|
||||
void GUI::addTorrent(QString path) {
|
||||
BTSession->addTorrent(path);
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::processDownloadedFiles(QString path, QString url) {
|
||||
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) {
|
||||
|
@ -990,10 +974,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}else{
|
||||
BTSession->addTorrent(path, false, url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set BT session configuration
|
||||
void GUI::configureSession(bool deleteOptions) {
|
||||
// Set BT session configuration
|
||||
void GUI::configureSession(bool deleteOptions) {
|
||||
qDebug("Configuring session");
|
||||
// General
|
||||
bool new_displaySpeedInTitle = options->speedInTitleBar();
|
||||
|
@ -1261,20 +1245,20 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
options->deleteLater();
|
||||
}
|
||||
qDebug("Session configured");
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::updateUnfinishedTorrentNumber(unsigned int nb) {
|
||||
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) {
|
||||
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) {
|
||||
// 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);
|
||||
|
@ -1303,10 +1287,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle paused state of selected torrent
|
||||
void GUI::togglePausedState(QString hash) {
|
||||
// Toggle paused state of selected torrent
|
||||
void GUI::togglePausedState(QString hash) {
|
||||
if(tabs->currentIndex() > 1) return;
|
||||
bool inDownloadList = true;
|
||||
if(tabs->currentIndex() == 1)
|
||||
|
@ -1329,10 +1313,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pause All Downloads in DL list
|
||||
void GUI::on_actionPause_All_triggered() {
|
||||
// Pause All Downloads in DL list
|
||||
void GUI::on_actionPause_All_triggered() {
|
||||
bool change = false;
|
||||
std::vector<torrent_handle> torrents = BTSession->getTorrents();
|
||||
std::vector<torrent_handle>::iterator torrentIT;
|
||||
|
@ -1347,9 +1331,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList());
|
||||
updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::on_actionIncreasePriority_triggered() {
|
||||
void GUI::on_actionIncreasePriority_triggered() {
|
||||
if(tabs->currentIndex() != 0)
|
||||
return;
|
||||
QStringList hashes = downloadingTorrentTab->getSelectedTorrents();
|
||||
|
@ -1357,19 +1341,19 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
BTSession->increaseDlTorrentPriority(hash);
|
||||
}
|
||||
updateLists();
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::on_actionDecreasePriority_triggered() {
|
||||
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() {
|
||||
// pause selected items in the list
|
||||
void GUI::on_actionPause_triggered() {
|
||||
bool inDownloadList = true;
|
||||
if(tabs->currentIndex() > 1) return;
|
||||
if(tabs->currentIndex() == 1)
|
||||
|
@ -1393,10 +1377,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Resume All Downloads in DL list
|
||||
void GUI::on_actionStart_All_triggered() {
|
||||
// Resume All Downloads in DL list
|
||||
void GUI::on_actionStart_All_triggered() {
|
||||
bool change = false;
|
||||
std::vector<torrent_handle> torrents = BTSession->getTorrents();
|
||||
std::vector<torrent_handle>::iterator torrentIT;
|
||||
|
@ -1411,10 +1395,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
updateUnfinishedTorrentNumber(downloadingTorrentTab->getNbTorrentsInList());
|
||||
updateFinishedTorrentNumber(finishedTorrentTab->getNbTorrentsInList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// start selected items in the list
|
||||
void GUI::on_actionStart_triggered() {
|
||||
// start selected items in the list
|
||||
void GUI::on_actionStart_triggered() {
|
||||
bool inDownloadList = true;
|
||||
if(tabs->currentIndex() > 1) return;
|
||||
if(tabs->currentIndex() == 1)
|
||||
|
@ -1437,17 +1421,17 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::addUnauthenticatedTracker(QPair<QTorrentHandle,QString> tracker) {
|
||||
void GUI::addUnauthenticatedTracker(QPair<QTorrentHandle,QString> 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() {
|
||||
// display properties of selected items
|
||||
void GUI::on_actionTorrent_Properties_triggered() {
|
||||
if(tabs->currentIndex() > 1) return;
|
||||
switch(tabs->currentIndex()){
|
||||
case 1: // DL List
|
||||
|
@ -1456,9 +1440,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
default:
|
||||
downloadingTorrentTab->propertiesSelection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::updateLists(bool force) {
|
||||
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))));
|
||||
|
@ -1490,18 +1474,18 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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) {
|
||||
// Called when a tracker requires authentication
|
||||
void GUI::trackerAuthenticationRequired(QTorrentHandle& h) {
|
||||
if(unauthenticated_trackers.indexOf(QPair<QTorrentHandle,QString>(h, h.current_tracker())) < 0) {
|
||||
// Tracker login
|
||||
new trackerLogin(this, h);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check connection status and display right icon
|
||||
void GUI::checkConnectionStatus() {
|
||||
// Check connection status and display right icon
|
||||
void GUI::checkConnectionStatus() {
|
||||
// qDebug("Checking connection status");
|
||||
// Update Ratio
|
||||
updateRatio();
|
||||
|
@ -1534,15 +1518,15 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection status:")+QString::fromUtf8("</b><br>")+QString::fromUtf8("<i>")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("</i>"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
/*****************************************************
|
||||
* *
|
||||
* Utils *
|
||||
* *
|
||||
*****************************************************/
|
||||
|
||||
void GUI::downloadFromURLList(const QStringList& url_list) {
|
||||
void GUI::downloadFromURLList(const QStringList& url_list) {
|
||||
foreach(const QString url, url_list) {
|
||||
if(url.startsWith("magnet:", Qt::CaseInsensitive)) {
|
||||
BTSession->addMagnetUri(url);
|
||||
|
@ -1550,15 +1534,15 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
BTSession->downloadFromUrl(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
/*****************************************************
|
||||
* *
|
||||
* Options *
|
||||
* *
|
||||
*****************************************************/
|
||||
|
||||
void GUI::createSystrayDelayed() {
|
||||
void GUI::createSystrayDelayed() {
|
||||
static int timeout = 10;
|
||||
if(QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
// Ok, systray integration is now supported
|
||||
|
@ -1577,9 +1561,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
delete systrayCreator;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::createTrayIcon() {
|
||||
void GUI::createTrayIcon() {
|
||||
// Tray icon
|
||||
#ifdef Q_WS_WIN
|
||||
myTrayIcon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent16.png")), this);
|
||||
|
@ -1604,17 +1588,17 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
// 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() {
|
||||
// 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) {
|
||||
// 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) {
|
||||
|
@ -1639,9 +1623,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
}
|
||||
// Update session
|
||||
configureSession(deleteOptions);
|
||||
}
|
||||
}
|
||||
|
||||
bool GUI::initWebUi(QString username, QString password, int port) {
|
||||
bool GUI::initWebUi(QString username, QString password, int port) {
|
||||
if(httpServer)
|
||||
httpServer->close();
|
||||
else
|
||||
|
@ -1653,18 +1637,18 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||
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() {
|
||||
// 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&)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
14
src/GUI.h
14
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> httpServer;
|
||||
// Misc
|
||||
#ifdef QT_4_4
|
||||
QLocalServer *localServer;
|
||||
QLocalSocket *clientConnection;
|
||||
#else
|
||||
QTcpServer *localServer;
|
||||
QTcpSocket *clientConnection;
|
||||
#endif
|
||||
|
||||
protected slots:
|
||||
// GUI related slots
|
||||
|
|
|
@ -52,10 +52,10 @@ class about : public QDialog, private Ui::AboutDlg{
|
|||
lb_name->setText(QString::fromUtf8("<b><h1>")+tr("qBittorrent")+QString::fromUtf8(" "VERSION"</h1></b>"));
|
||||
// Thanks
|
||||
te_thanks->append(QString::fromUtf8("<a name='top'></a>"));
|
||||
te_thanks->append(QString::fromUtf8("<ul><li>I would like to thank sourceforge.net for hosting qBittorrent project.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I am happy that Ishan Arora and Arnaud Demaizière are contributing to the project as developers. Their help is greatly appreciated</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, RPM packager, for his help and support.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I am grateful to Peter Koeleman (peter@qbittorrent.org) who is helping port qBittorrent to Windows.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<ul><li>I would first like to thank sourceforge.net for hosting qBittorrent project and for their support.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I am pleased that people from all over the world are contributing to qBittorrent: Ishan Arora (India), Arnaud Demaizière (France) and Stephanos Antaris (Greece). Their help is greatly appreciated</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I also want to thank Jeffery Fernandez (jeffery@qbittorrent.org), project consultant, for his help and support since the beginning of this project.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>I am grateful to Peter Koeleman (peter@qbittorrent.org) for working on qBittorrent port to Windows.</li>"));
|
||||
te_thanks->append(QString::fromUtf8("<li>Thanks a lot to our graphist Mateusz Toboła (tobejodok@qbittorrent.org) for his great work.</li></ul><br><br>"));
|
||||
te_thanks->scrollToAnchor(QString::fromUtf8("top"));
|
||||
// Translation
|
||||
|
|
|
@ -207,6 +207,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="addInSeed">
|
||||
<property name="text">
|
||||
<string>Skip file checking and start seeding immediately</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="addInPause">
|
||||
<property name="text">
|
||||
|
|
|
@ -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,6 +866,7 @@ void bittorrent::loadFilesPriorities(QTorrentHandle &h) {
|
|||
qDebug("Setting file piority to %d", priority);
|
||||
v.push_back(priority);
|
||||
}
|
||||
if(v.size() == (unsigned int)h.num_files())
|
||||
h.prioritize_files(v);
|
||||
}
|
||||
|
||||
|
@ -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<QPair<int, QString> > hashes;
|
||||
|
@ -1690,7 +1722,7 @@ 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()) {
|
||||
Q_ASSERT(!settings.value("v1_4_x_torrent_imported", false).toBool());
|
||||
// Import old torrent
|
||||
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
|
||||
QStringList fileNames;
|
||||
|
@ -1764,5 +1796,4 @@ void bittorrent::importOldTorrents() {
|
|||
}
|
||||
settings.setValue("v1_4_x_torrent_imported", true);
|
||||
std::cout << "Successfully imported torrents from v1.4.x (or previous) instance" << std::endl;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,215 +29,140 @@
|
|||
*/
|
||||
|
||||
#include "downloadThread.h"
|
||||
#include <iostream>
|
||||
#include <QTemporaryFile>
|
||||
#include <QSettings>
|
||||
#include <stdio.h>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkProxy>
|
||||
|
||||
#define MAX_THREADS 3
|
||||
/** Download Thread **/
|
||||
|
||||
// http://curl.rtin.bz/libcurl/c/libcurl-errors.html
|
||||
QString subDownloadThread::errorCodeToString(CURLcode status) {
|
||||
switch(status){
|
||||
case CURLE_FTP_CANT_GET_HOST:
|
||||
case CURLE_COULDNT_RESOLVE_HOST:
|
||||
return tr("Host is unreachable");
|
||||
case CURLE_READ_ERROR:
|
||||
case CURLE_FILE_COULDNT_READ_FILE:
|
||||
return tr("File was not found (404)");
|
||||
case CURLE_FTP_ACCESS_DENIED:
|
||||
case CURLE_LOGIN_DENIED:
|
||||
case CURLE_FTP_USER_PASSWORD_INCORRECT:
|
||||
return tr("Connection was denied");
|
||||
case CURLE_URL_MALFORMAT:
|
||||
return tr("Url is invalid");
|
||||
case CURLE_COULDNT_RESOLVE_PROXY:
|
||||
return tr("Could not resolve proxy");
|
||||
//case 5:
|
||||
// return tr("Connection forbidden (403)");
|
||||
//case 6:
|
||||
// return tr("Connection was not authorized (401)");
|
||||
//case 7:
|
||||
// return tr("Content has moved (301)");
|
||||
case CURLE_COULDNT_CONNECT:
|
||||
return tr("Connection failure");
|
||||
case CURLE_OPERATION_TIMEOUTED:
|
||||
return tr("Connection was timed out");
|
||||
case CURLE_INTERFACE_FAILED:
|
||||
return tr("Incorrect network interface");
|
||||
default:
|
||||
return tr("Unknown error");
|
||||
}
|
||||
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
|
||||
networkManager = new QNetworkAccessManager(this);
|
||||
connect(networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*)));
|
||||
}
|
||||
|
||||
subDownloadThread::subDownloadThread(QObject *parent, QString url) : QThread(parent), url(url), abort(false){}
|
||||
|
||||
subDownloadThread::~subDownloadThread(){
|
||||
abort = true;
|
||||
wait();
|
||||
downloadThread::~downloadThread(){
|
||||
delete networkManager;
|
||||
}
|
||||
|
||||
void subDownloadThread::run(){
|
||||
// Get a unique filename
|
||||
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());
|
||||
} else {
|
||||
emit downloadFailureST(this, url, tr("I/O Error"));
|
||||
return;
|
||||
}
|
||||
if(reply->open(QIODevice::ReadOnly)) {
|
||||
tmpfile.write(reply->readAll());
|
||||
reply->close();
|
||||
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;
|
||||
// Send finished signal
|
||||
emit downloadFinished(url, filePath);
|
||||
} else {
|
||||
// Error when reading the request
|
||||
tmpfile.close();
|
||||
emit downloadFailure(url, tr("I/O Error"));
|
||||
}
|
||||
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
|
||||
} else {
|
||||
emit downloadFailure(url, tr("I/O Error"));
|
||||
}
|
||||
}
|
||||
// Clean up
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
||||
void downloadThread::downloadUrl(QString url){
|
||||
// Update proxy settings
|
||||
applyProxySettings();
|
||||
// Process download request
|
||||
networkManager->get(QNetworkRequest(QUrl(url)));
|
||||
}
|
||||
|
||||
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());
|
||||
curl_easy_setopt(curl, CURLOPT_PROXYPORT, (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");
|
||||
curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
|
||||
proxy.setType(QNetworkProxy::Socks5Proxy);
|
||||
} else {
|
||||
proxy.setType(QNetworkProxy::HttpProxy);
|
||||
}
|
||||
// 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();
|
||||
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (username+QString(":")+password).toLocal8Bit().data());
|
||||
proxy.setPassword(password);
|
||||
}
|
||||
}
|
||||
// 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";
|
||||
proxy.setType(QNetworkProxy::NoProxy);
|
||||
}
|
||||
networkManager->setProxy(proxy);
|
||||
}
|
||||
|
||||
/** Download Thread **/
|
||||
|
||||
downloadThread::downloadThread(QObject* parent) : QThread(parent), abort(false){}
|
||||
|
||||
downloadThread::~downloadThread(){
|
||||
mutex.lock();
|
||||
abort = true;
|
||||
condition.wakeOne();
|
||||
mutex.unlock();
|
||||
//qDebug("downloadThread deleting subthreads...");
|
||||
qDeleteAll(subThreads);
|
||||
//qDebug("downloadThread deleted subthreads");
|
||||
wait();
|
||||
}
|
||||
|
||||
void downloadThread::downloadUrl(QString url){
|
||||
QMutexLocker locker(&mutex);
|
||||
urls_queue.enqueue(url);
|
||||
if(!isRunning()){
|
||||
start();
|
||||
}else{
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
void downloadThread::run(){
|
||||
forever{
|
||||
if(abort) {
|
||||
qDebug("DownloadThread aborting...");
|
||||
return;
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -31,64 +31,34 @@
|
|||
#ifndef DOWNLOADTHREAD_H
|
||||
#define DOWNLOADTHREAD_H
|
||||
|
||||
#include <QThread>
|
||||
#include <QFile>
|
||||
#include <QTemporaryFile>
|
||||
#include <QMutex>
|
||||
#include <QMutexLocker>
|
||||
#include <QWaitCondition>
|
||||
#include <QStringList>
|
||||
#include <curl/curl.h>
|
||||
#include <QQueue>
|
||||
#include <QNetworkReply>
|
||||
#include <QObject>
|
||||
|
||||
class subDownloadThread : public QThread {
|
||||
Q_OBJECT
|
||||
private:
|
||||
QString url;
|
||||
bool abort;
|
||||
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<QString> urls_queue;
|
||||
QMutex mutex;
|
||||
QWaitCondition condition;
|
||||
bool abort;
|
||||
QList<subDownloadThread*> subThreads;
|
||||
private:
|
||||
QNetworkAccessManager *networkManager;
|
||||
|
||||
signals:
|
||||
signals:
|
||||
void downloadFinished(QString url, QString file_path);
|
||||
void downloadFailure(QString url, QString reason);
|
||||
|
||||
public:
|
||||
public:
|
||||
downloadThread(QObject* parent);
|
||||
|
||||
~downloadThread();
|
||||
|
||||
void downloadUrl(QString url);
|
||||
void setProxy(QString IP, int port, QString username, QString password);
|
||||
//void setProxy(QString IP, int port, QString username, QString password);
|
||||
|
||||
protected:
|
||||
void run();
|
||||
protected:
|
||||
QString errorCodeToString(QNetworkReply::NetworkError status);
|
||||
void applyProxySettings();
|
||||
|
||||
protected slots:
|
||||
void processDlFinished(QNetworkReply* reply);
|
||||
|
||||
protected slots:
|
||||
void propagateDownloadedFile(subDownloadThread* st, QString url, QString path);
|
||||
void propagateDownloadFailure(subDownloadThread* st, QString url, QString reason);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include <QFileDialog>
|
||||
#include <QDropEvent>
|
||||
#include <QInputDialog>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
#ifdef HAVE_ZZIP
|
||||
#include <zzip/zzip.h>
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -3191,6 +3191,10 @@ Changelog:
|
|||
<source>Expand all</source>
|
||||
<translation>Alles uitklappen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3603,6 +3607,101 @@ Changelog:
|
|||
<translation>Typ op zijn minst één URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">I/O Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Onbekende fout</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4703,23 +4802,23 @@ selecteer alstublieft een er van:</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Host is onbereikbaar</translation>
|
||||
<translation type="obsolete">Host is onbereikbaar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Bestand niet gevonden (404)</translation>
|
||||
<translation type="obsolete">Bestand niet gevonden (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Verbinding niet toegestaan</translation>
|
||||
<translation type="obsolete">Verbinding niet toegestaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Url is ongeldig</translation>
|
||||
<translation type="obsolete">Url is ongeldig</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>I/O Fout</translation>
|
||||
<translation type="obsolete">I/O Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4735,23 +4834,23 @@ selecteer alstublieft een er van:</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Verbindingsfout</translation>
|
||||
<translation type="obsolete">Verbindingsfout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Verbinding verlopen</translation>
|
||||
<translation type="obsolete">Verbinding verlopen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Verkeerde netwerkinterface</translation>
|
||||
<translation type="obsolete">Verkeerde netwerkinterface</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Onbekende fout</translation>
|
||||
<translation type="obsolete">Onbekende fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Kon proxy niet herleiden</translation>
|
||||
<translation type="obsolete">Kon proxy niet herleiden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3286,6 +3286,10 @@ Zmiany:
|
|||
<source>Expand all</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3710,6 +3714,101 @@ Zmiany:
|
|||
<translation>Proszę podać przynajmniej jeden adres URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">Błąd We/Wy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Nieznany błąd</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4816,23 +4915,23 @@ Jednak tamte wtyczki były wyłączone.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Host jest niedostępny</translation>
|
||||
<translation type="obsolete">Host jest niedostępny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Nie znaleziono pliku (404)</translation>
|
||||
<translation type="obsolete">Nie znaleziono pliku (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Połączenie odrzucone</translation>
|
||||
<translation type="obsolete">Połączenie odrzucone</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Błędny URL</translation>
|
||||
<translation type="obsolete">Błędny URL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">Błąd We/Wy</translation>
|
||||
<translation type="obsolete">Błąd We/Wy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4848,23 +4947,23 @@ Jednak tamte wtyczki były wyłączone.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Brak połączenia</translation>
|
||||
<translation type="obsolete">Brak połączenia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Upłynął czas połączenia</translation>
|
||||
<translation type="obsolete">Upłynął czas połączenia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Niepoprawny interfejs sieci</translation>
|
||||
<translation type="obsolete">Niepoprawny interfejs sieci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Nieznany błąd</translation>
|
||||
<translation type="obsolete">Nieznany błąd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Nie można określić proxy</translation>
|
||||
<translation type="obsolete">Nie można określić proxy</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3198,6 +3198,10 @@ Log de mudanças:</translation>
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Baixar em ordem de sequência (mais lento porém melhor para visualizar)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3622,6 +3626,101 @@ Log de mudanças:</translation>
|
|||
<translation>Por favor digite uma URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Erro desconhecido</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>O host é inalcançável</translation>
|
||||
<translation type="obsolete">O host é inalcançável</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Arquivo não encontrado (404)</translation>
|
||||
<translation type="obsolete">Arquivo não encontrado (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Conexão foi negada</translation>
|
||||
<translation type="obsolete">Conexão foi negada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Url é inválida</translation>
|
||||
<translation type="obsolete">Url é inválida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Conexão falhou</translation>
|
||||
<translation type="obsolete">Conexão falhou</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Conexão esgotou o tempo</translation>
|
||||
<translation type="obsolete">Conexão esgotou o tempo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Relação da rede incorreta</translation>
|
||||
<translation type="obsolete">Relação da rede incorreta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Erro desconhecido</translation>
|
||||
<translation type="obsolete">Erro desconhecido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Não pude resolver proxy</translation>
|
||||
<translation type="obsolete">Não pude resolver proxy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>Erro de entrada e saída</translation>
|
||||
<translation type="obsolete">Erro de entrada e saída</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3198,6 +3198,10 @@ Log de mudanças:</translation>
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Baixar em ordem de sequência (mais lento porém melhor para visualizar)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3622,6 +3626,101 @@ Log de mudanças:</translation>
|
|||
<translation>Por favor digite uma URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Erro desconhecido</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4683,19 +4782,19 @@ Portanto os plugins foram desabilitados.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>O host é inalcançável</translation>
|
||||
<translation type="obsolete">O host é inalcançável</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Arquivo não encontrado (404)</translation>
|
||||
<translation type="obsolete">Arquivo não encontrado (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Conexão foi negada</translation>
|
||||
<translation type="obsolete">Conexão foi negada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Url é inválida</translation>
|
||||
<translation type="obsolete">Url é inválida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4711,27 +4810,27 @@ Portanto os plugins foram desabilitados.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Conexão falhou</translation>
|
||||
<translation type="obsolete">Conexão falhou</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Conexão esgotou o tempo</translation>
|
||||
<translation type="obsolete">Conexão esgotou o tempo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Relação da rede incorreta</translation>
|
||||
<translation type="obsolete">Relação da rede incorreta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Erro desconhecido</translation>
|
||||
<translation type="obsolete">Erro desconhecido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Não pude resolver proxy</translation>
|
||||
<translation type="obsolete">Não pude resolver proxy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>Erro de entrada e saída</translation>
|
||||
<translation type="obsolete">Erro de entrada e saída</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3027,6 +3027,10 @@ Changelog:
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Descarcă în ordine secvențială (încet dar bine pentru preview)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3451,6 +3455,101 @@ Changelog:
|
|||
<translation>Vă rugăm să introduceţi cel puţin un URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">Eroare de intrare/eşire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Eroare necunoscută</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4520,19 +4619,19 @@ Numai acele adăugate de dvs. pot fi dezinstalate.
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Calculatorul nu poate fi accesat</translation>
|
||||
<translation type="obsolete">Calculatorul nu poate fi accesat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Fişierul nu a fost găsit(404)</translation>
|
||||
<translation type="obsolete">Fişierul nu a fost găsit(404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Conectarea a fost interzisă</translation>
|
||||
<translation type="obsolete">Conectarea a fost interzisă</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Adresa URL nu este validă</translation>
|
||||
<translation type="obsolete">Adresa URL nu este validă</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4548,27 +4647,27 @@ Numai acele adăugate de dvs. pot fi dezinstalate.
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Conectarea eşuată</translation>
|
||||
<translation type="obsolete">Conectarea eşuată</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Timpul de conectare expirat</translation>
|
||||
<translation type="obsolete">Timpul de conectare expirat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Interfaţa de reţea incorectă</translation>
|
||||
<translation type="obsolete">Interfaţa de reţea incorectă</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Eroare necunoscută</translation>
|
||||
<translation type="obsolete">Eroare necunoscută</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Proxy nu a putut fi rezolvata</translation>
|
||||
<translation type="obsolete">Proxy nu a putut fi rezolvata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>Eroare de intrare/eşire</translation>
|
||||
<translation type="obsolete">Eroare de intrare/eşire</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3216,6 +3216,10 @@ Changelog:
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Загружать последовательно (медленнее но удобнее для предпросмотра)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3632,6 +3636,101 @@ Changelog:
|
|||
<translation>Пожалуста введите минимум один URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">Ошибка ввода/вывода</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Неизвестная ошибка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4730,19 +4829,19 @@ However, those plugins were disabled.</source>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Хост недоступен</translation>
|
||||
<translation type="obsolete">Хост недоступен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Файл не был найден (404)</translation>
|
||||
<translation type="obsolete">Файл не был найден (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Подключение было отклонено</translation>
|
||||
<translation type="obsolete">Подключение было отклонено</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>URL некорректен</translation>
|
||||
<translation type="obsolete">URL некорректен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4758,27 +4857,27 @@ However, those plugins were disabled.</source>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Соединение не установлено</translation>
|
||||
<translation type="obsolete">Соединение не установлено</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Тайм-аут соединения</translation>
|
||||
<translation type="obsolete">Тайм-аут соединения</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Неправильный интерфейс сети</translation>
|
||||
<translation type="obsolete">Неправильный интерфейс сети</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Неизвестная ошибка</translation>
|
||||
<translation type="obsolete">Неизвестная ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Не удалось соединиться с Прокси</translation>
|
||||
<translation type="obsolete">Не удалось соединиться с Прокси</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>Ошибка ввода/вывода</translation>
|
||||
<translation type="obsolete">Ошибка ввода/вывода</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3134,6 +3134,10 @@ Záznam zmien:</translation>
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Sťahovať v postupnom poradí (pomalšie, ale lepšie pre náhľady)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3562,6 +3566,101 @@ Záznam zmien:</translation>
|
|||
<translation>Prosím, napíšte aspoň jedno URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">V/V Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Neznáma chyba</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4699,19 +4798,19 @@ Tieto moduly však boli vypnuté.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Hostiteľ je nedostupný</translation>
|
||||
<translation type="obsolete">Hostiteľ je nedostupný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Súbor nebol nájdený (404)</translation>
|
||||
<translation type="obsolete">Súbor nebol nájdený (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Spojenie bolo odmietnuté</translation>
|
||||
<translation type="obsolete">Spojenie bolo odmietnuté</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>URL je neplatné</translation>
|
||||
<translation type="obsolete">URL je neplatné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4727,27 +4826,27 @@ Tieto moduly však boli vypnuté.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Chyba spojenia</translation>
|
||||
<translation type="obsolete">Chyba spojenia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Časový limit spojenia vypršal</translation>
|
||||
<translation type="obsolete">Časový limit spojenia vypršal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Nesprávne sieťové rozhranie</translation>
|
||||
<translation type="obsolete">Nesprávne sieťové rozhranie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Neznáma chyba</translation>
|
||||
<translation type="obsolete">Neznáma chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Nebolo možné preložiť adresu proxy</translation>
|
||||
<translation type="obsolete">Nebolo možné preložiť adresu proxy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>V/V Chyba</translation>
|
||||
<translation type="obsolete">V/V Chyba</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -1870,6 +1870,10 @@ p, li { white-space: pre-wrap; }
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Hämta i sekventiell ordning (långsammare men bra för förhandsvisning)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -2210,6 +2214,101 @@ p, li { white-space: pre-wrap; }
|
|||
<translation>Ange åtminstone en url.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">In/Ut-fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Okänt fel</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -2952,43 +3051,43 @@ Dock har dessa insticksmoduler blivit inaktiverade.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Värden är inte nåbar</translation>
|
||||
<translation type="obsolete">Värden är inte nåbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Filen kunde inte hittas (404)</translation>
|
||||
<translation type="obsolete">Filen kunde inte hittas (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Anslutningen nekades</translation>
|
||||
<translation type="obsolete">Anslutningen nekades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Url:en är ogiltig</translation>
|
||||
<translation type="obsolete">Url:en är ogiltig</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Anslutningsfel</translation>
|
||||
<translation type="obsolete">Anslutningsfel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Tidsgränsen för anslutningen överstegs</translation>
|
||||
<translation type="obsolete">Tidsgränsen för anslutningen överstegs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Felaktigt nätverksgränssnitt</translation>
|
||||
<translation type="obsolete">Felaktigt nätverksgränssnitt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Okänt fel</translation>
|
||||
<translation type="obsolete">Okänt fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Kunde inte slå upp proxy</translation>
|
||||
<translation type="obsolete">Kunde inte slå upp proxy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>In/Ut-fel</translation>
|
||||
<translation type="obsolete">In/Ut-fel</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3197,6 +3197,10 @@ Changelog:
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>Doğru düzende indir (yavaş ama önizleme için iyi)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3609,6 +3613,101 @@ Changelog:
|
|||
<translation>Lütfen en az bir adres girin.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Bilinmeyen hata</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4683,19 +4782,19 @@ Bununla birlikte, o eklentiler devre dışı.</translation>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Sunucuya erişilemiyor</translation>
|
||||
<translation type="obsolete">Sunucuya erişilemiyor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Dosya bulunamadı (404)</translation>
|
||||
<translation type="obsolete">Dosya bulunamadı (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Bağlantı reddedildi</translation>
|
||||
<translation type="obsolete">Bağlantı reddedildi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Adres geçersiz</translation>
|
||||
<translation type="obsolete">Adres geçersiz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4711,27 +4810,27 @@ Bununla birlikte, o eklentiler devre dışı.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Bağlantı hatası</translation>
|
||||
<translation type="obsolete">Bağlantı hatası</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Bağlantı zaman aşımına uğradı</translation>
|
||||
<translation type="obsolete">Bağlantı zaman aşımına uğradı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Geçersiz ağ arayüzü</translation>
|
||||
<translation type="obsolete">Geçersiz ağ arayüzü</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Bilinmeyen hata</translation>
|
||||
<translation type="obsolete">Bilinmeyen hata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>Vekil çözümlenemedi</translation>
|
||||
<translation type="obsolete">Vekil çözümlenemedi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>Girdi/Çıktı Hatası</translation>
|
||||
<translation type="obsolete">Girdi/Çıktı Hatası</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3147,6 +3147,10 @@ Changelog:
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3571,6 +3575,101 @@ Changelog:
|
|||
<translation>Буд-ласка, введіть хоча б один URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">Невідома помилка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4647,19 +4746,19 @@ However, those plugins were disabled.</source>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>Хост недоступний</translation>
|
||||
<translation type="obsolete">Хост недоступний</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>Файл не знайдено (404)</translation>
|
||||
<translation type="obsolete">Файл не знайдено (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>Відмовлено у з'єднанні</translation>
|
||||
<translation type="obsolete">Відмовлено у з'єднанні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>Неправильний URL</translation>
|
||||
<translation type="obsolete">Неправильний URL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -4675,27 +4774,19 @@ However, those plugins were disabled.</source>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>Відмовлено у з'єднанні</translation>
|
||||
<translation type="obsolete">Відмовлено у з'єднанні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>Вичерпано час на з'єднання</translation>
|
||||
<translation type="obsolete">Вичерпано час на з'єднання</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>Неправильний мережевий інтерфейс</translation>
|
||||
<translation type="obsolete">Неправильний мережевий інтерфейс</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>Невідома помилка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="obsolete">Невідома помилка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -3379,6 +3379,10 @@ previewing)</source>
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>按顺序下载(速度有所减慢但利于预览)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -3804,6 +3808,101 @@ enabled)</source>
|
|||
<translation>请至少输入一个URL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">输入/输出错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">未知错误</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -4973,19 +5072,19 @@ network.</source>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>无法连接到主机</translation>
|
||||
<translation type="obsolete">无法连接到主机</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>文件未找到(404)</translation>
|
||||
<translation type="obsolete">文件未找到(404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>连接被拒绝</translation>
|
||||
<translation type="obsolete">连接被拒绝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>网址无效</translation>
|
||||
<translation type="obsolete">网址无效</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection forbidden (403)</source>
|
||||
|
@ -5001,27 +5100,27 @@ network.</source>
|
|||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>连接失败</translation>
|
||||
<translation type="obsolete">连接失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>连接超时</translation>
|
||||
<translation type="obsolete">连接超时</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>不正确的网络关联</translation>
|
||||
<translation type="obsolete">不正确的网络关联</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>未知错误</translation>
|
||||
<translation type="obsolete">未知错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>无法联系到代理服务器</translation>
|
||||
<translation type="obsolete">无法联系到代理服务器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>输入/输出错误</translation>
|
||||
<translation type="obsolete">输入/输出错误</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Binary file not shown.
|
@ -1965,6 +1965,10 @@ p, li { white-space: pre-wrap; }
|
|||
<source>Download in sequential order (slower but good for previewing)</source>
|
||||
<translation>按照順序下載 (較慢但較好預覽)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Skip file checking and start seeding immediately</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>authentication</name>
|
||||
|
@ -2305,6 +2309,101 @@ p, li { white-space: pre-wrap; }
|
|||
<translation>請輸入至少一個 URL。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloadThread</name>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation type="unfinished">I/O 錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote host name was not found (invalid hostname)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation was canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server closed the connection prematurely, before the entire reply was received and processed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the remote server timed out</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSL/TLS handshake failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server refused the connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy server was refused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy server closed the connection prematurely</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy host name was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The access to the remote content was denied (401)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The operation requested on the remote content is not permitted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote content was not found at the server (404)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Network Access API cannot honor the request because the protocol is not known</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The requested operation is invalid for this protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown network-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown proxy-related error was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An unknown error related to the remote content was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A breakdown in protocol was detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation type="unfinished">未知的錯誤</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>downloading</name>
|
||||
<message>
|
||||
|
@ -3067,43 +3166,43 @@ However, those plugins were disabled.</source>
|
|||
<name>subDownloadThread</name>
|
||||
<message>
|
||||
<source>Host is unreachable</source>
|
||||
<translation>無法連線到主機</translation>
|
||||
<translation type="obsolete">無法連線到主機</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File was not found (404)</source>
|
||||
<translation>找不到檔案 (404)</translation>
|
||||
<translation type="obsolete">找不到檔案 (404)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was denied</source>
|
||||
<translation>連線被拒絕</translation>
|
||||
<translation type="obsolete">連線被拒絕</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Url is invalid</source>
|
||||
<translation>URL 是無效的</translation>
|
||||
<translation type="obsolete">URL 是無效的</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection failure</source>
|
||||
<translation>連線失敗</translation>
|
||||
<translation type="obsolete">連線失敗</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connection was timed out</source>
|
||||
<translation>連線逾時</translation>
|
||||
<translation type="obsolete">連線逾時</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Incorrect network interface</source>
|
||||
<translation>錯誤的網路介面</translation>
|
||||
<translation type="obsolete">錯誤的網路介面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown error</source>
|
||||
<translation>未知的錯誤</translation>
|
||||
<translation type="obsolete">未知的錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not resolve proxy</source>
|
||||
<translation>無法解析代理伺服器</translation>
|
||||
<translation type="obsolete">無法解析代理伺服器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>I/O Error</source>
|
||||
<translation>I/O 錯誤</translation>
|
||||
<translation type="obsolete">I/O 錯誤</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
22
src/main.cpp
22
src/main.cpp
|
@ -34,14 +34,9 @@
|
|||
#include <QFile>
|
||||
#include <QSplashScreen>
|
||||
#include <QSettings>
|
||||
#ifdef QT_4_4
|
||||
#include <QLocalSocket>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#else
|
||||
#include <QTcpSocket>
|
||||
#include <QHostAddress>
|
||||
#endif
|
||||
#include <QPlastiqueStyle>
|
||||
#include "qgnomelook.h"
|
||||
#include <QMotifStyle>
|
||||
|
@ -143,19 +138,9 @@ int main(int argc, char *argv[]){
|
|||
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; }");
|
||||
|
|
|
@ -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<announce_entry> const& QTorrentHandle::trackers() const {
|
||||
std::vector<announce_entry> QTorrentHandle::trackers() const {
|
||||
Q_ASSERT(h.is_valid());
|
||||
return h.get_torrent_info().trackers();
|
||||
return h.trackers();
|
||||
}
|
||||
|
||||
torrent_status::state_t QTorrentHandle::state() const {
|
||||
|
|
|
@ -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<announce_entry> const& trackers() const;
|
||||
std::vector<announce_entry> trackers() const;
|
||||
torrent_status::state_t state() const;
|
||||
QString creator() const;
|
||||
QString comment() const;
|
||||
|
|
12
src/rss.cpp
12
src/rss.cpp
|
@ -561,11 +561,15 @@ 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())) {
|
||||
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
|
||||
if(!already_exists || !(*this)[item->getTitle()]->isRead()) {
|
||||
FeedFilter * matching_filter = FeedFilters::getFeedFilters(url).matches(item->getTitle());
|
||||
if(matching_filter != 0) {
|
||||
// Download the torrent
|
||||
|
@ -581,11 +585,13 @@ short RssStream::readDoc(const QDomDocument& doc) {
|
|||
BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl());
|
||||
}
|
||||
// Item was downloaded, consider it as Read
|
||||
item->setRead();
|
||||
(*this)[item->getTitle()]->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<RssItem*> listItem = sortNewsList(this->values());
|
||||
QList<RssItem*> listItem = RssManager::sortNewsList(this->values());
|
||||
int excess = nb_articles - max_articles;
|
||||
for(int i=0; i<excess; ++i){
|
||||
RssItem *lastItem = listItem.takeLast();
|
||||
|
|
16
src/rss.h
16
src/rss.h
|
@ -492,23 +492,25 @@ public slots:
|
|||
public:
|
||||
RssManager(bittorrent *BTSession);
|
||||
~RssManager();
|
||||
|
||||
};
|
||||
|
||||
static void insertSortElem(QList<RssItem*> &list, RssItem *item) {
|
||||
static void insertSortElem(QList<RssItem*> &list, RssItem *item) {
|
||||
int i = 0;
|
||||
while(i < list.size() && item->getDate() < list.at(i)->getDate()) {
|
||||
++i;
|
||||
}
|
||||
list.insert(i, item);
|
||||
}
|
||||
}
|
||||
|
||||
static QList<RssItem*> sortNewsList(QList<RssItem*> news_list) {
|
||||
static QList<RssItem*> sortNewsList(QList<RssItem*> news_list) {
|
||||
QList<RssItem*> new_list;
|
||||
foreach(RssItem *item, news_list) {
|
||||
insertSortElem(new_list, item);
|
||||
}
|
||||
return new_list;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -431,9 +431,9 @@ void RSSImp::refreshNewsList(QTreeWidgetItem* item) {
|
|||
qDebug("Getting the list of news");
|
||||
QList<RssItem*> news;
|
||||
if(rss_item == rssmanager)
|
||||
news = sortNewsList(rss_item->getUnreadNewsList());
|
||||
news = RssManager::sortNewsList(rss_item->getUnreadNewsList());
|
||||
else
|
||||
news = sortNewsList(rss_item->getNewsList());
|
||||
news = RssManager::sortNewsList(rss_item->getNewsList());
|
||||
// Clear the list first
|
||||
textBrowser->clear();
|
||||
previous_news = 0;
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -99,6 +99,25 @@ public:
|
|||
|
||||
}
|
||||
|
||||
static void setSeedingMode(QString hash,bool seed){
|
||||
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();
|
||||
QHash<QString, QVariant> data = all_data[hash].toHash();
|
||||
data["seeding"] = seed;
|
||||
all_data[hash] = data;
|
||||
settings.setValue("torrents-tmp", all_data);
|
||||
}
|
||||
|
||||
static bool isSeedingMode(QString hash){
|
||||
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();
|
||||
QHash<QString, QVariant> data = all_data[hash].toHash();
|
||||
if(data.contains("seeding"))
|
||||
return data["seeding"].toBool();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static QString getSavePath(QString hash) {
|
||||
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
QHash<QString, QVariant> all_data = settings.value("torrents-tmp", QHash<QString, QVariant>()).toHash();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue