tstor/torrent/handler.go

83 lines
1.6 KiB
Go
Raw Normal View History

2021-03-01 18:04:59 +00:00
package torrent
import (
"fmt"
"sync"
"github.com/anacrolix/torrent"
"github.com/distribyted/distribyted/config"
"github.com/distribyted/distribyted/fs"
"github.com/distribyted/distribyted/stats"
"github.com/rs/zerolog/log"
2021-03-01 18:04:59 +00:00
)
type Handler struct {
c *torrent.Client
s *stats.Torrent
fssMu sync.Mutex
fss map[string]fs.Filesystem
2021-03-01 18:04:59 +00:00
}
func NewHandler(c *torrent.Client, s *stats.Torrent) *Handler {
return &Handler{
c: c,
s: s,
fss: make(map[string]fs.Filesystem),
2021-03-01 18:04:59 +00:00
}
}
func (s *Handler) Load(path string, ts []*config.Torrent) error {
var torrents []*torrent.Torrent
2021-03-01 18:04:59 +00:00
for _, mpcTorrent := range ts {
var t *torrent.Torrent
var err error
switch {
case mpcTorrent.MagnetURI != "":
t, err = s.c.AddMagnet(mpcTorrent.MagnetURI)
break
case mpcTorrent.TorrentPath != "":
t, err = s.c.AddTorrentFromFile(mpcTorrent.TorrentPath)
break
default:
err = fmt.Errorf("no magnet URI or torrent path provided")
}
if err != nil {
return err
}
// only get info if name is not available
if t.Name() == "" {
log.Info().Str("hash", t.InfoHash().String()).Msg("getting torrent info")
2021-03-01 18:04:59 +00:00
<-t.GotInfo()
}
s.s.Add(path, t)
torrents = append(torrents, t)
2021-03-01 18:04:59 +00:00
log.Info().Str("name", t.Name()).Str("path", path).Msg("torrent added to mountpoint")
2021-03-01 18:04:59 +00:00
}
folder := path
s.fssMu.Lock()
defer s.fssMu.Unlock()
s.fss[folder] = fs.NewTorrent(torrents)
2021-03-01 18:04:59 +00:00
return nil
}
func (s *Handler) Fileststems() map[string]fs.Filesystem {
2021-03-01 18:04:59 +00:00
return s.fss
}
func (s *Handler) RemoveAll() error {
s.fssMu.Lock()
defer s.fssMu.Unlock()
s.fss = make(map[string]fs.Filesystem)
2021-03-01 18:04:59 +00:00
s.s.RemoveAll()
return nil
}