mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-22 00:17:23 -06:00
Manually backport from master, commit 6dabf50 and its fixes. Original author Ivan Sorokin.
This commit is contained in:
@@ -100,6 +100,64 @@ public:
|
||||
fp = data.value(hash).files_priority;
|
||||
}
|
||||
|
||||
static bool isMoveInProgress(const QString &hash) {
|
||||
return torrentMoveStates.find(hash) != torrentMoveStates.end();
|
||||
}
|
||||
|
||||
static void enqueueMove(const QString &hash, const QString &queuedPath) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i == torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return;
|
||||
}
|
||||
i->queuedPath = queuedPath;
|
||||
}
|
||||
|
||||
static void startMove(const QString &hash, const QString &oldPath, const QString& newPath) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i != torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return;
|
||||
}
|
||||
torrentMoveStates.insert(hash, TorrentMoveState(oldPath, newPath));
|
||||
}
|
||||
|
||||
static void finishMove(const QString &hash) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i == torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return;
|
||||
}
|
||||
torrentMoveStates.erase(i);
|
||||
}
|
||||
|
||||
static QString getOldPath(const QString &hash) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i == torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return QString();
|
||||
}
|
||||
return i->oldPath;
|
||||
}
|
||||
|
||||
static QString getNewPath(const QString &hash) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i == torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return QString();
|
||||
}
|
||||
return i->newPath;
|
||||
}
|
||||
|
||||
static QString getQueuedPath(const QString &hash) {
|
||||
QHash<QString, TorrentMoveState>::iterator i = torrentMoveStates.find(hash);
|
||||
if (i == torrentMoveStates.end()) {
|
||||
Q_ASSERT(false);
|
||||
return QString();
|
||||
}
|
||||
return i->queuedPath;
|
||||
}
|
||||
|
||||
private:
|
||||
struct TorrentData {
|
||||
TorrentData(): sequential(false), seed(false) {}
|
||||
@@ -111,7 +169,21 @@ private:
|
||||
bool seed;
|
||||
};
|
||||
|
||||
struct TorrentMoveState {
|
||||
TorrentMoveState(QString oldPath, QString newPath)
|
||||
: oldPath(oldPath)
|
||||
, newPath(newPath)
|
||||
{}
|
||||
|
||||
// the moving occurs from oldPath to newPath
|
||||
// queuedPath is where files should be moved to, when current moving is completed
|
||||
QString oldPath;
|
||||
QString newPath;
|
||||
QString queuedPath;
|
||||
};
|
||||
|
||||
static QHash<QString, TorrentData> data;
|
||||
static QHash<QString, TorrentMoveState> torrentMoveStates;
|
||||
};
|
||||
|
||||
class HiddenData {
|
||||
@@ -238,22 +310,6 @@ public:
|
||||
return data.value("has_error", false).toBool();
|
||||
}
|
||||
|
||||
static void setPreviousSavePath(const QString &hash, const QString &previous_path) {
|
||||
QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
|
||||
QHash<QString, QVariant> data = all_data.value(hash).toHash();
|
||||
data["previous_path"] = previous_path;
|
||||
all_data[hash] = data;
|
||||
settings.setValue("torrents", all_data);
|
||||
}
|
||||
|
||||
static QString getPreviousPath(const QString &hash) {
|
||||
QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
const QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
|
||||
const QHash<QString, QVariant> data = all_data.value(hash).toHash();
|
||||
return data.value("previous_path").toString();
|
||||
}
|
||||
|
||||
static void saveSeedDate(const QTorrentHandle &h) {
|
||||
QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
|
||||
QHash<QString, QVariant> all_data = settings.value("torrents").toHash();
|
||||
|
||||
Reference in New Issue
Block a user