You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-21 13:52:16 +02:00
Compare commits
31 Commits
release-2.
...
release-2.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f6a58b3470 | ||
![]() |
ef0a826180 | ||
![]() |
d79f779c0a | ||
![]() |
1dadc08625 | ||
![]() |
5f49af5ade | ||
![]() |
1e67f0afa4 | ||
![]() |
dd9cf6c3ab | ||
![]() |
36483d795e | ||
![]() |
303c209839 | ||
![]() |
6790889cc3 | ||
![]() |
3a24b66adc | ||
![]() |
1a3f5e81e3 | ||
![]() |
818a79c9db | ||
![]() |
93f635f9f4 | ||
![]() |
73ec018732 | ||
![]() |
68832df0c4 | ||
![]() |
ce817836c0 | ||
![]() |
89fbfdbd1b | ||
![]() |
797d89fc3c | ||
![]() |
abc6e1c719 | ||
![]() |
31558aea8d | ||
![]() |
be711920fd | ||
![]() |
5d899bbe7c | ||
![]() |
9c63e418cf | ||
![]() |
984e7c7c7b | ||
![]() |
1ae460bc67 | ||
![]() |
c7ffa9096c | ||
![]() |
01448f4c14 | ||
![]() |
7e8754baf3 | ||
![]() |
8206ec9012 | ||
![]() |
a611361823 |
1
AUTHORS
1
AUTHORS
@@ -66,6 +66,7 @@ Translations authors:
|
||||
- Catalan: Francisco Luque Contreras (frannoe@ya.com)
|
||||
- Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
|
||||
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
|
||||
- Croatian: Oliver Mucafir (oliver.untwist@gmail.com)
|
||||
- Czech: Jirka Vilim (web@tets.cz)
|
||||
- Danish: Mathias Nielsen (comoneo@gmail.com)
|
||||
- Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)
|
||||
|
20
Changelog
20
Changelog
@@ -1,3 +1,23 @@
|
||||
* Mon May 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.8
|
||||
- BUGFIX: ETA for finished torrent is now 0 instead of Infinite (closes #583704)
|
||||
- BUGFIX: Fix sorting of ETA column when having infinite values (closes #583347)
|
||||
- BUGFIX: Torrent queue position now starts at 1 (closes #581130)
|
||||
- BUGFIX: Fix unicode issue in start seeding after torrent creation code
|
||||
- BUGFIX: Fix torrent error state clearance on resuming
|
||||
- BUGFIX: Fix possible checkbox update in Web UI
|
||||
- COSMETIC: Fix torrent properties layout
|
||||
|
||||
* Wed May 12 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.7
|
||||
- BUGFIX: Fix unicode problem in torrent moving code
|
||||
- BUGFIX: Fix possible initialization problem in Web UI
|
||||
- BUGFIX: Fix torrent moving after completion feature
|
||||
- BUGFIX: Improved empty folder removing code
|
||||
- BUGFIX: Use guid or news url as RSS items identifier (instead of title)
|
||||
- BUGFIX: Fix possible crash in RSS item selection code
|
||||
- BUGFIX: Added support for url encoded ampersands in RSS
|
||||
- COSMETIC: Sort torrent labels in popup menu
|
||||
- I18N: Added Croatian translation
|
||||
|
||||
* Sun Apr 18 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.6
|
||||
- BUGFIX: Announce to all trackers at once
|
||||
- BUGFIX: Added support for single-thread boost
|
||||
|
@@ -170,8 +170,8 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
#ifdef Q_WS_WIN
|
||||
char buffer[UNLEN+1] = {0};
|
||||
DWORD buffer_len = UNLEN + 1;
|
||||
if (!GetUserName(buffer, &buffer_len))
|
||||
uid = QString(buffer)
|
||||
if (!GetUserNameA(buffer, &buffer_len))
|
||||
uid = QString(buffer);
|
||||
#else
|
||||
uid = QString::number(getuid());
|
||||
#endif
|
||||
|
@@ -1,8 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Categories=Qt;Network;P2P;
|
||||
Comment=V2.2.6
|
||||
Comment=V2.2.8
|
||||
Exec=qbittorrent %f
|
||||
GenericName=Bittorrent client
|
||||
GenericName[ar]=العميل Bittorrent
|
||||
GenericName[bg]=Торент клиент
|
||||
GenericName[cs]=Bittorrent klient
|
||||
GenericName[de]=Bittorren Client
|
||||
@@ -10,6 +11,7 @@ GenericName[el]=Bittorrent πελάτης
|
||||
GenericName[es]=Cliente Bittorrent
|
||||
GenericName[fi]=Bittorrent-ohjelma
|
||||
GenericName[fr]=Client Bittorrent
|
||||
GenericName[hr]=Bittorrent klijent
|
||||
GenericName[hu]=Bittorrent kliens
|
||||
GenericName[it]=Client Bittorrent
|
||||
GenericName[ja]=Bittorrent クライアント
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
@@ -68,6 +68,7 @@ class about : public QDialog, private Ui::AboutDlg{
|
||||
- <u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)<br>\
|
||||
- <u>Chinese (Simplified):</u> Guo Yue (yue.guo0418@gmail.com)<br>\
|
||||
- <u>Chinese (Traditional):</u> Yi-Shun Wang (dnextstep@gmail.com)<br>\
|
||||
- <u>Croatian:</u> Oliver Mucafir (oliver.untwist@gmail.com)<br>\
|
||||
- <u>Czech:</u> Jirka Vilim (web@tets.cz)<br>\
|
||||
- <u>Danish:</u> Mathias Nielsen (comoneo@gmail.com)<br>\
|
||||
- <u>Dutch:</u> Joost Schipper (heavyjoost@users.sourceforge.net) and Peter Koeleman (peter@peerweb.nl)<br>\
|
||||
|
@@ -1897,12 +1897,15 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
|
||||
if(appendqBExtension)
|
||||
appendqBextensionToTorrent(h, false);
|
||||
#endif
|
||||
qDebug("A torrent has finished downloading");
|
||||
// Move to download directory if necessary
|
||||
if(!defaultTempPath.isEmpty()) {
|
||||
qDebug("A torrent has finished downloading and will be moved to the final download location");
|
||||
// Check if directory is different
|
||||
const QDir current_dir(h.save_path());
|
||||
const QDir save_dir(getSavePath(hash));
|
||||
if(current_dir != save_dir) {
|
||||
qDebug("current dir is different that final destination, actually move the storage...");
|
||||
h.move_storage(save_dir.path());
|
||||
}
|
||||
}
|
||||
@@ -1964,11 +1967,13 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
|
||||
if(h.is_valid()) {
|
||||
// Attempt to remove old folder if empty
|
||||
const QString& old_save_path = TorrentPersistentData::getSavePath(h.hash());
|
||||
const QString new_save_path = QString(p->path.c_str());
|
||||
const QString new_save_path = QString::fromLocal8Bit(p->path.c_str());
|
||||
qDebug("Torrent moved from %s to %s", qPrintable(old_save_path), qPrintable(new_save_path));
|
||||
qDebug("Attempting to remove %s", qPrintable(old_save_path));
|
||||
QDir().rmpath(old_save_path);
|
||||
TorrentPersistentData::saveSavePath(h.hash(), new_save_path);
|
||||
if(old_save_path != defaultSavePath && old_save_path != defaultTempPath)
|
||||
QDir().rmdir(old_save_path);
|
||||
if(new_save_path != defaultTempPath)
|
||||
TorrentPersistentData::saveSavePath(h.hash(), new_save_path);
|
||||
emit savePathChanged(h);
|
||||
//h.force_recheck();
|
||||
}
|
||||
|
@@ -199,7 +199,7 @@ void createtorrent::handleCreationSuccess(QString path, const char* branch_path)
|
||||
return;
|
||||
}
|
||||
QString hash = misc::toQString(t->info_hash());
|
||||
TorrentTempData::setSavePath(hash, QString(branch_path));
|
||||
TorrentTempData::setSavePath(hash, QString::fromLocal8Bit(branch_path));
|
||||
#ifdef LIBTORRENT_0_15
|
||||
// Enable seeding mode (do not recheck the files)
|
||||
TorrentTempData::setSeedingMode(hash, true);
|
||||
|
@@ -54,7 +54,7 @@ downloadThread::~downloadThread(){
|
||||
}
|
||||
|
||||
void downloadThread::processDlFinished(QNetworkReply* reply) {
|
||||
QString url = reply->url().toString();
|
||||
QString url = reply->url().toEncoded().data();
|
||||
if(reply->error() != QNetworkReply::NoError) {
|
||||
// Failure
|
||||
emit downloadFailure(url, errorCodeToString(reply->error()));
|
||||
|
@@ -2,10 +2,10 @@
|
||||
#define FILESYSTEMWATCHER_H
|
||||
|
||||
#include <QFileSystemWatcher>
|
||||
#include <QDir>
|
||||
|
||||
#ifndef Q_WS_WIN
|
||||
#include <QTimer>
|
||||
#include <QDir>
|
||||
#include <QPointer>
|
||||
#include <QStringList>
|
||||
#include <QSet>
|
||||
@@ -180,6 +180,7 @@ protected slots:
|
||||
}
|
||||
|
||||
void scanNetworkFolders() {
|
||||
#ifndef Q_WS_WIN
|
||||
qDebug("scanNetworkFolders() called");
|
||||
QStringList torrents;
|
||||
// Network folders scan
|
||||
@@ -192,6 +193,7 @@ protected slots:
|
||||
qDebug("The following files are being reported: %s", qPrintable(torrents.join("\n")));
|
||||
emit torrentsAdded(torrents);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
signals:
|
||||
|
@@ -21,6 +21,7 @@
|
||||
<file>lang/qbittorrent_pt_BR.qm</file>
|
||||
<file>lang/qbittorrent_el.qm</file>
|
||||
<file>lang/qbittorrent_ca.qm</file>
|
||||
<file>lang/qbittorrent_hr.qm</file>
|
||||
<file>lang/qbittorrent_sr.qm</file>
|
||||
<file>lang/qbittorrent_hu.qm</file>
|
||||
<file>lang/qbittorrent_da.qm</file>
|
||||
|
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
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
BIN
src/lang/qbittorrent_hr.qm
Normal file
BIN
src/lang/qbittorrent_hr.qm
Normal file
Binary file not shown.
3533
src/lang/qbittorrent_hr.ts
Normal file
3533
src/lang/qbittorrent_hr.ts
Normal file
File diff suppressed because one or more lines are too long
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
@@ -180,8 +180,8 @@ int main(int argc, char *argv[]){
|
||||
#ifdef Q_WS_WIN
|
||||
char buffer[UNLEN+1] = {0};
|
||||
DWORD buffer_len = UNLEN + 1;
|
||||
if (!GetUserName(buffer, &buffer_len))
|
||||
uid = QString(buffer)
|
||||
if (!GetUserNameA(buffer, &buffer_len))
|
||||
uid = QString(buffer);
|
||||
#else
|
||||
uid = QString::number(getuid());
|
||||
#endif
|
||||
|
32
src/misc.cpp
32
src/misc.cpp
@@ -64,6 +64,8 @@
|
||||
|
||||
QString misc::QDesktopServicesDataLocation() {
|
||||
#ifdef Q_WS_WIN
|
||||
LPWSTR path=new WCHAR[256];
|
||||
QString result;
|
||||
#if defined Q_WS_WINCE
|
||||
if (SHGetSpecialFolderPath(0, path, CSIDL_APPDATA, FALSE))
|
||||
#else
|
||||
@@ -147,16 +149,16 @@ long long misc::freeDiskSpaceOnPath(QString path) {
|
||||
GetDiskFreeSpaceEx_t
|
||||
pGetDiskFreeSpaceEx = (GetDiskFreeSpaceEx_t)::GetProcAddress
|
||||
(
|
||||
::GetModuleHandle(_T("kernel32.dll")),
|
||||
::GetModuleHandle(TEXT("kernel32.dll")),
|
||||
"GetDiskFreeSpaceExW"
|
||||
);
|
||||
if ( pGetDiskFreeSpaceEx )
|
||||
{
|
||||
ULARGE_INTEGER bytesFree, bytesTotal;
|
||||
unsigned long long *ret;
|
||||
if (pGetDiskFreeSpaceEx((LPCTSTR)path.ucs2(), &bytesFree, &bytesTotal, NULL)) {
|
||||
tmp = (unsigned long long*)&bytesFree
|
||||
return ret;
|
||||
if (pGetDiskFreeSpaceEx((LPCTSTR)path.utf16(), &bytesFree, &bytesTotal, NULL)) {
|
||||
ret = (unsigned long long*)&bytesFree;
|
||||
return *ret;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
@@ -421,9 +423,20 @@ QString misc::magnetUriToHash(QString magnet_uri) {
|
||||
}
|
||||
|
||||
QString misc::boostTimeToQString(const boost::optional<boost::posix_time::ptime> boostDate) {
|
||||
if(!boostDate) return tr("Unknown");
|
||||
struct std::tm tm = boost::posix_time::to_tm(*boostDate);
|
||||
return QDateTime::fromTime_t(mktime(&tm)).toString(Qt::DefaultLocaleLongDate);
|
||||
if(!boostDate || !boostDate.is_initialized() || boostDate->is_not_a_date_time()) return tr("Unknown");
|
||||
struct std::tm tm;
|
||||
try {
|
||||
tm = boost::posix_time::to_tm(*boostDate);
|
||||
} catch(std::exception e) {
|
||||
return tr("Unknown");
|
||||
}
|
||||
time_t t = mktime(&tm);
|
||||
if(t < 0)
|
||||
return tr("Unknown");
|
||||
QDateTime dt = QDateTime::fromTime_t(t);
|
||||
if(dt.isNull() || !dt.isValid())
|
||||
return tr("Unknown");
|
||||
return dt.toString(Qt::DefaultLocaleLongDate);
|
||||
}
|
||||
|
||||
// Replace ~ in path
|
||||
@@ -446,9 +459,12 @@ QString misc::expandPath(QString path) {
|
||||
// Take a number of seconds and return an user-friendly
|
||||
// time duration like "1d 2h 10m".
|
||||
QString misc::userFriendlyDuration(qlonglong seconds) {
|
||||
if(seconds < 0) {
|
||||
if(seconds < 0 || seconds >= MAX_ETA) {
|
||||
return QString::fromUtf8("∞");
|
||||
}
|
||||
if(seconds == 0) {
|
||||
return "0";
|
||||
}
|
||||
if(seconds < 60) {
|
||||
return tr("< 1m", "< 1 minute");
|
||||
}
|
||||
|
@@ -40,6 +40,8 @@
|
||||
#include <QPoint>
|
||||
|
||||
#include <libtorrent/torrent_info.hpp>
|
||||
const qlonglong MAX_ETA = 8640000;
|
||||
|
||||
using namespace libtorrent;
|
||||
|
||||
/* Miscellaneaous functions that can be useful */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user