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 <noreply@anthropic.com>
This commit is contained in:
shuki
2026-03-06 16:46:10 +02:00
parent f9f7ae6ad3
commit 0b0204dada

View File

@@ -1,4 +1,7 @@
import re
from datetime import datetime
from pathlib import Path from pathlib import Path
from textual.app import ComposeResult from textual.app import ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Static, Button, DataTable, RichLog 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 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): class LogsScreen(Screen):
BINDINGS = [("escape", "go_back", "Back")] BINDINGS = [("escape", "go_back", "Back")]
@@ -29,7 +43,7 @@ class LogsScreen(Screen):
def _refresh_table(self) -> None: def _refresh_table(self) -> None:
table = self.query_one("#logs-table", DataTable) table = self.query_one("#logs-table", DataTable)
table.clear(columns=True) table.clear(columns=True)
table.add_columns("File", "Size") table.add_columns("Date", "Time", "Size")
log_dir = Path(LOG_DIR) log_dir = Path(LOG_DIR)
if not log_dir.is_dir(): if not log_dir.is_dir():
return return
@@ -42,7 +56,8 @@ class LogsScreen(Screen):
size_str = f"{size / 1024:.1f} KB" size_str = f"{size / 1024:.1f} KB"
else: else:
size_str = f"{size} B" 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: def _selected_log(self) -> str | None:
table = self.query_one("#logs-table", DataTable) table = self.query_one("#logs-table", DataTable)