by-request fixes
All checks were successful
CI / build (push) Successful in 58s
CI / checks (push) Successful in 1m16s
CI / build-nixpkgs (push) Successful in 38s

This commit is contained in:
Robin Appelman 2025-08-16 15:22:25 +02:00
commit 2631696ddd
3 changed files with 34 additions and 21 deletions

View file

@ -1,6 +1,6 @@
use crate::app::Filter;
use crate::logfile::logline::{format_time, LogLine};
use crate::ui::state::GroupedLogGrouping;
use crate::ui::state::DistinctLogGrouping;
use crate::ui::style::TABLE_HEADER_STYLE;
use crate::ui::table::{ScrollbarTable, ScrollbarTableState};
use crate::ui::UI_HEADER_SIZE;
@ -13,13 +13,13 @@ use ratatui::widgets::{Cell, Paragraph, Row, Wrap};
pub struct LogsByIdentifier<'a> {
lines: &'a [&'a LogLine<'a>],
filter: &'a Filter,
grouping: GroupedLogGrouping,
grouping: DistinctLogGrouping,
}
pub fn logs_by_identifier<'a>(
lines: &'a [&'a LogLine<'a>],
filter: &'a Filter,
grouping: GroupedLogGrouping,
grouping: DistinctLogGrouping,
) -> LogsByIdentifier<'a> {
LogsByIdentifier {
lines,
@ -45,7 +45,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
.unwrap_or(self.lines.first().unwrap());
let par = match self.grouping {
GroupedLogGrouping::Message => Paragraph::new(format!(
DistinctLogGrouping::Message => Paragraph::new(format!(
"{}{}{}\n\n{} from {} - Nextcloud {}",
line.exception
.as_ref()
@ -58,7 +58,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
line.version,
))
.wrap(Wrap::default()),
GroupedLogGrouping::Request => Paragraph::new(format!(
DistinctLogGrouping::Request => Paragraph::new(format!(
"{} {}\n\n {} from {} by {} - Nextcloud {}",
line.method,
line.url,
@ -71,14 +71,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
};
let header = match self.grouping {
GroupedLogGrouping::Message => [
DistinctLogGrouping::Message => [
Text::from("Remote"),
Text::from("Method"),
Text::from("Url"),
Text::from("Request Id"),
Text::from("Time").alignment(Alignment::Right),
],
GroupedLogGrouping::Request => [
DistinctLogGrouping::Request => [
Text::from("Level"),
Text::from("App"),
Text::from("Message"),
@ -93,14 +93,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
.height(1);
let widths = match self.grouping {
GroupedLogGrouping::Message => [
DistinctLogGrouping::Message => [
Constraint::Min(16),
Constraint::Min(8),
Constraint::Percentage(100),
Constraint::Min(25),
Constraint::Length(27),
],
GroupedLogGrouping::Request => [
DistinctLogGrouping::Request => [
Constraint::Min(16),
Constraint::Min(8),
Constraint::Percentage(100),
@ -130,17 +130,17 @@ impl StatefulWidget for LogsByIdentifier<'_> {
}
}
fn log_row<'a>(line: &'a LogLine<'a>, grouping: GroupedLogGrouping, is_in_view: bool) -> Row<'a> {
fn log_row<'a>(line: &'a LogLine<'a>, grouping: DistinctLogGrouping, is_in_view: bool) -> Row<'a> {
if is_in_view {
match grouping {
GroupedLogGrouping::Message => Row::new([
DistinctLogGrouping::Message => Row::new([
Text::from(line.remote.as_str()),
Text::from(line.method.as_str()),
Text::from(line.url.as_ref()),
Text::from(line.request_id.as_str()),
Text::from(format_time(line.time)).alignment(Alignment::Right),
]),
GroupedLogGrouping::Request => Row::new([
DistinctLogGrouping::Request => Row::new([
Text::from(line.level.as_str()),
Text::from(line.app.as_ref()),
Text::from(line.message.as_ref()),

View file

@ -60,6 +60,9 @@ fn help(page: UiPage) -> &'static str {
UiPage::DistinctLogs => {
"«Q» Exit - «F» Filter - «Esc» Back - «C» Copy log line - «G» Group By - «R» Show logs for request"
}
UiPage::ByRequest => {
"«Q» Exit - «F» Filter - «Esc» Back - «C» Copy log line"
}
UiPage::Log => {
"«Q» Exit - «Esc» Back - «R» Toggle raw - «C» Copy log line - «R» Show logs for request"
}

View file

@ -91,7 +91,7 @@ impl<'a> GroupListState<'a> {
UiPage::DistinctLogs => UiState::Distinct(DistinctLogsState {
table_state: ScrollbarTableState::new(line_count + 1),
lines: result.lines.lines,
grouping: GroupedLogGrouping::Message,
grouping: DistinctLogGrouping::Message,
previous: Box::new(self.into()),
filter: Filter::default(),
mode: Mode::Normal,
@ -196,7 +196,7 @@ impl<'a> GroupState<'a> {
previous: Box::new(self.into()),
filter: Filter::default(),
mode: Mode::Normal,
grouping: GroupedLogGrouping::Message,
grouping: DistinctLogGrouping::Message,
})
}
}
@ -207,8 +207,8 @@ impl PartialEq for GroupState<'_> {
}
}
#[derive(Clone, Copy)]
pub enum GroupedLogGrouping {
#[derive(Clone, Copy, Eq, PartialEq)]
pub enum DistinctLogGrouping {
Message,
Request,
}
@ -219,7 +219,7 @@ pub struct DistinctLogsState<'a> {
pub previous: Box<UiState<'a>>,
pub filter: Filter,
mode: Mode,
pub grouping: GroupedLogGrouping,
pub grouping: DistinctLogGrouping,
}
impl<'a> DistinctLogsState<'a> {
@ -292,7 +292,7 @@ impl<'a> DistinctLogsState<'a> {
filter: Filter::default(),
table_state,
previous: Box::new(self.into()),
grouping: GroupedLogGrouping::Request,
grouping: DistinctLogGrouping::Request,
})
}
}
@ -332,7 +332,7 @@ impl<'a> LogState<'a> {
filter: Filter::default(),
table_state,
previous: Box::new(self.into()),
grouping: GroupedLogGrouping::Request,
grouping: DistinctLogGrouping::Request,
})
}
}
@ -364,7 +364,14 @@ impl<'a> UiState<'a> {
UiState::Quit | UiState::GroupList(_) => UiPage::GroupList,
UiState::Group(_) => UiPage::Group,
UiState::GroupByMenu(_) => UiPage::Group, // todo
UiState::Distinct(_) => UiPage::DistinctLogs,
UiState::Distinct(DistinctLogsState {
grouping: DistinctLogGrouping::Message,
..
}) => UiPage::DistinctLogs,
UiState::Distinct(DistinctLogsState {
grouping: DistinctLogGrouping::Request,
..
}) => UiPage::ByRequest,
UiState::Log(_) => UiPage::Log,
UiState::Errors(_) => UiPage::Errors,
UiState::Error(_) => UiPage::Error,
@ -596,7 +603,9 @@ impl<'a> UiState<'a> {
copy_osc(raw);
(false, UiState::Log(state))
}
(UiState::Distinct(state), UiEvent::ByRequest) => {
(UiState::Distinct(state), UiEvent::ByRequest)
if state.grouping == DistinctLogGrouping::Message =>
{
let selected = state.selected();
(true, state.by_request(selected, app))
}
@ -681,6 +690,7 @@ pub enum UiPage {
GroupList,
Group,
DistinctLogs,
ByRequest,
Log,
Errors,
Error,