1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-14 11:52:15 +02:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Christophe Dumez
c506a01dea Tagged v2.2.0 release 2010-03-14 21:00:56 +00:00
65 changed files with 3414 additions and 4281 deletions

View File

@@ -1,22 +1,3 @@
* Mon Mar 22 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.2
- FEATURE: DHT port can be set from Web UI
- BUGFIX: Fix possible crash with folder scanning
- BUGFIX: Fix Mac compilation
- BUGFIX: Save fast resume data every 3 minutes (for robustness)
- I18N: Updated Polish translation (thanks Szymon Świerkosz)
* Sat Mar 20 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.1
- FEATURE: Display pieces that are being downloaded
- FEATURE: Added back folder watching in Web UI
- FEATURE: Added back file prioritizing in Web UI
- BUGFIX: Fix compilation with Qt 4.4
- BUGFIX: Fix Web UI compatibility with Safari
- BUGFIX: Fix progress display with cleanlook style
- BUGFIX: Fix file filtering in complex torrents
- BUGFIX: Ask for user confirmation for recursive torrent download
- BUGFIX: Fix "add file" dialog in torrent creation tool
- BUGFIX: Fix "Ctrl+A" in Web UI
* Sun Mar 14 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.0
- FEATURE: User can set alternative speed limits for fast toggling
- FEATURE: Bandwidth scheduler (automatically use alternative speed limits for a given period)

View File

@@ -117,7 +117,6 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
connect(BTSession, SIGNAL(newDownloadedTorrent(QString, QString)), this, SLOT(processDownloadedFiles(QString, QString)));
connect(BTSession, SIGNAL(downloadFromUrlFailure(QString, QString)), this, SLOT(handleDownloadFromUrlFailure(QString, QString)));
connect(BTSession, SIGNAL(alternativeSpeedsModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool)));
connect(BTSession, SIGNAL(recursiveTorrentDownloadPossible(QTorrentHandle&)), this, SLOT(askRecursiveTorrentDownloadConfirmation(QTorrentHandle&)));
qDebug("create tabWidget");
tabs = new QTabWidget();
@@ -414,12 +413,6 @@ void GUI::readParamsOnSocket() {
}
}
void GUI::askRecursiveTorrentDownloadConfirmation(QTorrentHandle &h) {
if(QMessageBox::question(this, tr("Recursive download confirmation"), tr("The torrent %1 contains torrent files, do you want to proceed with their download?").arg(h.name()), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) {
BTSession->recursiveTorrentDownload(h);
}
}
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));

View File

@@ -116,7 +116,6 @@ protected slots:
void addUnauthenticatedTracker(const QPair<QTorrentHandle,QString> &tracker);
void processDownloadedFiles(QString path, QString url);
void finishedTorrent(QTorrentHandle& h) const;
void askRecursiveTorrentDownloadConfirmation(QTorrentHandle &h);
// Options slots
void on_actionOptions_triggered();
void optionsSaved();

View File

