Add a flag for Complete

This commit is contained in:
Matt Joiner 2021-10-07 12:09:20 +11:00
parent 81c47d5705
commit c9c137d8f2
1 changed files with 9 additions and 0 deletions

View File

@ -149,6 +149,9 @@ type Torrent struct {
dirtyChunks roaring.Bitmap
pex pexState
// Is On when all pieces are complete.
Complete chansync.Flag
}
func (t *Torrent) pieceAvailabilityFromPeers(i pieceIndex) (count int) {
@ -413,6 +416,7 @@ func (t *Torrent) setInfo(info *metainfo.Info) error {
t.nameMu.Lock()
t.info = info
t.nameMu.Unlock()
t.updateComplete()
t.fileIndex = segments.NewIndex(common.LengthIterFromUpvertedFiles(info.UpvertedFiles()))
t.displayName = "" // Save a few bytes lol.
t.initFiles()
@ -1264,6 +1268,7 @@ func (t *Torrent) updatePieceCompletion(piece pieceIndex) bool {
} else {
t._completedPieces.Remove(x)
}
t.updateComplete()
if complete && len(p.dirtiers) != 0 {
t.logger.Printf("marked piece %v complete but still has dirtiers", piece)
}
@ -2289,3 +2294,7 @@ func (t *Torrent) numChunks() RequestIndex {
func (t *Torrent) pieceRequestIndexOffset(piece pieceIndex) RequestIndex {
return RequestIndex(piece) * t.chunksPerRegularPiece()
}
func (t *Torrent) updateComplete() {
t.Complete.SetBool(t.haveAllPieces())
}