feat(handler): Full handler support for the Season details UI in Sonarr

This commit is contained in:
2024-12-11 23:18:37 -07:00
parent ed2211586e
commit a84324d3bc
21 changed files with 1727 additions and 115 deletions
+3 -3
View File
@@ -4,6 +4,8 @@ use log::{debug, info, warn};
use serde_json::{json, Value};
use urlencoding::encode;
use super::{Network, NetworkEvent, NetworkResource};
use crate::models::sonarr_models::DownloadStatus;
use crate::{
models::{
radarr_models::IndexerTestResult,
@@ -31,8 +33,6 @@ use crate::{
network::RequestMethod,
utils::convert_to_gb,
};
use crate::models::sonarr_models::DownloadStatus;
use super::{Network, NetworkEvent, NetworkResource};
#[cfg(test)]
#[path = "sonarr_network_tests.rs"]
mod sonarr_network_tests;
@@ -1568,7 +1568,7 @@ impl<'a, 'b> Network<'a, 'b> {
Air Date: {air_date}
Status: {status}
Description: {}",
title.unwrap_or_default(),
title,
overview.unwrap_or_default(),
)),
..EpisodeDetailsModal::default()
+13 -22
View File
@@ -15,7 +15,10 @@ mod test {
use tokio::sync::Mutex;
use tokio_util::sync::CancellationToken;
use crate::models::sonarr_models::{AddSeriesBody, AddSeriesOptions, AddSeriesSearchResult, AddSeriesSearchResultStatistics, DownloadStatus, EditSeriesParams, IndexerSettings, SeriesMonitor, SonarrHistoryEventType};
use crate::models::sonarr_models::{
AddSeriesBody, AddSeriesOptions, AddSeriesSearchResult, AddSeriesSearchResultStatistics,
DownloadStatus, EditSeriesParams, IndexerSettings, SeriesMonitor, SonarrHistoryEventType,
};
use crate::app::{App, ServarrConfig};
use crate::models::radarr_models::IndexerTestResult;
@@ -2234,13 +2237,13 @@ mod test {
#[tokio::test]
async fn test_handle_get_episodes_event(#[values(true, false)] use_custom_sorting: bool) {
let episode_1 = Episode {
title: Some("z test".to_owned()),
title: "z test".to_owned(),
episode_file: None,
..episode()
};
let episode_2 = Episode {
id: 2,
title: Some("A test".to_owned()),
title: "A test".to_owned(),
episode_file_id: 2,
season_number: 2,
episode_number: 2,
@@ -2249,7 +2252,7 @@ mod test {
};
let episode_3 = Episode {
id: 3,
title: Some("A test".to_owned()),
title: "A test".to_owned(),
episode_file_id: 3,
season_number: 1,
episode_number: 2,
@@ -2271,13 +2274,7 @@ mod test {
let mut season_details_modal = SeasonDetailsModal::default();
season_details_modal.episodes.sort_asc = true;
if use_custom_sorting {
let cmp_fn = |a: &Episode, b: &Episode| {
a.title
.as_ref()
.unwrap()
.to_lowercase()
.cmp(&b.title.as_ref().unwrap().to_lowercase())
};
let cmp_fn = |a: &Episode, b: &Episode| a.title.to_lowercase().cmp(&b.title.to_lowercase());
expected_sorted_episodes.sort_by(cmp_fn);
let title_sort_option = SortOption {
name: "Title",
@@ -2348,13 +2345,13 @@ mod test {
#[tokio::test]
async fn test_handle_get_episodes_event_empty_seasons_table_returns_all_episodes_by_default() {
let episode_1 = Episode {
title: Some("z test".to_owned()),
title: "z test".to_owned(),
episode_file: None,
..episode()
};
let episode_2 = Episode {
id: 2,
title: Some("A test".to_owned()),
title: "A test".to_owned(),
episode_file_id: 2,
season_number: 2,
episode_number: 2,
@@ -2363,7 +2360,7 @@ mod test {
};
let episode_3 = Episode {
id: 3,
title: Some("A test".to_owned()),
title: "A test".to_owned(),
episode_file_id: 3,
season_number: 1,
episode_number: 2,
@@ -2537,13 +2534,7 @@ mod test {
.push_navigation_stack(ActiveSonarrBlock::EpisodesSortPrompt.into());
let mut season_details_modal = SeasonDetailsModal::default();
season_details_modal.episodes.sort_asc = true;
let cmp_fn = |a: &Episode, b: &Episode| {
a.title
.as_ref()
.unwrap()
.to_lowercase()
.cmp(&b.title.as_ref().unwrap().to_lowercase())
};
let cmp_fn = |a: &Episode, b: &Episode| a.title.to_lowercase().cmp(&b.title.to_lowercase());
expected_episodes.sort_by(cmp_fn);
let title_sort_option = SortOption {
name: "Title",
@@ -7255,7 +7246,7 @@ mod test {
episode_file_id: 1,
season_number: 1,
episode_number: 1,
title: Some("Something cool".to_owned()),
title: "Something cool".to_owned(),
air_date_utc: Some(DateTime::from(
DateTime::parse_from_rfc3339("2024-02-10T07:28:45Z").unwrap(),
)),