diff --git a/src/models/mod.rs b/src/models/mod.rs index 5541424..d0aa2c9 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -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); diff --git a/src/models/radarr_models.rs b/src/models/radarr_models.rs index 89f45b8..286f3ee 100644 --- a/src/models/radarr_models.rs +++ b/src/models/radarr_models.rs @@ -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", diff --git a/src/models/radarr_models_tests.rs b/src/models/radarr_models_tests.rs index 3ef03b7..8cb1643 100644 --- a/src/models/radarr_models_tests.rs +++ b/src/models/radarr_models_tests.rs @@ -11,7 +11,7 @@ mod tests { Release, RootFolder, SystemStatus, Tag, Task, TaskName, Update, }, servarr_models::{HostConfig, Log, LogResponse, QueueEvent, SecurityConfig}, - Serdeable, + EnumDisplayStyle, Serdeable, }; #[test] diff --git a/src/models/servarr_data/sonarr/modals.rs b/src/models/servarr_data/sonarr/modals.rs index 4745db9..71dbb96 100644 --- a/src/models/servarr_data/sonarr/modals.rs +++ b/src/models/servarr_data/sonarr/modals.rs @@ -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, + pub episode_history: StatefulTable, pub episode_releases: StatefulTable, } diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index cc8325e..4eb89c8 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -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 diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index bd5ad47..050ea84 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -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(), diff --git a/src/ui/radarr_ui/collections/collection_details_ui.rs b/src/ui/radarr_ui/collections/collection_details_ui.rs index 25f19e4..917018c 100644 --- a/src/ui/radarr_ui/collections/collection_details_ui.rs +++ b/src/ui/radarr_ui/collections/collection_details_ui.rs @@ -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::{ diff --git a/src/ui/radarr_ui/collections/edit_collection_ui.rs b/src/ui/radarr_ui/collections/edit_collection_ui.rs index c005f99..eac0943 100644 --- a/src/ui/radarr_ui/collections/edit_collection_ui.rs +++ b/src/ui/radarr_ui/collections/edit_collection_ui.rs @@ -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; diff --git a/src/ui/radarr_ui/library/add_movie_ui.rs b/src/ui/radarr_ui/library/add_movie_ui.rs index 0008ac1..6903a6a 100644 --- a/src/ui/radarr_ui/library/add_movie_ui.rs +++ b/src/ui/radarr_ui/library/add_movie_ui.rs @@ -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; diff --git a/src/ui/radarr_ui/library/edit_movie_ui.rs b/src/ui/radarr_ui/library/edit_movie_ui.rs index 7930315..520bf2d 100644 --- a/src/ui/radarr_ui/library/edit_movie_ui.rs +++ b/src/ui/radarr_ui/library/edit_movie_ui.rs @@ -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;