1 """Calendar platform for a Epic Games Store."""
3 from __future__
import annotations
5 from collections
import namedtuple
6 from datetime
import datetime
16 from .const
import DOMAIN, CalendarType
17 from .coordinator
import EGSCalendarUpdateCoordinator
19 DateRange = namedtuple(
"DateRange", [
"start",
"end"])
25 async_add_entities: AddEntitiesCallback,
27 """Set up the local calendar platform."""
28 coordinator: EGSCalendarUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
31 EGSCalendar(coordinator, entry.entry_id, CalendarType.FREE),
32 EGSCalendar(coordinator, entry.entry_id, CalendarType.DISCOUNT),
38 """A calendar entity by Epic Games Store."""
40 _attr_has_entity_name =
True
44 coordinator: EGSCalendarUpdateCoordinator,
46 cal_type: CalendarType,
48 """Initialize EGSCalendar."""
54 entry_type=DeviceEntryType.SERVICE,
55 identifiers={(DOMAIN, config_entry_id)},
56 manufacturer=
"Epic Games Store",
57 name=
"Epic Games Store",
61 def event(self) -> CalendarEvent | None:
62 """Return the next upcoming event."""
63 if event := self.coordinator.data[self.
_cal_type_cal_type]:
68 self, hass: HomeAssistant, start_date: datetime, end_date: datetime
69 ) -> list[CalendarEvent]:
70 """Get all events in a specific time frame."""
73 DateRange(start=game[
"discount_start_at"], end=game[
"discount_end_at"]),
74 DateRange(start=start_date, end=end_date),
76 self.coordinator.data[self.
_cal_type_cal_type],
82 """Return a CalendarEvent from an API event."""
84 summary=event[
"title"],
85 start=event[
"discount_start_at"],
86 end=event[
"discount_end_at"],
87 description=f
"{event['description']}\n\n{event['url']}",
92 """Return a CalendarEvent from an API event."""
93 latest_start =
max(range1.start, range2.start)
94 earliest_end =
min(range1.end, range2.end)
95 delta = (earliest_end - latest_start).days + 1
96 overlap =
max(0, delta)
CalendarEvent|None event(self)
None __init__(self, EGSCalendarUpdateCoordinator coordinator, str config_entry_id, CalendarType cal_type)
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
bool _are_date_range_overlapping(DateRange range1, DateRange range2)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
CalendarEvent _get_calendar_event(dict[str, Any] event)