mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
Merge branch 'master' into new-torrent
This commit is contained in:
@@ -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**
|
||||
|
||||
|
||||
@@ -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/*
|
||||
@@ -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
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
package version
|
||||
|
||||
const Version = "MatriX.106.NE"
|
||||
const Version = "MatriX.109.NE"
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user