*** empty log message ***

This commit is contained in:
Arvid Norberg 2005-06-10 23:12:50 +00:00
parent 2d4c01ec65
commit 1bc22888a8
5 changed files with 38 additions and 9 deletions

View File

@ -168,7 +168,6 @@ namespace libtorrent
// piece-block, or if it's queued for downloading by some client // piece-block, or if it's queued for downloading by some client
// or if it already has been successfully downlloaded // or if it already has been successfully downlloaded
bool is_downloading(piece_block block) const; bool is_downloading(piece_block block) const;
bool is_finished(piece_block block) const; bool is_finished(piece_block block) const;
// marks this piece-block as queued for downloading // marks this piece-block as queued for downloading

View File

@ -285,6 +285,12 @@ namespace libtorrent
// all seeds and let the tracker know we're finished. // all seeds and let the tracker know we're finished.
void completed(); void completed();
// this is called when the torrent has finished. i.e.
// all the pieces we have not filtered have been downloaded.
// If no pieces are filtered, this is called first and then
// completed() is called immediately after it.
void finished();
bool verify_piece(int piece_index); bool verify_piece(int piece_index);
// this is called from the peer_connection // this is called from the peer_connection

View File

@ -640,10 +640,10 @@ namespace libtorrent
int incomplete = -1; int incomplete = -1;
try { complete = e["complete"].integer(); } try { complete = e["complete"].integer(); }
catch(type_error& e) {} catch(type_error&) {}
try { incomplete = e["incomplete"].integer(); } try { incomplete = e["incomplete"].integer(); }
catch(type_error& e) {} catch(type_error&) {}
requester().tracker_response(m_req, peer_list, interval, complete requester().tracker_response(m_req, peer_list, interval, complete
, incomplete); , incomplete);

View File

@ -992,7 +992,9 @@ namespace libtorrent
m_torrent->filesystem().write(&m_recv_buffer[9], p.piece, p.start, p.length); m_torrent->filesystem().write(&m_recv_buffer[9], p.piece, p.start, p.length);
bool was_seed = m_torrent->is_seed(); bool was_seed = m_torrent->is_seed();
bool was_finished = picker.num_filtered() + m_torrent->num_pieces()
== m_torrent->torrent_file().num_pieces();
picker.mark_as_finished(block_finished, m_socket->sender()); picker.mark_as_finished(block_finished, m_socket->sender());
m_torrent->get_policy().block_finished(*this, block_finished); m_torrent->get_policy().block_finished(*this, block_finished);
@ -1004,6 +1006,17 @@ namespace libtorrent
if (verified) if (verified)
{ {
m_torrent->announce_piece(p.piece); m_torrent->announce_piece(p.piece);
assert(m_torrent->valid_metadata());
if (!was_finished
&& picker.num_filtered() + m_torrent->num_pieces()
== m_torrent->torrent_file().num_pieces())
{
// torrent finished
// i.e. all the pieces we're interested in have
// been downloaded. Release the files (they will open
// in read only mode if needed)
m_torrent->finished();
}
} }
else else
{ {

View File

@ -739,7 +739,8 @@ namespace libtorrent
} }
} }
void torrent::completed() // called when torrent is finished (all interested pieces downloaded)
void torrent::finished()
{ {
if (alerts().should_post(alert::info)) if (alerts().should_post(alert::info))
{ {
@ -748,11 +749,9 @@ namespace libtorrent
, "torrent has finished downloading")); , "torrent has finished downloading"));
} }
// disconnect all seeds // disconnect all seeds
for (peer_iterator i = m_connections.begin(); for (peer_iterator i = m_connections.begin();
i != m_connections.end(); i != m_connections.end(); ++i)
++i)
{ {
assert(i->second->associated_torrent() == this); assert(i->second->associated_torrent() == this);
if (i->second->is_seed()) if (i->second->is_seed())
@ -760,7 +759,19 @@ namespace libtorrent
} }
m_storage->release_files(); m_storage->release_files();
}
// called when torrent is complete (all pieces downloaded)
void torrent::completed()
{
/*
if (alerts().should_post(alert::info))
{
alerts().post_alert(torrent_complete_alert(
get_handle()
, "torrent is complete"));
}
*/
// make the next tracker request // make the next tracker request
// be a completed-event // be a completed-event
m_event = tracker_request::completed; m_event = tracker_request::completed;