From 0b0204dada86e6909e8c9618ae61abc51ae62910 Mon Sep 17 00:00:00 2001 From: shuki Date: Fri, 6 Mar 2026 16:46:10 +0200 Subject: [PATCH] Format log filenames as readable date/time columns in logs screen Show '2026-03-06' and '14:45:16' instead of 'gniza-20260306-144516.log'. Co-Authored-By: Claude Opus 4.6 --- tui/screens/logs.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tui/screens/logs.py b/tui/screens/logs.py index 4fe2a4a..506cd18 100644 --- a/tui/screens/logs.py +++ b/tui/screens/logs.py @@ -1,4 +1,7 @@ +import re +from datetime import datetime from pathlib import Path + from textual.app import ComposeResult from textual.screen import Screen from textual.widgets import Header, Footer, Static, Button, DataTable, RichLog @@ -7,6 +10,17 @@ from textual.containers import Vertical, Horizontal from tui.config import LOG_DIR +_LOG_NAME_RE = re.compile(r"gniza-(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})\.log") + + +def _format_log_name(name: str) -> tuple[str, str]: + """Format 'gniza-20260306-144516.log' as ('2026-03-06', '14:45:16').""" + m = _LOG_NAME_RE.match(name) + if m: + return f"{m[1]}-{m[2]}-{m[3]}", f"{m[4]}:{m[5]}:{m[6]}" + return name, "" + + class LogsScreen(Screen): BINDINGS = [("escape", "go_back", "Back")] @@ -29,7 +43,7 @@ class LogsScreen(Screen): def _refresh_table(self) -> None: table = self.query_one("#logs-table", DataTable) table.clear(columns=True) - table.add_columns("File", "Size") + table.add_columns("Date", "Time", "Size") log_dir = Path(LOG_DIR) if not log_dir.is_dir(): return @@ -42,7 +56,8 @@ class LogsScreen(Screen): size_str = f"{size / 1024:.1f} KB" else: size_str = f"{size} B" - table.add_row(f.name, size_str, key=f.name) + date_str, time_str = _format_log_name(f.name) + table.add_row(date_str, time_str, size_str, key=f.name) def _selected_log(self) -> str | None: table = self.query_one("#logs-table", DataTable)