Unify API types a bit (remove list item)
This commit is contained in:
parent
03022f16c2
commit
30bfb3ea19
2 changed files with 30 additions and 12 deletions
|
|
@ -195,9 +195,20 @@ impl Api {
|
||||||
pub fn api_torrent_list(&self) -> TorrentListResponse {
|
pub fn api_torrent_list(&self) -> TorrentListResponse {
|
||||||
let items = self.session.with_torrents(|torrents| {
|
let items = self.session.with_torrents(|torrents| {
|
||||||
torrents
|
torrents
|
||||||
.map(|(id, mgr)| TorrentListResponseItem {
|
.map(|(id, mgr)| TorrentDetailsResponse {
|
||||||
id,
|
id: Some(id),
|
||||||
info_hash: mgr.shared().info_hash.as_string(),
|
info_hash: mgr.shared().info_hash.as_string(),
|
||||||
|
name: mgr.shared().info.name.as_ref().map(|n| n.to_string()),
|
||||||
|
output_folder: mgr
|
||||||
|
.shared()
|
||||||
|
.options
|
||||||
|
.output_folder
|
||||||
|
.to_string_lossy()
|
||||||
|
.into_owned(),
|
||||||
|
|
||||||
|
// These will be filled in /details and /stats endpoints
|
||||||
|
files: None,
|
||||||
|
stats: None,
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
});
|
});
|
||||||
|
|
@ -216,6 +227,7 @@ impl Api {
|
||||||
.into_owned()
|
.into_owned()
|
||||||
.to_string();
|
.to_string();
|
||||||
make_torrent_details(
|
make_torrent_details(
|
||||||
|
Some(handle.id()),
|
||||||
&info_hash,
|
&info_hash,
|
||||||
&handle.shared().info,
|
&handle.shared().info,
|
||||||
only_files.as_deref(),
|
only_files.as_deref(),
|
||||||
|
|
@ -350,6 +362,7 @@ impl Api {
|
||||||
{
|
{
|
||||||
AddTorrentResponse::AlreadyManaged(id, handle) => {
|
AddTorrentResponse::AlreadyManaged(id, handle) => {
|
||||||
let details = make_torrent_details(
|
let details = make_torrent_details(
|
||||||
|
Some(id),
|
||||||
&handle.info_hash(),
|
&handle.info_hash(),
|
||||||
&handle.shared().info,
|
&handle.shared().info,
|
||||||
handle.only_files().as_deref(),
|
handle.only_files().as_deref(),
|
||||||
|
|
@ -385,6 +398,7 @@ impl Api {
|
||||||
output_folder: output_folder.to_string_lossy().into_owned(),
|
output_folder: output_folder.to_string_lossy().into_owned(),
|
||||||
seen_peers: Some(seen_peers),
|
seen_peers: Some(seen_peers),
|
||||||
details: make_torrent_details(
|
details: make_torrent_details(
|
||||||
|
None,
|
||||||
&info_hash,
|
&info_hash,
|
||||||
&info,
|
&info,
|
||||||
only_files.as_deref(),
|
only_files.as_deref(),
|
||||||
|
|
@ -394,6 +408,7 @@ impl Api {
|
||||||
},
|
},
|
||||||
AddTorrentResponse::Added(id, handle) => {
|
AddTorrentResponse::Added(id, handle) => {
|
||||||
let details = make_torrent_details(
|
let details = make_torrent_details(
|
||||||
|
Some(id),
|
||||||
&handle.info_hash(),
|
&handle.info_hash(),
|
||||||
&handle.shared().info,
|
&handle.shared().info,
|
||||||
handle.only_files().as_deref(),
|
handle.only_files().as_deref(),
|
||||||
|
|
@ -456,15 +471,9 @@ impl Api {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
pub struct TorrentListResponseItem {
|
|
||||||
pub id: usize,
|
|
||||||
pub info_hash: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct TorrentListResponse {
|
pub struct TorrentListResponse {
|
||||||
pub torrents: Vec<TorrentListResponseItem>,
|
pub torrents: Vec<TorrentDetailsResponse>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
|
|
@ -480,10 +489,16 @@ pub struct EmptyJsonResponse {}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct TorrentDetailsResponse {
|
pub struct TorrentDetailsResponse {
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub id: Option<usize>,
|
||||||
pub info_hash: String,
|
pub info_hash: String,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub files: Vec<TorrentDetailsResponseFile>,
|
|
||||||
pub output_folder: String,
|
pub output_folder: String,
|
||||||
|
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub files: Option<Vec<TorrentDetailsResponseFile>>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none", skip_deserializing)]
|
||||||
|
pub stats: Option<TorrentStats>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
|
|
@ -495,6 +510,7 @@ pub struct ApiAddTorrentResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_torrent_details(
|
fn make_torrent_details(
|
||||||
|
id: Option<TorrentId>,
|
||||||
info_hash: &Id20,
|
info_hash: &Id20,
|
||||||
info: &TorrentMetaV1Info<ByteBufOwned>,
|
info: &TorrentMetaV1Info<ByteBufOwned>,
|
||||||
only_files: Option<&[usize]>,
|
only_files: Option<&[usize]>,
|
||||||
|
|
@ -523,10 +539,12 @@ fn make_torrent_details(
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
Ok(TorrentDetailsResponse {
|
Ok(TorrentDetailsResponse {
|
||||||
|
id,
|
||||||
info_hash: info_hash.as_string(),
|
info_hash: info_hash.as_string(),
|
||||||
name: info.name.as_ref().map(|b| b.to_string()),
|
name: info.name.as_ref().map(|b| b.to_string()),
|
||||||
files,
|
files: Some(files),
|
||||||
output_folder,
|
output_folder,
|
||||||
|
stats: None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use serde::Serialize;
|
||||||
|
|
||||||
use crate::torrent_state::live::peers::stats::snapshot::AggregatePeerStats;
|
use crate::torrent_state::live::peers::stats::snapshot::AggregatePeerStats;
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Default)]
|
#[derive(Debug, Serialize, Deserialize, Default)]
|
||||||
pub struct StatsSnapshot {
|
pub struct StatsSnapshot {
|
||||||
pub downloaded_and_checked_bytes: u64,
|
pub downloaded_and_checked_bytes: u64,
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue