increased accuracy of file_progress down to bytes (from 16kB blocks)
This commit is contained in:
parent
486fb1082d
commit
2435c5f19b
|
@ -4026,13 +4026,40 @@ namespace libtorrent
|
||||||
piece_picker::block_info const* info = i->info;
|
piece_picker::block_info const* info = i->info;
|
||||||
for (int k = 0; k < num_blocks; ++k)
|
for (int k = 0; k < num_blocks; ++k)
|
||||||
{
|
{
|
||||||
if (info[k].state != piece_picker::block_info::state_writing
|
TORRENT_ASSERT(offset == size_type(i->index) * m_torrent_file->piece_length()
|
||||||
&& info[k].state != piece_picker::block_info::state_finished)
|
+ k * m_block_size);
|
||||||
|
|
||||||
|
size_type block_size = m_block_size;
|
||||||
|
|
||||||
|
if (info[k].state == piece_picker::block_info::state_none)
|
||||||
|
{
|
||||||
|
offset += m_block_size;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info[k].state == piece_picker::block_info::state_requested)
|
||||||
|
{
|
||||||
|
block_size = 0;
|
||||||
|
policy::peer* p = static_cast<policy::peer*>(info[k].peer);
|
||||||
|
if (p && p->connection)
|
||||||
|
{
|
||||||
|
boost::optional<piece_block_progress> pbp
|
||||||
|
= p->connection->downloading_piece_progress();
|
||||||
|
if (pbp && pbp->piece_index == i->index && pbp->block_index == k)
|
||||||
|
block_size = pbp->bytes_downloaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (block_size == 0)
|
||||||
|
{
|
||||||
|
offset += m_block_size;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (offset + m_block_size > file->offset + file->size)
|
if (offset + m_block_size > file->offset + file->size)
|
||||||
{
|
{
|
||||||
|
int left_over = m_block_size - block_size;
|
||||||
// split the block on multiple files
|
// split the block on multiple files
|
||||||
size_type block_size = m_block_size;
|
|
||||||
while (offset + block_size > file->offset + file->size)
|
while (offset + block_size > file->offset + file->size)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(offset <= file->offset + file->size);
|
TORRENT_ASSERT(offset <= file->offset + file->size);
|
||||||
|
@ -4044,10 +4071,11 @@ namespace libtorrent
|
||||||
++file_index;
|
++file_index;
|
||||||
if (file == m_torrent_file->end_files()) break;
|
if (file == m_torrent_file->end_files()) break;
|
||||||
}
|
}
|
||||||
|
offset += left_over;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fp[file_index] += float(m_block_size) / file->size;
|
fp[file_index] += float(block_size) / file->size;
|
||||||
offset += m_block_size;
|
offset += m_block_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue