From 4dfbdbd41a9c78828dc3aecb8db32f274974eff8 Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Fri, 19 Feb 2021 16:48:39 +0300 Subject: [PATCH] update piece prior --- server/torr/storage/torrstor/cache.go | 2 +- server/torr/storage/torrstor/reader.go | 27 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index e9b1774..1b16a60 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -201,7 +201,7 @@ func (c *Cache) getRemPieces() []*Piece { piecesRemove = append(piecesRemove, p) } } else { - if state.Priority != torrent.PiecePriorityNow && state.Priority != torrent.PiecePriorityReadahead && state.Priority != torrent.PiecePriorityNormal { + if state.Priority == torrent.PiecePriorityNone { piece.SetPriority(torrent.PiecePriorityNormal) } } diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 4968c2e..9f466ce 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -3,6 +3,7 @@ package torrstor import ( "io" "sync" + "time" "github.com/anacrolix/torrent" @@ -113,6 +114,32 @@ func (c *Cache) CloseReader(r *Reader) { r.Close() delete(r.cache.readers, r) 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 {