fix magnet link Display code

This commit is contained in:
Igor Katson 2024-08-14 11:06:12 +01:00
parent 53d61d0428
commit cd87acdab2
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5

View file

@ -72,31 +72,32 @@ impl Magnet {
impl std::fmt::Display for Magnet { impl std::fmt::Display for Magnet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if let (Some(id20), Some(id32)) = (self.id20, self.id32) { write!(f, "magnet:")?;
write!( let mut write_ampersand = {
f, let mut written_so_far = 0;
"magnet:?xt=urn:btih:{}?xt=urn:btmh:1220{}&tr={}", move |f: &mut std::fmt::Formatter<'_>| {
id20.as_string(), if written_so_far == 0 {
id32.as_string(), write!(f, "?")?;
self.trackers.join("&tr=") } else {
) write!(f, "&")?;
} else if let Some(id20) = self.id20 { }
write!( written_so_far += 1;
f, Ok(())
"magnet:?xt=urn:btih:{}&tr={}", }
id20.as_string(), };
self.trackers.join("&tr=") if let Some(id20) = self.id20 {
) write_ampersand(f)?;
} else if let Some(id32) = self.id32 { write!(f, "xt=urn:btih:{}", id20.as_string(),)?;
write!(
f,
"magnet:?xt=urn:btmh:1220{}&tr={}",
id32.as_string(),
self.trackers.join("&tr=")
)
} else {
panic!("no infohash")
} }
if let Some(id32) = self.id32 {
write_ampersand(f)?;
write!(f, "xt=xt=urn:btmh:1220{}", id32.as_string(),)?;
}
for tracker in self.trackers.iter() {
write_ampersand(f)?;
write!(f, "tr={tracker}")?;
}
Ok(())
} }
} }