},
bargle.Subcommand{Name: "magnet", Command: func() (cmd bargle.Command) {
cmd.DefaultAction = func() (err error) {
- info, err := mi.UnmarshalInfo()
+ m, err := mi.MagnetV2()
if err != nil {
return
}
- fmt.Fprintf(os.Stdout, "%s\n", mi.Magnet(nil, &info).String())
+ fmt.Fprintf(os.Stdout, "%v\n", m.String())
return nil
}
return
"time"
"github.com/anacrolix/torrent/bencode"
+ infohash_v2 "github.com/anacrolix/torrent/types/infohash-v2"
)
// Also known as a torrent file.
mi.CreationDate = time.Now().Unix()
}
-// Creates a Magnet from a MetaInfo. Optional infohash and parsed info can be provided.
+// Deprecated: Use MagnetV2. Creates a Magnet from a MetaInfo. Optional infohash and parsed info can
+// be provided.
func (mi MetaInfo) Magnet(infoHash *Hash, info *Info) (m Magnet) {
m.Trackers = append(m.Trackers, mi.UpvertedAnnounceList().DistinctValues()...)
if info != nil {
return
}
+// Creates a MagnetV2 from a MetaInfo. This supports v1, hybrid, and v2 magnet links.
+func (mi *MetaInfo) MagnetV2() (m MagnetV2, err error) {
+ m.Trackers = append(m.Trackers, mi.UpvertedAnnounceList().DistinctValues()...)
+ info, err := mi.UnmarshalInfo()
+ if err != nil {
+ return
+ }
+ m.DisplayName = info.BestName()
+ if info.HasV1() {
+ m.InfoHash.Set(mi.HashInfoBytes())
+ }
+ if info.HasV2() {
+ m.V2InfoHash.Set(infohash_v2.HashBytes(mi.InfoBytes))
+ }
+ m.Params = make(url.Values)
+ m.Params["ws"] = mi.UrlList
+ return
+}
+
// Returns the announce-list converted from the old single announce field if necessary.
func (mi *MetaInfo) UpvertedAnnounceList() AnnounceList {
if mi.AnnounceList.OverridesAnnounce(mi.Announce) {