From 3d595bbcdc9a6f44ee77f09a561c1402d036b99e Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Fri, 25 Dec 2020 12:23:31 +0300 Subject: [PATCH] fix bug with file id --- src/server/torr/stream.go | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/server/torr/stream.go b/src/server/torr/stream.go index 05e64f6..35015f0 100644 --- a/src/server/torr/stream.go +++ b/src/server/torr/stream.go @@ -8,24 +8,46 @@ import ( "time" "github.com/anacrolix/missinggo/httptoo" + "github.com/anacrolix/torrent" sets "server/settings" + "server/torr/state" ) -func (t *Torrent) Stream(fileIndex int, req *http.Request, resp http.ResponseWriter) error { +func (t *Torrent) Stream(fileID int, req *http.Request, resp http.ResponseWriter) error { if !t.GotInfo() { http.NotFound(resp, req) return errors.New("torrent don't get info") } - files := t.Files() - if fileIndex < 1 || fileIndex > len(files) { - return errors.New("file index out of range") + + st := t.Status() + var stFile *state.TorrentFileStat + for _, fileStat := range st.FileStats { + if fileStat.Id == fileID { + stFile = fileStat + break + } } - file := files[fileIndex-1] + if stFile == nil { + return fmt.Errorf("file with id %v not found", fileID) + } + + files := t.Files() + var file *torrent.File + for _, tfile := range files { + if tfile.Path() == stFile.Path { + file = tfile + break + } + } + if file == nil { + return fmt.Errorf("file with id %v not found", fileID) + } + reader := t.NewReader(file) log.Println("Connect client") - sets.SetViewed(&sets.Viewed{t.Hash().HexString(), fileIndex}) + sets.SetViewed(&sets.Viewed{t.Hash().HexString(), fileID}) resp.Header().Set("Connection", "close") resp.Header().Set("ETag", httptoo.EncodeQuotedString(fmt.Sprintf("%s/%s", t.Hash().HexString(), file.Path())))