From: Matt Joiner Date: Wed, 24 Feb 2021 01:03:16 +0000 (+1100) Subject: Improve metainfo.MetaInfo.Magnet interface and add tests X-Git-Tag: v1.26.0-alpha~3 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=35464677ef6044ee8f45c436c768e6193465c2e3;p=btrtrc.git Improve metainfo.MetaInfo.Magnet interface and add tests --- diff --git a/client_test.go b/client_test.go index 5abc83e4..adcd0c72 100644 --- a/client_test.go +++ b/client_test.go @@ -672,7 +672,7 @@ func makeMagnet(t *testing.T, cl *Client, dir string, name string) string { require.NoError(t, err) mi.InfoBytes, err = bencode.Marshal(info) require.NoError(t, err) - magnet := mi.Magnet(name, mi.HashInfoBytes()).String() + magnet := mi.Magnet(nil, &info).String() tr, err := cl.AddTorrent(&mi) require.NoError(t, err) require.True(t, tr.Seeding()) diff --git a/cmd/torrent-magnet/main.go b/cmd/torrent-magnet/main.go index 7be1e4af..8f04a37d 100644 --- a/cmd/torrent-magnet/main.go +++ b/cmd/torrent-magnet/main.go @@ -23,5 +23,5 @@ func main() { os.Exit(1) } - fmt.Fprintf(os.Stdout, "%s\n", mi.Magnet(info.Name, mi.HashInfoBytes()).String()) + fmt.Fprintf(os.Stdout, "%s\n", mi.Magnet(nil, &info).String()) } diff --git a/metainfo/magnet_test.go b/metainfo/magnet_test.go index e11abf6e..24db8fdb 100644 --- a/metainfo/magnet_test.go +++ b/metainfo/magnet_test.go @@ -76,7 +76,7 @@ func TestMagnetize(t *testing.T) { info, err := mi.UnmarshalInfo() require.NoError(t, err) - m := mi.Magnet(info.Name, mi.HashInfoBytes()) + m := mi.Magnet(nil, &info) assert.EqualValues(t, "bootstrap.dat", m.DisplayName) diff --git a/metainfo/metainfo.go b/metainfo/metainfo.go index 2e471c8a..9b06ebd4 100644 --- a/metainfo/metainfo.go +++ b/metainfo/metainfo.go @@ -67,13 +67,21 @@ func (mi *MetaInfo) SetDefaults() { // mi.Info.PieceLength = 256 * 1024 } -// Creates a Magnet from a MetaInfo. -func (mi *MetaInfo) Magnet(displayName string, infoHash Hash) (m Magnet) { +// Creates a Magnet from a MetaInfo. Optional infohash and parsed info can be provided. +func (mi *MetaInfo) Magnet(infoHash *Hash, info *Info) (m Magnet) { for t := range mi.UpvertedAnnounceList().DistinctValues() { m.Trackers = append(m.Trackers, t) } - m.DisplayName = displayName - m.InfoHash = infoHash + if info != nil { + m.DisplayName = info.Name + } + if infoHash != nil { + m.InfoHash = *infoHash + } else { + m.InfoHash = mi.HashInfoBytes() + } + //m.Params = make(url.Values) + //m.Params["ws"] = mi.UrlList return } diff --git a/metainfo/metainfo_test.go b/metainfo/metainfo_test.go index e54447ae..6aae2b4f 100644 --- a/metainfo/metainfo_test.go +++ b/metainfo/metainfo_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/anacrolix/missinggo" + qt "github.com/frankban/quicktest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -121,12 +122,16 @@ func TestMetainfoWithListURLList(t *testing.T) { mi, err := LoadFromFile("testdata/SKODAOCTAVIA336x280_archive.torrent") require.NoError(t, err) assert.Len(t, mi.UrlList, 3) + qt.Assert(t, mi.Magnet(nil, nil).String(), qt.ContentEquals, + "magnet:?xt=urn:btih:d4b197dff199aad447a9a352e31528adbbd97922&tr=http%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=http%3A%2F%2Fbt2.archive.org%3A6969%2Fannounce") } func TestMetainfoWithStringURLList(t *testing.T) { mi, err := LoadFromFile("testdata/flat-url-list.torrent") require.NoError(t, err) assert.Len(t, mi.UrlList, 1) + qt.Assert(t, mi.Magnet(nil, nil).String(), qt.ContentEquals, + "magnet:?xt=urn:btih:9da24e606e4ed9c7b91c1772fb5bf98f82bd9687&tr=http%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=http%3A%2F%2Fbt2.archive.org%3A6969%2Fannounce") } // https://github.com/anacrolix/torrent/issues/247