treewide: fix various UI bugs; optimize crypto dependencies & format
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: If8fe8b38c1d9c4fecd40ff71f88d2ae06a6a6964
This commit is contained in:
parent
764aafa88d
commit
3ccddce7fd
178 changed files with 58342 additions and 54241 deletions
|
|
@ -1,85 +1,84 @@
|
|||
use ratatui::Frame;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::text::Span;
|
||||
use ratatui::widgets::{Block, Borders, Cell, Row, Table};
|
||||
use ratatui::{
|
||||
Frame,
|
||||
layout::Rect,
|
||||
style::{Color, Modifier, Style},
|
||||
text::Span,
|
||||
widgets::{Block, Borders, Cell, Row, Table},
|
||||
};
|
||||
|
||||
use super::format_date;
|
||||
use crate::app::AppState;
|
||||
|
||||
/// Return a color for an audit action string.
|
||||
fn action_color(action: &str) -> Color {
|
||||
match action {
|
||||
"imported" | "import" | "created" => Color::Green,
|
||||
"deleted" | "delete" | "removed" => Color::Red,
|
||||
"tagged" | "tag_added" => Color::Cyan,
|
||||
"untagged" | "tag_removed" => Color::Yellow,
|
||||
"updated" | "modified" | "edited" => Color::Blue,
|
||||
"scanned" | "scan" => Color::Magenta,
|
||||
_ => Color::White,
|
||||
}
|
||||
match action {
|
||||
"imported" | "import" | "created" => Color::Green,
|
||||
"deleted" | "delete" | "removed" => Color::Red,
|
||||
"tagged" | "tag_added" => Color::Cyan,
|
||||
"untagged" | "tag_removed" => Color::Yellow,
|
||||
"updated" | "modified" | "edited" => Color::Blue,
|
||||
"scanned" | "scan" => Color::Magenta,
|
||||
_ => Color::White,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(f: &mut Frame, state: &AppState, area: Rect) {
|
||||
let header = Row::new(vec!["Action", "Media ID", "Details", "Date"]).style(
|
||||
let header = Row::new(vec!["Action", "Media ID", "Details", "Date"]).style(
|
||||
Style::default()
|
||||
.fg(Color::Yellow)
|
||||
.add_modifier(Modifier::BOLD),
|
||||
);
|
||||
|
||||
let rows: Vec<Row> = state
|
||||
.audit_log
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, entry)| {
|
||||
let style = if Some(i) == state.audit_selected {
|
||||
Style::default().fg(Color::Black).bg(Color::Cyan)
|
||||
} else {
|
||||
Style::default()
|
||||
.fg(Color::Yellow)
|
||||
.add_modifier(Modifier::BOLD),
|
||||
);
|
||||
};
|
||||
|
||||
let rows: Vec<Row> = state
|
||||
.audit_log
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, entry)| {
|
||||
let style = if Some(i) == state.audit_selected {
|
||||
Style::default().fg(Color::Black).bg(Color::Cyan)
|
||||
} else {
|
||||
Style::default()
|
||||
};
|
||||
let color = action_color(&entry.action);
|
||||
let action_cell = Cell::from(Span::styled(
|
||||
entry.action.clone(),
|
||||
Style::default().fg(color).add_modifier(Modifier::BOLD),
|
||||
));
|
||||
|
||||
let color = action_color(&entry.action);
|
||||
let action_cell = Cell::from(Span::styled(
|
||||
entry.action.clone(),
|
||||
Style::default().fg(color).add_modifier(Modifier::BOLD),
|
||||
));
|
||||
|
||||
// Truncate media ID for display
|
||||
let media_display = entry
|
||||
.media_id
|
||||
.as_deref()
|
||||
.map(|id| {
|
||||
if id.len() > 12 {
|
||||
format!("{}...", &id[..12])
|
||||
} else {
|
||||
id.to_string()
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|| "-".into());
|
||||
|
||||
Row::new(vec![
|
||||
action_cell,
|
||||
Cell::from(media_display),
|
||||
Cell::from(entry.details.clone().unwrap_or_else(|| "-".into())),
|
||||
Cell::from(format_date(&entry.timestamp).to_string()),
|
||||
])
|
||||
.style(style)
|
||||
// Truncate media ID for display
|
||||
let media_display = entry
|
||||
.media_id
|
||||
.as_deref()
|
||||
.map(|id| {
|
||||
if id.len() > 12 {
|
||||
format!("{}...", &id[..12])
|
||||
} else {
|
||||
id.to_string()
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
.unwrap_or_else(|| "-".into());
|
||||
|
||||
let title = format!(" Audit Log ({}) ", state.audit_log.len());
|
||||
Row::new(vec![
|
||||
action_cell,
|
||||
Cell::from(media_display),
|
||||
Cell::from(entry.details.clone().unwrap_or_else(|| "-".into())),
|
||||
Cell::from(format_date(&entry.timestamp).to_string()),
|
||||
])
|
||||
.style(style)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let table = Table::new(
|
||||
rows,
|
||||
[
|
||||
ratatui::layout::Constraint::Percentage(18),
|
||||
ratatui::layout::Constraint::Percentage(22),
|
||||
ratatui::layout::Constraint::Percentage(40),
|
||||
ratatui::layout::Constraint::Percentage(20),
|
||||
],
|
||||
)
|
||||
.header(header)
|
||||
.block(Block::default().borders(Borders::ALL).title(title));
|
||||
let title = format!(" Audit Log ({}) ", state.audit_log.len());
|
||||
|
||||
f.render_widget(table, area);
|
||||
let table = Table::new(rows, [
|
||||
ratatui::layout::Constraint::Percentage(18),
|
||||
ratatui::layout::Constraint::Percentage(22),
|
||||
ratatui::layout::Constraint::Percentage(40),
|
||||
ratatui::layout::Constraint::Percentage(20),
|
||||
])
|
||||
.header(header)
|
||||
.block(Block::default().borders(Borders::ALL).title(title));
|
||||
|
||||
f.render_widget(table, area);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue