]> Sergey Matveev's repositories - btrtrc.git/commitdiff
metainfo.Magnet.String: Always put xt first again, and with specific encoding
authorMatt Joiner <anacrolix@gmail.com>
Tue, 24 Sep 2019 06:29:17 +0000 (16:29 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 24 Sep 2019 06:29:17 +0000 (16:29 +1000)
metainfo/magnet.go

index c9221a074b720db39e1c227fd579b06b90bd5597..1a16057d673e5b35879a38b5777c6582c716b46f 100644 (file)
@@ -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