From: Matt Joiner Date: Sun, 11 Sep 2016 04:09:40 +0000 (+1000) Subject: Move TorrentSpec stuff into its own file X-Git-Tag: v1.0.0~594 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f47fd8c969960a4b1fd24d5a518ac92c3c3fd545;p=btrtrc.git Move TorrentSpec stuff into its own file --- diff --git a/client.go b/client.go index 98c9b12d..4b0b1a25 100644 --- a/client.go +++ b/client.go @@ -1406,48 +1406,6 @@ type Handle interface { io.ReaderAt } -// Specifies a new torrent for adding to a client. There are helpers for -// magnet URIs and torrent metainfo files. -type TorrentSpec struct { - // The tiered tracker URIs. - Trackers [][]string - InfoHash metainfo.Hash - InfoBytes []byte - // The name to use if the Name field from the Info isn't available. - DisplayName string - // The chunk size to use for outbound requests. Defaults to 16KiB if not - // set. - ChunkSize int - Storage storage.ClientImpl -} - -func TorrentSpecFromMagnetURI(uri string) (spec *TorrentSpec, err error) { - m, err := metainfo.ParseMagnetURI(uri) - if err != nil { - return - } - spec = &TorrentSpec{ - Trackers: [][]string{m.Trackers}, - DisplayName: m.DisplayName, - InfoHash: m.InfoHash, - } - return -} - -func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) (spec *TorrentSpec) { - info := mi.UnmarshalInfo() - spec = &TorrentSpec{ - Trackers: mi.AnnounceList, - InfoBytes: mi.InfoBytes, - DisplayName: info.Name, - InfoHash: mi.HashInfoBytes(), - } - if spec.Trackers == nil && mi.Announce != "" { - spec.Trackers = [][]string{{mi.Announce}} - } - return -} - func (cl *Client) AddTorrentInfoHash(infoHash metainfo.Hash) (t *Torrent, new bool) { cl.mu.Lock() defer cl.mu.Unlock() diff --git a/spec.go b/spec.go new file mode 100644 index 00000000..e6b58d8c --- /dev/null +++ b/spec.go @@ -0,0 +1,48 @@ +package torrent + +import ( + "github.com/anacrolix/torrent/metainfo" + "github.com/anacrolix/torrent/storage" +) + +// Specifies a new torrent for adding to a client. There are helpers for +// magnet URIs and torrent metainfo files. +type TorrentSpec struct { + // The tiered tracker URIs. + Trackers [][]string + InfoHash metainfo.Hash + InfoBytes []byte + // The name to use if the Name field from the Info isn't available. + DisplayName string + // The chunk size to use for outbound requests. Defaults to 16KiB if not + // set. + ChunkSize int + Storage storage.ClientImpl +} + +func TorrentSpecFromMagnetURI(uri string) (spec *TorrentSpec, err error) { + m, err := metainfo.ParseMagnetURI(uri) + if err != nil { + return + } + spec = &TorrentSpec{ + Trackers: [][]string{m.Trackers}, + DisplayName: m.DisplayName, + InfoHash: m.InfoHash, + } + return +} + +func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) (spec *TorrentSpec) { + info := mi.UnmarshalInfo() + spec = &TorrentSpec{ + Trackers: mi.AnnounceList, + InfoBytes: mi.InfoBytes, + DisplayName: info.Name, + InfoHash: mi.HashInfoBytes(), + } + if spec.Trackers == nil && mi.Announce != "" { + spec.Trackers = [][]string{{mi.Announce}} + } + return +}