From b547e6758c635682c94794e5c13070a73c918203 Mon Sep 17 00:00:00 2001 From: pablu Date: Tue, 2 Jun 2026 18:49:48 +0200 Subject: wip: refactor architecture --- src/widgets/package_metadata.rs | 75 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/widgets/package_metadata.rs (limited to 'src/widgets/package_metadata.rs') diff --git a/src/widgets/package_metadata.rs b/src/widgets/package_metadata.rs new file mode 100644 index 0000000..e4f83bb --- /dev/null +++ b/src/widgets/package_metadata.rs @@ -0,0 +1,75 @@ +use ratatui::{ + Frame, + layout::Rect, + text::{Line, Span}, + widgets::{Block, Borders, Paragraph, Wrap}, +}; + +use crate::{ + app::App, + gentoo::InstalledPackage, + theme::Theme, + widgets::helpers::{homepage_lines, human_size}, +}; + +pub fn render_package_metadata(frame: &mut Frame, area: Rect, pkg: &InstalledPackage) { + let bold_style = Theme::title(); //Style::default().add_modifier(Modifier::BOLD); + let maintainer = Line::from_iter([ + Span::styled("Maintainer: ", bold_style), + Span::raw(pkg.metadata.maintainer.as_deref().unwrap_or("Unknown")), + ]); + + let version = Line::from_iter([ + Span::styled("Version: ", bold_style), + Span::raw(&pkg.version), + ]); + + let repository = Line::from_iter([ + Span::styled("Repository: ", bold_style), + Span::raw(&pkg.metadata.repository), + ]); + + let license = Line::from_iter([ + Span::styled("License: ", bold_style), + Span::raw(pkg.metadata.license.as_deref().unwrap_or("Unknown")), + ]); + + let description = Line::from_iter([ + Span::styled("Description: ", bold_style), + Span::raw(pkg.metadata.description.as_deref().unwrap_or("Unknown")), + ]); + + let size = Line::from_iter([ + Span::styled("Size: ", bold_style), + Span::raw(human_size(pkg.size)), + ]); + + let build_time = Line::from_iter([ + Span::styled("Build time: ", bold_style), + Span::raw(pkg.build_time.to_string()), + ]); + + let mut lines = vec![ + maintainer, + version, + repository, + build_time, + license, + description, + size, + ]; + + let mut homepage = homepage_lines(pkg, bold_style); + lines.append(&mut homepage); + + let paragraph = Paragraph::new(lines) + .block( + Block::default() + .title("Metadata") + .borders(Borders::ALL) + .border_style(Theme::block()), + ) + .wrap(Wrap { trim: false }); + + frame.render_widget(paragraph, area); +} -- cgit 1.3.1