mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
add play
This commit is contained in:
73
server/web/api/play.go
Normal file
73
server/web/api/play.go
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
|
"server/torr"
|
||||||
|
"server/torr/state"
|
||||||
|
"server/web/api/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
func play(c *gin.Context) {
|
||||||
|
hash := c.Param("hash")
|
||||||
|
indexStr := c.Param("id")
|
||||||
|
notAuth := c.GetBool("not_auth")
|
||||||
|
|
||||||
|
if hash == "" || indexStr == "" {
|
||||||
|
c.AbortWithError(http.StatusNotFound, errors.New("link should not be empty"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
spec, err := utils.ParseLink(hash)
|
||||||
|
if err != nil {
|
||||||
|
c.AbortWithError(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tor := torr.GetTorrent(spec.InfoHash.HexString())
|
||||||
|
if tor == nil && notAuth {
|
||||||
|
c.Header("WWW-Authenticate", "Basic realm=Authorization Required")
|
||||||
|
c.AbortWithStatus(http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if tor == nil {
|
||||||
|
c.AbortWithError(http.StatusInternalServerError, errors.New("error get torrent"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if tor.Stat == state.TorrentInDB {
|
||||||
|
tor, err = torr.AddTorrent(spec, tor.Title, tor.Poster, tor.Data)
|
||||||
|
if err != nil {
|
||||||
|
c.AbortWithError(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tor.GotInfo() {
|
||||||
|
c.AbortWithError(http.StatusInternalServerError, errors.New("timeout connection torrent"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// find file
|
||||||
|
index := -1
|
||||||
|
if len(tor.Files()) == 1 {
|
||||||
|
index = 1
|
||||||
|
} else {
|
||||||
|
ind, err := strconv.Atoi(indexStr)
|
||||||
|
if err == nil {
|
||||||
|
index = ind
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if index == -1 { // if file index not set and play file exec
|
||||||
|
c.AbortWithError(http.StatusBadRequest, errors.New("\"index\" is wrong"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tor.Stream(index, c.Request, c.Writer)
|
||||||
|
return
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user