Implemented handling of extra keys
This commit is contained in:
parent
1c2c21ec98
commit
5ca91ed6cb
34
src/main.rs
34
src/main.rs
@ -27,7 +27,7 @@ struct Torrent {
|
||||
announce: String,
|
||||
info: TorrentInfo,
|
||||
info_hash: [u8; 20],
|
||||
extra: HashMap<String, String>
|
||||
_extra: HashMap<String, String>
|
||||
}
|
||||
|
||||
impl Torrent {
|
||||
@ -77,7 +77,7 @@ impl Torrent {
|
||||
}
|
||||
} else if let Some(b_files) = info_dict.get(&ByteString::from_str("files")) {
|
||||
let Bencode::List(files_list) = b_files else {
|
||||
return Err(anyhow!("files not an list"))
|
||||
return Err(anyhow!("files not a list"))
|
||||
};
|
||||
|
||||
let mut files = Vec::new();
|
||||
@ -124,12 +124,38 @@ impl Torrent {
|
||||
let Bencode::Bytes(announce) = b_announce else {
|
||||
return Err(anyhow!("announce not a string"))
|
||||
};
|
||||
|
||||
let mut _extra = HashMap::new();
|
||||
for (k, v) in decoded {
|
||||
if k == &ByteString::from_str("announce") || k == &ByteString::from_str("info") {
|
||||
continue
|
||||
}
|
||||
let Ok(k_str) = k.to_string() else {
|
||||
println!("Ignoring non-UTF-8 key {k:?}");
|
||||
continue;
|
||||
};
|
||||
match v {
|
||||
Bencode::Integer(i) => {
|
||||
_extra.insert(k_str, format!("{}", i));
|
||||
}
|
||||
Bencode::Bytes(s) => {
|
||||
let Ok(s_str) = s.to_string() else {
|
||||
println!("Ignoring non-UTF-8 value of key {k_str}");
|
||||
continue;
|
||||
};
|
||||
_extra.insert(k_str, s_str);
|
||||
}
|
||||
_ => {
|
||||
println!("Ignoring extra of type list or dict")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let result = Self {
|
||||
announce: announce.to_string()?,
|
||||
info_hash: b_info.sha1(),
|
||||
info,
|
||||
// TODO
|
||||
extra: HashMap::new(),
|
||||
_extra,
|
||||
};
|
||||
Ok(result)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user