mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-20 13:23:34 -07:00
fix import torrent with "Keep incomplete torrents in:" ticked
* also had to account for "Append the label of the torrent to the save path", but again, this was only an issue when "Keep incomplete torrents in:" is selected * A multi-file torrent with only one file (ie: a single file within a folder), was being treated as a single-file torrent, making it impossible to import. Multi-file torrent detection code was copied from libtorrent. The information is available in libtorrent (under torrent_info::m_multifile), however it's a private member and I chose to go with copying the code that determines it, rather than modifying a library qBittorrent depends on.
This commit is contained in:
parent
bfd864efce
commit
b734532b18
3 changed files with 18 additions and 9 deletions
|
@ -1032,7 +1032,7 @@ QTorrentHandle QBtSession::addMagnetUri(QString magnet_uri, bool resumed, bool f
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a torrent to the Bittorrent session
|
// Add a torrent to the Bittorrent session
|
||||||
QTorrentHandle QBtSession::addTorrent(QString path, bool fromScanDir, QString from_url, bool resumed) {
|
QTorrentHandle QBtSession::addTorrent(QString path, bool fromScanDir, QString from_url, bool resumed, bool imported) {
|
||||||
QTorrentHandle h;
|
QTorrentHandle h;
|
||||||
Preferences pref;
|
Preferences pref;
|
||||||
|
|
||||||
|
@ -1166,9 +1166,9 @@ QTorrentHandle QBtSession::addTorrent(QString path, bool fromScanDir, QString fr
|
||||||
// Remember label
|
// Remember label
|
||||||
TorrentTempData::setLabel(hash, savePath_label.second);
|
TorrentTempData::setLabel(hash, savePath_label.second);
|
||||||
} else {
|
} else {
|
||||||
savePath = getSavePath(hash, fromScanDir, path);
|
savePath = getSavePath(hash, fromScanDir, path, imported);
|
||||||
}
|
}
|
||||||
if (!defaultTempPath.isEmpty() && !TorrentPersistentData::isSeed(hash)) {
|
if (!imported && !defaultTempPath.isEmpty() && !TorrentPersistentData::isSeed(hash)) {
|
||||||
qDebug("addTorrent::Temp folder is enabled.");
|
qDebug("addTorrent::Temp folder is enabled.");
|
||||||
QString torrent_tmp_path = defaultTempPath.replace("\\", "/");
|
QString torrent_tmp_path = defaultTempPath.replace("\\", "/");
|
||||||
p.save_path = torrent_tmp_path.toUtf8().constData();
|
p.save_path = torrent_tmp_path.toUtf8().constData();
|
||||||
|
@ -2668,14 +2668,14 @@ session_status QBtSession::getSessionStatus() const {
|
||||||
return s->status();
|
return s->status();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString filePath) {
|
QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString filePath, bool imported) {
|
||||||
QString savePath;
|
QString savePath;
|
||||||
if (TorrentTempData::hasTempData(hash)) {
|
if (TorrentTempData::hasTempData(hash)) {
|
||||||
savePath = TorrentTempData::getSavePath(hash);
|
savePath = TorrentTempData::getSavePath(hash);
|
||||||
if (savePath.isEmpty()) {
|
if (savePath.isEmpty()) {
|
||||||
savePath = defaultSavePath;
|
savePath = defaultSavePath;
|
||||||
}
|
}
|
||||||
if (appendLabelToSavePath) {
|
if (!imported && appendLabelToSavePath) {
|
||||||
qDebug("appendLabelToSavePath is true");
|
qDebug("appendLabelToSavePath is true");
|
||||||
const QString label = TorrentTempData::getLabel(hash);
|
const QString label = TorrentTempData::getLabel(hash);
|
||||||
if (!label.isEmpty()) {
|
if (!label.isEmpty()) {
|
||||||
|
|
|
@ -111,7 +111,7 @@ public:
|
||||||
quint64 getAlltimeUL() const;
|
quint64 getAlltimeUL() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
|
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false, bool imported = false);
|
||||||
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false, bool fromScanDir=false, const QString &filePath=QString());
|
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false, bool fromScanDir=false, const QString &filePath=QString());
|
||||||
void loadSessionState();
|
void loadSessionState();
|
||||||
void saveSessionState();
|
void saveSessionState();
|
||||||
|
@ -180,7 +180,7 @@ public slots:
|
||||||
void unhideMagnet(const QString &hash);
|
void unhideMagnet(const QString &hash);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString getSavePath(const QString &hash, bool fromScanDir = false, QString filePath = QString::null);
|
QString getSavePath(const QString &hash, bool fromScanDir = false, QString filePath = QString::null, bool imported = false);
|
||||||
bool loadFastResumeData(const QString &hash, std::vector<char> &buf);
|
bool loadFastResumeData(const QString &hash, std::vector<char> &buf);
|
||||||
void loadTorrentSettings(QTorrentHandle &h);
|
void loadTorrentSettings(QTorrentHandle &h);
|
||||||
void loadTorrentTempData(QTorrentHandle &h, QString savePath, bool magnet);
|
void loadTorrentTempData(QTorrentHandle &h, QString savePath, bool magnet);
|
||||||
|
|
|
@ -77,7 +77,16 @@ void TorrentImportDlg::on_browseContentBtn_clicked()
|
||||||
{
|
{
|
||||||
QIniSettings settings;
|
QIniSettings settings;
|
||||||
const QString default_dir = settings.value(QString::fromUtf8("TorrentImport/LastContentDir"), QDir::homePath()).toString();
|
const QString default_dir = settings.value(QString::fromUtf8("TorrentImport/LastContentDir"), QDir::homePath()).toString();
|
||||||
if (t->num_files() == 1) {
|
// Test for multi-file taken from libtorrent/create_torrent.hpp -> create_torrent::create_torrent
|
||||||
|
bool multifile = t->num_files() > 1;
|
||||||
|
#if LIBTORRENT_VERSION_NUM >= 1600
|
||||||
|
if (!multifile && has_parent_path(t->files().file_path(*(t->files().begin()))))
|
||||||
|
multifile = true;
|
||||||
|
#else
|
||||||
|
if (!multifile && t->file_at(0).path.has_parent_path())
|
||||||
|
multifile = true;
|
||||||
|
#endif
|
||||||
|
if (!multifile) {
|
||||||
// Single file torrent
|
// Single file torrent
|
||||||
#if LIBTORRENT_VERSION_NUM >= 1600
|
#if LIBTORRENT_VERSION_NUM >= 1600
|
||||||
const QString file_name = fsutils::fileName(misc::toQStringU(t->file_at(0).path));
|
const QString file_name = fsutils::fileName(misc::toQStringU(t->file_at(0).path));
|
||||||
|
@ -211,7 +220,7 @@ void TorrentImportDlg::importTorrent()
|
||||||
TorrentTempData::setSavePath(hash, content_path);
|
TorrentTempData::setSavePath(hash, content_path);
|
||||||
TorrentTempData::setSeedingMode(hash, dlg.skipFileChecking());
|
TorrentTempData::setSeedingMode(hash, dlg.skipFileChecking());
|
||||||
qDebug("Adding the torrent to the session...");
|
qDebug("Adding the torrent to the session...");
|
||||||
QBtSession::instance()->addTorrent(torrent_path);
|
QBtSession::instance()->addTorrent(torrent_path, false, QString(), false, true);
|
||||||
// Remember the last opened folder
|
// Remember the last opened folder
|
||||||
QIniSettings settings;
|
QIniSettings settings;
|
||||||
settings.setValue(QString::fromUtf8("MainWindowLastDir"), torrent_path);
|
settings.setValue(QString::fromUtf8("MainWindowLastDir"), torrent_path);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue