Split out TorrentMetadata
This commit is contained in:
parent
e440f03970
commit
100b7116df
20 changed files with 411 additions and 225 deletions
|
|
@ -6,7 +6,7 @@ use std::{
|
|||
sync::Arc,
|
||||
};
|
||||
|
||||
use crate::{session::TorrentId, ManagedTorrent, Session};
|
||||
use crate::{session::TorrentId, torrent_state::TorrentMetadata, ManagedTorrentShared, Session};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct UpnpServerSessionAdapter {
|
||||
|
|
@ -55,18 +55,18 @@ impl TorrentFileTreeNode {
|
|||
&self,
|
||||
id: usize,
|
||||
http_host: &str,
|
||||
torrent: &ManagedTorrent,
|
||||
torrent: &ManagedTorrentShared,
|
||||
metadata: &TorrentMetadata,
|
||||
adapter: &UpnpServerSessionAdapter,
|
||||
) -> ItemOrContainer {
|
||||
let encoded_id = encode_id(id, torrent.id());
|
||||
let encoded_parent_id = self.parent_id.map(|p| encode_id(p, torrent.id()));
|
||||
let encoded_id = encode_id(id, torrent.id);
|
||||
let encoded_parent_id = self.parent_id.map(|p| encode_id(p, torrent.id));
|
||||
match self.real_torrent_file_id {
|
||||
Some(fid) => {
|
||||
let fi = &torrent.shared().file_infos[fid];
|
||||
let fi = &metadata.file_infos[fid];
|
||||
let filename = &fi.relative_filename;
|
||||
// Torrent path joined with "/"
|
||||
let last_url_bit = torrent
|
||||
.shared()
|
||||
let last_url_bit = metadata
|
||||
.info
|
||||
.iter_file_details()
|
||||
.ok()
|
||||
|
|
@ -86,11 +86,7 @@ impl TorrentFileTreeNode {
|
|||
mime_type: mime_guess::from_path(filename).first(),
|
||||
url: format!(
|
||||
"http://{}:{}/torrents/{}/stream/{}/{}",
|
||||
http_host,
|
||||
adapter.port,
|
||||
torrent.id(),
|
||||
fid,
|
||||
last_url_bit
|
||||
http_host, adapter.port, torrent.id, fid, last_url_bit
|
||||
),
|
||||
size: fi.len,
|
||||
})
|
||||
|
|
@ -216,10 +212,15 @@ impl UpnpServerSessionAdapter {
|
|||
.filter_map(|t| {
|
||||
let real_id = t.id();
|
||||
let upnp_id = real_id + 1;
|
||||
let metadata = t.metadata.load();
|
||||
let metadata = match metadata.as_ref() {
|
||||
Some(r) => r,
|
||||
None => return None,
|
||||
};
|
||||
|
||||
if is_single_file_at_root(&t.shared().info) {
|
||||
if is_single_file_at_root(&metadata.info) {
|
||||
// Just add the file directly
|
||||
let rf = &t.shared().file_infos[0].relative_filename;
|
||||
let rf = &metadata.file_infos[0].relative_filename;
|
||||
let title = rf.file_name()?.to_str()?.to_owned();
|
||||
Some(
|
||||
TorrentFileTreeNode {
|
||||
|
|
@ -228,11 +229,16 @@ impl UpnpServerSessionAdapter {
|
|||
children: vec![],
|
||||
real_torrent_file_id: Some(0),
|
||||
}
|
||||
.as_item_or_container(0, hostname, t, self),
|
||||
.as_item_or_container(
|
||||
0,
|
||||
hostname,
|
||||
t.shared(),
|
||||
metadata,
|
||||
self,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
let title = t
|
||||
.shared()
|
||||
let title = metadata
|
||||
.info
|
||||
.name
|
||||
.as_ref()
|
||||
|
|
@ -288,7 +294,13 @@ impl UpnpServerSessionAdapter {
|
|||
}
|
||||
};
|
||||
|
||||
let tree = match TorrentFileTree::build(torrent.id(), &torrent.shared().info) {
|
||||
let t_metadata = torrent.metadata.load();
|
||||
let t_metadata = match t_metadata.as_ref() {
|
||||
Some(r) => r,
|
||||
None => return vec![],
|
||||
};
|
||||
|
||||
let tree = match TorrentFileTree::build(torrent.id(), &t_metadata.info) {
|
||||
Ok(tree) => tree,
|
||||
Err(e) => {
|
||||
warn!(object_id, error=?e, "error building torrent file tree");
|
||||
|
|
@ -309,7 +321,13 @@ impl UpnpServerSessionAdapter {
|
|||
let mut result = Vec::new();
|
||||
|
||||
if node.real_torrent_file_id.is_some() || metadata {
|
||||
result.push(node.as_item_or_container(node_id, http_hostname, &torrent, self))
|
||||
result.push(node.as_item_or_container(
|
||||
node_id,
|
||||
http_hostname,
|
||||
torrent.shared(),
|
||||
t_metadata,
|
||||
self,
|
||||
))
|
||||
} else {
|
||||
for (child_node_id, child_node) in node
|
||||
.children
|
||||
|
|
@ -319,7 +337,8 @@ impl UpnpServerSessionAdapter {
|
|||
result.push(child_node.as_item_or_container(
|
||||
child_node_id,
|
||||
http_hostname,
|
||||
&torrent,
|
||||
torrent.shared(),
|
||||
t_metadata,
|
||||
self,
|
||||
));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue