refactor(ui): Tweaked some of the color schemes in the series table
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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()
|
||||
};
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user