| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # -*- coding: utf-8 -*-
- """
- Datenmodelle fuer das Calendar-Plugin.
- Definiert CalendarEvent, CalendarInfo, NotificationRecord und EventStatus.
- """
- from dataclasses import dataclass, field
- from datetime import datetime
- from enum import Enum
- class EventStatus(Enum):
- """Status eines Kalender-Events."""
- CONFIRMED = "confirmed"
- TENTATIVE = "tentative"
- CANCELLED = "cancelled"
- @dataclass
- class CalendarEvent:
- """
- Ein Kalender-Termin.
- Attributes:
- event_id: Eindeutige ID vom Provider
- calendar_id: Zugehoeriger Kalender-Key
- provider_name: Provider-Schluessel (outlook_firma, google_firma, etc.)
- title: Titel des Termins
- start: Startzeitpunkt
- end: Endzeitpunkt
- all_day: Ganztaegiger Termin
- location: Ort
- description: Beschreibung
- attendees: Teilnehmer (Namen/Emails)
- organizer: Organisator
- status: Terminstatus
- reminder_minutes: Erinnerung in Minuten vor Start
- raw_data: Original-Daten vom Provider
- """
- event_id: str
- calendar_id: str
- provider_name: str
- title: str
- start: datetime
- end: datetime
- all_day: bool = False
- location: str = ""
- description: str = ""
- attendees: list[str] = field(default_factory=list)
- organizer: str = ""
- status: EventStatus = EventStatus.CONFIRMED
- reminder_minutes: int = 15
- raw_data: dict = field(default_factory=dict)
- @property
- def duration(self) -> int:
- """Dauer in Minuten."""
- delta = self.end - self.start
- return int(delta.total_seconds() / 60)
- @property
- def is_upcoming(self) -> bool:
- """Liegt der Termin in der Zukunft?"""
- return self.start > datetime.now()
- @property
- def is_ongoing(self) -> bool:
- """Findet der Termin gerade statt?"""
- now = datetime.now()
- return self.start <= now <= self.end
- @dataclass
- class CalendarInfo:
- """
- Informationen ueber einen einzelnen Kalender.
- Attributes:
- calendar_id: ID beim Provider
- provider_name: Provider-Schluessel aus Config
- display_name: Anzeigename
- readonly: Nur lesbar
- is_global: Gilt fuer alle Satellites
- """
- calendar_id: str
- provider_name: str
- display_name: str
- readonly: bool = True
- is_global: bool = False
- @dataclass
- class NotificationRecord:
- """
- Aufzeichnung einer gesendeten Benachrichtigung.
- Attributes:
- event_id: Event-ID
- notification_type: "reminder" oder "start"
- sent_at: Zeitpunkt der Benachrichtigung
- satellite_ids: Betroffene Satellites
- """
- event_id: str
- notification_type: str
- sent_at: datetime
- satellite_ids: list[str] = field(default_factory=list)
|