mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
migrate
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -25,3 +25,4 @@ dist/
|
||||
toolchains/
|
||||
/src/crawshaw.io/
|
||||
/src/go.etcd.io/
|
||||
/src/google.golang.org/
|
||||
|
||||
@@ -26,15 +26,16 @@ export GOPATH="${PWD}"
|
||||
GOBIN="/usr/local/go/bin/go"
|
||||
|
||||
[ -d src/github.com/alexflint/go-arg ] && go get -v github.com/alexflint/go-arg
|
||||
|
||||
[ -d src/github.com/anacrolix/dht ] && go get -v github.com/anacrolix/dht
|
||||
[ -d src/github.com/anacrolix/missinggo/httptoo ] && go get -v github.com/anacrolix/missinggo/httptoo
|
||||
[ -d src/github.com/anacrolix/torrent ] && go get -v github.com/anacrolix/torrent
|
||||
[ -d src/github.com/anacrolix/torrent/iplist ] && go get -v github.com/anacrolix/torrent/iplist
|
||||
[ -d src/github.com/anacrolix/torrent/metainfo ] && go get -v github.com/anacrolix/torrent/metainfo
|
||||
[ -d src/github.com/anacrolix/utp ] && go get -v github.com/anacrolix/utp
|
||||
[ -d src/github.com/labstack/echo ] && go get -v github.com/labstack/echo
|
||||
[ -d src/github.com/labstack/echo/middleware ] && go get -v github.com/labstack/echo/middleware
|
||||
[ -d src/github.com/labstack/gommon/bytes ] && go get -v github.com/labstack/gommon/bytes
|
||||
|
||||
[ -d src/github.com/gin-gonic/gin ] && go get -u github.com/gin-gonic/gin
|
||||
|
||||
[ -d src/github.com/pion/webrtc/v2 ] && go get -v github.com/pion/webrtc/v2
|
||||
[ -d src/go.etcd.io/bbolt ] && go get -v go.etcd.io/bbolt
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/alexflint/go-arg"
|
||||
"server"
|
||||
"server/settings"
|
||||
"server/version"
|
||||
)
|
||||
|
||||
@@ -45,12 +44,7 @@ func main() {
|
||||
|
||||
Preconfig(params.Kill)
|
||||
|
||||
server.Start(params.Path, params.Port)
|
||||
if (params.RDB) {
|
||||
settings.SetRDB()
|
||||
} else {
|
||||
settings.SaveSettings()
|
||||
}
|
||||
server.Start(params.Path, params.Port, params.RDB)
|
||||
fmt.Println(server.WaitServer())
|
||||
time.Sleep(time.Second * 3)
|
||||
os.Exit(0)
|
||||
|
||||
@@ -9,10 +9,11 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"server"
|
||||
)
|
||||
|
||||
func Preconfig(kill bool) {
|
||||
if kill {
|
||||
sigc := make(chan os.Signal, 1)
|
||||
signal.Notify(sigc,
|
||||
syscall.SIGHUP,
|
||||
@@ -23,11 +24,14 @@ func Preconfig(kill bool) {
|
||||
syscall.SIGQUIT)
|
||||
go func() {
|
||||
for s := range sigc {
|
||||
if kill {
|
||||
fmt.Println("Signal catched:", s)
|
||||
fmt.Println("For stop server, close in web")
|
||||
} else {
|
||||
server.Stop()
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
//dns resover
|
||||
addrs, err := net.LookupHost("www.themoviedb.org")
|
||||
|
||||
@@ -2,6 +2,7 @@ package server
|
||||
|
||||
import (
|
||||
"server/settings"
|
||||
"server/web"
|
||||
)
|
||||
|
||||
func Start(settingsPath, port string, roSets bool) {
|
||||
@@ -9,18 +10,18 @@ func Start(settingsPath, port string, roSets bool) {
|
||||
if port == "" {
|
||||
port = "8090"
|
||||
}
|
||||
//server.Start(port)
|
||||
web.Start(port)
|
||||
}
|
||||
|
||||
func WaitServer() string {
|
||||
//err := server.Wait()
|
||||
// if err != nil {
|
||||
// return err.Error()
|
||||
// }
|
||||
err := web.Wait()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
// go server.Stop()
|
||||
web.Stop()
|
||||
settings.CloseDB()
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ func (v *BTSets) String() string {
|
||||
}
|
||||
|
||||
var (
|
||||
BTsets = loadBTSets()
|
||||
BTsets *BTSets
|
||||
)
|
||||
|
||||
func SetBTSets(sets *BTSets) {
|
||||
@@ -54,12 +54,12 @@ func SetBTSets(sets *BTSets) {
|
||||
tdb.Set("Settings", "BitTorr", buf)
|
||||
}
|
||||
|
||||
func loadBTSets() *BTSets {
|
||||
func loadBTSets() {
|
||||
buf := tdb.Get("Settings", "BitTorr")
|
||||
if len(buf) > 0 {
|
||||
err := json.Unmarshal(buf, &BTsets)
|
||||
if err == nil {
|
||||
return BTsets
|
||||
return
|
||||
}
|
||||
log.TLogln("Error unmarshal btsets", err)
|
||||
}
|
||||
@@ -73,5 +73,5 @@ func loadBTSets() *BTSets {
|
||||
sets.DhtConnectionLimit = 500
|
||||
sets.RetrackersMode = 1
|
||||
sets.TorrentDisconnectTimeout = 30
|
||||
return sets
|
||||
BTsets = sets
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package reader
|
||||
package torr
|
||||
|
||||
import (
|
||||
"github.com/anacrolix/torrent"
|
||||
"server/torr"
|
||||
|
||||
"io"
|
||||
|
||||
"github.com/anacrolix/torrent"
|
||||
)
|
||||
|
||||
type Reader struct {
|
||||
@@ -14,7 +13,7 @@ type Reader struct {
|
||||
file *torrent.File
|
||||
}
|
||||
|
||||
func NewReader(torr *torr.Torrent, file *torrent.File, readahead int64) *Reader {
|
||||
func NewReader(torr *Torrent, file *torrent.File, readahead int64) *Reader {
|
||||
r := new(Reader)
|
||||
r.file = file
|
||||
r.Reader = file.NewReader()
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
"github.com/anacrolix/torrent"
|
||||
"server/settings"
|
||||
"server/torr/reader"
|
||||
"server/torr/utils"
|
||||
|
||||
"github.com/anacrolix/torrent/metainfo"
|
||||
@@ -36,7 +36,7 @@ type Cache struct {
|
||||
|
||||
prcLoaded int
|
||||
|
||||
readers map[*reader.Reader]struct{}
|
||||
readers map[torrent.Reader]struct{}
|
||||
}
|
||||
|
||||
func NewCache(capacity int64, storage *Storage) *Cache {
|
||||
@@ -45,7 +45,7 @@ func NewCache(capacity int64, storage *Storage) *Cache {
|
||||
filled: 0,
|
||||
pieces: make(map[int]*Piece),
|
||||
s: storage,
|
||||
readers: make(map[*reader.Reader]struct{}),
|
||||
readers: make(map[torrent.Reader]struct{}),
|
||||
}
|
||||
|
||||
return ret
|
||||
@@ -173,13 +173,13 @@ func prc(val, of int) int {
|
||||
return int(float64(val) * 100.0 / float64(of))
|
||||
}
|
||||
|
||||
func (c *Cache) AddReader(r *reader.Reader) {
|
||||
func (c *Cache) AddReader(r torrent.Reader) {
|
||||
c.muReader.Lock()
|
||||
defer c.muReader.Unlock()
|
||||
c.readers[r] = struct{}{}
|
||||
}
|
||||
|
||||
func (c *Cache) RemReader(r *reader.Reader) {
|
||||
func (c *Cache) RemReader(r torrent.Reader) {
|
||||
c.muReader.Lock()
|
||||
defer c.muReader.Unlock()
|
||||
delete(c.readers, r)
|
||||
|
||||
@@ -10,12 +10,10 @@ import (
|
||||
"server/torr/utils"
|
||||
utils2 "server/utils"
|
||||
|
||||
"server/torr/reader"
|
||||
"server/torr/storage/torrstor"
|
||||
|
||||
"github.com/anacrolix/torrent"
|
||||
"github.com/anacrolix/torrent/metainfo"
|
||||
"github.com/labstack/gommon/bytes"
|
||||
)
|
||||
|
||||
type TorrentStatus int
|
||||
@@ -227,15 +225,15 @@ func (t *Torrent) Length() int64 {
|
||||
return t.Torrent.Length()
|
||||
}
|
||||
|
||||
func (t *Torrent) NewReader(file *torrent.File, readahead int64) *reader.Reader {
|
||||
func (t *Torrent) NewReader(file *torrent.File, readahead int64) *Reader {
|
||||
if t.status == TorrentClosed {
|
||||
return nil
|
||||
}
|
||||
reader := reader.NewReader(t, file, readahead)
|
||||
reader := NewReader(t, file, readahead)
|
||||
return reader
|
||||
}
|
||||
|
||||
func (t *Torrent) CloseReader(reader *reader.Reader) {
|
||||
func (t *Torrent) CloseReader(reader *Reader) {
|
||||
reader.Close()
|
||||
t.cache.RemReader(reader)
|
||||
t.expiredTime = time.Now().Add(time.Second * time.Duration(settings.BTsets.TorrentDisconnectTimeout))
|
||||
@@ -317,7 +315,7 @@ func (t *Torrent) Preload(file *torrent.File, size int64) {
|
||||
for t.status == TorrentPreload {
|
||||
t.expiredTime = time.Now().Add(time.Minute * 5)
|
||||
t.PreloadedBytes = t.Torrent.BytesCompleted()
|
||||
log.Println("Preload:", file.Torrent().InfoHash().HexString(), bytes.Format(t.PreloadedBytes), "/", bytes.Format(t.PreloadSize), "Speed:", utils2.Format(t.DownloadSpeed), "Peers:[", t.Torrent.Stats().ConnectedSeeders, "]", t.Torrent.Stats().ActivePeers, "/", t.Torrent.Stats().TotalPeers)
|
||||
log.Println("Preload:", file.Torrent().InfoHash().HexString(), utils2.Format(float64(t.PreloadedBytes)), "/", utils2.Format(float64(t.PreloadSize)), "Speed:", utils2.Format(t.DownloadSpeed), "Peers:[", t.Torrent.Stats().ConnectedSeeders, "]", t.Torrent.Stats().ActivePeers, "/", t.Torrent.Stats().TotalPeers)
|
||||
if t.PreloadedBytes >= t.PreloadSize {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2,20 +2,9 @@ package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func CleanFName(file string) string {
|
||||
re := regexp.MustCompile(`[ !*'();:@&=+$,/?#\[\]~"{}]`)
|
||||
ret := re.ReplaceAllString(file, `_`)
|
||||
ret = strings.Replace(ret, "__", "_", -1)
|
||||
ret = strings.Replace(ret, "._", "_", -1)
|
||||
ret = strings.Replace(ret, "_.", ".", -1)
|
||||
return ret
|
||||
}
|
||||
|
||||
const (
|
||||
_ = 1.0 << (10 * iota) // ignore first value by assigning to blank identifier
|
||||
KB
|
||||
|
||||
36
src/server/web/server.go
Normal file
36
src/server/web/server.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"server/torr"
|
||||
)
|
||||
|
||||
var (
|
||||
BTS = torr.NewBTS()
|
||||
waitChan = make(chan error)
|
||||
)
|
||||
|
||||
func Start(port string) {
|
||||
|
||||
BTS.Connect()
|
||||
|
||||
route := gin.New()
|
||||
route.Use(gin.Logger(), gin.Recovery())
|
||||
|
||||
route.GET("/ping", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"message": "pong",
|
||||
})
|
||||
})
|
||||
|
||||
waitChan <- route.Run(":" + port)
|
||||
}
|
||||
|
||||
func Wait() error {
|
||||
return <-waitChan
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
BTS.Disconnect()
|
||||
waitChan <- nil
|
||||
}
|
||||
Reference in New Issue
Block a user