From 12106c308e4b89baf7d7d9825cc2cc8530e82c2c Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sun, 15 Nov 2009 10:59:11 +0000 Subject: [PATCH] - Manage country resolution on libtorrent side. The flags are not displayed in the peer list yet though --- src/bittorrent.cpp | 18 ++++++++++++++++++ src/bittorrent.h | 1 + src/qtorrenthandle.cpp | 10 ++++++++++ src/qtorrenthandle.h | 2 ++ 4 files changed, 31 insertions(+) diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index 2275187f3..159a55c19 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -59,6 +59,7 @@ enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4}; // Main constructor bittorrent::bittorrent() : DHTEnabled(false), preAllocateAll(false), addInPause(false), maxConnecsPerTorrent(500), maxUploadsPerTorrent(4), ratio_limit(-1), UPnPEnabled(false), NATPMPEnabled(false), LSDEnabled(false), queueingEnabled(false) { + resolve_countries = false; // To avoid some exceptions fs::path::default_name_check(fs::no_check); // Creating bittorrent session @@ -262,6 +263,19 @@ void bittorrent::configureSession() { // Enabled setUploadRateLimit(up_limit*1024); } + // Resolve countries + bool new_resolv_countries = Preferences::resolvePeerCountries(); + if(resolve_countries != new_resolv_countries) { + resolve_countries = new_resolv_countries; + // Update torrent handles + std::vector torrents = getTorrents(); + std::vector::iterator torrentIT; + for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) { + QTorrentHandle h = QTorrentHandle(*torrentIT); + if(h.is_valid()) + h.resolve_countries(resolve_countries); + } + } // * UPnP if(Preferences::isUPnPEnabled()) { enableUPnP(true); @@ -653,6 +667,8 @@ QTorrentHandle bittorrent::addMagnetUri(QString magnet_uri, bool resumed) { h.set_max_connections(maxConnecsPerTorrent); // Uploads limit per torrent h.set_max_uploads(maxUploadsPerTorrent); + // Resolve countries + h.resolve_countries(resolve_countries); // Load filtered files if(resumed) { // Load custom url seeds @@ -825,6 +841,8 @@ QTorrentHandle bittorrent::addTorrent(QString path, bool fromScanDir, QString fr h.set_max_connections(maxConnecsPerTorrent); // Uploads limit per torrent h.set_max_uploads(maxUploadsPerTorrent); + // Resolve countries + h.resolve_countries(resolve_countries); // Load filtered files loadFilesPriorities(h); if(resumed) { diff --git a/src/bittorrent.h b/src/bittorrent.h index 3eb365967..9c869fbfe 100644 --- a/src/bittorrent.h +++ b/src/bittorrent.h @@ -75,6 +75,7 @@ class bittorrent : public QObject { bool queueingEnabled; QStringList url_skippingDlg; QHash savepath_fromurl; + bool resolve_countries; protected: QString getSavePath(QString hash); diff --git a/src/qtorrenthandle.cpp b/src/qtorrenthandle.cpp index f863dedfa..984796377 100644 --- a/src/qtorrenthandle.cpp +++ b/src/qtorrenthandle.cpp @@ -374,6 +374,11 @@ bool QTorrentHandle::is_sequential_download() const { return h.is_sequential_download(); } +bool QTorrentHandle::resolve_countries() const { + Q_ASSERT(h.is_valid()); + return h.resolve_countries(); +} + // // Setters // @@ -487,6 +492,11 @@ void QTorrentHandle::super_seeding(bool on) const { h.super_seeding(on); } +void QTorrentHandle::resolve_countries(bool r) { + Q_ASSERT(h.is_valid()); + h.resolve_countries(r); +} + // // Operators // diff --git a/src/qtorrenthandle.h b/src/qtorrenthandle.h index 8e6d301bd..71a21b04e 100644 --- a/src/qtorrenthandle.h +++ b/src/qtorrenthandle.h @@ -117,6 +117,7 @@ class QTorrentHandle { bool super_seeding() const; QString creation_date() const; void get_peer_info(std::vector&) const; + bool resolve_countries() const; // // Setters @@ -143,6 +144,7 @@ class QTorrentHandle { void force_recheck() const; void move_storage(QString path) const; void super_seeding(bool on) const; + void resolve_countries(bool r); // // Operators