refactor(ui): Tweaked some of the color schemes in the series table

This commit is contained in:
2024-12-13 13:10:57 -07:00
parent 39f8ad2106
commit 98619664cf
6 changed files with 60 additions and 47 deletions
-6
View File
@@ -65,12 +65,6 @@ impl<'a> App<'a> {
}
}
ActiveSonarrBlock::EpisodeDetails | ActiveSonarrBlock::EpisodeFile => {
self
.dispatch_network_event(SonarrEvent::GetEpisodes(None).into())
.await;
self
.dispatch_network_event(SonarrEvent::GetDownloads.into())
.await;
self
.dispatch_network_event(SonarrEvent::GetEpisodeDetails(None).into())
.await;
-16
View File
@@ -176,14 +176,6 @@ mod tests {
.await;
assert!(app.is_loading);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetEpisodes(None).into()
);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetDownloads.into()
);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetEpisodeDetails(None).into()
@@ -201,14 +193,6 @@ mod tests {
.await;
assert!(app.is_loading);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetEpisodes(None).into()
);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetDownloads.into()
);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
SonarrEvent::GetEpisodeDetails(None).into()
@@ -226,7 +226,7 @@ fn draw_file_info(f: &mut Frame<'_>, app: &App<'_>, area: Rect) {
f.render_widget(video_details_title_paragraph, video_details_title_area);
f.render_widget(video_details_paragraph, video_details_area);
}
_ => (),
_ => f.render_widget(layout_block_top_border(), area),
},
_ => f.render_widget(
LoadingBlock::new(app.is_loading, layout_block_top_border()),
+34 -13
View File
@@ -1,6 +1,9 @@
#[cfg(test)]
mod tests {
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, ADD_SERIES_BLOCKS, DELETE_SERIES_BLOCKS, EDIT_SERIES_BLOCKS, EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS};
use crate::models::servarr_data::sonarr::sonarr_data::{
ActiveSonarrBlock, ADD_SERIES_BLOCKS, DELETE_SERIES_BLOCKS, EDIT_SERIES_BLOCKS,
EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS,
};
use crate::models::{
servarr_data::sonarr::sonarr_data::LIBRARY_BLOCKS, sonarr_models::SeriesStatus,
};
@@ -36,14 +39,24 @@ mod tests {
});
}
#[test]
fn test_decorate_row_with_style_unmonitored() {
let series = Series::default();
let row = Row::new(vec![Cell::from("test".to_owned())]);
let style = decorate_series_row_with_style(&series, row.clone());
assert_eq!(style, row.unmonitored());
}
#[test]
fn test_decorate_row_with_style_downloaded_when_ended_and_all_monitored_episodes_are_present() {
let seasons = vec![
Season {
monitored: false,
statistics: SeasonStatistics {
episode_count: 1,
total_episode_count: 3,
episode_file_count: 1,
episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
@@ -51,14 +64,15 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_file_count: 3,
episode_count: 3,
total_episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
},
];
let series = Series {
monitored: true,
status: SeriesStatus::Ended,
seasons: Some(seasons),
..Series::default()
@@ -76,8 +90,8 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_count: 1,
total_episode_count: 3,
episode_file_count: 1,
episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
@@ -85,14 +99,15 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_file_count: 3,
episode_count: 3,
total_episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
},
];
let series = Series {
monitored: true,
status: SeriesStatus::Ended,
seasons: Some(seasons),
..Series::default()
@@ -107,6 +122,7 @@ mod tests {
#[test]
fn test_decorate_row_with_style_indeterminate_when_ended_and_seasons_is_empty() {
let series = Series {
monitored: true,
status: SeriesStatus::Ended,
..Series::default()
};
@@ -124,8 +140,8 @@ mod tests {
Season {
monitored: false,
statistics: SeasonStatistics {
episode_count: 1,
total_episode_count: 3,
episode_file_count: 1,
episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
@@ -133,14 +149,15 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_file_count: 3,
episode_count: 3,
total_episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
},
];
let series = Series {
monitored: true,
status: SeriesStatus::Continuing,
seasons: Some(seasons),
..Series::default()
@@ -158,8 +175,8 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_count: 1,
total_episode_count: 3,
episode_file_count: 1,
episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
@@ -167,14 +184,15 @@ mod tests {
Season {
monitored: true,
statistics: SeasonStatistics {
episode_file_count: 3,
episode_count: 3,
total_episode_count: 3,
..SeasonStatistics::default()
},
..Season::default()
},
];
let series = Series {
monitored: true,
status: SeriesStatus::Continuing,
seasons: Some(seasons),
..Series::default()
@@ -189,6 +207,7 @@ mod tests {
#[test]
fn test_decorate_row_with_style_indeterminate_when_continuing_and_seasons_is_empty() {
let series = Series {
monitored: true,
status: SeriesStatus::Continuing,
..Series::default()
};
@@ -202,6 +221,7 @@ mod tests {
#[test]
fn test_decorate_row_with_style_unreleased_when_upcoming() {
let series = Series {
monitored: true,
status: SeriesStatus::Upcoming,
..Series::default()
};
@@ -215,6 +235,7 @@ mod tests {
#[test]
fn test_decorate_row_with_style_defaults_to_indeterminate() {
let series = Series {
monitored: true,
status: SeriesStatus::Deleted,
..Series::default()
};
+10 -6
View File
@@ -32,11 +32,11 @@ mod delete_series_ui;
mod edit_series_ui;
mod series_details_ui;
mod episode_details_ui;
#[cfg(test)]
#[path = "library_ui_tests.rs"]
mod library_ui_tests;
mod season_details_ui;
mod episode_details_ui;
pub(super) struct LibraryUi;
@@ -192,20 +192,24 @@ fn draw_library(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
}
fn decorate_series_row_with_style<'a>(series: &Series, row: Row<'a>) -> Row<'a> {
if !series.monitored {
return row.unmonitored();
}
match series.status {
SeriesStatus::Ended => {
if let Some(ref seasons) = series.seasons {
return if seasons
.iter()
.filter(|season| season.monitored)
.all(|season| season.statistics.episode_count == season.statistics.total_episode_count)
.all(|season| season.statistics.episode_file_count == season.statistics.episode_count)
{
row.downloaded()
} else {
row.missing()
}
}
};
}
row.indeterminate()
}
SeriesStatus::Continuing => {
@@ -213,7 +217,7 @@ fn decorate_series_row_with_style<'a>(series: &Series, row: Row<'a>) -> Row<'a>
return if seasons
.iter()
.filter(|season| season.monitored)
.all(|season| season.statistics.episode_count == season.statistics.total_episode_count)
.all(|season| season.statistics.episode_file_count == season.statistics.episode_count)
{
row.unreleased()
} else {
+15 -5
View File
@@ -1,3 +1,4 @@
use chrono::Utc;
use deunicode::deunicode;
use ratatui::layout::{Alignment, Constraint, Layout, Rect};
use ratatui::style::{Style, Stylize};
@@ -12,6 +13,7 @@ use crate::models::sonarr_models::{
Season, SeasonStatistics, SonarrHistoryEventType, SonarrHistoryItem,
};
use crate::models::{EnumDisplayStyle, Route};
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
use crate::ui::sonarr_ui::library::season_details_ui::SeasonDetailsUi;
use crate::ui::sonarr_ui::sonarr_ui_utils::{
create_download_failed_history_event_details,
@@ -30,7 +32,6 @@ use crate::ui::widgets::managarr_table::ManagarrTable;
use crate::ui::widgets::message::Message;
use crate::ui::widgets::popup::{Popup, Size};
use crate::ui::{draw_popup, draw_tabs, DrawUi};
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
use crate::utils::convert_to_gb;
#[cfg(test)]
@@ -42,7 +43,9 @@ pub(super) struct SeriesDetailsUi;
impl DrawUi for SeriesDetailsUi {
fn accepts(route: Route) -> bool {
if let Route::Sonarr(active_sonarr_block, _) = route {
return SeasonDetailsUi::accepts(route) || EpisodeDetailsUi::accepts(route) || SERIES_DETAILS_BLOCKS.contains(&active_sonarr_block);
return SeasonDetailsUi::accepts(route)
|| EpisodeDetailsUi::accepts(route)
|| SERIES_DETAILS_BLOCKS.contains(&active_sonarr_block);
}
false
@@ -239,9 +242,10 @@ fn draw_seasons_table(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
..
} = season;
let SeasonStatistics {
episode_file_count,
episode_count,
total_episode_count,
size_on_disk,
next_airing,
..
} = statistics;
let season_monitored = if season.monitored { "🏷" } else { "" };
@@ -250,13 +254,19 @@ fn draw_seasons_table(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let row = Row::new(vec![
Cell::from(season_monitored.to_owned()),
Cell::from(title.clone().unwrap()),
Cell::from(format!("{}/{}", episode_count, total_episode_count)),
Cell::from(format!("{}/{}", episode_file_count, episode_count)),
Cell::from(format!("{size:.2} GB")),
]);
if episode_count == total_episode_count {
if episode_file_count == episode_count {
row.downloaded()
} else if !monitored {
row.unmonitored()
} else if let Some(next_airing_utc) = next_airing.as_ref() {
if next_airing_utc > &Utc::now() {
return row.unreleased();
} else {
return row.missing();
}
} else {
row.missing()
}