mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 21:46:11 +05:00
refactor
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/anacrolix/torrent"
|
"github.com/anacrolix/torrent"
|
||||||
"server/log"
|
"server/log"
|
||||||
|
"server/settings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Reader struct {
|
type Reader struct {
|
||||||
@@ -61,7 +62,6 @@ func (r *Reader) Read(p []byte) (n int, err error) {
|
|||||||
if r.file.Torrent() != nil && r.file.Torrent().Info() != nil {
|
if r.file.Torrent() != nil && r.file.Torrent().Info() != nil {
|
||||||
n, err = r.Reader.Read(p)
|
n, err = r.Reader.Read(p)
|
||||||
r.offset += int64(n)
|
r.offset += int64(n)
|
||||||
//go r.preload()
|
|
||||||
} else {
|
} else {
|
||||||
log.TLogln("Torrent closed and readed")
|
log.TLogln("Torrent closed and readed")
|
||||||
}
|
}
|
||||||
@@ -113,3 +113,37 @@ func (c *Cache) CloseReader(r *Reader) {
|
|||||||
delete(r.cache.readers, r)
|
delete(r.cache.readers, r)
|
||||||
r.cache.muReaders.Unlock()
|
r.cache.muReaders.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Reader) getPiecesRange() Range {
|
||||||
|
startOff, endOff := r.getOffsetRange()
|
||||||
|
return Range{r.getPieceNum(startOff), r.getPieceNum(endOff)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Reader) getReaderPiece() int {
|
||||||
|
readerOff := r.offset
|
||||||
|
return r.getPieceNum(readerOff)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Reader) getPieceNum(offset int64) int {
|
||||||
|
return int((offset + r.file.Offset()) / r.cache.pieceLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Reader) getOffsetRange() (int64, int64) {
|
||||||
|
prc := int64(settings.BTsets.ReaderReadAHead)
|
||||||
|
readers := int64(len(r.cache.readers))
|
||||||
|
if readers == 0 {
|
||||||
|
readers = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
beginOffset := r.offset - (r.cache.capacity/readers)*(100-prc)/100
|
||||||
|
endOffset := r.offset + (r.cache.capacity/readers)*prc/100
|
||||||
|
|
||||||
|
if beginOffset < 0 {
|
||||||
|
beginOffset = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if endOffset > r.file.Length() {
|
||||||
|
endOffset = r.file.Length()
|
||||||
|
}
|
||||||
|
return beginOffset, endOffset
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
package torrstor
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/anacrolix/torrent"
|
|
||||||
"server/settings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (r *Reader) getPiecesRange() Range {
|
|
||||||
startOff, endOff := r.getOffsetRange()
|
|
||||||
return Range{r.getPieceNum(startOff), r.getPieceNum(endOff)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) getReaderPiece() int {
|
|
||||||
readerOff := r.offset
|
|
||||||
return r.getPieceNum(readerOff)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) getPieceNum(offset int64) int {
|
|
||||||
return int((offset + r.file.Offset()) / r.cache.pieceLength)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) getOffsetRange() (int64, int64) {
|
|
||||||
prc := int64(settings.BTsets.ReaderReadAHead)
|
|
||||||
readers := int64(len(r.cache.readers))
|
|
||||||
if readers == 0 {
|
|
||||||
readers = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
beginOffset := r.offset - (r.cache.capacity/readers)*(100-prc)/100
|
|
||||||
endOffset := r.offset + (r.cache.capacity/readers)*prc/100
|
|
||||||
|
|
||||||
if beginOffset < 0 {
|
|
||||||
beginOffset = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if endOffset > r.file.Length() {
|
|
||||||
endOffset = r.file.Length()
|
|
||||||
}
|
|
||||||
return beginOffset, endOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) preload() {
|
|
||||||
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()
|
|
||||||
|
|
||||||
// from reader readahead to end of range
|
|
||||||
for i := readerPiece + rahPiece; i < rrange.End; i++ {
|
|
||||||
if torr.Piece(i).State().Priority == torrent.PiecePriorityNone {
|
|
||||||
torr.Piece(i).SetPriority(torrent.PiecePriorityNormal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user