mirror of
https://github.com/NohamR/OqeeAdWatch.git
synced 2026-01-10 00:08:17 +00:00
63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
"""Text output utilities for the visualizer."""
|
|
|
|
from typing import Dict
|
|
from .utils import format_duration, human_ts, CHANNELS_DATA, get_channel_name
|
|
|
|
|
|
def print_stats(channel_id: str, stats: Dict) -> None:
|
|
"""Print formatted ad break statistics to the console."""
|
|
if not stats:
|
|
print(f"No ad breaks recorded for channel '{channel_id}'.")
|
|
return
|
|
|
|
max_break_duration, max_break_row = stats["max_break"]
|
|
|
|
print("\n=== Channel overview ===")
|
|
print(f"Channel ID : {channel_id}")
|
|
print(f"Total ad breaks : {stats['count']}")
|
|
print(f"First ad start : {human_ts(stats['first_start'])}")
|
|
print(f"Latest ad end : {human_ts(stats['last_end'])}")
|
|
print(f"Total ad duration : {format_duration(stats['total_duration'])}")
|
|
print(f"Mean break length : {format_duration(int(stats['mean_duration']))}")
|
|
print(f"Median break len : {format_duration(int(stats['median_duration']))}")
|
|
print(
|
|
"Longest break : "
|
|
f"{format_duration(max_break_duration)} "
|
|
f"({human_ts(max_break_row[1])} -> {human_ts(max_break_row[2])})"
|
|
)
|
|
|
|
print("\n=== Per-day breakdown ===")
|
|
print("Date | Breaks | Total duration | Avg duration")
|
|
print("------------+--------+----------------+-------------")
|
|
for entry in stats["daily_summary"]:
|
|
print(
|
|
f"{entry['date']} | "
|
|
f"{entry['count']:6d} | "
|
|
f"{format_duration(entry['total']).rjust(14)} | "
|
|
f"{format_duration(int(entry['avg'])).rjust(11)}"
|
|
)
|
|
|
|
|
|
def build_overview_text(
|
|
channel_id: str, stats: Dict, channels_data: Dict = CHANNELS_DATA
|
|
) -> str:
|
|
"""Build a multi-line string with channel overview stats."""
|
|
if not stats:
|
|
return ""
|
|
max_break_duration, max_break_row = stats["max_break"]
|
|
|
|
channel_name = get_channel_name(channel_id, channels_data)
|
|
|
|
lines = [
|
|
f"Channel: {channel_name} ({channel_id})",
|
|
f"Total ad breaks: {stats['count']}",
|
|
f"First ad start: {human_ts(stats['first_start'])}",
|
|
f"Latest ad end: {human_ts(stats['last_end'])}",
|
|
f"Total ad duration: {format_duration(stats['total_duration'])}",
|
|
f"Mean break length: {format_duration(int(stats['mean_duration']))}",
|
|
f"Median break len: {format_duration(int(stats['median_duration']))}",
|
|
f"Longest break: {format_duration(max_break_duration)}",
|
|
f" ({human_ts(max_break_row[1])} → {human_ts(max_break_row[2])})",
|
|
]
|
|
return "\n".join(lines)
|