added alerts for added and removed torrents
This commit is contained in:
parent
77a4ac782a
commit
6692f05655
|
@ -1,3 +1,4 @@
|
||||||
|
* added alerts for added and removed torrents
|
||||||
* expanded plugin interface to support session wide states
|
* expanded plugin interface to support session wide states
|
||||||
* made the metadata block requesting algorithm more robust against hash check failures
|
* made the metadata block requesting algorithm more robust against hash check failures
|
||||||
* support a separate option to use proxies for peers or not
|
* support a separate option to use proxies for peers or not
|
||||||
|
|
|
@ -90,6 +90,15 @@ void bind_alert()
|
||||||
.def_readonly("url", &tracker_alert::url)
|
.def_readonly("url", &tracker_alert::url)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
class_<torrent_added_alert, bases<torrent_alert>, noncopyable>(
|
||||||
|
"torrent_added_alert", no_init)
|
||||||
|
;
|
||||||
|
|
||||||
|
class_<torrent_removed_alert, bases<torrent_alert>, noncopyable>(
|
||||||
|
"torrent_removed_alert", no_init)
|
||||||
|
.def_readonly("info_hash", &torrent_removed_alert::info_hash)
|
||||||
|
;
|
||||||
|
|
||||||
class_<read_piece_alert, bases<torrent_alert>, noncopyable>(
|
class_<read_piece_alert, bases<torrent_alert>, noncopyable>(
|
||||||
"read_piece_alert", 0, no_init)
|
"read_piece_alert", 0, no_init)
|
||||||
.add_property("buffer", get_buffer)
|
.add_property("buffer", get_buffer)
|
||||||
|
|
|
@ -5903,6 +5903,37 @@ There's also a base class for all alerts referring to tracker events::
|
||||||
|
|
||||||
The specific alerts are:
|
The specific alerts are:
|
||||||
|
|
||||||
|
torrent_added_alert
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The ``torrent_added_alert`` is posted once every time a torrent is added.
|
||||||
|
It doesn't contain any members of its own, but inherits the torrent handle
|
||||||
|
from its base class.
|
||||||
|
It's posted when the ``status_notification`` bit is set in the alert mask.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
struct torrent_added_alert: torrent_alert
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
};
|
||||||
|
|
||||||
|
torrent_removed_alert
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The ``torrent_removed_alert`` is posted whenever a torrent is removed. Since
|
||||||
|
the torrent handle in its baseclass will always be invalid (since the torrent
|
||||||
|
is already removed) it has the info hash as a member, to identify it.
|
||||||
|
It's posted when the ``status_notification`` bit is set in the alert mask.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
struct torrent_removed_alert: torrent_alert
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
sha1_hash info_hash;
|
||||||
|
};
|
||||||
|
|
||||||
read_piece_alert
|
read_piece_alert
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,30 @@ namespace libtorrent
|
||||||
virtual int category() const { return static_category; } \
|
virtual int category() const { return static_category; } \
|
||||||
virtual char const* what() const { return #name; }
|
virtual char const* what() const { return #name; }
|
||||||
|
|
||||||
|
struct TORRENT_EXPORT torrent_added_alert: torrent_alert
|
||||||
|
{
|
||||||
|
torrent_added_alert(torrent_handle const& h)
|
||||||
|
: torrent_alert(h)
|
||||||
|
{}
|
||||||
|
|
||||||
|
TORRENT_DEFINE_ALERT(torrent_added_alert);
|
||||||
|
const static int static_category = alert::status_notification;
|
||||||
|
virtual std::string message() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TORRENT_EXPORT torrent_removed_alert: torrent_alert
|
||||||
|
{
|
||||||
|
torrent_removed_alert(torrent_handle const& h, sha1_hash const& ih)
|
||||||
|
: torrent_alert(h)
|
||||||
|
, info_hash(ih)
|
||||||
|
{}
|
||||||
|
|
||||||
|
TORRENT_DEFINE_ALERT(torrent_removed_alert);
|
||||||
|
const static int static_category = alert::status_notification;
|
||||||
|
virtual std::string message() const;
|
||||||
|
sha1_hash info_hash;
|
||||||
|
};
|
||||||
|
|
||||||
struct TORRENT_EXPORT read_piece_alert: torrent_alert
|
struct TORRENT_EXPORT read_piece_alert: torrent_alert
|
||||||
{
|
{
|
||||||
read_piece_alert(torrent_handle const& h
|
read_piece_alert(torrent_handle const& h
|
||||||
|
|
|
@ -535,7 +535,16 @@ namespace libtorrent {
|
||||||
snprintf(msg, sizeof(msg), " ERROR: %s", error.message().c_str());
|
snprintf(msg, sizeof(msg), " ERROR: %s", error.message().c_str());
|
||||||
return torrent_alert::message() + msg;
|
return torrent_alert::message() + msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string torrent_added_alert::message() const
|
||||||
|
{
|
||||||
|
return torrent_alert::message() + " added";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string torrent_removed_alert::message() const
|
||||||
|
{
|
||||||
|
return torrent_alert::message() + " removed";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace libtorrent
|
} // namespace libtorrent
|
||||||
|
|
||||||
|
|
|
@ -3703,6 +3703,9 @@ namespace aux {
|
||||||
m_uuids.insert(std::make_pair(params.uuid.empty()
|
m_uuids.insert(std::make_pair(params.uuid.empty()
|
||||||
? params.url : params.uuid, torrent_ptr));
|
? params.url : params.uuid, torrent_ptr));
|
||||||
|
|
||||||
|
if (m_alerts.should_post<torrent_added_alert>())
|
||||||
|
m_alerts.post_alert(torrent_added_alert(torrent_ptr->get_handle()));
|
||||||
|
|
||||||
return torrent_handle(torrent_ptr);
|
return torrent_handle(torrent_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3778,43 +3781,44 @@ namespace aux {
|
||||||
i = m_torrents.find(urlhash);
|
i = m_torrents.find(urlhash);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != m_torrents.end())
|
if (i == m_torrents.end()) return;
|
||||||
{
|
|
||||||
torrent& t = *i->second;
|
torrent& t = *i->second;
|
||||||
if (options & session::delete_files)
|
if (options & session::delete_files)
|
||||||
t.delete_files();
|
t.delete_files();
|
||||||
t.abort();
|
t.abort();
|
||||||
|
|
||||||
|
if (m_alerts.should_post<torrent_removed_alert>())
|
||||||
|
m_alerts.post_alert(torrent_removed_alert(t.get_handle(), t.info_hash()));
|
||||||
|
|
||||||
#ifdef TORRENT_DEBUG
|
#ifdef TORRENT_DEBUG
|
||||||
sha1_hash i_hash = t.torrent_file().info_hash();
|
sha1_hash i_hash = t.torrent_file().info_hash();
|
||||||
#endif
|
#endif
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
if (i == m_next_dht_torrent)
|
if (i == m_next_dht_torrent)
|
||||||
++m_next_dht_torrent;
|
++m_next_dht_torrent;
|
||||||
#endif
|
#endif
|
||||||
if (i == m_next_lsd_torrent)
|
if (i == m_next_lsd_torrent)
|
||||||
++m_next_lsd_torrent;
|
++m_next_lsd_torrent;
|
||||||
if (i == m_next_connect_torrent)
|
if (i == m_next_connect_torrent)
|
||||||
++m_next_connect_torrent;
|
++m_next_connect_torrent;
|
||||||
|
|
||||||
t.set_queue_position(-1);
|
t.set_queue_position(-1);
|
||||||
m_torrents.erase(i);
|
m_torrents.erase(i);
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
if (m_next_dht_torrent == m_torrents.end())
|
if (m_next_dht_torrent == m_torrents.end())
|
||||||
m_next_dht_torrent = m_torrents.begin();
|
m_next_dht_torrent = m_torrents.begin();
|
||||||
#endif
|
#endif
|
||||||
if (m_next_lsd_torrent == m_torrents.end())
|
if (m_next_lsd_torrent == m_torrents.end())
|
||||||
m_next_lsd_torrent = m_torrents.begin();
|
m_next_lsd_torrent = m_torrents.begin();
|
||||||
if (m_next_connect_torrent == m_torrents.end())
|
if (m_next_connect_torrent == m_torrents.end())
|
||||||
m_next_connect_torrent = m_torrents.begin();
|
m_next_connect_torrent = m_torrents.begin();
|
||||||
|
|
||||||
std::list<boost::shared_ptr<torrent> >::iterator k
|
std::list<boost::shared_ptr<torrent> >::iterator k
|
||||||
= std::find(m_queued_for_checking.begin(), m_queued_for_checking.end(), tptr);
|
= std::find(m_queued_for_checking.begin(), m_queued_for_checking.end(), tptr);
|
||||||
if (k != m_queued_for_checking.end()) m_queued_for_checking.erase(k);
|
if (k != m_queued_for_checking.end()) m_queued_for_checking.erase(k);
|
||||||
TORRENT_ASSERT(m_torrents.find(i_hash) == m_torrents.end());
|
TORRENT_ASSERT(m_torrents.find(i_hash) == m_torrents.end());
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool session_impl::listen_on(
|
bool session_impl::listen_on(
|
||||||
|
|
Loading…
Reference in New Issue