From 2b1e66cf594bcc6658df6ab84e738e9e79ef34c1 Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Fri, 19 Feb 2021 00:21:23 +0300 Subject: [PATCH] change pieces prior set --- server/torr/storage/torrstor/cache.go | 14 +++++++++----- server/torr/storage/torrstor/reader.go | 3 ++- server/torr/storage/torrstor/readerloader.go | 7 ++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index 71d19f9..6931c51 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -165,7 +165,7 @@ func (c *Cache) cleanPieces() { remPieces := c.getRemPieces() if c.filled > c.capacity { - rems := (c.filled - c.capacity) / c.pieceLength + rems := (c.filled-c.capacity)/c.pieceLength + 1 for _, p := range remPieces { c.removePiece(p) rems-- @@ -192,19 +192,23 @@ func (c *Cache) getRemPieces() []*Piece { if p.Size > 0 { fill += p.Size } + piece := c.torrent.Piece(id) + state := piece.State() if len(ranges) > 0 { if !inRanges(ranges, id) { - piece := c.torrent.Piece(id) - if piece.State().Priority != torrent.PiecePriorityNone { + if state.Priority != torrent.PiecePriorityNone { piece.SetPriority(torrent.PiecePriorityNone) } if p.Size > 0 { piecesRemove = append(piecesRemove, p) } + } else { + if state.Priority != torrent.PiecePriorityNow && state.Priority != torrent.PiecePriorityReadahead && state.Priority != torrent.PiecePriorityNormal { + piece.SetPriority(torrent.PiecePriorityNormal) + } } } else { - piece := c.torrent.Piece(id) - if piece.State().Priority != torrent.PiecePriorityNone { + if state.Priority != torrent.PiecePriorityNone { piece.SetPriority(torrent.PiecePriorityNone) } } diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 5924b2d..6265ade 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -19,6 +19,7 @@ type Reader struct { ///Preload muPreload sync.Mutex + ranges Range } func newReader(file *torrent.File, cache *Cache) *Reader { @@ -60,7 +61,7 @@ func (r *Reader) Read(p []byte) (n int, err error) { if r.file.Torrent() != nil && r.file.Torrent().Info() != nil { n, err = r.Reader.Read(p) r.offset += int64(n) - go r.preload() + //go r.preload() } else { log.TLogln("Torrent closed and readed") } diff --git a/server/torr/storage/torrstor/readerloader.go b/server/torr/storage/torrstor/readerloader.go index 8ea44d1..0d2dbf4 100644 --- a/server/torr/storage/torrstor/readerloader.go +++ b/server/torr/storage/torrstor/readerloader.go @@ -40,8 +40,13 @@ func (r *Reader) getOffsetRange() (int64, int64) { } func (r *Reader) preload() { - torr := r.file.Torrent() rrange := r.getPiecesRange() + if rrange.Start == r.ranges.Start && rrange.End == r.ranges.End { + return + } + + torr := r.file.Torrent() + r.ranges = rrange rahPiece := int(r.readahead / torr.Info().PieceLength) readerPiece := r.getReaderPiece()