update piece prior

This commit is contained in:
YouROK
2021-02-19 16:48:39 +03:00
parent ce982dd17a
commit 4dfbdbd41a
2 changed files with 28 additions and 1 deletions

View File

@@ -201,7 +201,7 @@ func (c *Cache) getRemPieces() []*Piece {
piecesRemove = append(piecesRemove, p) piecesRemove = append(piecesRemove, p)
} }
} else { } else {
if state.Priority != torrent.PiecePriorityNow && state.Priority != torrent.PiecePriorityReadahead && state.Priority != torrent.PiecePriorityNormal { if state.Priority == torrent.PiecePriorityNone {
piece.SetPriority(torrent.PiecePriorityNormal) piece.SetPriority(torrent.PiecePriorityNormal)
} }
} }

View File

@@ -3,6 +3,7 @@ package torrstor
import ( import (
"io" "io"
"sync" "sync"
"time"
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
@@ -113,6 +114,32 @@ func (c *Cache) CloseReader(r *Reader) {
r.Close() r.Close()
delete(r.cache.readers, r) delete(r.cache.readers, r)
r.cache.muReaders.Unlock() r.cache.muReaders.Unlock()
go c.updatePriority()
}
func (c *Cache) updatePriority() {
time.Sleep(time.Second)
ranges := make([]Range, 0)
c.muReaders.Lock()
for r, _ := range c.readers {
ranges = append(ranges, r.getPiecesRange())
}
c.muReaders.Unlock()
ranges = mergeRange(ranges)
for id, _ := range c.pieces {
if len(ranges) > 0 {
if !inRanges(ranges, id) {
if c.torrent.PieceState(id).Priority != torrent.PiecePriorityNone {
c.torrent.Piece(id).SetPriority(torrent.PiecePriorityNone)
}
}
} else {
if c.torrent.PieceState(id).Priority != torrent.PiecePriorityNone {
c.torrent.Piece(id).SetPriority(torrent.PiecePriorityNone)
}
}
}
} }
func (r *Reader) getPiecesRange() Range { func (r *Reader) getPiecesRange() Range {