use super::{EMPTY_WORKTREE, FILES_HEAD, NO_WORKTREE, NOT_ANSWERED_FILES, TRUNCATED};
use crate::reply::files::{Files, Preview};
use crate::ui::theme;
pub(super) fn half(ui: &mut egui::Ui, files: Option<&Files>) {
theme::paint::section(ui, FILES_HEAD);
let Some(answer) = files else {
ui.label(NOT_ANSWERED_FILES);
return;
};
ui.horizontal_wrapped(|ui| {
if let Some(dir) = &answer.working_dir {
ui.colored_label(theme::INK_WEAK, format!("working in {dir}"));
}
match &answer.listing {
None => {
ui.label(NO_WORKTREE);
}
Some(listing) if listing.rows.is_empty() => {
ui.label(EMPTY_WORKTREE);
}
Some(listing) => {
for row in &listing.rows {
ui.label(entry(row));
}
if listing.truncated {
ui.colored_label(theme::accent(theme::State::Annotation), TRUNCATED);
}
}
}
});
if let Some(preview) = &answer.preview {
ui.label(egui::RichText::new(previewed(preview)).monospace());
}
}
pub fn entry(row: &crate::reply::files::FileRow) -> String {
if row.dir {
format!("{}/", row.path)
} else {
format!("{} {} B", row.path, row.size)
}
}
pub fn previewed(preview: &Preview) -> String {
match preview {
Preview::Text(text) => text.clone(),
Preview::Truncated { text, size } => format!("{text}\n… {size} bytes in all"),
Preview::Binary { size } => format!("binary — {size} bytes"),
Preview::Unknown(word) => format!("a {word:?} preview, which this seat cannot show"),
}
}