From: Matt Joiner Date: Fri, 16 Jun 2017 07:07:30 +0000 (+1000) Subject: metainfo URL list can be a string or list X-Git-Tag: v1.0.0~460 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=cc17c8a54ce2b25ff481b4b5094f612fdafdae46;p=btrtrc.git metainfo URL list can be a string or list --- diff --git a/metainfo/metainfo.go b/metainfo/metainfo.go index 947bd713..55624e99 100644 --- a/metainfo/metainfo.go +++ b/metainfo/metainfo.go @@ -17,7 +17,7 @@ type MetaInfo struct { Comment string `bencode:"comment,omitempty"` CreatedBy string `bencode:"created by,omitempty"` Encoding string `bencode:"encoding,omitempty"` - URLList []string `bencode:"url-list,omitempty"` + UrlList UrlList `bencode:"url-list,omitempty"` } // Load a MetaInfo from an io.Reader. Returns a non-nil error in case of diff --git a/metainfo/metainfo_test.go b/metainfo/metainfo_test.go index 037f8825..2f1ec745 100644 --- a/metainfo/metainfo_test.go +++ b/metainfo/metainfo_test.go @@ -116,3 +116,15 @@ func TestUnmarshal(t *testing.T) { testUnmarshal(t, `d4:infoabce`, nil) testUnmarshal(t, `d4:infodee`, &MetaInfo{InfoBytes: []byte("de")}) } + +func TestMetainfoWithListURLList(t *testing.T) { + mi, err := LoadFromFile("testdata/SKODAOCTAVIA336x280_archive.torrent") + require.NoError(t, err) + assert.Len(t, mi.UrlList, 3) +} + +func TestMetainfoWithStringURLList(t *testing.T) { + mi, err := LoadFromFile("testdata/flat-url-list.torrent") + require.NoError(t, err) + assert.Len(t, mi.UrlList, 1) +} diff --git a/metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent b/metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent new file mode 100644 index 00000000..40ec11f6 Binary files /dev/null and b/metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent differ diff --git a/metainfo/testdata/flat-url-list.torrent b/metainfo/testdata/flat-url-list.torrent new file mode 100644 index 00000000..216ab38c Binary files /dev/null and b/metainfo/testdata/flat-url-list.torrent differ diff --git a/metainfo/urllist.go b/metainfo/urllist.go new file mode 100644 index 00000000..8171f198 --- /dev/null +++ b/metainfo/urllist.go @@ -0,0 +1,27 @@ +package metainfo + +import ( + "github.com/anacrolix/torrent/bencode" +) + +type UrlList []string + +var ( + _ bencode.Unmarshaler = (*UrlList)(nil) +) + +func (me *UrlList) UnmarshalBencode(b []byte) error { + if len(b) == 0 { + return nil + } + if b[0] == 'l' { + var l []string + err := bencode.Unmarshal(b, &l) + *me = l + return err + } + var s string + err := bencode.Unmarshal(b, &s) + *me = []string{s} + return err +}