diff --git a/README.md b/README.md index bb0c4e7..b4e7905 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ Enter current ip address and port of server e.g. _127.0.0.1:8090_ [QIWI](qiwi.com/n/YOUROK85) \ [YooMoney](https://yoomoney.ru/to/410013733697114/200) -SberBank card: **4276 4000 6707 2919** +SberBank card: **5484 4000 2285 7839** YooMoney card: **4048 4150 1812 8179** diff --git a/docker-all.sh b/docker-all.sh index 37a26d5..8d927ee 100755 --- a/docker-all.sh +++ b/docker-all.sh @@ -6,5 +6,5 @@ ROOT=${PWD} echo "Build web" go run gen_web.go -sudo docker run --rm -v "$PWD":/usr/src/torr -v ~/go/pkg/mod:/go/pkg/mod -w /usr/src/torr golang:1.17.0-stretch ./build-all.sh +sudo docker run --rm -v "$PWD":/usr/src/torr -v ~/go/pkg/mod:/go/pkg/mod -w /usr/src/torr golang:1.17.2-stretch ./build-all.sh sudo chmod 0777 ./dist/* \ No newline at end of file diff --git a/server/go.mod b/server/go.mod index c9f5cb5..81a5247 100644 --- a/server/go.mod +++ b/server/go.mod @@ -2,7 +2,8 @@ module server go 1.17 -replace github.com/anacrolix/dms v1.3.0 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 + +replace github.com/anacrolix/dms v1.3.0 => github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf exclude ( github.com/willf/bitset v1.2.0 @@ -13,7 +14,7 @@ require ( github.com/alexflint/go-arg v1.4.2 github.com/anacrolix/dms v1.3.0 github.com/anacrolix/missinggo v1.3.0 - github.com/anacrolix/torrent v1.33.0 + github.com/anacrolix/torrent v1.34.0 github.com/gin-contrib/location v0.0.2 github.com/gin-gonic/gin v1.7.4 github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 diff --git a/server/go.sum b/server/go.sum index b26af9c..b9d7a9f 100644 --- a/server/go.sum +++ b/server/go.sum @@ -715,8 +715,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf h1:1aPC/oFTq4NsYSjiQFrvn/Tmvq/Qr/sCxzRR669T9nw= +github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index e887841..1a5f56b 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -215,7 +215,10 @@ func (c *Cache) getRemPieces() []*Piece { ranges := make([]Range, 0) c.muReaders.Lock() for r, _ := range c.readers { - ranges = append(ranges, r.getPiecesRange()) + r.checkReader() + if r.isUse { + ranges = append(ranges, r.getPiecesRange()) + } } c.muReaders.Unlock() ranges = mergeRange(ranges) @@ -243,6 +246,9 @@ func (c *Cache) getRemPieces() []*Piece { c.muReaders.Lock() for r, _ := range c.readers { + if !r.isUse { + continue + } if c.isIdInFileBE(ranges, r.getReaderPiece()) { continue } @@ -336,7 +342,10 @@ func (c *Cache) clearPriority() { ranges := make([]Range, 0) c.muReaders.Lock() for r, _ := range c.readers { - ranges = append(ranges, r.getPiecesRange()) + r.checkReader() + if r.isUse { + ranges = append(ranges, r.getPiecesRange()) + } } c.muReaders.Unlock() ranges = mergeRange(ranges) diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index b4188ba..73b085d 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -23,7 +23,8 @@ type Reader struct { ///Preload lastAccess int64 - muPreload sync.Mutex + isUse bool + mu sync.Mutex ranges Range } @@ -34,6 +35,7 @@ func newReader(file *torrent.File, cache *Cache) *Reader { r.SetReadahead(0) r.cache = cache + r.isUse = true cache.muReaders.Lock() cache.readers[r] = struct{}{} @@ -53,6 +55,7 @@ func (r *Reader) Seek(offset int64, whence int) (n int64, err error) { case io.SeekEnd: r.offset = r.file.Length() + offset } + r.readerOn() n, err = r.Reader.Seek(offset, whence) r.offset = n r.lastAccess = time.Now().Unix() @@ -65,6 +68,7 @@ func (r *Reader) Read(p []byte) (n int, err error) { return } if r.file.Torrent() != nil && r.file.Torrent().Info() != nil { + r.readerOn() n, err = r.Reader.Read(p) //samsung tv fix xvid/divx @@ -94,16 +98,12 @@ func (r *Reader) Read(p []byte) (n int, err error) { } func (r *Reader) SetReadahead(length int64) { - if time.Now().Unix() > r.lastAccess+60 && r.cache != nil && len(r.cache.readers) > 1 { - //fix read a head on not readed reader - r.Reader.SetReadahead(0) - r.readahead = 0 - return - } if r.cache != nil && length > r.cache.capacity { length = r.cache.capacity } - r.Reader.SetReadahead(length) + if r.isUse { + r.Reader.SetReadahead(length) + } r.readahead = length } @@ -143,14 +143,8 @@ func (r *Reader) getPieceNum(offset int64) int { } func (r *Reader) getOffsetRange() (int64, int64) { - - if time.Now().Unix() > r.lastAccess+60 && len(r.cache.readers) > 1 { - r.SetReadahead(0) - return r.file.Offset(), r.file.Offset() - } - prc := int64(settings.BTsets.ReaderReadAHead) - readers := int64(len(r.cache.readers)) + readers := int64(r.getUseReaders()) if readers == 0 { readers = 1 } @@ -167,3 +161,47 @@ func (r *Reader) getOffsetRange() (int64, int64) { } return beginOffset, endOffset } + +func (r *Reader) checkReader() { + if time.Now().Unix() > r.lastAccess+60 && len(r.cache.readers) > 1 { + r.readerOff() + } else { + r.readerOn() + } +} + +func (r *Reader) readerOn() { + r.mu.Lock() + defer r.mu.Unlock() + if !r.isUse { + if pos, err := r.Reader.Seek(0, io.SeekCurrent); err == nil && pos == 0 { + r.Reader.Seek(r.offset, io.SeekStart) + } + r.SetReadahead(r.readahead) + r.isUse = true + } +} + +func (r *Reader) readerOff() { + r.mu.Lock() + defer r.mu.Unlock() + if r.isUse { + r.SetReadahead(0) + r.isUse = false + if r.offset > 0 { + r.Reader.Seek(0, io.SeekStart) + } + } +} + +func (r *Reader) getUseReaders() int { + readers := 0 + if r.cache != nil { + for reader, _ := range r.cache.readers { + if reader.isUse { + readers++ + } + } + } + return readers +} diff --git a/server/version/version.go b/server/version/version.go index a846556..8e8f604 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -1,3 +1,3 @@ package version -const Version = "MatriX.106.NE" +const Version = "MatriX.109.NE" diff --git a/server/web/server.go b/server/web/server.go index e1c9ef4..c984bb1 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -3,12 +3,12 @@ package web import ( "net" + "github.com/gin-contrib/cors" "github.com/gin-contrib/location" "github.com/gin-gonic/gin" "server/dlna" "server/settings" - "server/web/cors" "server/web/msx" "server/log" @@ -38,11 +38,14 @@ func Start(port string) { } gin.SetMode(gin.ReleaseMode) + //corsCfg := cors.DefaultConfig() + //corsCfg.AllowAllOrigins = true + //corsCfg.AllowHeaders = []string{"*"} + //corsCfg.AllowMethods = []string{"*"} + //corsCfg.AllowPrivateNetwork = true corsCfg := cors.DefaultConfig() corsCfg.AllowAllOrigins = true - corsCfg.AllowHeaders = []string{"*"} - corsCfg.AllowMethods = []string{"*"} - corsCfg.AllowPrivateNetwork = true + corsCfg.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "X-Requested-With", "Accept", "Authorization"} route := gin.New() route.Use(log.WebLogger(), blocker.Blocker(), gin.Recovery(), cors.New(corsCfg), location.Default())