test: Updated Rust edition to 2024 and refactored network module tests to be more idiomatic

This commit is contained in:
2025-12-03 14:49:27 -07:00
parent c4e8d64710
commit ad58912baf
257 changed files with 4033 additions and 4380 deletions
+92 -86
View File
@@ -1,9 +1,9 @@
use crate::app::App;
use crate::models::Route;
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, SEASON_DETAILS_BLOCKS};
use crate::models::sonarr_models::{
DownloadRecord, DownloadStatus, Episode, SonarrHistoryEventType, SonarrHistoryItem, SonarrRelease,
};
use crate::models::Route;
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
use crate::ui::sonarr_ui::sonarr_ui_utils::{
create_download_failed_history_event_details,
@@ -21,13 +21,13 @@ use crate::ui::widgets::loading_block::LoadingBlock;
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::{DrawUi, draw_popup, draw_tabs};
use crate::utils::convert_to_gb;
use chrono::Utc;
use ratatui::Frame;
use ratatui::layout::{Alignment, Constraint, Rect};
use ratatui::prelude::{Line, Style, Stylize, Text};
use ratatui::widgets::{Cell, Paragraph, Row, Wrap};
use ratatui::Frame;
use serde_json::Number;
#[cfg(test)]
@@ -48,101 +48,107 @@ impl DrawUi for SeasonDetailsUi {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
let route = app.get_current_route();
if app.data.sonarr_data.season_details_modal.is_some() {
if let Route::Sonarr(active_sonarr_block, _) = app.get_current_route() {
let draw_season_details_popup = |f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect| {
let content_area = draw_tabs(
f,
popup_area,
&format!(
"Season {} Details",
if app.data.sonarr_data.season_details_modal.is_some()
&& let Route::Sonarr(active_sonarr_block, _) = app.get_current_route()
{
let draw_season_details_popup = |f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect| {
let content_area = draw_tabs(
f,
popup_area,
&format!(
"Season {} Details",
app
.data
.sonarr_data
.seasons
.current_selection()
.season_number
),
&app
.data
.sonarr_data
.season_details_modal
.as_ref()
.unwrap()
.season_details_tabs,
);
draw_season_details(f, app, content_area);
match active_sonarr_block {
ActiveSonarrBlock::AutomaticallySearchSeasonPrompt => {
let prompt = format!(
"Do you want to trigger an automatic search of your indexers for season packs for: {}",
app
.data
.sonarr_data
.seasons
.current_selection()
.season_number
),
&app
.data
.sonarr_data
.season_details_modal
.as_ref()
.unwrap()
.season_details_tabs,
);
draw_season_details(f, app, content_area);
.title
.as_ref()
.unwrap()
);
let confirmation_prompt = ConfirmationPrompt::new()
.title("Automatic Season Search")
.prompt(&prompt)
.yes_no_value(app.data.sonarr_data.prompt_confirm);
match active_sonarr_block {
ActiveSonarrBlock::AutomaticallySearchSeasonPrompt => {
let prompt = format!(
"Do you want to trigger an automatic search of your indexers for season packs for: {}",
app.data.sonarr_data.seasons.current_selection().title.as_ref().unwrap()
);
let confirmation_prompt = ConfirmationPrompt::new()
.title("Automatic Season Search")
.prompt(&prompt)
.yes_no_value(app.data.sonarr_data.prompt_confirm);
f.render_widget(
Popup::new(confirmation_prompt).size(Size::MediumPrompt),
f.area(),
);
}
ActiveSonarrBlock::DeleteEpisodeFilePrompt => {
let prompt = format!(
"Do you really want to delete this episode: \n{}?",
app
.data
.sonarr_data
.season_details_modal
.as_ref()
.unwrap()
.episodes
.current_selection()
.title
);
let confirmation_prompt = ConfirmationPrompt::new()
.title("Delete Episode")
.prompt(&prompt)
.yes_no_value(app.data.sonarr_data.prompt_confirm);
f.render_widget(
Popup::new(confirmation_prompt).size(Size::MediumPrompt),
f.area(),
);
}
ActiveSonarrBlock::ManualSeasonSearchConfirmPrompt => {
draw_manual_season_search_confirm_prompt(f, app);
}
ActiveSonarrBlock::SeasonHistoryDetails => {
draw_history_item_details_popup(f, app, popup_area);
}
_ => (),
f.render_widget(
Popup::new(confirmation_prompt).size(Size::MediumPrompt),
f.area(),
);
}
};
ActiveSonarrBlock::DeleteEpisodeFilePrompt => {
let prompt = format!(
"Do you really want to delete this episode: \n{}?",
app
.data
.sonarr_data
.season_details_modal
.as_ref()
.unwrap()
.episodes
.current_selection()
.title
);
let confirmation_prompt = ConfirmationPrompt::new()
.title("Delete Episode")
.prompt(&prompt)
.yes_no_value(app.data.sonarr_data.prompt_confirm);
draw_popup(f, app, draw_season_details_popup, Size::XLarge);
if EpisodeDetailsUi::accepts(route) {
EpisodeDetailsUi::draw(f, app, _area);
f.render_widget(
Popup::new(confirmation_prompt).size(Size::MediumPrompt),
f.area(),
);
}
ActiveSonarrBlock::ManualSeasonSearchConfirmPrompt => {
draw_manual_season_search_confirm_prompt(f, app);
}
ActiveSonarrBlock::SeasonHistoryDetails => {
draw_history_item_details_popup(f, app, popup_area);
}
_ => (),
}
};
draw_popup(f, app, draw_season_details_popup, Size::XLarge);
if EpisodeDetailsUi::accepts(route) {
EpisodeDetailsUi::draw(f, app, _area);
}
}
}
}
pub fn draw_season_details(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
if let Some(season_details_modal) = app.data.sonarr_data.season_details_modal.as_ref() {
if let Route::Sonarr(active_sonarr_block, _) =
if let Some(season_details_modal) = app.data.sonarr_data.season_details_modal.as_ref()
&& let Route::Sonarr(active_sonarr_block, _) =
season_details_modal.season_details_tabs.get_active_route()
{
match active_sonarr_block {
ActiveSonarrBlock::SeasonDetails => draw_episodes_table(f, app, area),
ActiveSonarrBlock::SeasonHistory => draw_season_history_table(f, app, area),
ActiveSonarrBlock::ManualSeasonSearch => draw_season_releases(f, app, area),
_ => (),
}
{
match active_sonarr_block {
ActiveSonarrBlock::SeasonDetails => draw_episodes_table(f, app, area),
ActiveSonarrBlock::SeasonHistory => draw_season_history_table(f, app, area),
ActiveSonarrBlock::ManualSeasonSearch => draw_season_releases(f, app, area),
_ => (),
}
}
}
@@ -588,10 +594,10 @@ fn decorate_with_row_style<'a>(
return row.unmonitored_missing();
}
if let Some(air_date) = episode.air_date_utc.as_ref() {
if air_date > &Utc::now() {
return row.unreleased();
}
if let Some(air_date) = episode.air_date_utc.as_ref()
&& air_date > &Utc::now()
{
return row.unreleased();
}
return row.missing();