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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user