From 584cdbdc6097baa63bdfe0edeb7cf3ce9b3b484f Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 24 Sep 2019 16:29:17 +1000 Subject: [PATCH] metainfo.Magnet.String: Always put xt first again, and with specific encoding --- metainfo/magnet.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/metainfo/magnet.go b/metainfo/magnet.go index c9221a07..1a16057d 100644 --- a/metainfo/magnet.go +++ b/metainfo/magnet.go @@ -26,7 +26,6 @@ func (m Magnet) String() string { vs[k] = append([]string(nil), v...) } - vs.Add("xt", xtPrefix+m.InfoHash.HexString()) for _, tr := range m.Trackers { vs.Add("tr", tr) } @@ -34,10 +33,17 @@ func (m Magnet) String() string { vs.Add("dn", m.DisplayName) } - return (&url.URL{ + // Transmission and Deluge both expect "urn:btih:" to be unescaped. Deluge wants it to be at the + // start of the magnet link. The InfoHash field is expected to be BitTorrent in this + // implementation. + u := url.URL{ Scheme: "magnet", - RawQuery: vs.Encode(), - }).String() + RawQuery: "xt=" + xtPrefix + m.InfoHash.HexString(), + } + if len(vs) != 0 { + u.RawQuery += "&" + vs.Encode() + } + return u.String() } // ParseMagnetURI parses Magnet-formatted URIs into a Magnet instance -- 2.48.1