forked from genewildish/Mainline
78 lines
1.6 KiB
Python
78 lines
1.6 KiB
Python
"""
|
|
Event types for the mainline application.
|
|
Defines the core events that flow through the system.
|
|
These types support a future migration to an event-driven architecture.
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
from enum import Enum, auto
|
|
|
|
|
|
class EventType(Enum):
|
|
"""Core event types in the mainline application."""
|
|
|
|
NEW_HEADLINE = auto()
|
|
FRAME_TICK = auto()
|
|
MIC_LEVEL = auto()
|
|
NTFY_MESSAGE = auto()
|
|
STREAM_START = auto()
|
|
STREAM_END = auto()
|
|
FIGMENT_TRIGGER = auto()
|
|
|
|
|
|
@dataclass
|
|
class HeadlineEvent:
|
|
"""Event emitted when a new headline is ready for display."""
|
|
|
|
title: str
|
|
source: str
|
|
timestamp: str
|
|
language: str | None = None
|
|
|
|
|
|
@dataclass
|
|
class FrameTickEvent:
|
|
"""Event emitted on each render frame."""
|
|
|
|
frame_number: int
|
|
timestamp: datetime
|
|
delta_seconds: float
|
|
|
|
|
|
@dataclass
|
|
class MicLevelEvent:
|
|
"""Event emitted when microphone level changes significantly."""
|
|
|
|
db_level: float
|
|
excess_above_threshold: float
|
|
timestamp: datetime
|
|
|
|
|
|
@dataclass
|
|
class NtfyMessageEvent:
|
|
"""Event emitted when an ntfy message is received."""
|
|
|
|
title: str
|
|
body: str
|
|
message_id: str | None = None
|
|
timestamp: datetime | None = None
|
|
|
|
|
|
@dataclass
|
|
class StreamEvent:
|
|
"""Event emitted when stream starts or ends."""
|
|
|
|
event_type: EventType
|
|
headline_count: int = 0
|
|
timestamp: datetime | None = None
|
|
|
|
|
|
@dataclass
|
|
class FigmentTriggerEvent:
|
|
"""Event emitted when a figment is triggered."""
|
|
|
|
action: str
|
|
value: float | str | None = None
|
|
timestamp: datetime | None = None
|