diff --git a/src/server/settings/torrbt.go b/src/server/settings/torrbt.go index 8f01905..859fb49 100644 --- a/src/server/settings/torrbt.go +++ b/src/server/settings/torrbt.go @@ -8,11 +8,9 @@ import ( type BTSets struct { // Cache - CacheSize int64 // in byte, def 200 mb - PreloadBufferSize int64 // in byte, buffer for preload - - // Reader - ReaderPreload int // in percent, 5%-100%, [...S__X__E...] [S-E] not clean + CacheSize int64 // in byte, def 200 mb + PreloadBuffer bool + ReaderReadAHead int // in percent, 5%-100%, [...S__X__E...] [S-E] not clean // Storage SaveOnDisk bool // save on disk? @@ -52,11 +50,11 @@ func SetBTSets(sets *BTSets) { return } - if sets.ReaderPreload < 5 { - sets.ReaderPreload = 5 + if sets.ReaderReadAHead < 5 { + sets.ReaderReadAHead = 5 } - if sets.ReaderPreload > 100 { - sets.ReaderPreload = 100 + if sets.ReaderReadAHead > 100 { + sets.ReaderReadAHead = 100 } BTsets = sets buf, err := json.Marshal(BTsets) @@ -72,8 +70,8 @@ func loadBTSets() { if len(buf) > 0 { err := json.Unmarshal(buf, &BTsets) if err == nil { - if BTsets.ReaderPreload < 5 { - BTsets.ReaderPreload = 5 + if BTsets.ReaderReadAHead < 5 { + BTsets.ReaderReadAHead = 5 } return } @@ -84,11 +82,11 @@ func loadBTSets() { sets.EnableDebug = false sets.DisableUTP = true sets.CacheSize = 200 * 1024 * 1024 // 200mb - sets.PreloadBufferSize = 20 * 1024 * 1024 + sets.PreloadBuffer = true sets.ConnectionsLimit = 20 sets.DhtConnectionLimit = 500 sets.RetrackersMode = 1 sets.TorrentDisconnectTimeout = 30 - sets.ReaderPreload = 70 // 70% preload + sets.ReaderReadAHead = 70 // 70% preload BTsets = sets } diff --git a/src/server/torr/apihelper.go b/src/server/torr/apihelper.go index 363fcfe..cc2991d 100644 --- a/src/server/torr/apihelper.go +++ b/src/server/torr/apihelper.go @@ -6,11 +6,10 @@ import ( "sort" "time" - "server/log" - sets "server/settings" - "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" + "server/log" + sets "server/settings" ) var ( @@ -128,3 +127,16 @@ func Shutdown() { func WriteStatus(w io.Writer) { bts.client.WriteStatus(w) } + +func Preload(torr *Torrent, index int) { + if !sets.BTsets.PreloadBuffer { + size := int64(20 * 1024 * 1024) + if size > sets.BTsets.CacheSize { + size = sets.BTsets.CacheSize + } + torr.Preload(index, size) + } else { + size := int64(float32(sets.BTsets.ReaderReadAHead) / 100.0 * float32(sets.BTsets.CacheSize)) + torr.Preload(index, size) + } +} diff --git a/src/server/torr/storage/torrstor/readerloader.go b/src/server/torr/storage/torrstor/readerloader.go index 5d7641b..f4282eb 100644 --- a/src/server/torr/storage/torrstor/readerloader.go +++ b/src/server/torr/storage/torrstor/readerloader.go @@ -20,7 +20,7 @@ func (r *Reader) getPieceNum(offset int64) int { } func (r *Reader) getReaderRange() (int64, int64) { - prc := int64(settings.BTsets.ReaderPreload) + prc := int64(settings.BTsets.ReaderReadAHead) beginOffset := r.offset - r.cache.capacity*(100-prc)/100 endOffset := r.offset + r.cache.capacity*prc/100 diff --git a/src/server/web/api/stream.go b/src/server/web/api/stream.go index 85b9827..31f68d9 100644 --- a/src/server/web/api/stream.go +++ b/src/server/web/api/stream.go @@ -92,7 +92,7 @@ func stream(c *gin.Context) { } // preload torrent if preload { - tor.Preload(index, 0) + torr.Preload(tor, index) } // return stat if query if stat {