feat(ui): Full Sonarr system tab support
Signed-off-by: Alex Clarke <alex.j.tusa@gmail.com>
This commit is contained in:
@@ -34,14 +34,9 @@ mod collections;
|
||||
mod downloads;
|
||||
mod indexers;
|
||||
mod library;
|
||||
mod radarr_ui_utils;
|
||||
mod root_folders;
|
||||
mod system;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "radarr_ui_tests.rs"]
|
||||
mod radarr_ui_tests;
|
||||
|
||||
pub(super) struct RadarrUi;
|
||||
|
||||
impl DrawUi for RadarrUi {
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
use ratatui::style::{Style, Stylize};
|
||||
use ratatui::widgets::ListItem;
|
||||
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "radarr_ui_utils_tests.rs"]
|
||||
mod radarr_ui_utils_tests;
|
||||
|
||||
pub(super) fn style_log_list_item(list_item: ListItem<'_>, level: String) -> ListItem<'_> {
|
||||
match level.to_lowercase().as_str() {
|
||||
"trace" => list_item.gray(),
|
||||
"debug" => list_item.blue(),
|
||||
"info" => list_item.style(Style::new().default()),
|
||||
"warn" => list_item.style(Style::new().secondary()),
|
||||
"error" => list_item.style(Style::new().failure()),
|
||||
"fatal" => list_item.style(Style::new().failure().bold()),
|
||||
_ => list_item.style(Style::new().default()),
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn convert_to_minutes_hours_days(time: i64) -> String {
|
||||
if time < 60 {
|
||||
if time == 0 {
|
||||
"now".to_owned()
|
||||
} else if time == 1 {
|
||||
format!("{time} minute")
|
||||
} else {
|
||||
format!("{time} minutes")
|
||||
}
|
||||
} else if time / 60 < 24 {
|
||||
let hours = time / 60;
|
||||
if hours == 1 {
|
||||
format!("{hours} hour")
|
||||
} else {
|
||||
format!("{hours} hours")
|
||||
}
|
||||
} else {
|
||||
let days = time / (60 * 24);
|
||||
if days == 1 {
|
||||
format!("{days} day")
|
||||
} else {
|
||||
format!("{days} days")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::super::*;
|
||||
use pretty_assertions::assert_str_eq;
|
||||
use ratatui::prelude::Text;
|
||||
use ratatui::text::Span;
|
||||
|
||||
#[test]
|
||||
fn test_determine_log_style_by_level() {
|
||||
let list_item = ListItem::new(Text::from(Span::raw("test")));
|
||||
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "trace".to_string()),
|
||||
list_item.clone().gray()
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "debug".to_string()),
|
||||
list_item.clone().blue()
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "info".to_string()),
|
||||
list_item.clone().style(Style::new().default())
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "warn".to_string()),
|
||||
list_item.clone().style(Style::new().secondary())
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "error".to_string()),
|
||||
list_item.clone().style(Style::new().failure())
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "fatal".to_string()),
|
||||
list_item.clone().style(Style::new().failure().bold())
|
||||
);
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "".to_string()),
|
||||
list_item.style(Style::new().default())
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_determine_log_style_by_level_case_insensitive() {
|
||||
let list_item = ListItem::new(Text::from(Span::raw("test")));
|
||||
|
||||
assert_eq!(
|
||||
style_log_list_item(list_item.clone(), "TrAcE".to_string()),
|
||||
list_item.gray()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_convert_to_minutes_hours_days_minutes() {
|
||||
assert_str_eq!(convert_to_minutes_hours_days(0), "now");
|
||||
assert_str_eq!(convert_to_minutes_hours_days(1), "1 minute");
|
||||
assert_str_eq!(convert_to_minutes_hours_days(2), "2 minutes");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_convert_to_minutes_hours_days_hours() {
|
||||
assert_str_eq!(convert_to_minutes_hours_days(60), "1 hour");
|
||||
assert_str_eq!(convert_to_minutes_hours_days(120), "2 hours");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_convert_to_minutes_hours_days_days() {
|
||||
assert_str_eq!(convert_to_minutes_hours_days(1440), "1 day");
|
||||
assert_str_eq!(convert_to_minutes_hours_days(2880), "2 days");
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,11 @@ use crate::app::App;
|
||||
use crate::models::radarr_models::RadarrTask;
|
||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||
use crate::models::servarr_models::QueueEvent;
|
||||
use crate::ui::radarr_ui::radarr_ui_utils::{convert_to_minutes_hours_days, style_log_list_item};
|
||||
use crate::ui::radarr_ui::system::system_details_ui::SystemDetailsUi;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::layout_block_top_border;
|
||||
use crate::ui::utils::{
|
||||
convert_to_minutes_hours_days, layout_block_top_border, style_log_list_item,
|
||||
};
|
||||
use crate::ui::widgets::loading_block::LoadingBlock;
|
||||
use crate::ui::widgets::managarr_table::ManagarrTable;
|
||||
use crate::ui::widgets::selectable_list::SelectableList;
|
||||
|
||||
@@ -9,13 +9,12 @@ use crate::app::App;
|
||||
use crate::models::radarr_models::RadarrTask;
|
||||
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS};
|
||||
use crate::models::Route;
|
||||
use crate::ui::radarr_ui::radarr_ui_utils::style_log_list_item;
|
||||
use crate::ui::radarr_ui::system::{
|
||||
draw_queued_events, draw_system_ui_layout, extract_task_props, TASK_TABLE_CONSTRAINTS,
|
||||
TASK_TABLE_HEADERS,
|
||||
};
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, title_block};
|
||||
use crate::ui::utils::{borderless_block, style_log_list_item, title_block};
|
||||
use crate::ui::widgets::confirmation_prompt::ConfirmationPrompt;
|
||||
use crate::ui::widgets::loading_block::LoadingBlock;
|
||||
use crate::ui::widgets::managarr_table::ManagarrTable;
|
||||
|
||||
Reference in New Issue
Block a user