12 "github.com/anacrolix/torrent"
13 "github.com/anacrolix/torrent/metainfo"
14 "github.com/anacrolix/torrent/types/infohash"
17 type stringAddr string
19 func (stringAddr) Network() string { return "" }
20 func (me stringAddr) String() string { return string(me) }
22 func resolveTestPeers(addrs []string) (ret []torrent.PeerInfo) {
23 for _, ta := range addrs {
24 ret = append(ret, torrent.PeerInfo{Addr: stringAddr(ta)})
29 func readLinesFromFIFO(pth string) []string {
30 fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
32 log.Println("OpenFile:", pth, err)
33 time.Sleep(time.Second)
37 scanner := bufio.NewScanner(fd)
41 lines = append(lines, t)
48 func fifoAdd(c *torrent.Client) {
49 pth := path.Join(FIFOsDir, "add")
52 for _, what := range readLinesFromFIFO(pth) {
53 cols := strings.Fields(what)
55 var t *torrent.Torrent
57 if strings.HasPrefix(what, "magnet:") {
58 t, err = c.AddMagnet(what)
60 log.Println("AddMagnet:", what, err)
64 metaInfo, err := metainfo.LoadFromFile(what)
66 log.Println("LoadFromFile:", what, err)
69 t, err = c.AddTorrent(metaInfo)
71 log.Println("AddTorrent:", what, err)
76 t.AddPeers(resolveTestPeers(cols[1:]))
80 log.Println("added:", t.InfoHash().HexString(), t.Name())
83 if err = saveTorrent(t); err != nil {
84 log.Println("saveTorrent:", err)
86 txStatsLoad(t.InfoHash())
90 time.Sleep(time.Second)
94 func fifoDel(c *torrent.Client) {
95 pth := path.Join(FIFOsDir, "del")
98 for _, what := range readLinesFromFIFO(pth) {
99 raw, err := hex.DecodeString(what)
104 if len(raw) != infohash.Size {
105 log.Println("bad length")
110 t, ok := c.Torrent(i)
112 log.Println("no suck torrent", what)
116 txStatsDel(t.InfoHash())
118 for _, where := range []string{"files", "peers"} {
119 pth := path.Join(where, t.InfoHash().HexString())
121 fd, err := os.Open(pth)
126 log.Println("deleted:", what, t.Name())
128 time.Sleep(time.Second)