diff --git a/build-all.sh b/build-all.sh index 8392969..6b245b4 100755 --- a/build-all.sh +++ b/build-all.sh @@ -39,7 +39,7 @@ GOBIN="/usr/local/go/bin/go" [ -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 -#ln -s . src/github.com/pion/webrtc/v2 +ln -s . src/github.com/pion/webrtc/v2 $GOBIN version diff --git a/deps.sh b/deps.sh new file mode 100755 index 0000000..331dc0d --- /dev/null +++ b/deps.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +export GOPATH="${PWD}" + +go get -v github.com/alexflint/go-arg +go get -v github.com/anacrolix/dht +go get -v github.com/anacrolix/missinggo/httptoo +go get -v github.com/anacrolix/torrent +go get -v github.com/anacrolix/torrent/iplist +go get -v github.com/anacrolix/torrent/metainfo +go get -v github.com/anacrolix/utp +go get -u github.com/gin-gonic/gin +go get -v github.com/pion/webrtc/v2 +go get -v go.etcd.io/bbolt + +ln -s . src/github.com/pion/webrtc/v2 \ No newline at end of file diff --git a/src/main/preconfig_pos.go b/src/main/preconfig_pos.go index 1cdd4c2..827121d 100644 --- a/src/main/preconfig_pos.go +++ b/src/main/preconfig_pos.go @@ -9,8 +9,6 @@ import ( "os" "os/signal" "syscall" - - "server" ) func Preconfig(kill bool) { @@ -27,8 +25,6 @@ func Preconfig(kill bool) { if kill { fmt.Println("Signal catched:", s) fmt.Println("For stop server, close in web") - } else { - server.Stop() } } }() diff --git a/src/server/settings/torrent.go b/src/server/settings/torrent.go index ae8153f..529fee0 100644 --- a/src/server/settings/torrent.go +++ b/src/server/settings/torrent.go @@ -5,9 +5,10 @@ import ( "sort" "sync" + "server/torr/state" + "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" - "server/torr/state" ) type TorrentDB struct { diff --git a/src/server/torr/state/state.go b/src/server/torr/state/state.go index 7586e6a..b855f5a 100644 --- a/src/server/torr/state/state.go +++ b/src/server/torr/state/state.go @@ -31,6 +31,9 @@ const ( ) type TorrentStats struct { + Title string `json:"title"` + Poster string `json:"poster"` + Name string `json:"name,omitempty"` Hash string `json:"hash,omitempty"` diff --git a/src/server/torr/stream.go b/src/server/torr/stream.go index 03de85f..b941a68 100644 --- a/src/server/torr/stream.go +++ b/src/server/torr/stream.go @@ -12,10 +12,10 @@ import ( func (t *Torrent) Stream(fileIndex int, req *http.Request, resp http.ResponseWriter) error { files := t.Files() - if fileIndex < 0 || fileIndex >= len(files) { + if fileIndex < 1 || fileIndex > len(files) { return errors.New("file index out of range") } - file := files[fileIndex] + file := files[fileIndex-1] reader := t.NewReader(file, 0) log.Println("Connect client") diff --git a/src/server/torr/torrent.go b/src/server/torr/torrent.go index c348394..7a80be1 100644 --- a/src/server/torr/torrent.go +++ b/src/server/torr/torrent.go @@ -42,8 +42,6 @@ type Torrent struct { PreloadSize int64 PreloadedBytes int64 - hash metainfo.Hash - expiredTime time.Time closed <-chan struct{} @@ -80,6 +78,7 @@ func NewTorrent(spec *torrent.TorrentSpec, bt *BTServer) (*Torrent, error) { torr.bt = bt torr.closed = goTorrent.Closed() torr.TorrentSpec = spec + torr.expiredTime = time.Now().Add(time.Minute) go torr.watch() @@ -97,7 +96,7 @@ func (t *Torrent) WaitInfo() bool { select { case <-t.Torrent.GotInfo(): - t.cache = t.bt.storage.GetCache(t.hash) + t.cache = t.bt.storage.GetCache(t.Hash()) return true case <-t.closed: return false @@ -192,7 +191,13 @@ func (t *Torrent) Files() []*torrent.File { } func (t *Torrent) Hash() metainfo.Hash { - return t.hash + if t.Torrent != nil { + t.Torrent.InfoHash() + } + if t.TorrentSpec != nil { + return t.TorrentSpec.InfoHash + } + return [20]byte{} } func (t *Torrent) Length() int64 { @@ -329,8 +334,8 @@ func (t *Torrent) Close() { t.bt.mu.Lock() defer t.bt.mu.Unlock() - if _, ok := t.bt.torrents[t.hash]; ok { - delete(t.bt.torrents, t.hash) + if _, ok := t.bt.torrents[t.Hash()]; ok { + delete(t.bt.torrents, t.Hash()) } t.drop() @@ -344,6 +349,9 @@ func (t *Torrent) Stats() *state.TorrentStats { st.TorrentStatus = t.Status st.TorrentStatusString = t.Status.String() + st.Title = t.Title + st.Poster = t.Poster + if t.TorrentSpec != nil { st.Hash = t.TorrentSpec.InfoHash.HexString() } @@ -383,7 +391,7 @@ func (t *Torrent) Stats() *state.TorrentStats { for i, f := range files { st.FileStats = append(st.FileStats, state.TorrentFileStat{ - Id: i, + Id: i + 1, Path: f.Path(), Length: f.Length(), }) diff --git a/src/server/web/api/m3u.go b/src/server/web/api/m3u.go index 10ee322..5e2d8d9 100644 --- a/src/server/web/api/m3u.go +++ b/src/server/web/api/m3u.go @@ -8,11 +8,12 @@ import ( "path/filepath" "time" - "github.com/gin-gonic/gin" - "github.com/pkg/errors" sets "server/settings" "server/torr/state" "server/utils" + + "github.com/gin-gonic/gin" + "github.com/pkg/errors" ) func allPlayList(c *gin.Context) { diff --git a/src/server/web/api/stream.go b/src/server/web/api/stream.go index 2f25c03..c5b9b5c 100644 --- a/src/server/web/api/stream.go +++ b/src/server/web/api/stream.go @@ -5,18 +5,19 @@ import ( "net/url" "strconv" - "github.com/gin-gonic/gin" - "github.com/pkg/errors" "server/torr" "server/web/api/utils" + + "github.com/gin-gonic/gin" + "github.com/pkg/errors" ) -// http://127.0.0.1:8090/stream/fname?link=...&index=0&stat -// http://127.0.0.1:8090/stream/fname?link=...&index=0&m3u -// http://127.0.0.1:8090/stream/fname?link=...&index=0&play +// http://127.0.0.1:8090/stream/fname?link=...&index=1&stat +// http://127.0.0.1:8090/stream/fname?link=...&index=1&m3u +// http://127.0.0.1:8090/stream/fname?link=...&index=1&play // http://127.0.0.1:8090/stream/fname?link=...&save&title=...&poster=... -// http://127.0.0.1:8090/stream/fname?link=...&index=0&play&save -// http://127.0.0.1:8090/stream/fname?link=...&index=0&play&save&title=...&poster=... +// http://127.0.0.1:8090/stream/fname?link=...&index=1&play&save +// http://127.0.0.1:8090/stream/fname?link=...&index=1&play&save&title=...&poster=... func stream(c *gin.Context) { link := c.Query("link") @@ -82,7 +83,7 @@ func stream(c *gin.Context) { c.Status(200) } // wait torrent info - if !tor.WaitInfo() { + if !tor.GotInfo() { c.AbortWithError(http.StatusInternalServerError, errors.New("timeout torrent get info")) return } @@ -90,7 +91,7 @@ func stream(c *gin.Context) { // find file index := -1 if len(tor.Files()) == 1 { - index = 0 + index = 1 } else { ind, err := strconv.Atoi(indexStr) if err == nil { diff --git a/src/server/web/api/torrents.go b/src/server/web/api/torrents.go index 554b779..c7b26ff 100644 --- a/src/server/web/api/torrents.go +++ b/src/server/web/api/torrents.go @@ -3,13 +3,14 @@ package api import ( "net/http" - "github.com/anacrolix/torrent/metainfo" - "github.com/gin-gonic/gin" - "github.com/pkg/errors" "server/log" "server/torr" "server/torr/state" "server/web/api/utils" + + "github.com/anacrolix/torrent/metainfo" + "github.com/gin-gonic/gin" + "github.com/pkg/errors" ) //Action: add, get, rem, list, drop @@ -70,7 +71,7 @@ func addTorrent(req torrReqJS, c *gin.Context) { return } - if !torr.WaitInfo() { + if !torr.GotInfo() { log.TLogln("error add torrent:", "timeout connection torrent") c.AbortWithError(http.StatusNotFound, errors.New("timeout connection torrent")) return diff --git a/src/server/web/api/utils/dbwrapper.go b/src/server/web/api/utils/dbwrapper.go index ba4bc1d..8675c9a 100644 --- a/src/server/web/api/utils/dbwrapper.go +++ b/src/server/web/api/utils/dbwrapper.go @@ -3,9 +3,11 @@ package utils import ( "time" - "github.com/anacrolix/torrent/metainfo" "server/settings" "server/torr" + "server/torr/state" + + "github.com/anacrolix/torrent/metainfo" ) func AddTorrent(torr *torr.Torrent) { @@ -26,6 +28,7 @@ func GetTorrent(hash metainfo.Hash) *torr.Torrent { torr.TorrentSpec = db.TorrentSpec torr.Title = db.Title torr.Poster = db.Poster + torr.Status = state.TorrentInDB return torr } } @@ -44,6 +47,7 @@ func ListTorrents() []*torr.Torrent { torr.TorrentSpec = db.TorrentSpec torr.Title = db.Title torr.Poster = db.Poster + torr.Status = state.TorrentInDB ret = append(ret, torr) } return ret diff --git a/src/server/web/api/utils/link.go b/src/server/web/api/utils/link.go index 3c4ed2c..bbe59f4 100644 --- a/src/server/web/api/utils/link.go +++ b/src/server/web/api/utils/link.go @@ -35,7 +35,7 @@ func ParseLink(link string) (*torrent.TorrentSpec, error) { } func fromMagnet(link string) (*torrent.TorrentSpec, error) { - mag, err := metainfo.ParseMagnetURI(link) + mag, err := metainfo.ParseMagnetUri(link) if err != nil { return nil, err }