fix(network): Fixed an issue with dynamic typing in responses from Sonarr for history items

This commit is contained in:
2024-11-20 19:22:13 -07:00
parent df1eea22ab
commit f5631376af
10 changed files with 49 additions and 40 deletions
+4
View File
@@ -41,6 +41,10 @@ pub enum Serdeable {
Sonarr(SonarrSerdeable),
}
pub trait EnumDisplayStyle<'a> {
fn to_display_str(self) -> &'a str;
}
pub trait Scrollable {
fn scroll_down(&mut self);
fn scroll_up(&mut self);
+5 -5
View File
@@ -13,7 +13,7 @@ use super::servarr_models::{
HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper, QueueEvent, Release,
SecurityConfig,
};
use super::Serdeable;
use super::{EnumDisplayStyle, Serdeable};
#[cfg(test)]
#[path = "radarr_models_tests.rs"]
@@ -313,8 +313,8 @@ impl Display for MinimumAvailability {
}
}
impl MinimumAvailability {
pub fn to_display_str<'a>(self) -> &'a str {
impl<'a> EnumDisplayStyle<'a> for MinimumAvailability {
fn to_display_str(self) -> &'a str {
match self {
MinimumAvailability::Tba => "TBA",
MinimumAvailability::Announced => "Announced",
@@ -343,8 +343,8 @@ impl Display for Monitor {
}
}
impl Monitor {
pub fn to_display_str<'a>(self) -> &'a str {
impl<'a> EnumDisplayStyle<'a> for Monitor {
fn to_display_str(self) -> &'a str {
match self {
Monitor::MovieOnly => "Movie only",
Monitor::MovieAndCollection => "Movie and Collection",
+1 -1
View File
@@ -11,7 +11,7 @@ mod tests {
Release, RootFolder, SystemStatus, Tag, Task, TaskName, Update,
},
servarr_models::{HostConfig, Log, LogResponse, QueueEvent, SecurityConfig},
Serdeable,
EnumDisplayStyle, Serdeable,
};
#[test]
+5 -2
View File
@@ -1,5 +1,8 @@
use crate::models::{
servarr_models::Release, sonarr_models::Episode, stateful_table::StatefulTable, ScrollableText,
servarr_models::Release,
sonarr_models::{Episode, SonarrHistoryItem},
stateful_table::StatefulTable,
ScrollableText,
};
#[derive(Default)]
@@ -8,7 +11,7 @@ pub struct EpisodeDetailsModal {
pub file_details: String,
pub audio_details: String,
pub video_details: String,
// pub episode_history: StatefulTable<MovieHistoryItem>,
pub episode_history: StatefulTable<SonarrHistoryItem>,
pub episode_releases: StatefulTable<Release>,
}
+1 -1
View File
@@ -479,7 +479,7 @@ impl<'a, 'b> Network<'a, 'b> {
let event = SonarrEvent::GetHistory(events);
let params = format!(
"pageSize={}&sortDirection=descending&sortKey=time",
"pageSize={}&sortDirection=descending&sortKey=date",
events.unwrap_or(500)
);
let request_props = self
+29 -27
View File
@@ -156,8 +156,8 @@ mod test {
}
#[rstest]
fn test_resource_history(#[values(SonarrEvent::GetSeriesHistory(None))] event: SonarrEvent) {
assert_str_eq!(event.resource(), "/history/series");
fn test_resource_history(#[values(SonarrEvent::GetHistory(None))] event: SonarrEvent) {
assert_str_eq!(event.resource(), "/history");
}
#[rstest]
@@ -177,7 +177,7 @@ mod test {
#[case(SonarrEvent::HealthCheck, "/health")]
#[case(SonarrEvent::GetBlocklist, "/blocklist?page=1&pageSize=10000")]
#[case(SonarrEvent::GetDownloads, "/queue")]
#[case(SonarrEvent::GetHistory(None), "/history")]
#[case(SonarrEvent::GetSeriesHistory(None), "/history/series")]
#[case(SonarrEvent::GetLogs(Some(500)), "/log")]
#[case(SonarrEvent::GetQualityProfiles, "/qualityprofile")]
#[case(SonarrEvent::GetStatus, "/system/status")]
@@ -438,8 +438,8 @@ mod test {
"status": "downloading",
"id": 1,
"episodeId": 1,
"size": 3543348019u64,
"sizeleft": 1771674009,
"size": 3543348019f64,
"sizeleft": 1771674009f64,
"outputPath": "/nfs/tv/Test show/season 1/",
"indexer": "kickass torrents",
"downloadClient": "transmission",
@@ -798,7 +798,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -811,7 +811,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -841,7 +841,7 @@ mod test {
None,
SonarrEvent::GetHistory(None),
None,
Some("pageSize=500&sortDirection=descending&sortKey=time"),
Some("pageSize=500&sortDirection=descending&sortKey=date"),
)
.await;
app_arc.lock().await.data.sonarr_data.history.sort_asc = true;
@@ -890,7 +890,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -903,7 +903,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -933,7 +933,7 @@ mod test {
None,
SonarrEvent::GetHistory(Some(1000)),
None,
Some("pageSize=1000&sortDirection=descending&sortKey=time"),
Some("pageSize=1000&sortDirection=descending&sortKey=date"),
)
.await;
app_arc.lock().await.data.sonarr_data.history.sort_asc = true;
@@ -961,7 +961,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -974,7 +974,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -990,7 +990,7 @@ mod test {
None,
SonarrEvent::GetHistory(None),
None,
Some("pageSize=500&sortDirection=descending&sortKey=time"),
Some("pageSize=500&sortDirection=descending&sortKey=date"),
)
.await;
app_arc.lock().await.data.sonarr_data.history.sort_asc = true;
@@ -2225,7 +2225,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2238,7 +2238,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2347,7 +2347,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2360,7 +2360,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2453,7 +2453,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2466,7 +2466,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2555,7 +2555,7 @@ mod test {
"sourceTitle": "z episode",
"episodeId": 1007,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -2568,7 +2568,7 @@ mod test {
"sourceTitle": "A Episode",
"episodeId": 2001,
"quality": { "quality": { "name": "Bluray-1080p" } },
"languages": [{"name": "English"}],
"language": { "name": "English" },
"date": "2024-02-10T07:28:45Z",
"eventType": "grabbed",
"data": {
@@ -3037,8 +3037,8 @@ mod test {
status: "downloading".to_owned(),
id: 1,
episode_id: 1,
size: 3543348019,
sizeleft: 1771674009,
size: 3543348019f64,
sizeleft: 1771674009f64,
output_path: Some(HorizontallyScrollableText::from(
"/nfs/tv/Test show/season 1/",
)),
@@ -3085,9 +3085,11 @@ mod test {
fn history_data() -> SonarrHistoryData {
SonarrHistoryData {
dropped_path: "/nfs/nzbget/completed/series/Coolness/something.cool.mkv".to_owned(),
imported_path:
dropped_path: Some("/nfs/nzbget/completed/series/Coolness/something.cool.mkv".to_owned()),
imported_path: Some(
"/nfs/tv/Coolness/Season 1/Coolness - S01E01 - Something Cool Bluray-1080p.mkv".to_owned(),
),
..SonarrHistoryData::default()
}
}
@@ -3097,7 +3099,7 @@ mod test {
source_title: "Test source".into(),
episode_id: 1,
quality: quality_wrapper(),
languages: vec![language()],
language: language(),
date: DateTime::from(DateTime::parse_from_rfc3339("2024-02-10T07:28:45Z").unwrap()),
event_type: "grabbed".into(),
data: history_data(),
@@ -11,7 +11,7 @@ use crate::models::radarr_models::CollectionMovie;
use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS,
};
use crate::models::Route;
use crate::models::{EnumDisplayStyle, Route};
use crate::ui::radarr_ui::collections::draw_collections;
use crate::ui::styles::ManagarrStyle;
use crate::ui::utils::{
@@ -12,7 +12,7 @@ use crate::models::servarr_data::radarr::modals::EditCollectionModal;
use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS,
};
use crate::models::Route;
use crate::models::{EnumDisplayStyle, Route};
use crate::render_selectable_input_box;
use crate::ui::radarr_ui::collections::collection_details_ui::CollectionDetailsUi;
use crate::ui::radarr_ui::collections::draw_collections;
+1 -1
View File
@@ -12,7 +12,7 @@ use crate::app::radarr::radarr_context_clues::{
use crate::models::radarr_models::AddMovieSearchResult;
use crate::models::servarr_data::radarr::modals::AddMovieModal;
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS};
use crate::models::Route;
use crate::models::{EnumDisplayStyle, Route};
use crate::ui::radarr_ui::collections::{draw_collection_details, draw_collections};
use crate::ui::radarr_ui::library::draw_library;
use crate::ui::styles::ManagarrStyle;
+1 -1
View File
@@ -13,7 +13,7 @@ use crate::models::servarr_data::radarr::modals::EditMovieModal;
use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, EDIT_MOVIE_BLOCKS, MOVIE_DETAILS_BLOCKS,
};
use crate::models::Route;
use crate::models::{EnumDisplayStyle, Route};
use crate::render_selectable_input_box;
use crate::ui::radarr_ui::library::draw_library;
use crate::ui::radarr_ui::library::movie_details_ui::MovieDetailsUi;