Browse Source

- Remove useless code in torrentpersistentdata since libtorrent is saving and restoring this for us

adaptive-webui-19844
Christophe Dumez 15 years ago
parent
commit
aa0c2e611f
  1. 107
      src/bittorrent.cpp
  2. 5
      src/bittorrent.h
  3. 32
      src/propertieswidget.cpp
  4. 1
      src/propertieswidget.h
  5. 93
      src/torrentpersistentdata.h

107
src/bittorrent.cpp

@ -628,32 +628,6 @@ void Bittorrent::resumeTorrent(QString hash) {
} }
} }
void Bittorrent::loadWebSeeds(QString hash) {
QVariantList url_seeds = TorrentPersistentData::getUrlSeeds(hash);
QTorrentHandle h = getTorrentHandle(hash);
// First remove from the torrent the url seeds that were deleted
// in a previous session
QStringList seeds_to_delete;
QStringList existing_seeds = h.url_seeds();
foreach(const QString &existing_seed, existing_seeds) {
if(!url_seeds.contains(existing_seed.toLocal8Bit())) {
seeds_to_delete << existing_seed;
}
}
foreach(const QString &existing_seed, seeds_to_delete) {
h.remove_url_seed(existing_seed);
}
// Add the ones that were added in a previous session
foreach(const QVariant &var_url_seed, url_seeds) {
QString url_seed = var_url_seed.toString();
if(!url_seed.isEmpty()) {
// XXX: Should we check if it is already in the list before adding it
// or is libtorrent clever enough to know
h.add_url_seed(url_seed);
}
}
}
QTorrentHandle Bittorrent::addMagnetUri(QString magnet_uri, bool resumed) { QTorrentHandle Bittorrent::addMagnetUri(QString magnet_uri, bool resumed) {
QTorrentHandle h; QTorrentHandle h;
QString hash = misc::magnetUriToHash(magnet_uri); QString hash = misc::magnetUriToHash(magnet_uri);
@ -734,14 +708,7 @@ QTorrentHandle Bittorrent::addMagnetUri(QString magnet_uri, bool resumed) {
// Resolve countries // Resolve countries
h.resolve_countries(resolve_countries); h.resolve_countries(resolve_countries);
// Load filtered files // Load filtered files
if(resumed) { if(!resumed) {
// Load custom url seeds
loadWebSeeds(hash);
// Load trackers
loadTrackerFile(hash);
// XXX: only when resuming because torrentAddition dialog is not supported yet
loadFilesPriorities(h);
} else {
// Sequential download // Sequential download
if(TorrentTempData::hasTempData(hash)) { if(TorrentTempData::hasTempData(hash)) {
qDebug("addMagnetUri: Setting download as sequential (from tmp data)"); qDebug("addMagnetUri: Setting download as sequential (from tmp data)");
@ -907,14 +874,7 @@ QTorrentHandle Bittorrent::addTorrent(QString path, bool fromScanDir, QString fr
// Resolve countries // Resolve countries
qDebug("AddTorrent: Resolve_countries: %d", (int)resolve_countries); qDebug("AddTorrent: Resolve_countries: %d", (int)resolve_countries);
h.resolve_countries(resolve_countries); h.resolve_countries(resolve_countries);
// Load filtered files if(!resumed) {
loadFilesPriorities(h);
if(resumed) {
// Load custom url seeds
loadWebSeeds(hash);
// Load trackers
loadTrackerFile(hash);
} else {
// Sequential download // Sequential download
if(TorrentTempData::hasTempData(hash)) { if(TorrentTempData::hasTempData(hash)) {
qDebug("addTorrent: Setting download as sequential (from tmp data)"); qDebug("addTorrent: Setting download as sequential (from tmp data)");
@ -962,22 +922,6 @@ QTorrentHandle Bittorrent::addTorrent(QString path, bool fromScanDir, QString fr
return h; return h;
} }
// Check if the user filtered files in this torrent.
bool Bittorrent::has_filtered_files(QString hash) const{
QVariantList files_priority = TorrentPersistentData::getFilesPriority(hash);
foreach(QVariant var_prio, files_priority) {
int priority = var_prio.toInt();
if( priority < 0 || priority > 7) {
priority = 1;
}
if(!priority)
return true;
}
return false;
}
// Set the maximum number of opened connections // Set the maximum number of opened connections
void Bittorrent::setMaxConnections(int maxConnec) { void Bittorrent::setMaxConnections(int maxConnec) {
s->set_max_connections(maxConnec); s->set_max_connections(maxConnec);
@ -1117,33 +1061,6 @@ bool Bittorrent::enableDHT(bool b) {
return true; return true;
} }
// Read pieces priorities from hard disk
// and ask QTorrentHandle to consider them
void Bittorrent::loadFilesPriorities(QTorrentHandle &h) {
qDebug("Applying files priority");
if(!h.is_valid()) {
qDebug("/!\\ Error: Invalid handle");
return;
}
std::vector<int> v;
QVariantList files_priority;
if(TorrentTempData::hasTempData(h.hash())) {
files_priority = TorrentTempData::getFilesPriority(h.hash());
} else {
files_priority = TorrentPersistentData::getFilesPriority(h.hash());
}
foreach(const QVariant &var_prio, files_priority) {
int priority = var_prio.toInt();
if( priority < 0 || priority > 7) {
priority = 1;
}
//qDebug("Setting file piority to %d", priority);
v.push_back(priority);
}
if(v.size() == (unsigned int)h.num_files())
h.prioritize_files(v);
}
float Bittorrent::getRealRatio(QString hash) const{ float Bittorrent::getRealRatio(QString hash) const{
QTorrentHandle h = getTorrentHandle(hash); QTorrentHandle h = getTorrentHandle(hash);
Q_ASSERT(h.all_time_download() >= 0); Q_ASSERT(h.all_time_download() >= 0);
@ -1308,11 +1225,6 @@ void Bittorrent::setDefaultTempPath(QString temppath) {
defaultTempPath = temppath; defaultTempPath = temppath;
} }
void Bittorrent::saveTrackerFile(QString hash) {
QTorrentHandle h = getTorrentHandle(hash);
TorrentPersistentData::saveTrackers(h);
}
// Enable directory scanning // Enable directory scanning
void Bittorrent::enableDirectoryScanning(QString scan_dir) { void Bittorrent::enableDirectoryScanning(QString scan_dir) {
if(!scan_dir.isEmpty()) { if(!scan_dir.isEmpty()) {
@ -1411,21 +1323,6 @@ void Bittorrent::setDeleteRatio(float ratio) {
} }
} }
void Bittorrent::loadTrackerFile(QString hash) {
QHash<QString, QVariant> tiers = TorrentPersistentData::getTrackers(hash);
std::vector<announce_entry> trackers;
foreach(const QString tracker_url, tiers.keys()) {
announce_entry t(tracker_url.toStdString());
t.tier = tiers[tracker_url].toInt();
trackers.push_back(t);
}
if(!trackers.empty()) {
QTorrentHandle h = getTorrentHandle(hash);
h.replace_trackers(trackers);
h.force_reannounce();
}
}
// Set DHT port (>= 1000 or 0 if same as BT) // Set DHT port (>= 1000 or 0 if same as BT)
void Bittorrent::setDHTPort(int dht_port) { void Bittorrent::setDHTPort(int dht_port) {
if(dht_port == 0 or dht_port >= 1000) { if(dht_port == 0 or dht_port >= 1000) {

5
src/bittorrent.h

@ -128,7 +128,6 @@ public:
float getRealRatio(QString hash) const; float getRealRatio(QString hash) const;
session* getSession() const; session* getSession() const;
QHash<QString, TrackerInfos> getTrackersInfo(QString hash) const; QHash<QString, TrackerInfos> getTrackersInfo(QString hash) const;
bool has_filtered_files(QString hash) const;
bool hasActiveTorrents() const; bool hasActiveTorrents() const;
bool isQueueingEnabled() const; bool isQueueingEnabled() const;
int getMaximumActiveDownloads() const; int getMaximumActiveDownloads() const;
@ -166,7 +165,6 @@ public slots:
void disableIPFilter(); void disableIPFilter();
void setQueueingEnabled(bool enable); void setQueueingEnabled(bool enable);
void handleDownloadFailure(QString url, QString reason); void handleDownloadFailure(QString url, QString reason);
void loadWebSeeds(QString fileHash);
void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null); void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null);
// Session configuration - Setters // Session configuration - Setters
void setListeningPort(int port); void setListeningPort(int port);
@ -183,7 +181,6 @@ public slots:
void startTorrentsInPause(bool b); void startTorrentsInPause(bool b);
void setDefaultTempPath(QString temppath); void setDefaultTempPath(QString temppath);
void applyEncryptionSettings(pe_settings se); void applyEncryptionSettings(pe_settings se);
void loadFilesPriorities(QTorrentHandle& h);
void setDownloadLimit(QString hash, long val); void setDownloadLimit(QString hash, long val);
void setUploadLimit(QString hash, long val); void setUploadLimit(QString hash, long val);
void enableUPnP(bool b); void enableUPnP(bool b);
@ -193,7 +190,6 @@ public slots:
void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText)); void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText));
void addPeerBanMessage(QString msg, bool from_ipfilter); void addPeerBanMessage(QString msg, bool from_ipfilter);
void processDownloadedFile(QString, QString); void processDownloadedFile(QString, QString);
void saveTrackerFile(QString hash);
void addMagnetSkipAddDlg(QString uri); void addMagnetSkipAddDlg(QString uri);
void downloadFromURLList(const QStringList& urls); void downloadFromURLList(const QStringList& urls);
void configureSession(); void configureSession();
@ -202,7 +198,6 @@ public slots:
protected slots: protected slots:
void addTorrentsFromScanFolder(QStringList&); void addTorrentsFromScanFolder(QStringList&);
void readAlerts(); void readAlerts();
void loadTrackerFile(QString hash);
void deleteBigRatios(); void deleteBigRatios();
void takeETASamples(); void takeETASamples();

32
src/propertieswidget.cpp

@ -217,8 +217,7 @@ void PropertiesWidget::loadTorrentInfos(QTorrentHandle &_h) {
// List files in torrent // List files in torrent
PropListModel->clear(); PropListModel->clear();
PropListModel->setupModelData(h.get_torrent_info()); PropListModel->setupModelData(h.get_torrent_info());
std::vector<int> files_priority = loadFilesPriorities(); PropListModel->updateFilesPriorities(h.file_priorities());
PropListModel->updateFilesPriorities(files_priority);
// Expand first item if possible // Expand first item if possible
filesList->expand(PropListModel->index(0, 0)); filesList->expand(PropListModel->index(0, 0));
} catch(invalid_handle e) { } catch(invalid_handle e) {
@ -343,9 +342,8 @@ void PropertiesWidget::loadDynamicData() {
void PropertiesWidget::loadUrlSeeds(){ void PropertiesWidget::loadUrlSeeds(){
QStringList already_added; QStringList already_added;
listWebSeeds->clear(); listWebSeeds->clear();
QVariantList url_seeds = TorrentPersistentData::getUrlSeeds(h.hash()); QStringList url_seeds = h.url_seeds();
foreach(const QVariant &var_url_seed, url_seeds){ foreach(const QString &url_seed, url_seeds){
QString url_seed = var_url_seed.toString();
if(!url_seed.isEmpty()) { if(!url_seed.isEmpty()) {
new QListWidgetItem(url_seed, listWebSeeds); new QListWidgetItem(url_seed, listWebSeeds);
already_added << url_seed; already_added << url_seed;
@ -432,26 +430,6 @@ void PropertiesWidget::on_files_button_clicked() {
} }
} }
std::vector<int> PropertiesWidget::loadFilesPriorities(){
std::vector<int> fp;
QVariantList files_priority = TorrentPersistentData::getFilesPriority(h.hash());
if(files_priority.empty()) {
for(int i=0; i<h.num_files(); ++i) {
fp.push_back(1);
}
} else {
foreach(const QVariant &var_prio, files_priority) {
int priority = var_prio.toInt();
if( priority < 0 || priority > 7){
// Normal priority as default
priority = 1;
}
fp.push_back(priority);
}
}
return fp;
}
void PropertiesWidget::displayFilesListMenu(const QPoint&){ void PropertiesWidget::displayFilesListMenu(const QPoint&){
//if(h.get_torrent_info().num_files() == 1) return; //if(h.get_torrent_info().num_files() == 1) return;
QMenu myFilesLlistMenu(this); QMenu myFilesLlistMenu(this);
@ -530,7 +508,6 @@ void PropertiesWidget::askWebSeed(){
return; return;
} }
h.add_url_seed(url_seed); h.add_url_seed(url_seed);
TorrentPersistentData::saveUrlSeeds(h);
// Refresh the seeds list // Refresh the seeds list
loadUrlSeeds(); loadUrlSeeds();
} }
@ -544,8 +521,6 @@ void PropertiesWidget::deleteSelectedUrlSeeds(){
change = true; change = true;
} }
if(change){ if(change){
// Save them to disk
TorrentPersistentData::saveUrlSeeds(h);
// Refresh list // Refresh list
loadUrlSeeds(); loadUrlSeeds();
} }
@ -555,7 +530,6 @@ bool PropertiesWidget::savePiecesPriorities() {
qDebug("Saving pieces priorities"); qDebug("Saving pieces priorities");
std::vector<int> priorities = PropListModel->getFilesPriorities(h.get_torrent_info().num_files()); std::vector<int> priorities = PropListModel->getFilesPriorities(h.get_torrent_info().num_files());
h.prioritize_files(priorities); h.prioritize_files(priorities);
TorrentPersistentData::saveFilesPriority(h);
return true; return true;
} }

1
src/propertieswidget.h

@ -74,7 +74,6 @@ private:
protected: protected:
QPushButton* getButtonFromIndex(int index); QPushButton* getButtonFromIndex(int index);
std::vector<int> loadFilesPriorities();
bool savePiecesPriorities(); bool savePiecesPriorities();
protected slots: protected slots:

93
src/torrentpersistentdata.h

@ -179,71 +179,15 @@ public:
} }
data["seed"] = h.is_seed(); data["seed"] = h.is_seed();
data["priority"] = h.queue_position(); data["priority"] = h.queue_position();
QVariantList files_priority;
std::vector<int> fp = h.file_priorities();
std::vector<int>::iterator fp_it = fp.begin();
while(fp_it != fp.end()) {
files_priority << *fp_it;
fp_it++;
}
data["files_priority"] = files_priority;
data["save_path"] = h.save_path(); data["save_path"] = h.save_path();
QHash<QString, QVariant> trackers;
std::vector<announce_entry> tr = h.trackers();
std::vector<announce_entry>::iterator tr_it = tr.begin();
while(tr_it != tr.end()) {
trackers[misc::toQString((*tr_it).url)] = (*tr_it).tier;
tr_it++;
}
data["trackers"] = trackers;
if(!is_magnet) {
QVariantList url_seeds;
foreach(QString url_seed, h.url_seeds()) {
url_seeds << url_seed;
}
data["url_seeds"] = url_seeds;
}
// Save data // Save data
all_data[h.hash()] = data; all_data[h.hash()] = data;
settings.setValue("torrents", all_data); settings.setValue("torrents", all_data);
qDebug("TorrentPersistentData: Saving save_path %s, hash: %s", h.save_path().toLocal8Bit().data(), h.hash().toLocal8Bit().data()); qDebug("TorrentPersistentData: Saving save_path %s, hash: %s", h.save_path().toLocal8Bit().data(), h.hash().toLocal8Bit().data());
} }
static void saveTrackers(QTorrentHandle h) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[h.hash()].toHash();
QVariantList trackers;
std::vector<announce_entry> tr = h.trackers();
std::vector<announce_entry>::iterator tr_it = tr.begin();
while(tr_it != tr.end()) {
trackers << misc::toQString((*tr_it).url);
tr_it++;
}
data["trackers"] = trackers;
// Save data
all_data[h.hash()] = data;
settings.setValue("torrents", all_data);
}
// Setters // Setters
static void saveFilesPriority(QTorrentHandle h) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[h.hash()].toHash();
std::vector<int> fp = h.file_priorities();
std::vector<int>::iterator fp_it = fp.begin();
QVariantList files_priority;
while(fp_it != fp.end()) {
files_priority << *fp_it;
fp_it++;
}
data["files_priority"] = files_priority;
all_data[h.hash()] = data;
settings.setValue("torrents", all_data);
}
static void saveSavePath(QString hash, QString save_path) { static void saveSavePath(QString hash, QString save_path) {
Q_ASSERT(!hash.isEmpty()); Q_ASSERT(!hash.isEmpty());
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume")); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
@ -255,19 +199,6 @@ public:
qDebug("TorrentPersistentData: Saving save_path: %s, hash: %s", save_path.toLocal8Bit().data(), hash.toLocal8Bit().data()); qDebug("TorrentPersistentData: Saving save_path: %s, hash: %s", save_path.toLocal8Bit().data(), hash.toLocal8Bit().data());
} }
static void saveUrlSeeds(QTorrentHandle h) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[h.hash()].toHash();
QVariantList url_seeds;
foreach(QString url_seed, h.url_seeds()) {
url_seeds << url_seed;
}
data["url_seeds"] = url_seeds;
all_data[h.hash()] = data;
settings.setValue("torrents", all_data);
}
static void savePriority(QTorrentHandle h) { static void savePriority(QTorrentHandle h) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume")); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash(); QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
@ -287,20 +218,6 @@ public:
} }
// Getters // Getters
static QHash<QString, QVariant> getTrackers(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[hash].toHash();
return data["trackers"].toHash();
}
static QVariantList getFilesPriority(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[hash].toHash();
return data["files_priority"].toList();
}
static QString getSavePath(QString hash) { static QString getSavePath(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume")); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash(); QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
@ -316,16 +233,6 @@ public:
return data["priority"].toInt(); return data["priority"].toInt();
} }
static QVariantList getUrlSeeds(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();
QHash<QString, QVariant> data = all_data[hash].toHash();
if(data.contains("url_seeds")) {
return data["url_seeds"].toList();
}
return QVariantList();
}
static bool isSeed(QString hash) { static bool isSeed(QString hash) {
QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume")); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent-resume"));
QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash(); QHash<QString, QVariant> all_data = settings.value("torrents", QHash<QString, QVariant>()).toHash();

Loading…
Cancel
Save