mirror of
https://github.com/jkl1337/duplicacy.git
synced 2026-01-02 19:54:54 -06:00
Fixed incorrect restore percentage: should use chunk sizes instead of file sizes
This commit is contained in:
@@ -45,8 +45,8 @@ type ChunkDownloader struct {
|
|||||||
completionChannel chan ChunkDownloadCompletion // A downloading goroutine sends back the chunk via this channel after downloading
|
completionChannel chan ChunkDownloadCompletion // A downloading goroutine sends back the chunk via this channel after downloading
|
||||||
|
|
||||||
startTime int64 // The time it starts downloading
|
startTime int64 // The time it starts downloading
|
||||||
totalFileSize int64 // Total file size
|
totalChunkSize int64 // Total chunk size
|
||||||
downloadedFileSize int64 // Downloaded file size
|
downloadedChunkSize int64 // Downloaded chunk size
|
||||||
numberOfDownloadedChunks int // The number of chunks that have been downloaded
|
numberOfDownloadedChunks int // The number of chunks that have been downloaded
|
||||||
numberOfDownloadingChunks int // The number of chunks still being downloaded
|
numberOfDownloadingChunks int // The number of chunks still being downloaded
|
||||||
numberOfActiveChunks int // The number of chunks that is being downloaded or has been downloaded but not reclaimed
|
numberOfActiveChunks int // The number of chunks that is being downloaded or has been downloaded but not reclaimed
|
||||||
@@ -95,7 +95,7 @@ func (downloader *ChunkDownloader) AddFiles(snapshot *Snapshot, files [] *Entry)
|
|||||||
downloader.taskList = nil
|
downloader.taskList = nil
|
||||||
lastChunkIndex := -1
|
lastChunkIndex := -1
|
||||||
maximumChunks := 0
|
maximumChunks := 0
|
||||||
downloader.totalFileSize = 0
|
downloader.totalChunkSize = 0
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
if file.Size == 0 {
|
if file.Size == 0 {
|
||||||
continue
|
continue
|
||||||
@@ -109,6 +109,7 @@ func (downloader *ChunkDownloader) AddFiles(snapshot *Snapshot, files [] *Entry)
|
|||||||
needed: false,
|
needed: false,
|
||||||
}
|
}
|
||||||
downloader.taskList = append(downloader.taskList, task)
|
downloader.taskList = append(downloader.taskList, task)
|
||||||
|
downloader.totalChunkSize += int64(snapshot.ChunkLengths[i])
|
||||||
} else {
|
} else {
|
||||||
downloader.taskList[len(downloader.taskList) - 1].needed = true
|
downloader.taskList[len(downloader.taskList) - 1].needed = true
|
||||||
}
|
}
|
||||||
@@ -119,7 +120,6 @@ func (downloader *ChunkDownloader) AddFiles(snapshot *Snapshot, files [] *Entry)
|
|||||||
if file.EndChunk - file.StartChunk > maximumChunks {
|
if file.EndChunk - file.StartChunk > maximumChunks {
|
||||||
maximumChunks = file.EndChunk - file.StartChunk
|
maximumChunks = file.EndChunk - file.StartChunk
|
||||||
}
|
}
|
||||||
downloader.totalFileSize += file.Size
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,12 +177,6 @@ func (downloader *ChunkDownloader) Reclaim(chunkIndex int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := downloader.lastChunkIndex; i < chunkIndex; i++ {
|
|
||||||
if !downloader.taskList[i].isDownloading {
|
|
||||||
atomic.AddInt64(&downloader.downloadedFileSize, int64(downloader.taskList[i].chunkLength))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, _ := range downloader.completedTasks {
|
for i, _ := range downloader.completedTasks {
|
||||||
if i < chunkIndex && downloader.taskList[i].chunk != nil {
|
if i < chunkIndex && downloader.taskList[i].chunk != nil {
|
||||||
downloader.config.PutChunk(downloader.taskList[i].chunk)
|
downloader.config.PutChunk(downloader.taskList[i].chunk)
|
||||||
@@ -353,21 +347,20 @@ func (downloader *ChunkDownloader) Download(threadIndex int, task ChunkDownloadT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downloader.showStatistics || IsTracing()) && downloader.totalFileSize > 0 {
|
downloadedChunkSize := atomic.AddInt64(&downloader.downloadedChunkSize, int64(chunk.GetLength()))
|
||||||
|
|
||||||
atomic.AddInt64(&downloader.downloadedFileSize, int64(chunk.GetLength()))
|
if (downloader.showStatistics || IsTracing()) && downloader.totalChunkSize > 0 {
|
||||||
downloadFileSize := atomic.LoadInt64(&downloader.downloadedFileSize)
|
|
||||||
|
|
||||||
now := time.Now().Unix()
|
now := time.Now().Unix()
|
||||||
if now <= downloader.startTime {
|
if now <= downloader.startTime {
|
||||||
now = downloader.startTime + 1
|
now = downloader.startTime + 1
|
||||||
}
|
}
|
||||||
speed := downloadFileSize / (now - downloader.startTime)
|
speed := downloadedChunkSize / (now - downloader.startTime)
|
||||||
remainingTime := int64(0)
|
remainingTime := int64(0)
|
||||||
if speed > 0 {
|
if speed > 0 {
|
||||||
remainingTime = (downloader.totalFileSize - downloadFileSize) / speed + 1
|
remainingTime = (downloader.totalChunkSize - downloadedChunkSize) / speed + 1
|
||||||
}
|
}
|
||||||
percentage := float32(downloadFileSize * 1000 / downloader.totalFileSize)
|
percentage := float32(downloadedChunkSize * 1000 / downloader.totalChunkSize)
|
||||||
LOG_INFO("DOWNLOAD_PROGRESS", "Downloaded chunk %d size %d, %sB/s %s %.1f%%",
|
LOG_INFO("DOWNLOAD_PROGRESS", "Downloaded chunk %d size %d, %sB/s %s %.1f%%",
|
||||||
task.chunkIndex + 1, chunk.GetLength(),
|
task.chunkIndex + 1, chunk.GetLength(),
|
||||||
PrettySize(speed), PrettyTime(remainingTime), percentage / 10)
|
PrettySize(speed), PrettyTime(remainingTime), percentage / 10)
|
||||||
|
|||||||
Reference in New Issue
Block a user