This commit is contained in:
YouROK
2021-03-02 15:22:40 +03:00
parent 08c60ce1e9
commit 41c0638206
2 changed files with 55 additions and 50 deletions

View File

@@ -3,6 +3,7 @@ package torrstor
import (
"sort"
"sync"
"time"
"github.com/anacrolix/torrent"
@@ -226,3 +227,57 @@ func (c *Cache) isIdInFileBE(ranges []Range, id int) bool {
}
return false
}
//////////////////
// Reader section
////////
func (c *Cache) NewReader(file *torrent.File) *Reader {
return newReader(file, c)
}
func (c *Cache) Readers() int {
if c == nil {
return 0
}
c.muReaders.Lock()
defer c.muReaders.Unlock()
if c == nil || c.readers == nil {
return 0
}
return len(c.readers)
}
func (c *Cache) CloseReader(r *Reader) {
r.cache.muReaders.Lock()
r.Close()
delete(r.cache.readers, r)
r.cache.muReaders.Unlock()
// go c.updatePriority()
}
func (c *Cache) updatePriority() {
return
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)
}
}
}
}

View File

@@ -3,7 +3,6 @@ package torrstor
import (
"io"
"sync"
"time"
"github.com/anacrolix/torrent"
@@ -93,55 +92,6 @@ func (r *Reader) Close() {
go r.cache.getRemPieces()
}
func (c *Cache) NewReader(file *torrent.File) *Reader {
return newReader(file, c)
}
func (c *Cache) Readers() int {
if c == nil {
return 0
}
c.muReaders.Lock()
defer c.muReaders.Unlock()
if c == nil || c.readers == nil {
return 0
}
return len(c.readers)
}
func (c *Cache) CloseReader(r *Reader) {
r.cache.muReaders.Lock()
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 {
startOff, endOff := r.getOffsetRange()
return Range{r.getPieceNum(startOff), r.getPieceNum(endOff), r.file}