// NewClient creates a new torrent client based on a magnet or a torrent file. // If the torrent file is on http, we try downloading it. func NewClient(torrentPath string, port int, seed bool) (client Client, err error) { var t torrent.Torrent var c *torrent.Client client.Port = port // Create client. c, err = torrent.NewClient(&torrent.Config{ DataDir: os.TempDir(), NoUpload: !seed, Seed: seed, }) if err != nil { return client, ClientError{Type: "creating torrent client", Origin: err} } client.Client = c // Add torrent. // Add as magnet url. if strings.HasPrefix(torrentPath, "magnet:") { if t, err = c.AddMagnet(torrentPath); err != nil { return client, ClientError{Type: "adding torrent", Origin: err} } } else { // Otherwise add as a torrent file. // If it's online, we try downloading the file. if isHTTP.MatchString(torrentPath) { if torrentPath, err = downloadFile(torrentPath); err != nil { return client, ClientError{Type: "downloading torrent file", Origin: err} } } // Check if the file exists. if _, err = os.Stat(torrentPath); err != nil { return client, ClientError{Type: "file not found", Origin: err} } if t, err = c.AddTorrentFromFile(torrentPath); err != nil { return client, ClientError{Type: "adding torrent to the client", Origin: err} } } client.Torrent = t go func() { <-t.GotInfo() t.DownloadAll() // Prioritize first 5% of the file. client.getLargestFile().PrioritizeRegion(0, int64(t.NumPieces()/100*5)) }() go client.addBlocklist() return }
/** Load a magnet and send to be watched and modified */ func loadTorrentMagnet(client torrent.Client, magnet string) torrent.Torrent { torrentMagnet, err := client.AddMagnet(magnet) util.CheckError(err) return torrentMagnet }
// NewClient creates a new torrent client based on a magnet or a torrent file. // If the torrent file is on http, we try downloading it. func NewClient(cfg ClientConfig) (client Client, err error) { var t *torrent.Torrent var c *torrent.Client client.Config = cfg // Create client. c, err = torrent.NewClient(&torrent.Config{ DataDir: os.TempDir(), NoUpload: !cfg.Seed, Seed: cfg.Seed, DisableTCP: !cfg.TCP, ListenAddr: fmt.Sprintf(":%d", cfg.TorrentPort), }) if err != nil { return client, ClientError{Type: "creating torrent client", Origin: err} } client.Client = c // Add torrent. // Add as magnet url. if strings.HasPrefix(cfg.TorrentPath, "magnet:") { if t, err = c.AddMagnet(cfg.TorrentPath); err != nil { return client, ClientError{Type: "adding torrent", Origin: err} } } else { // Otherwise add as a torrent file. // If it's online, we try downloading the file. if isHTTP.MatchString(cfg.TorrentPath) { if cfg.TorrentPath, err = downloadFile(cfg.TorrentPath); err != nil { return client, ClientError{Type: "downloading torrent file", Origin: err} } } if t, err = c.AddTorrentFromFile(cfg.TorrentPath); err != nil { return client, ClientError{Type: "adding torrent to the client", Origin: err} } } client.Torrent = t client.Torrent.SetMaxEstablishedConns(cfg.MaxConnections) go func() { <-t.GotInfo() t.DownloadAll() // Prioritize first 5% of the file. client.getLargestFile().PrioritizeRegion(0, int64(t.NumPieces()/100*5)) }() go client.addBlocklist() return }
// NewClient creates a new torrent client based on a magnet or a torrent file. // If the torrent file is on http, we try downloading it. func NewClient(torrentPath string) (client Client, err error) { var t torrent.Torrent var c *torrent.Client // Create client. c, err = torrent.NewClient(&torrent.Config{ DataDir: os.TempDir(), NoUpload: !(*seed), }) if err != nil { return client, ClientError{Type: "creating torrent client", Origin: err} } client.Client = c // Add torrent. // Add as magnet url. if strings.HasPrefix(torrentPath, "magnet:") { if t, err = c.AddMagnet(torrentPath); err != nil { return client, ClientError{Type: "adding torrent", Origin: err} } } else { // Otherwise add as a torrent file. // If it's online, we try downloading the file. if isHTTP.MatchString(torrentPath) { if torrentPath, err = downloadFile(torrentPath); err != nil { return client, ClientError{Type: "downloading torrent file", Origin: err} } } // Check if the file exists. if _, err = os.Stat(torrentPath); err != nil { return client, ClientError{Type: "file not found", Origin: err} } if t, err = c.AddTorrentFromFile(torrentPath); err != nil { return client, ClientError{Type: "adding torrent to the client", Origin: err} } } client.Torrent = t go func() { <-t.GotInfo() t.DownloadAll() }() return }
func addTorrents(client *torrent.Client) { for _, arg := range opts.Torrent { t := func() *torrent.Torrent { if strings.HasPrefix(arg, "magnet:") { t, err := client.AddMagnet(arg) if err != nil { log.Fatalf("error adding magnet: %s", err) } return t } else { metaInfo, err := metainfo.LoadFromFile(arg) if err != nil { fmt.Fprintf(os.Stderr, "error loading torrent file %q: %s\n", arg, err) os.Exit(1) } t, err := client.AddTorrent(metaInfo) if err != nil { log.Fatal(err) } return t } }() torrentBar(t) err := t.AddPeers(func() (ret []torrent.Peer) { for _, ta := range opts.TestPeer { ret = append(ret, torrent.Peer{ IP: ta.IP, Port: ta.Port, }) } return }()) if err != nil { log.Fatal(err) } go func() { <-t.GotInfo() t.DownloadAll() }() } }