mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
fixed bug in display of upload progress
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5228 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
be177ecb27
commit
8ef3d851de
@ -355,13 +355,26 @@ class CompressedChunkMap
|
||||
|
||||
static uint32_t getCompressedSize(uint32_t size) { return (size>>5) + !!(size&31) ; }
|
||||
|
||||
uint32_t filledChunks(uint32_t nbchks)
|
||||
uint32_t filledChunks(uint32_t nbchks) const
|
||||
{
|
||||
uint32_t res = 0 ;
|
||||
for(uint32_t i=0;i<std::min(nbchks,(uint32_t)_map.size()*32);++i)
|
||||
res += operator[](i) ;
|
||||
return res ;
|
||||
}
|
||||
uint64_t computeProgress(uint64_t total_size,uint32_t chunk_size) const
|
||||
{
|
||||
if(total_size == 0)
|
||||
return 0 ;
|
||||
|
||||
uint32_t nbchks = (uint32_t)((total_size + (uint64_t)chunk_size - 1) / (uint64_t)chunk_size) ;
|
||||
uint32_t residue = total_size%chunk_size ;
|
||||
|
||||
if(residue && operator[](nbchks-1))
|
||||
return (filledChunks(nbchks)-1)*chunk_size + (total_size%chunk_size) ;
|
||||
else
|
||||
return filledChunks(nbchks)*chunk_size ;
|
||||
}
|
||||
inline bool operator[](uint32_t i) const { return (_map[i >> 5] & (1 << (i & 31))) > 0 ; }
|
||||
|
||||
inline void set(uint32_t j) { _map[j >> 5] |= (1 << (j & 31)) ; }
|
||||
|
@ -336,14 +336,14 @@ TransfersDialog::TransfersDialog(QWidget *parent)
|
||||
resumeAct = new QAction(QIcon(IMAGE_RESUME), tr("Resume"), this);
|
||||
connect(resumeAct, SIGNAL(triggered()), this, SLOT(resumeFileTransfer()));
|
||||
|
||||
#ifdef USE_NEW_CHUNK_CHECKING_CODE
|
||||
//#ifdef USE_NEW_CHUNK_CHECKING_CODE
|
||||
// *********WARNING**********
|
||||
// csoler: this has been suspended because it needs the file transfer to consider a file as complete only if all chunks are
|
||||
// verified by hash. As users are goign to slowly switch to new checking code, this will not be readily available.
|
||||
//
|
||||
forceCheckAct = new QAction(QIcon(IMAGE_CANCEL), tr( "Force Check" ), this );
|
||||
connect( forceCheckAct , SIGNAL( triggered() ), this, SLOT( forceCheck() ) );
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
cancelAct = new QAction(QIcon(IMAGE_CANCEL), tr( "Cancel" ), this );
|
||||
connect( cancelAct , SIGNAL( triggered() ), this, SLOT( cancel() ) );
|
||||
@ -565,9 +565,9 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint /*point*/ )
|
||||
|
||||
if(info.downloadStatus != FT_STATE_COMPLETE)
|
||||
{
|
||||
#ifdef USE_NEW_CHUNK_CHECKING_CODE
|
||||
//#ifdef USE_NEW_CHUNK_CHECKING_CODE
|
||||
contextMnu.addAction( forceCheckAct);
|
||||
#endif
|
||||
//#endif
|
||||
contextMnu.addAction( cancelAct);
|
||||
}
|
||||
|
||||
@ -1027,9 +1027,7 @@ void TransfersDialog::insertTransfers()
|
||||
// transmit the completion info.
|
||||
//
|
||||
uint32_t chunk_size = 1024*1024 ;
|
||||
uint32_t nb_chunks = (uint32_t)(info.size / (uint64_t)(chunk_size) ) ;
|
||||
if((info.size % (uint64_t)chunk_size) != 0)
|
||||
++nb_chunks ;
|
||||
uint32_t nb_chunks = (uint32_t)((info.size + (uint64_t)chunk_size - 1) / (uint64_t)(chunk_size)) ;
|
||||
|
||||
uint32_t filled_chunks = pinfo.cmap.filledChunks(nb_chunks) ;
|
||||
pinfo.type = FileProgressInfo::UPLOAD_LINE ;
|
||||
@ -1037,8 +1035,8 @@ void TransfersDialog::insertTransfers()
|
||||
|
||||
if(filled_chunks > 0 && nb_chunks > 0)
|
||||
{
|
||||
pinfo.progress = filled_chunks*100.0/nb_chunks ;
|
||||
completed = std::min(info.size,((uint64_t)filled_chunks)*chunk_size) ; // we use min, because the last chunk might be smaller than chunk_size.
|
||||
completed = pinfo.cmap.computeProgress(info.size,chunk_size) ;
|
||||
pinfo.progress = completed / (float)info.size * 100.0f ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user