Skip to content

Commit

Permalink
Fix calendar timezone issue
Browse files Browse the repository at this point in the history
  • Loading branch information
Jurkash committed Jul 16, 2024
1 parent d0ec2ab commit 3ac9f31
Showing 4 changed files with 111 additions and 81 deletions.
23 changes: 2 additions & 21 deletions custom_components/loe_outages/calendar.py
Original file line number Diff line number Diff line change
@@ -52,16 +52,7 @@ def event(self) -> CalendarEvent | None:
"""Return the current or next upcoming event or None."""
now = dt_utils.now()
LOGGER.debug("Getting current event for %s", now)
interval = self.coordinator.get_event_at(now)
if not interval:
return None

return CalendarEvent(
summary=interval.state,
start=interval.startTime,
end=interval.endTime,
description=interval.state,
)
return self.coordinator.get_calendar_at(now)

async def async_get_events(
self,
@@ -71,14 +62,4 @@ async def async_get_events(
) -> list[CalendarEvent]:
"""Return calendar events within a datetime range."""
LOGGER.debug('Getting all events between "%s" -> "%s"', start_date, end_date)
intervals = self.coordinator.get_events_between(start_date, end_date)

return [
CalendarEvent(
summary=interval.state,
start=interval.startTime,
end=interval.endTime,
description=interval.state,
)
for interval in intervals
]
return self.coordinator.get_calendar_between(start_date, end_date)
52 changes: 50 additions & 2 deletions custom_components/loe_outages/coordinator.py
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import logging

from .models import Interval
from homeassistant.components.calendar import CalendarEvent
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.translation import async_get_translations
@@ -141,7 +142,7 @@ def current_state(self) -> str:
def get_event_at(self, at: datetime.datetime) -> Interval:
"""Get the current event."""
event = self.api.get_current_event(at)
return self._get_calendar_event(event, translate=False)
return self._get_interval_event(event, translate=False)

def get_events_between(
self,
@@ -150,13 +151,31 @@ def get_events_between(
*,
translate: bool = True,
) -> list[Interval]:
"""Get all events."""
events = self.api.get_events(start_date, end_date)
return [
self._get_interval_event(event, translate=translate) for event in events
]

def get_calendar_at(self, at: datetime.datetime) -> CalendarEvent:
"""Get the current event."""
event = self.api.get_current_event(at)
return self._get_calendar_event(event, translate=False)

def get_calendar_between(
self,
start_date: datetime.datetime,
end_date: datetime.datetime,
*,
translate: bool = True,
) -> list[CalendarEvent]:
"""Get all events."""
events = self.api.get_events(start_date, end_date)
return [
self._get_calendar_event(event, translate=translate) for event in events
]

def _get_calendar_event(
def _get_interval_event(
self,
event: dict | None,
*,
@@ -184,6 +203,35 @@ def _get_calendar_event(
endTime=event_end,
)

def _get_calendar_event(
self,
event: dict | None,
*,
translate: bool = True,
) -> CalendarEvent:
"""Transform an event into a Inteval."""
if not event:
return None

event_summary = event["state"]
translated_summary = self.event_name_map.get(event_summary)
event_start = dt_utils.as_local(event["startTime"])
event_end = dt_utils.as_local(event["endTime"])

LOGGER.debug(
"Transforming event: %s (%s -> %s)",
event_summary,
event_start,
event_end,
)

return CalendarEvent(
summary=translated_summary if translate else event_summary,
start=event_start,
end=event_end,
description=event_summary,
)

def _event_to_state(self, event: Interval | None) -> str:
state = event.state if event else None
return {
116 changes: 58 additions & 58 deletions custom_components/loe_outages/translations/uk.json
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
{
"title": "ЛОЕ Відключення",
"config": {
"step": {
"user": {
"title": "Налаштування ЛОЕ Відключення",
"description": "Оберіть свою групу:",
"data": {
"group": "Група"
},
"data_description": {
"group": "Знайдіть свою групу на: https://poweron.loe.lviv.ua/shedule-off"
}
"title": "ЛОЕ Відключення",
"config": {
"step": {
"user": {
"title": "Налаштування ЛОЕ Відключення",
"description": "Оберіть свою групу:",
"data": {
"group": "Група"
},
"data_description": {
"group": "Знайдіть свою групу на: https://poweron.loe.lviv.ua/shedule-off"
}
}
},
"options": {
"step": {
"init": {
"title": "Опції ЛОЕ Відключення",
"description": "Оберіть іншу групу:",
"data": {
"group": "Група"
},
"data_description": {
"group": "Знайдіть свою групу на: https://poweron.loe.lviv.ua/shedule-off"
}
}
},
"options": {
"step": {
"init": {
"title": "Опції ЛОЕ Відключення",
"description": "Оберіть іншу групу:",
"data": {
"group": "Група"
},
"data_description": {
"group": "Знайдіть свою групу на: https://poweron.loe.lviv.ua/shedule-off"
}
}
},
"device": {
"loe_outages": {
"name": "ЛОЕ Група {group}"
}
},
"entity": {
}
},
"device": {
"loe_outages": {
"name": "ЛОЕ Група {group}"
}
},
"entity": {
"calendar": {
"calendar": {
"calendar": {
"name": "Графік відключень",
"state_attributes": {
"message": {
"name": "Підключення",
"state": {
"poweroff": "Відключення"
}
"name": "Графік відключень",
"state_attributes": {
"message": {
"name": "Підключення",
"state": {
"poweroff": "Відключення"
}
}
}
},
"sensor": {
"electricity": {
"name": "Електрика",
"state": {
"poweron": "Заживлено",
"poweroff": "Відключення"
}
},
"next_outage": {
"name": "Наступне відключення"
},
"next_connectivity": {
"name": "Наступне харчування"
}
}
},
"common": {
"electricity_on": "Заживлено",
"electricity_off": "Відключення"
"sensor": {
"electricity": {
"name": "Електрика",
"state": {
"poweron": "Заживлено",
"poweroff": "Відключення"
}
},
"next_outage": {
"name": "Наступне відключення"
},
"next_connectivity": {
"name": "Наступне заживлення"
}
}
}
},
"common": {
"electricity_on": "Заживлено",
"electricity_off": "Відключення"
}
}
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
homeassistant==2024.7.0
pip>=21.0,<24.2
pre-commit>=3.7.1
pytz==2024.1
ruff==0.5.0

0 comments on commit 3ac9f31

Please sign in to comment.