diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index 59a033e..3f26a34 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -66,14 +66,14 @@ func Start() { NoProbe: true, StallEventSubscribe: true, Icons: []dms.Icon{ - dms.Icon{ + { Width: 48, Height: 48, Depth: 24, Mimetype: "image/png", Bytes: template.Dlnaicon48png, }, - dms.Icon{ + { Width: 120, Height: 120, Depth: 24, diff --git a/server/go.mod b/server/go.mod index 984a9f7..6aea526 100644 --- a/server/go.mod +++ b/server/go.mod @@ -19,7 +19,8 @@ require ( github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 github.com/pkg/errors v0.9.1 go.etcd.io/bbolt v1.3.6 - golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 + golang.org/x/time v0.3.0 + gopkg.in/vansante/go-ffprobe.v2 v2.1.1 ) require ( diff --git a/server/go.sum b/server/go.sum index aca5e79..3bc85e3 100644 --- a/server/go.sum +++ b/server/go.sum @@ -414,6 +414,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/vansante/go-ffprobe.v2 v2.1.1 h1:DIh5fMn+tlBvG7pXyUZdemVmLdERnf2xX6XOFF+0BBU= +gopkg.in/vansante/go-ffprobe.v2 v2.1.1/go.mod h1:qF0AlAjk7Nqzqf3y333Ly+KxN3cKF2JqA3JT5ZheUGE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/server/rutor/rutor.go b/server/rutor/rutor.go index ed44794..c984996 100644 --- a/server/rutor/rutor.go +++ b/server/rutor/rutor.go @@ -137,6 +137,9 @@ func loadDB() { log.TLogln("Index rutor db") torrsearch.NewIndex(torrs) + log.TLogln("Torrents count:", len(torrs)) + log.TLogln("Indexed words:", len(torrsearch.GetIDX())) + } else { log.TLogln("Error load rutor db:", err) } diff --git a/server/rutor/torrsearch/index.go b/server/rutor/torrsearch/index.go index 45f6e12..dd0197d 100644 --- a/server/rutor/torrsearch/index.go +++ b/server/rutor/torrsearch/index.go @@ -18,6 +18,10 @@ func Search(text string) []int { return idx.search(text) } +func GetIDX() Index { + return idx +} + func (idx Index) add(torrs []*models.TorrentDetails) { for ID, torr := range torrs { for _, token := range analyze(torr.Title) { diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index 9326cd8..b84365b 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -126,7 +126,7 @@ func (c *Cache) AdjustRA(readahead int64) { } if c.Readers() > 0 { c.muReaders.Lock() - for r, _ := range c.readers { + for r := range c.readers { r.SetReadahead(readahead) } c.muReaders.Unlock() @@ -158,7 +158,7 @@ func (c *Cache) GetState() *state.CacheState { if c.Readers() > 0 { c.muReaders.Lock() - for r, _ := range c.readers { + for r := range c.readers { rng := r.getPiecesRange() pc := r.getReaderPiece() readersState = append(readersState, &state.ReaderState{ @@ -214,7 +214,7 @@ func (c *Cache) getRemPieces() []*Piece { ranges := make([]Range, 0) c.muReaders.Lock() - for r, _ := range c.readers { + for r := range c.readers { r.checkReader() if r.isUse { ranges = append(ranges, r.getPiecesRange()) @@ -245,7 +245,7 @@ func (c *Cache) getRemPieces() []*Piece { c.clearPriority() c.muReaders.Lock() - for r, _ := range c.readers { + for r := range c.readers { if !r.isUse { continue } @@ -341,7 +341,7 @@ func (c *Cache) clearPriority() { time.Sleep(time.Second) ranges := make([]Range, 0) c.muReaders.Lock() - for r, _ := range c.readers { + for r := range c.readers { r.checkReader() if r.isUse { ranges = append(ranges, r.getPiecesRange()) @@ -350,7 +350,7 @@ func (c *Cache) clearPriority() { c.muReaders.Unlock() ranges = mergeRange(ranges) - for id, _ := range c.pieces { + for id := range c.pieces { if len(ranges) > 0 { if !inRanges(ranges, id) { if c.torrent.PieceState(id).Priority != torrent.PiecePriorityNone { diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 73b085d..80afb8a 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -197,7 +197,7 @@ func (r *Reader) readerOff() { func (r *Reader) getUseReaders() int { readers := 0 if r.cache != nil { - for reader, _ := range r.cache.readers { + for reader := range r.cache.readers { if reader.isUse { readers++ } diff --git a/server/web/api/ffprobe.go b/server/web/api/ffprobe.go new file mode 100644 index 0000000..045f0e0 --- /dev/null +++ b/server/web/api/ffprobe.go @@ -0,0 +1,41 @@ +package api + +import ( + "context" + "errors" + "fmt" + "github.com/gin-gonic/gin" + "gopkg.in/vansante/go-ffprobe.v2" + "net/http" + "os" + "path/filepath" + "server/utils" +) + +func ffp(c *gin.Context) { + hash := c.Param("hash") + indexStr := c.Param("id") + + if hash == "" || indexStr == "" { + c.AbortWithError(http.StatusNotFound, errors.New("link should not be empty")) + return + } + + host := utils.GetScheme(c) + "://" + c.Request.Host + "/stream?link=" + hash + "&index=" + indexStr + "&play" + fmt.Println(host) + + ctx, cancelFn := context.WithCancel(context.Background()) + defer cancelFn() + + if _, err := os.Stat("ffprobe"); os.IsNotExist(err) { + ffprobe.SetFFProbeBinPath(filepath.Dir(os.Args[0]) + "/ffprobe") + } + + data, err := ffprobe.ProbeURL(ctx, host) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("error getting data: %v", err)) + return + } + + c.JSON(200, data) +} diff --git a/server/web/api/route.go b/server/web/api/route.go index 771aaba..eeafb66 100644 --- a/server/web/api/route.go +++ b/server/web/api/route.go @@ -39,7 +39,10 @@ func SetupRoute(route *gin.RouterGroup) { route.GET("/playlist/*fname", playList) route.GET("/download/:size", download) + route.GET("/search/*query", rutorSearch) + + route.GET("/ffp/:hash/:id", ffp) } func shutdown(c *gin.Context) { diff --git a/server/web/server.go b/server/web/server.go index f05caa4..e3f3cc1 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -28,7 +28,7 @@ var ( ) func Start(port string) { - log.TLogln("Start TorrServer") + log.TLogln("Start TorrServer " + version.Version) ips := getLocalIps() if len(ips) > 0 { log.TLogln("Local IPs:", ips)