@@ -1,6 +1,6 @@
[Desktop Entry]
Categories=Qt;Network;P2P;
Comment=V2.2.2
Comment=V2.2.0
Exec=qbittorrent %f
GenericName=Bittorrent client
GenericName[bg]=Торент клиент

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -31,6 +31,7 @@
#include <QDir>
#include <QDateTime>
#include <QString>
#include <QTimer>
#include <QSettings>
#include <stdlib.h>
@@ -69,13 +70,13 @@ enum VersionType { NORMAL,ALPHA,BETA,RELEASE_CANDIDATE,DEVEL };
// Main constructor
Bittorrent::Bittorrent()
: m_scanFolders(ScanFoldersModel::instance(this)),
preAllocateAll(false), addInPause(false), ratio_limit(-1),
UPnPEnabled(false), NATPMPEnabled(false), LSDEnabled(false),
DHTEnabled(false), current_dht_port(0), queueingEnabled(false),
torrentExport(false), exiting(false)
: m_scanFolders(ScanFoldersModel::instance(this)),
preAllocateAll(false), addInPause(false), ratio_limit(-1),
UPnPEnabled(false), NATPMPEnabled(false), LSDEnabled(false),
DHTEnabled(false), current_dht_port(0), queueingEnabled(false),
torrentExport(false), exiting(false)
#ifndef DISABLE_GUI
, geoipDBLoaded(false), resolve_countries(false)
, geoipDBLoaded(false), resolve_countries(false)
#endif
{
// To avoid some exceptions
@@ -131,8 +132,6 @@ Bittorrent::Bittorrent()
timerAlerts = new QTimer();
connect(timerAlerts, SIGNAL(timeout()), this, SLOT(readAlerts()));
timerAlerts->start(3000);
connect(&resumeDataTimer, SIGNAL(timeout()), this, SLOT(saveTempFastResumeData()));
resumeDataTimer.start(180000); // 3min
// To download from urls
downloader = new downloadThread(this);
connect(downloader, SIGNAL(downloadFinished(QString, QString)), this, SLOT(processDownloadedFile(QString, QString)));
@@ -198,10 +197,6 @@ void Bittorrent::preAllocateAllFiles(bool b) {
}
}
ScanFoldersModel* Bittorrent::getScanFoldersModel() const {
return m_scanFolders;
}
void Bittorrent::deleteBigRatios() {
if(ratio_limit == -1) return;
std::vector<torrent_handle> torrents = getTorrents();
@@ -281,14 +276,12 @@ void Bittorrent::configureSession() {
startTorrentsInPause(Preferences::addTorrentsInPause());
// * Scan dirs
const QStringList &scan_dirs = Preferences::getScanDirs();
QVariantList downloadInDirList = Preferences::getDownloadInScanDirs();
while(scan_dirs.size() > downloadInDirList.size()) {
downloadInDirList << QVariant(false);
}
int i = 0;
foreach (const QString &dir, scan_dirs) {
m_scanFolders->addPath(dir, downloadInDirList.at(i).toBool());
++i;
m_scanFolders->addPath(dir);
}
const QVariantList &downloadInDirList = Preferences::getDownloadInScanDirs();
for (int i = 0; i < downloadInDirList.count(); ++i) {
m_scanFolders->setDownloadAtPath(i, downloadInDirList.at(i).toBool());
}
// * Export Dir
const bool newTorrentExport = Preferences::isTorrentExportEnabled();
@@ -1396,23 +1389,10 @@ float Bittorrent::getRealRatio(QString hash) const{
return ratio;
}
void Bittorrent::saveTempFastResumeData() {
std::vector<torrent_handle> torrents = s->get_torrents();
std::vector<torrent_handle>::iterator torrentIT;
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
QTorrentHandle h = QTorrentHandle(*torrentIT);
if(!h.is_valid() || !h.has_metadata() || h.is_seed() || h.is_paused()) continue;
if(h.state() == torrent_status::checking_files || h.state() == torrent_status::queued_for_checking) continue;
qDebug("Saving fastresume data for %s", qPrintable(h.name()));
h.save_resume_data();
}
}
// Only save fast resume data for unfinished and unpaused torrents (Optimization)
// Called periodically and on exit
void Bittorrent::saveFastResumeData() {
// Stop listening for alerts
resumeDataTimer.stop();
timerAlerts->stop();
int num_resume_data = 0;
// Pause session
@@ -1830,26 +1810,6 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
#endif
}
void Bittorrent::recursiveTorrentDownload(const QTorrentHandle &h) {
for(int i=0; i<h.get_torrent_info().num_files(); ++i) {
const QString &torrent_relpath = misc::toQString(h.get_torrent_info().file_at(i).path.string());
if(torrent_relpath.endsWith(".torrent")) {
addConsoleMessage(tr("Recursive download of file %1 embedded in torrent %2", "Recursive download of test.torrent embedded in torrent test2").arg(torrent_relpath).arg(h.name()));
const QString &torrent_fullpath = h.save_path()+QDir::separator()+torrent_relpath;
try {
boost::intrusive_ptr<torrent_info> t = new torrent_info(torrent_fullpath.toLocal8Bit().constData());
const QString &sub_hash = misc::toQString(t->info_hash());
// Passing the save path along to the sub torrent file
TorrentTempData::setSavePath(sub_hash, h.save_path());
addTorrent(torrent_fullpath);
} catch(std::exception&) {
qDebug("Caught error loading torrent");
addConsoleMessage(tr("Unable to decode %1 torrent file.").arg(torrent_fullpath), QString::fromUtf8("red"));
}
}
}
}
// Read alerts sent by the Bittorrent session
void Bittorrent::readAlerts() {
// look at session alerts and display some infos
@@ -1877,21 +1837,18 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
const bool was_already_seeded = TorrentPersistentData::isSeed(hash);
if(!was_already_seeded) {
h.save_resume_data();
qDebug("Checking if the torrent contains torrent files to download");
// Check if there are torrent files inside
for(int i=0; i<h.get_torrent_info().num_files(); ++i) {
const QString &torrent_relpath = misc::toQString(h.get_torrent_info().file_at(i).path.string());
if(torrent_relpath.endsWith(".torrent")) {
qDebug("Found possible recursive torrent download.");
addConsoleMessage(tr("Recursive download of file %1 embedded in torrent %2", "Recursive download of test.torrent embedded in torrent test2").arg(torrent_relpath).arg(h.name()));
const QString &torrent_fullpath = h.save_path()+QDir::separator()+torrent_relpath;
qDebug("Full subtorrent path is %s", qPrintable(torrent_fullpath));
try {
boost::intrusive_ptr<torrent_info> t = new torrent_info(torrent_fullpath.toLocal8Bit().constData());
if(t->is_valid()) {
qDebug("emitting recursiveTorrentDownloadPossible()");
emit recursiveTorrentDownloadPossible(h);
break;
}
const QString &sub_hash = misc::toQString(t->info_hash());
// Passing the save path along to the sub torrent file
TorrentTempData::setSavePath(sub_hash, h.save_path());
addTorrent(torrent_fullpath);
} catch(std::exception&) {
qDebug("Caught error loading torrent");
addConsoleMessage(tr("Unable to decode %1 torrent file.").arg(torrent_fullpath), QString::fromUtf8("red"));
@@ -2001,9 +1958,12 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
}
}
#endif
else if (torrent_paused_alert* p = dynamic_cast<torrent_paused_alert*>(a.get())) {
p->handle.save_resume_data();
/*else if (torrent_paused_alert* p = dynamic_cast<torrent_paused_alert*>(a.get())) {
QTorrentHandle h(p->handle);
if(h.is_valid()) {
emit torrentPaused(h);
}
}*/
else if (tracker_error_alert* p = dynamic_cast<tracker_error_alert*>(a.get())) {
// Level: fatal
QTorrentHandle h(p->handle);
@@ -2314,7 +2274,10 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
torrent_queue.push(qMakePair(prio, hash));
}
// Resume downloads
int prio = -1;
while(!torrent_queue.empty()) {
int new_prio = torrent_queue.top().first;
Q_ASSERT(new_prio >= prio);
const QString &hash = torrent_queue.top().second;
torrent_queue.pop();
qDebug("Starting up torrent %s", qPrintable(hash));

View File

@@ -41,7 +41,6 @@
#include <QPalette>
#endif
#include <QPointer>
#include <QTimer>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
@@ -116,7 +115,6 @@ public:
qlonglong getETA(QString hash);
bool useTemporaryFolder() const;
QString getDefaultSavePath() const;
ScanFoldersModel* getScanFoldersModel() const;
public slots:
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
@@ -183,7 +181,6 @@ public slots:
void downloadFromURLList(const QStringList& urls);
void configureSession();
void banIP(QString ip);
void recursiveTorrentDownload(const QTorrentHandle &h);
protected:
QString getSavePath(QString hash, bool fromScanDir = false, QString filePath = QString());
@@ -195,7 +192,6 @@ protected slots:
void deleteBigRatios();
void takeETASamples();
void exportTorrentFiles(QString path);
void saveTempFastResumeData();
signals:
void addedTorrent(QTorrentHandle& h);
@@ -214,7 +210,6 @@ signals:
void savePathChanged(QTorrentHandle &h);
void newConsoleMessage(QString msg);
void alternativeSpeedsModeChanged(bool alternative);
void recursiveTorrentDownloadPossible(QTorrentHandle &h);
private:
// Bittorrent
@@ -224,7 +219,6 @@ private:
QMap<QUrl, QString> savepath_fromurl;
QHash<QString, QHash<QString, TrackerInfos> > trackersInfos;
QStringList torrentsToPausedAfterChecking;
QTimer resumeDataTimer;
// Ratio
QPointer<QTimer> BigRatioTimer;
// HTTP

View File

@@ -85,7 +85,7 @@ void createtorrent::on_addFolder_button_clicked(){
}
void createtorrent::on_addFile_button_clicked(){
QString file = QFileDialog::getOpenFileName(this, tr("Select a file to add to the torrent"), QDir::homePath());
QString file = QFileDialog::getOpenFileName(this, tr("Select a file to add to the torrent"), QDir::homePath(), QString(), 0, QFileDialog::ShowDirsOnly);
if(!file.isEmpty())
textInputPath->setText(file);
}

View File

@@ -53,49 +53,34 @@ public:
setFixedHeight(BAR_HEIGHT);
}
void setProgress(const bitfield &pieces, const bitfield &downloading_pieces) {
void setProgress(bitfield pieces) {
if(pieces.empty()) {
// Empty bar
QPixmap pix = QPixmap(1, 1);
pix.fill();
pixmap = pix;
} else {
const int nb_pieces = pieces.size();
int nb_pieces = pieces.size();
// Reduce the number of pieces before creating the pixmap
// otherwise it can crash when there are too many pieces
if(nb_pieces > width()) {
const int ratio = floor(nb_pieces/(double)width());
std::vector<bool> scaled_pieces;
std::vector<bool> scaled_downloading;
int ratio = floor(nb_pieces/(double)width());
QVector<bool> scaled_pieces;
for(int i=0; i<nb_pieces; i+= ratio) {
bool have = true;
for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
if(!pieces[i]) { have = false; break; }
}
scaled_pieces.push_back(have);
if(have) {
scaled_downloading.push_back(false);
} else {
bool downloading = false;
for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
if(downloading_pieces[i]) { downloading = true; break; }
}
scaled_downloading.push_back(downloading);
}
scaled_pieces << have;
}
QPixmap pix = QPixmap(scaled_pieces.size(), 1);
pix.fill();
QPainter painter(&pix);
for(uint i=0; i<scaled_pieces.size(); ++i) {
if(scaled_pieces[i]) {
for(int i=0; i<scaled_pieces.size(); ++i) {
if(scaled_pieces[i])
painter.setPen(Qt::blue);
} else {
if(scaled_downloading[i]) {
painter.setPen(Qt::yellow);
} else {
painter.setPen(Qt::white);
}
}
else
painter.setPen(Qt::white);
painter.drawPoint(i,0);
}
pixmap = pix;
@@ -104,15 +89,10 @@ public:
pix.fill();
QPainter painter(&pix);
for(uint i=0; i<pieces.size(); ++i) {
if(pieces[i]) {
if(pieces[i])
painter.setPen(Qt::blue);
} else {
if(downloading_pieces[i]) {
painter.setPen(Qt::yellow);
} else {
painter.setPen(Qt::white);
}
}
else
painter.setPen(Qt::white);
painter.drawPoint(i,0);
}
pixmap = pix;

View File

@@ -31,7 +31,6 @@
#include "eventmanager.h"
#include "bittorrent.h"
#include "scannedfoldersmodel.h"
#include "misc.h"
#include "preferences.h"
//#include "proplistdelegate.h"
@@ -130,29 +129,10 @@ void EventManager::setGlobalPreferences(QVariantMap m) const {
Preferences::setTempPathEnabled(m["temp_path_enabled"].toBool());
if(m.contains("temp_path"))
Preferences::setTempPath(m["temp_path"].toString());
if(m.contains("scan_dirs") && m.contains("download_in_scan_dirs")) {
QVariantList download_at_path = m["download_in_scan_dirs"].toList();
QStringList old_folders = Preferences::getScanDirs();
QStringList new_folders = m["scan_dirs"].toStringList();
if(download_at_path.size() == new_folders.size()) {
Preferences::setScanDirs(new_folders);
Preferences::setDownloadInScanDirs(download_at_path);
foreach(const QString &old_folder, old_folders) {
// Update deleted folders
if(!new_folders.contains(old_folder)) {
BTSession->getScanFoldersModel()->removePath(old_folder);
}
}
int i = 0;
foreach(const QString &new_folder, new_folders) {
// Update new folders
if(!old_folders.contains(new_folder)) {
BTSession->getScanFoldersModel()->addPath(new_folder, download_at_path.at(i).toBool());
}
++i;
}
}
}
if(m.contains("scan_dirs"))
Preferences::setScanDirs(m["scan_dirs"].toStringList());
if(m.contains("download_in_scan_dirs"))
Preferences::setDownloadInScanDirs(m["download_in_scan_dirs"].toList());
if(m.contains("export_dir"))
Preferences::setExportDir(m["export_dir"].toString());
if(m.contains("preallocate_all"))
@@ -189,10 +169,6 @@ void EventManager::setGlobalPreferences(QVariantMap m) const {
// Bittorrent
if(m.contains("dht"))
Preferences::setDHTEnabled(m["dht"].toBool());
if(m.contains("dhtSameAsBT"))
Preferences::setDHTPortSameAsBT(m["dhtSameAsBT"].toBool());
if(m.contains("dht_port"))
Preferences::setDHTPort(m["dht_port"].toInt());
if(m.contains("pex"))
Preferences::setPeXEnabled(m["pex"].toBool());
qDebug("Pex support: %d", (int)m["pex"].toBool());
@@ -278,8 +254,6 @@ QVariantMap EventManager::getGlobalPreferences() const {
data["max_uploads_per_torrent"] = Preferences::getMaxUploadsPerTorrent();
// Bittorrent
data["dht"] = Preferences::isDHTEnabled();
data["dhtSameAsBT"] = Preferences::isDHTPortSameAsBT();
data["dht_port"] = Preferences::getDHTPort();
data["pex"] = Preferences::isPeXEnabled();
data["lsd"] = Preferences::isLSDEnabled();
data["encryption"] = Preferences::getEncryptionSetting();

View File

@@ -104,7 +104,7 @@ void HttpConnection::write()
}
QString HttpConnection::translateDocument(QString data) {
std::string contexts[] = {"TransferListFiltersWidget", "TransferListWidget", "PropertiesWidget", "GUI", "MainWindow", "HttpServer", "confirmDeletionDlg", "TrackerList", "TorrentFilesModel", "options_imp", "Preferences", "TrackersAdditionDlg", "ScanFoldersModel"};
std::string contexts[] = {"TransferListFiltersWidget", "TransferListWidget", "PropertiesWidget", "GUI", "MainWindow", "HttpServer", "confirmDeletionDlg", "TrackerList", "TorrentFilesModel", "options_imp", "Preferences", "TrackersAdditionDlg"};
int i=0;
bool found = false;
do {
@@ -119,7 +119,7 @@ QString HttpConnection::translateDocument(QString data) {
do {
translation = qApp->translate(contexts[context_index].c_str(), word.toLocal8Bit().constData(), 0, QCoreApplication::UnicodeUTF8, 1);
++context_index;
}while(translation == word && context_index < 13);
}while(translation == word && context_index < 12);
//qDebug("Translation is %s", translation.toUtf8().data());
data = data.replace(i, regex.matchedLength(), translation);
i += translation.length();
@@ -140,14 +140,6 @@ void HttpConnection::respond() {
return;
}
QString auth = parser.value("Authorization");
if(auth.isEmpty()) {
// Return unauthorized header
qDebug("Auth is Empty...");
generator.setStatusLine(401, "Unauthorized");
generator.setValue("WWW-Authenticate", "Digest realm=\""+QString(QBT_REALM)+"\", nonce=\""+parent->generateNonce()+"\", opaque=\""+parent->generateNonce()+"\", stale=\"false\", algorithm=\"MD5\", qop=\"auth\"");
write();
return;
}
qDebug("Auth: %s", qPrintable(auth.split(" ").first()));
if (QString::compare(auth.split(" ").first(), "Digest", Qt::CaseInsensitive) != 0 || !parent->isAuthorized(auth.toLocal8Bit(), parser.method())) {
// Update failed attempt counter

View File

@@ -259,7 +259,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
md5_ha.addData(password_ha1+":"+prop_nonce+":"+ha2);
response = md5_ha.result().toHex();
}
qDebug("AUTH: comparing reponses: (%d)", static_cast<int>(prop_response == response));
qDebug("AUTH: comparing reponses");
return prop_response == response;
}

View File

@@ -113,24 +113,7 @@ namespace json {
if(json.startsWith("{") && json.endsWith("}")) {
json.chop(1);
json = json.replace(0, 1, "");
QStringList couples;
QString tmp = "";
bool in_list = false;
foreach(QChar c, json) {
if(c == ',' && !in_list) {
couples << tmp;
tmp = "";
} else {
if(c == '[') {
in_list = true;
} else {
if(c == ']') {
in_list = false;
}
}
tmp += c;
}
}
QStringList couples = json.split(",");
foreach(QString couple, couples) {
QStringList parts = couple.split(":");
if(parts.size() != 2) continue;
@@ -141,29 +124,12 @@ namespace json {
}
QString value_str = parts.last();
QVariant value;
if(value_str.startsWith("[") && value_str.endsWith("]")) {
if(value_str.startsWith("\"") && value_str.endsWith("\"")) {
value_str.chop(1);
value_str.replace(0, 1, "");
QStringList list_elems = value_str.split(",");
QVariantList varlist;
foreach(QString list_val, list_elems) {
if(list_val.startsWith("\"") && list_val.endsWith("\"")) {
list_val.chop(1);
list_val = list_val.replace(0, 1, "");
varlist << list_val;
} else {
varlist << list_val.toInt();
}
}
value = varlist;
value_str = value_str.replace(0, 1, "");
value = value_str;
} else {
if(value_str.startsWith("\"") && value_str.endsWith("\"")) {
value_str.chop(1);
value_str = value_str.replace(0, 1, "");
value = value_str;
} else {
value = value_str.toInt();
}
value = value_str.toInt();
}
m.insert(key,value);
qDebug("%s:%s", key.toLocal8Bit().data(), value_str.toLocal8Bit().data());

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2574,14 +2574,6 @@ Are you sure you want to quit qBittorrent?</source>
<source>Use alternative speed limits</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Recursive download confirmation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The torrent %1 contains torrent files, do you want to proceed with their download?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HeadlessLoader</name>

Binary file not shown.

View File

@@ -158,23 +158,23 @@ Wszystkie prawa zastrżeżone © 2006 Christophe Dumez&lt;br&gt;(new line)
<name>AdvancedSettings</name>
<message>
<source>Property</source>
<translation type="unfinished">Parametr</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Value</source>
<translation type="unfinished">Wartość</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ignore transfer limits on local network</source>
<translation type="unfinished">Ignoruj limity prędkości w sieciach lokalnych</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include TCP/IP overhead in transfer limits</source>
<translation type="unfinished">Ignoruj narzuty protokołu TCP/IP w limitach prędkości</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disk write cache size</source>
<translation type="unfinished">Rozmiar pamięci podręcznej na zapisy</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source> MiB</source>
@@ -190,24 +190,24 @@ Wszystkie prawa zastrżeżone © 2006 Christophe Dumez&lt;br&gt;(new line)
</message>
<message>
<source>Recheck torrents on completion</source>
<translation type="unfinished">Sprawdź torrenty po pobraniu</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transfer list refresh interval</source>
<translation type="unfinished">Okres odświeżania listy transferów</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source> ms</source>
<comment> milliseconds</comment>
<translation type="unfinished">milisekund</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resolve peer countries (GeoIP)</source>
<translation type="unfinished">Odczytuj kraje partnerów (GeoIP)</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resolve peer host names</source>
<translation type="unfinished">Odczytuj nazwy hostów partnerów</translation>
<translation type="unfinished">Odczytuje nazwy hostów partnerów</translation>
</message>
</context>
<context>
@@ -401,11 +401,11 @@ Wszystkie prawa zastrżeżone © 2006 Christophe Dumez&lt;br&gt;(new line)
</message>
<message>
<source>Reason: %1</source>
<translation type="unfinished">Powód: %1</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Note: new trackers were added to the existing torrent.</source>
<translation type="unfinished">Uwaga: nowe trackery zostały dodane do istniejącego torrenta.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Note: new URL seeds were added to the existing torrent.</source>
@@ -413,7 +413,7 @@ Wszystkie prawa zastrżeżone © 2006 Christophe Dumez&lt;br&gt;(new line)
</message>
<message>
<source>An I/O error occured, &apos;%1&apos; paused.</source>
<translation type="unfinished">Wystąpił błąd We/Wy, &apos;%1&apos; wstrzymany.</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2646,18 +2646,10 @@ Czy napewno zamknąć qBittorrent?</translation>
</message>
<message>
<source>Use normal speed limits</source>
<translation type="unfinished">Użyj normalnych limitów prędkości</translation>
</message>
<message>
<source>Use alternative speed limits</source>
<translation type="unfinished">Użyj alternatywnych limitów prędkości</translation>
</message>
<message>
<source>Recursive download confirmation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The torrent %1 contains torrent files, do you want to proceed with their download?</source>
<source>Use alternative speed limits</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2688,7 +2680,7 @@ Czy napewno zamknąć qBittorrent?</translation>
<name>HttpConnection</name>
<message>
<source>Your IP address has been banned after too many failed authentication attempts.</source>
<translation type="unfinished">Twój adres IP został zablokowany po zbyt wielu nieudanych próbach uwierzytelnienia.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>D: %1/s - T: %2</source>
@@ -2838,7 +2830,7 @@ No further notices will be issued.</source>
</message>
<message>
<source>Press %1 key to accept and continue...</source>
<translation type="unfinished">Nacisnij klawisz %1 aby zaakceptować i kontynuować...</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3117,7 +3109,7 @@ No further notices will be issued.</source>
</message>
<message>
<source>Use alternative speed limits</source>
<translation type="unfinished">Użyj alternatywnych limitów prędkości</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3608,7 +3600,7 @@ QGroupBox {
</message>
<message>
<source>Authentication</source>
<translation type="unfinished">Uwierzytelnianie</translation>
<translation type="unfinished">Autentykacja</translation>
</message>
<message>
<source>Username:</source>
@@ -3717,15 +3709,15 @@ QGroupBox {
</message>
<message>
<source>Speed</source>
<translation type="unfinished">Prędkość</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Global speed limits</source>
<translation type="unfinished">Ogólne limity prędkości</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Alternative global speed limits</source>
<translation type="unfinished">Alternatywne ogólne limity prędkości</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Scheduled times:</source>
@@ -3738,11 +3730,11 @@ QGroupBox {
</message>
<message>
<source>On days:</source>
<translation type="unfinished">W dniach:</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Every day</source>
<translation type="unfinished">Codziennie</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Week days</source>
@@ -3754,23 +3746,23 @@ QGroupBox {
</message>
<message>
<source>Advanced</source>
<translation type="unfinished">Zaawansowane</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy .torrent files to:</source>
<translation type="unfinished">Kopiuj pliki .torrent do:</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Folders for .torrent Files:</source>
<translation type="unfinished">Sprawdź katalogi w poszukowaniu plików .torrent:</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add folder ...</source>
<translation type="unfinished">Dodaj katalog ...</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remove folder</source>
<translation type="unfinished">Usuń katalog</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4343,11 +4335,11 @@ p, li { white-space: pre-wrap; }
<name>ScanFoldersModel</name>
<message>
<source>Watched Folder</source>
<translation type="unfinished">Obserwowany katalog</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download here</source>
<translation type="unfinished">Pobierz tutaj</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4630,11 +4622,11 @@ Zmiany:
</message>
<message>
<source>Click to disable alternative speed limits</source>
<translation type="unfinished">Kliknij, aby wyłączyć alternatywne limity prędkości</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Click to enable alternative speed limits</source>
<translation type="unfinished">Kliknij, aby włączyć alternatywne limity prędkości</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>

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