feat(lib): carry audio attributes in browse and folder listings

A browse listed each file as a name and a size, so a searcher who saw a
bitrate in a search reply lost it the moment they opened the sharer's
files. Listings (codes 5 and 37) now carry each file's attributes the
way Nicotine+ sends them, as a SharedFileEntry with name, size and
attributes in place of the (name, size) pair; the CLI's browse record
gains bitrate and duration, and the daemon protocol moves to version 2
for the new listing shape.
This commit is contained in:
Michel de Graaf
2026-09-08 01:44:49 +02:00
parent 5a20d69056
commit f6423a2ed6
20 changed files with 307 additions and 95 deletions
+6 -2
View File
@@ -227,14 +227,18 @@ mod tests {
Event::Browse,
json!({
"username": "bob",
"directories": [{ "name": "@@x", "files": [["a.mp3", 42]] }],
"directories": [{
"name": "@@x",
"files": [{ "name": "a.mp3", "size": 42, "attributes": [[0, 320]] }],
}],
}),
);
assert!(mirror.take_browse("sue").is_none());
let listing = mirror.take_browse("bob").expect("bob answered");
assert_eq!(listing[0].name, "@@x");
assert_eq!(listing[0].files, [("a.mp3".to_string(), 42)]);
assert_eq!(listing[0].files[0].name, "a.mp3");
assert_eq!(listing[0].files[0].attribute(0), Some(320));
assert!(mirror.take_browse("bob").is_none(), "taken means taken");
}