refactor: Improved and simplified the implementation of history details for both Sonarr and Lidarr
This commit is contained in:
1 parent
ad9e2b3671
commit
e1a25bfaf2
18 files changed
+377
-486
No files matched your search
@@ -2,8 +2,9 @@ use crate::app::App;
|
||||
use crate::models::Route;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, HISTORY_BLOCKS};
|
||||
use crate::models::servarr_models::Language;
|
||||
use crate::models::sonarr_models::{SonarrHistoryEventType, SonarrHistoryItem};
|
||||
use crate::models::sonarr_models::SonarrHistoryItem;
|
||||
use crate::ui::DrawUi;
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::create_history_event_details;
|
||||
use crate::ui::styles::{ManagarrStyle, secondary_style};
|
||||
use crate::ui::utils::{get_width_from_percentage, layout_block_top_border};
|
||||
use crate::ui::widgets::managarr_table::ManagarrTable;
|
||||
@@ -14,14 +15,6 @@ use ratatui::layout::{Alignment, Constraint, Rect};
|
||||
use ratatui::text::Text;
|
||||
use ratatui::widgets::{Cell, Row};
|
||||
|
||||
use super::sonarr_ui_utils::{
|
||||
create_download_failed_history_event_details,
|
||||
create_download_folder_imported_history_event_details,
|
||||
create_episode_file_deleted_history_event_details,
|
||||
create_episode_file_renamed_history_event_details, create_grabbed_history_event_details,
|
||||
create_no_data_history_event_details,
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "history_ui_tests.rs"]
|
||||
mod history_ui_tests;
|
||||
@@ -130,22 +123,7 @@ fn draw_history_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
|
||||
app.data.sonarr_data.history.current_selection().clone()
|
||||
};
|
||||
|
||||
let line_vec = match current_selection.event_type {
|
||||
SonarrHistoryEventType::Grabbed => create_grabbed_history_event_details(current_selection),
|
||||
SonarrHistoryEventType::DownloadFolderImported => {
|
||||
create_download_folder_imported_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFailed => {
|
||||
create_download_failed_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileDeleted => {
|
||||
create_episode_file_deleted_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileRenamed => {
|
||||
create_episode_file_renamed_history_event_details(current_selection)
|
||||
}
|
||||
_ => create_no_data_history_event_details(current_selection),
|
||||
};
|
||||
let line_vec = create_history_event_details(current_selection);
|
||||
let text = Text::from(line_vec);
|
||||
|
||||
let message = Message::new(text)
|
||||
|
||||
+1
-1
@@ -19,6 +19,7 @@ expression: output
|
||||
|
||||
╭─────────────────────────────────── Details ───────────────────────────────────╮
|
||||
│Source Title: Test source │
|
||||
│Event Type: grabbed │
|
||||
│Indexer: │
|
||||
│Release Group: │
|
||||
│Series Match Type: │
|
||||
@@ -35,5 +36,4 @@ expression: output
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
╰─────────────────────────────────────────────────────────────────────────────────╯
|
||||
+1
-1
@@ -19,6 +19,7 @@ expression: output
|
||||
|
||||
╭─────────────────────────────────── Details ───────────────────────────────────╮
|
||||
│Source Title: │
|
||||
│Event Type: unknown │
|
||||
│ │
|
||||
│No additional data available │
|
||||
│ │
|
||||
@@ -35,5 +36,4 @@ expression: output
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
╰─────────────────────────────────────────────────────────────────────────────────╯
|
||||
@@ -3,15 +3,9 @@ use crate::models::Route;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS};
|
||||
use crate::models::servarr_models::Language;
|
||||
use crate::models::sonarr_models::{
|
||||
DownloadRecord, DownloadStatus, Episode, SonarrHistoryEventType, SonarrHistoryItem, SonarrRelease,
|
||||
};
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::{
|
||||
create_download_failed_history_event_details,
|
||||
create_download_folder_imported_history_event_details,
|
||||
create_episode_file_deleted_history_event_details,
|
||||
create_episode_file_renamed_history_event_details, create_grabbed_history_event_details,
|
||||
create_no_data_history_event_details,
|
||||
DownloadRecord, DownloadStatus, Episode, SonarrHistoryItem, SonarrRelease,
|
||||
};
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::create_history_event_details;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::styles::{
|
||||
awaiting_import_style, downloaded_style, downloading_style, missing_style, secondary_style,
|
||||
@@ -372,22 +366,7 @@ fn draw_history_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: R
|
||||
SonarrHistoryItem::default()
|
||||
};
|
||||
|
||||
let line_vec = match current_selection.event_type {
|
||||
SonarrHistoryEventType::Grabbed => create_grabbed_history_event_details(current_selection),
|
||||
SonarrHistoryEventType::DownloadFolderImported => {
|
||||
create_download_folder_imported_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFailed => {
|
||||
create_download_failed_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileDeleted => {
|
||||
create_episode_file_deleted_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileRenamed => {
|
||||
create_episode_file_renamed_history_event_details(current_selection)
|
||||
}
|
||||
_ => create_no_data_history_event_details(current_selection),
|
||||
};
|
||||
let line_vec = create_history_event_details(current_selection);
|
||||
let text = Text::from(line_vec);
|
||||
|
||||
let message = Message::new(text)
|
||||
|
||||
@@ -2,16 +2,10 @@ 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,
|
||||
DownloadRecord, DownloadStatus, Episode, SonarrHistoryItem, SonarrRelease,
|
||||
};
|
||||
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::{
|
||||
create_download_failed_history_event_details,
|
||||
create_download_folder_imported_history_event_details,
|
||||
create_episode_file_deleted_history_event_details,
|
||||
create_episode_file_renamed_history_event_details, create_grabbed_history_event_details,
|
||||
create_no_data_history_event_details,
|
||||
};
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::create_history_event_details;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::styles::secondary_style;
|
||||
use crate::ui::utils::{
|
||||
@@ -548,22 +542,7 @@ fn draw_history_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: R
|
||||
SonarrHistoryItem::default()
|
||||
};
|
||||
|
||||
let line_vec = match current_selection.event_type {
|
||||
SonarrHistoryEventType::Grabbed => create_grabbed_history_event_details(current_selection),
|
||||
SonarrHistoryEventType::DownloadFolderImported => {
|
||||
create_download_folder_imported_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFailed => {
|
||||
create_download_failed_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileDeleted => {
|
||||
create_episode_file_deleted_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileRenamed => {
|
||||
create_episode_file_renamed_history_event_details(current_selection)
|
||||
}
|
||||
_ => create_no_data_history_event_details(current_selection),
|
||||
};
|
||||
let line_vec = create_history_event_details(current_selection);
|
||||
let text = Text::from(line_vec);
|
||||
|
||||
let message = Message::new(text)
|
||||
|
||||
@@ -11,18 +11,10 @@ use regex::Regex;
|
||||
use crate::app::App;
|
||||
use crate::models::Route;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, SERIES_DETAILS_BLOCKS};
|
||||
use crate::models::sonarr_models::{
|
||||
Season, SeasonStatistics, SonarrHistoryEventType, SonarrHistoryItem,
|
||||
};
|
||||
use crate::models::sonarr_models::{Season, SeasonStatistics, SonarrHistoryItem};
|
||||
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,
|
||||
create_download_folder_imported_history_event_details,
|
||||
create_episode_file_deleted_history_event_details,
|
||||
create_episode_file_renamed_history_event_details, create_grabbed_history_event_details,
|
||||
create_no_data_history_event_details,
|
||||
};
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::create_history_event_details;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{
|
||||
borderless_block, get_width_from_percentage, layout_block_top_border, title_block,
|
||||
@@ -408,22 +400,7 @@ fn draw_history_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: R
|
||||
SonarrHistoryItem::default()
|
||||
};
|
||||
|
||||
let line_vec = match current_selection.event_type {
|
||||
SonarrHistoryEventType::Grabbed => create_grabbed_history_event_details(current_selection),
|
||||
SonarrHistoryEventType::DownloadFolderImported => {
|
||||
create_download_folder_imported_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFailed => {
|
||||
create_download_failed_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileDeleted => {
|
||||
create_episode_file_deleted_history_event_details(current_selection)
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileRenamed => {
|
||||
create_episode_file_renamed_history_event_details(current_selection)
|
||||
}
|
||||
_ => create_no_data_history_event_details(current_selection),
|
||||
};
|
||||
let line_vec = create_history_event_details(current_selection);
|
||||
let text = Text::from(line_vec);
|
||||
|
||||
let message = Message::new(text)
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ expression: output
|
||||
│ │
|
||||
│ ╭──────────────────────── Details ─────────────────────────╮ │
|
||||
│ │Source Title: │ │
|
||||
│ │Event Type: unknown │ │
|
||||
│ │ │ │
|
||||
│ │No additional data available │ │
|
||||
│ │ │ │
|
||||
@@ -33,7 +34,6 @@ expression: output
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ ╰────────────────────────────────────────────────────────────╯ │
|
||||
│ │
|
||||
│ │
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ expression: output
|
||||
│ │
|
||||
│ ╭──────────────────────── Details ─────────────────────────╮ │
|
||||
│ │Source Title: Test source │ │
|
||||
│ │Event Type: grabbed │ │
|
||||
│ │Indexer: │ │
|
||||
│ │Release Group: │ │
|
||||
│ │Series Match Type: │ │
|
||||
@@ -33,7 +34,6 @@ expression: output
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ ╰────────────────────────────────────────────────────────────╯ │
|
||||
│ │
|
||||
│ │
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ expression: output
|
||||
│ │
|
||||
│ ╭──────────────────────────── Details ────────────────────────────╮ │
|
||||
│ │Source Title: │ │
|
||||
│ │Event Type: unknown │ │
|
||||
│ │ │ │
|
||||
│ │No additional data available │ │
|
||||
│ │ │ │
|
||||
@@ -33,7 +34,6 @@ expression: output
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ ╰───────────────────────────────────────────────────────────────────╯ │
|
||||
│ │
|
||||
│ │
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ expression: output
|
||||
│ │
|
||||
│ ╭──────────────────────────── Details ────────────────────────────╮ │
|
||||
│ │Source Title: │ │
|
||||
│ │Event Type: unknown │ │
|
||||
│ │ │ │
|
||||
│ │No additional data available │ │
|
||||
│ │ │ │
|
||||
@@ -33,7 +34,6 @@ expression: output
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ ╰───────────────────────────────────────────────────────────────────╯ │
|
||||
│ │
|
||||
│ │
|
||||
|
||||
+1
-1
@@ -21,6 +21,7 @@ expression: output
|
||||
│ │
|
||||
│ ╭──────────────────────────── Details ────────────────────────────╮ │
|
||||
│ │Source Title: Test source │ │
|
||||
│ │Event Type: grabbed │ │
|
||||
│ │Indexer: │ │
|
||||
│ │Release Group: │ │
|
||||
│ │Series Match Type: │ │
|
||||
@@ -33,7 +34,6 @@ expression: output
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ │ │ │
|
||||
│ ╰───────────────────────────────────────────────────────────────────╯ │
|
||||
│ │
|
||||
│ │
|
||||
|
||||
+3
-3
@@ -21,9 +21,9 @@ expression: output
|
||||
│Size on Disk: 59.51 GB │
|
||||
│ ╭─────────────────────────────── Details ───────────────────────────────╮ │
|
||||
│ │Source Title: │ │
|
||||
│ │ │ │
|
||||
│╭ Series Details ─────────────────│No additional data available │───────────────────────────────────╮│
|
||||
││ Seasons │ History │ │ ││
|
||||
│ │Event Type: unknown │ │
|
||||
│╭ Series Details ─────────────────│ │───────────────────────────────────╮│
|
||||
││ Seasons │ History │No additional data available │ ││
|
||||
││───────────────────────────────────│ │───────────────────────────────────││
|
||||
││ │ │ ││
|
||||
││ │ │ ││
|
||||
|
||||
+7
-7
@@ -21,12 +21,13 @@ expression: output
|
||||
│Size on Disk: 59.51 GB │
|
||||
│ ╭─────────────────────────────── Details ───────────────────────────────╮ │
|
||||
│ │Source Title: Test source │ │
|
||||
│ │Indexer: │ │
|
||||
│╭ Series Details ─────────────────│Release Group: │───────────────────────────────────╮│
|
||||
││ Seasons │ History │Series Match Type: │ ││
|
||||
││───────────────────────────────────│NZB Info URL: │───────────────────────────────────││
|
||||
││ Source Title ▼ │Download Client Name: │ Date ││
|
||||
││=> Test source │Age: 0 days │ 2024-02-10 07:28:45 UTC ││
|
||||
│ │Event Type: grabbed │ │
|
||||
│╭ Series Details ─────────────────│Indexer: │───────────────────────────────────╮│
|
||||
││ Seasons │ History │Release Group: │ ││
|
||||
││───────────────────────────────────│Series Match Type: │───────────────────────────────────││
|
||||
││ Source Title ▼ │NZB Info URL: │ Date ││
|
||||
││=> Test source │Download Client Name: │ 2024-02-10 07:28:45 UTC ││
|
||||
││ │Age: 0 days │ ││
|
||||
││ │Published Date: 1970-01-01 00:00:00 UTC │ ││
|
||||
││ │ │ ││
|
||||
││ │ │ ││
|
||||
@@ -35,7 +36,6 @@ expression: output
|
||||
││ │ │ ││
|
||||
││ │ │ ││
|
||||
││ │ │ ││
|
||||
││ │ │ ││
|
||||
││ ╰─────────────────────────────────────────────────────────────────────────╯ ││
|
||||
││ ││
|
||||
││ ││
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
use ratatui::style::Stylize;
|
||||
use ratatui::text::Line;
|
||||
|
||||
use crate::models::sonarr_models::{SonarrHistoryData, SonarrHistoryItem};
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::models::sonarr_models::{SonarrHistoryData, SonarrHistoryEventType, SonarrHistoryItem};
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "sonarr_ui_utils_tests.rs"]
|
||||
mod sonarr_ui_utils_tests;
|
||||
|
||||
pub(super) fn create_grabbed_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
pub(super) fn create_history_event_details(history_item: SonarrHistoryItem) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item;
|
||||
let SonarrHistoryData {
|
||||
indexer,
|
||||
@@ -22,120 +21,10 @@ pub(super) fn create_grabbed_history_event_details(
|
||||
download_client_name,
|
||||
age,
|
||||
published_date,
|
||||
..
|
||||
} = data;
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Indexer: ".bold().secondary(),
|
||||
indexer.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Release Group: ".bold().secondary(),
|
||||
release_group.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Series Match Type: ".bold().secondary(),
|
||||
series_match_type.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"NZB Info URL: ".bold().secondary(),
|
||||
nzb_info_url.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Download Client Name: ".bold().secondary(),
|
||||
download_client_name.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Age: ".bold().secondary(),
|
||||
format!("{} days", age.unwrap_or("0".to_owned())).secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Published Date: ".bold().secondary(),
|
||||
published_date.unwrap_or_default().to_string().secondary(),
|
||||
]),
|
||||
]
|
||||
}
|
||||
|
||||
pub(super) fn create_download_folder_imported_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
} = history_item;
|
||||
let SonarrHistoryData {
|
||||
dropped_path,
|
||||
imported_path,
|
||||
..
|
||||
} = data;
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Dropped Path: ".bold().secondary(),
|
||||
dropped_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Imported Path: ".bold().secondary(),
|
||||
imported_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
]
|
||||
}
|
||||
|
||||
pub(super) fn create_download_failed_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
} = history_item;
|
||||
let SonarrHistoryData { message, .. } = data;
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Message: ".bold().secondary(),
|
||||
message.unwrap_or_default().secondary(),
|
||||
]),
|
||||
]
|
||||
}
|
||||
|
||||
pub(super) fn create_episode_file_deleted_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
} = history_item;
|
||||
let SonarrHistoryData { reason, .. } = data;
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Reason: ".bold().secondary(),
|
||||
reason.unwrap_or_default().secondary(),
|
||||
]),
|
||||
]
|
||||
}
|
||||
|
||||
pub(super) fn create_episode_file_renamed_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
} = history_item;
|
||||
let SonarrHistoryData {
|
||||
message,
|
||||
reason,
|
||||
source_path,
|
||||
source_relative_path,
|
||||
path,
|
||||
@@ -143,41 +32,87 @@ pub(super) fn create_episode_file_renamed_history_event_details(
|
||||
..
|
||||
} = data;
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Source Path: ".bold().secondary(),
|
||||
source_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Source Relative Path: ".bold().secondary(),
|
||||
source_relative_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Destination Path: ".bold().secondary(),
|
||||
path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Destination Relative Path: ".bold().secondary(),
|
||||
relative_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
]
|
||||
}
|
||||
let mut lines = vec![
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {}", event_type)),
|
||||
];
|
||||
|
||||
pub(super) fn create_no_data_history_event_details(
|
||||
history_item: SonarrHistoryItem,
|
||||
) -> Vec<Line<'static>> {
|
||||
let SonarrHistoryItem { source_title, .. } = history_item;
|
||||
match event_type {
|
||||
SonarrHistoryEventType::Grabbed => {
|
||||
lines.push(Line::from(format!(
|
||||
"Indexer: {}",
|
||||
indexer.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Release Group: {}",
|
||||
release_group.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Series Match Type: {}",
|
||||
series_match_type.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"NZB Info URL: {}",
|
||||
nzb_info_url.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Download Client Name: {}",
|
||||
download_client_name.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Age: {}",
|
||||
format!("{} days", age.unwrap_or("0".to_owned())).trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Published Date: {}",
|
||||
published_date.unwrap_or_default().to_string().trim_start(),
|
||||
)));
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFolderImported => {
|
||||
lines.push(Line::from(format!(
|
||||
"Dropped Path: {}",
|
||||
dropped_path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Imported Path: {}",
|
||||
imported_path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
}
|
||||
SonarrHistoryEventType::DownloadFailed => {
|
||||
lines.push(Line::from(format!(
|
||||
"Message: {}",
|
||||
message.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileDeleted => {
|
||||
lines.push(Line::from(format!(
|
||||
"Reason: {}",
|
||||
reason.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
}
|
||||
SonarrHistoryEventType::EpisodeFileRenamed => {
|
||||
lines.push(Line::from(format!(
|
||||
"Source Path: {}",
|
||||
source_path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Source Relative Path: {}",
|
||||
source_relative_path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Destination Path: {}",
|
||||
path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
lines.push(Line::from(format!(
|
||||
"Destination Relative Path: {}",
|
||||
relative_path.unwrap_or_default().trim_start(),
|
||||
)));
|
||||
}
|
||||
_ => {
|
||||
lines.push(Line::from(String::new()));
|
||||
lines.push(Line::from("No additional data available"));
|
||||
}
|
||||
}
|
||||
|
||||
vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![String::new().secondary()]),
|
||||
Line::from(vec!["No additional data available".bold().secondary()]),
|
||||
]
|
||||
lines
|
||||
}
|
||||
@@ -1,28 +1,21 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use chrono::Utc;
|
||||
use ratatui::{style::Stylize, text::Line};
|
||||
use ratatui::text::Line;
|
||||
|
||||
use crate::{
|
||||
models::sonarr_models::{SonarrHistoryData, SonarrHistoryItem},
|
||||
ui::{
|
||||
sonarr_ui::sonarr_ui_utils::{
|
||||
create_download_failed_history_event_details,
|
||||
create_download_folder_imported_history_event_details,
|
||||
create_episode_file_deleted_history_event_details,
|
||||
create_episode_file_renamed_history_event_details, create_grabbed_history_event_details,
|
||||
create_no_data_history_event_details,
|
||||
},
|
||||
styles::ManagarrStyle,
|
||||
},
|
||||
};
|
||||
use crate::models::sonarr_models::SonarrHistoryEventType;
|
||||
use crate::models::sonarr_models::{SonarrHistoryData, SonarrHistoryItem};
|
||||
use crate::ui::sonarr_ui::sonarr_ui_utils::create_history_event_details;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn test_create_grabbed_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::Grabbed);
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let SonarrHistoryData {
|
||||
indexer,
|
||||
@@ -35,50 +28,51 @@ mod tests {
|
||||
..
|
||||
} = data;
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Indexer: ".bold().secondary(),
|
||||
indexer.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Release Group: ".bold().secondary(),
|
||||
release_group.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Series Match Type: ".bold().secondary(),
|
||||
series_match_type.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"NZB Info URL: ".bold().secondary(),
|
||||
nzb_info_url.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Download Client Name: ".bold().secondary(),
|
||||
download_client_name.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Age: ".bold().secondary(),
|
||||
format!("{} days", age.unwrap_or("0".to_owned())).secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Published Date: ".bold().secondary(),
|
||||
published_date.unwrap_or_default().to_string().secondary(),
|
||||
]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(format!(
|
||||
"Indexer: {}",
|
||||
indexer.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Release Group: {}",
|
||||
release_group.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Series Match Type: {}",
|
||||
series_match_type.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"NZB Info URL: {}",
|
||||
nzb_info_url.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Download Client Name: {}",
|
||||
download_client_name.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Age: {}",
|
||||
format!("{} days", age.unwrap_or("0".to_owned())).trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Published Date: {}",
|
||||
published_date.unwrap_or_default().to_string().trim_start()
|
||||
)),
|
||||
];
|
||||
|
||||
let history_details_vec = create_grabbed_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_download_folder_imported_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::DownloadFolderImported);
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let SonarrHistoryData {
|
||||
dropped_path,
|
||||
@@ -86,76 +80,79 @@ mod tests {
|
||||
..
|
||||
} = data;
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Dropped Path: ".bold().secondary(),
|
||||
dropped_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Imported Path: ".bold().secondary(),
|
||||
imported_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(format!(
|
||||
"Dropped Path: {}",
|
||||
dropped_path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Imported Path: {}",
|
||||
imported_path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
];
|
||||
|
||||
let history_details_vec = create_download_folder_imported_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_download_failed_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::DownloadFailed);
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let SonarrHistoryData { message, .. } = data;
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Message: ".bold().secondary(),
|
||||
message.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(format!(
|
||||
"Message: {}",
|
||||
message.unwrap_or_default().trim_start()
|
||||
)),
|
||||
];
|
||||
|
||||
let history_details_vec = create_download_failed_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_episode_file_deleted_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::EpisodeFileDeleted);
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let SonarrHistoryData { reason, .. } = data;
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Reason: ".bold().secondary(),
|
||||
reason.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(format!(
|
||||
"Reason: {}",
|
||||
reason.unwrap_or_default().trim_start()
|
||||
)),
|
||||
];
|
||||
|
||||
let history_details_vec = create_episode_file_deleted_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_episode_file_renamed_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::EpisodeFileRenamed);
|
||||
let SonarrHistoryItem {
|
||||
source_title, data, ..
|
||||
source_title,
|
||||
data,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let SonarrHistoryData {
|
||||
source_path,
|
||||
@@ -165,54 +162,55 @@ mod tests {
|
||||
..
|
||||
} = data;
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Source Path: ".bold().secondary(),
|
||||
source_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Source Relative Path: ".bold().secondary(),
|
||||
source_relative_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Destination Path: ".bold().secondary(),
|
||||
path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(vec![
|
||||
"Destination Relative Path: ".bold().secondary(),
|
||||
relative_path.unwrap_or_default().secondary(),
|
||||
]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(format!(
|
||||
"Source Path: {}",
|
||||
source_path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Source Relative Path: {}",
|
||||
source_relative_path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Destination Path: {}",
|
||||
path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
Line::from(format!(
|
||||
"Destination Relative Path: {}",
|
||||
relative_path.unwrap_or_default().trim_start()
|
||||
)),
|
||||
];
|
||||
|
||||
let history_details_vec = create_episode_file_renamed_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_no_data_history_event_details() {
|
||||
let history_item = sonarr_history_item();
|
||||
let SonarrHistoryItem { source_title, .. } = history_item.clone();
|
||||
let history_item = sonarr_history_item(SonarrHistoryEventType::Unknown);
|
||||
let SonarrHistoryItem {
|
||||
source_title,
|
||||
event_type,
|
||||
..
|
||||
} = history_item.clone();
|
||||
let expected_vec = vec![
|
||||
Line::from(vec![
|
||||
"Source Title: ".bold().secondary(),
|
||||
source_title.text.secondary(),
|
||||
]),
|
||||
Line::from(vec![String::new().secondary()]),
|
||||
Line::from(vec!["No additional data available".bold().secondary()]),
|
||||
Line::from(format!("Source Title: {}", source_title.text.trim_start())),
|
||||
Line::from(format!("Event Type: {event_type}")),
|
||||
Line::from(String::new()),
|
||||
Line::from("No additional data available"),
|
||||
];
|
||||
|
||||
let history_details_vec = create_no_data_history_event_details(history_item);
|
||||
let history_details_vec = create_history_event_details(history_item);
|
||||
|
||||
assert_eq!(expected_vec, history_details_vec);
|
||||
}
|
||||
|
||||
fn sonarr_history_item() -> SonarrHistoryItem {
|
||||
fn sonarr_history_item(event_type: SonarrHistoryEventType) -> SonarrHistoryItem {
|
||||
SonarrHistoryItem {
|
||||
source_title: "test.source.title".into(),
|
||||
source_title: "\ntest.source.title".into(),
|
||||
event_type,
|
||||
data: sonarr_history_data(),
|
||||
..SonarrHistoryItem::default()
|
||||
}
|
||||
@@ -220,21 +218,21 @@ mod tests {
|
||||
|
||||
fn sonarr_history_data() -> SonarrHistoryData {
|
||||
SonarrHistoryData {
|
||||
dropped_path: Some("/dropped/test".into()),
|
||||
imported_path: Some("/imported/test".into()),
|
||||
indexer: Some("Test Indexer".into()),
|
||||
release_group: Some("test release group".into()),
|
||||
series_match_type: Some("test match type".into()),
|
||||
nzb_info_url: Some("test url".into()),
|
||||
download_client_name: Some("test download client".into()),
|
||||
age: Some("1".into()),
|
||||
dropped_path: Some("\n/dropped/test".into()),
|
||||
imported_path: Some("\n/imported/test".into()),
|
||||
indexer: Some("\nTest Indexer".into()),
|
||||
release_group: Some("\ntest release group".into()),
|
||||
series_match_type: Some("\ntest match type".into()),
|
||||
nzb_info_url: Some("\ntest url".into()),
|
||||
download_client_name: Some("\ntest download client".into()),
|
||||
age: Some("\n1".into()),
|
||||
published_date: Some(Utc::now()),
|
||||
message: Some("test message".into()),
|
||||
reason: Some("test reason".into()),
|
||||
source_path: Some("/source/path".into()),
|
||||
source_relative_path: Some("/relative/source/path".into()),
|
||||
path: Some("/path".into()),
|
||||
relative_path: Some("/relative/path".into()),
|
||||
message: Some("\ntest message".into()),
|
||||
reason: Some("\ntest reason".into()),
|
||||
source_path: Some("\n/source/path".into()),
|
||||
source_relative_path: Some("\n/relative/source/path".into()),
|
||||
path: Some("\n/path".into()),
|
||||
relative_path: Some("\n/relative/path".into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user