Add more options to Islamic Prayer Times (#95156)
parent
0cf32e74d6
commit
47a75cc064
|
@ -14,7 +14,22 @@ from homeassistant.helpers.selector import (
|
|||
SelectSelectorMode,
|
||||
)
|
||||
|
||||
from .const import CALC_METHODS, CONF_CALC_METHOD, DEFAULT_CALC_METHOD, DOMAIN, NAME
|
||||
from .const import (
|
||||
CALC_METHODS,
|
||||
CONF_CALC_METHOD,
|
||||
CONF_LAT_ADJ_METHOD,
|
||||
CONF_MIDNIGHT_MODE,
|
||||
CONF_SCHOOL,
|
||||
DEFAULT_CALC_METHOD,
|
||||
DEFAULT_LAT_ADJ_METHOD,
|
||||
DEFAULT_MIDNIGHT_MODE,
|
||||
DEFAULT_SCHOOL,
|
||||
DOMAIN,
|
||||
LAT_ADJ_METHODS,
|
||||
MIDNIGHT_MODES,
|
||||
NAME,
|
||||
SCHOOLS,
|
||||
)
|
||||
|
||||
|
||||
class IslamicPrayerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
|
@ -70,6 +85,40 @@ class IslamicPrayerOptionsFlowHandler(config_entries.OptionsFlow):
|
|||
translation_key=CONF_CALC_METHOD,
|
||||
)
|
||||
),
|
||||
vol.Optional(
|
||||
CONF_LAT_ADJ_METHOD,
|
||||
default=self.config_entry.options.get(
|
||||
CONF_LAT_ADJ_METHOD, DEFAULT_LAT_ADJ_METHOD
|
||||
),
|
||||
): SelectSelector(
|
||||
SelectSelectorConfig(
|
||||
options=LAT_ADJ_METHODS,
|
||||
mode=SelectSelectorMode.DROPDOWN,
|
||||
translation_key=CONF_LAT_ADJ_METHOD,
|
||||
)
|
||||
),
|
||||
vol.Optional(
|
||||
CONF_MIDNIGHT_MODE,
|
||||
default=self.config_entry.options.get(
|
||||
CONF_MIDNIGHT_MODE, DEFAULT_MIDNIGHT_MODE
|
||||
),
|
||||
): SelectSelector(
|
||||
SelectSelectorConfig(
|
||||
options=MIDNIGHT_MODES,
|
||||
mode=SelectSelectorMode.DROPDOWN,
|
||||
translation_key=CONF_MIDNIGHT_MODE,
|
||||
)
|
||||
),
|
||||
vol.Optional(
|
||||
CONF_SCHOOL,
|
||||
default=self.config_entry.options.get(CONF_SCHOOL, DEFAULT_SCHOOL),
|
||||
): SelectSelector(
|
||||
SelectSelectorConfig(
|
||||
options=SCHOOLS,
|
||||
mode=SelectSelectorMode.DROPDOWN,
|
||||
translation_key=CONF_SCHOOL,
|
||||
)
|
||||
),
|
||||
}
|
||||
|
||||
return self.async_show_form(step_id="init", data_schema=vol.Schema(options))
|
||||
|
|
|
@ -25,3 +25,15 @@ CALC_METHODS: Final = [
|
|||
"custom",
|
||||
]
|
||||
DEFAULT_CALC_METHOD: Final = "isna"
|
||||
|
||||
CONF_LAT_ADJ_METHOD: Final = "latitude_adjustment_method"
|
||||
LAT_ADJ_METHODS: Final = ["middle_of_the_night", "one_seventh", "angle_based"]
|
||||
DEFAULT_LAT_ADJ_METHOD: Final = "middle_of_the_night"
|
||||
|
||||
CONF_MIDNIGHT_MODE: Final = "midnight_mode"
|
||||
MIDNIGHT_MODES: Final = ["standard", "jafari"]
|
||||
DEFAULT_MIDNIGHT_MODE: Final = "standard"
|
||||
|
||||
CONF_SCHOOL: Final = "school"
|
||||
SCHOOLS: Final = ["shafi", "hanafi"]
|
||||
DEFAULT_SCHOOL: Final = "shafi"
|
||||
|
|
|
@ -14,7 +14,17 @@ from homeassistant.helpers.event import async_call_later, async_track_point_in_t
|
|||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
from .const import CONF_CALC_METHOD, DEFAULT_CALC_METHOD, DOMAIN
|
||||
from .const import (
|
||||
CONF_CALC_METHOD,
|
||||
CONF_LAT_ADJ_METHOD,
|
||||
CONF_MIDNIGHT_MODE,
|
||||
CONF_SCHOOL,
|
||||
DEFAULT_CALC_METHOD,
|
||||
DEFAULT_LAT_ADJ_METHOD,
|
||||
DEFAULT_MIDNIGHT_MODE,
|
||||
DEFAULT_SCHOOL,
|
||||
DOMAIN,
|
||||
)
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
@ -38,12 +48,34 @@ class IslamicPrayerDataUpdateCoordinator(DataUpdateCoordinator[dict[str, datetim
|
|||
"""Return the calculation method."""
|
||||
return self.config_entry.options.get(CONF_CALC_METHOD, DEFAULT_CALC_METHOD)
|
||||
|
||||
@property
|
||||
def lat_adj_method(self) -> str:
|
||||
"""Return the latitude adjustment method."""
|
||||
return str(
|
||||
self.config_entry.options.get(
|
||||
CONF_LAT_ADJ_METHOD, DEFAULT_LAT_ADJ_METHOD
|
||||
).replace("_", " ")
|
||||
)
|
||||
|
||||
@property
|
||||
def midnight_mode(self) -> str:
|
||||
"""Return the midnight mode."""
|
||||
return self.config_entry.options.get(CONF_MIDNIGHT_MODE, DEFAULT_MIDNIGHT_MODE)
|
||||
|
||||
@property
|
||||
def school(self) -> str:
|
||||
"""Return the school."""
|
||||
return self.config_entry.options.get(CONF_SCHOOL, DEFAULT_SCHOOL)
|
||||
|
||||
def get_new_prayer_times(self) -> dict[str, Any]:
|
||||
"""Fetch prayer times for today."""
|
||||
calc = PrayerTimesCalculator(
|
||||
latitude=self.hass.config.latitude,
|
||||
longitude=self.hass.config.longitude,
|
||||
calculation_method=self.calc_method,
|
||||
latitudeAdjustmentMethod=self.lat_adj_method,
|
||||
midnightMode=self.midnight_mode,
|
||||
school=self.school,
|
||||
date=str(dt_util.now().date()),
|
||||
)
|
||||
return cast(dict[str, Any], calc.fetch_prayer_times())
|
||||
|
|
|
@ -15,7 +15,10 @@
|
|||
"step": {
|
||||
"init": {
|
||||
"data": {
|
||||
"calculation_method": "Prayer calculation method"
|
||||
"calculation_method": "Prayer calculation method",
|
||||
"latitude_adjustment_method": "Latitude adjustment method",
|
||||
"midnight_mode": "Midnight mode",
|
||||
"school": "School"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +43,25 @@
|
|||
"moonsighting": "Moonsighting Committee Worldwide",
|
||||
"custom": "Custom"
|
||||
}
|
||||
},
|
||||
"latitude_adjustment_method": {
|
||||
"options": {
|
||||
"middle_of_the_night": "Middle of the night",
|
||||
"one_seventh": "One seventh",
|
||||
"angle_based": "Angle based"
|
||||
}
|
||||
},
|
||||
"midnight_mode": {
|
||||
"options": {
|
||||
"standard": "Standard (mid sunset to sunrise)",
|
||||
"jafari": "Jafari (mid sunset to fajr)"
|
||||
}
|
||||
},
|
||||
"school": {
|
||||
"options": {
|
||||
"shafi": "Shafi",
|
||||
"hanafi": "Hanafi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
|
|
|
@ -3,7 +3,13 @@ import pytest
|
|||
|
||||
from homeassistant import config_entries, data_entry_flow
|
||||
from homeassistant.components import islamic_prayer_times
|
||||
from homeassistant.components.islamic_prayer_times.const import CONF_CALC_METHOD, DOMAIN
|
||||
from homeassistant.components.islamic_prayer_times.const import (
|
||||
CONF_CALC_METHOD,
|
||||
CONF_LAT_ADJ_METHOD,
|
||||
CONF_MIDNIGHT_MODE,
|
||||
CONF_SCHOOL,
|
||||
DOMAIN,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
@ -44,11 +50,19 @@ async def test_options(hass: HomeAssistant) -> None:
|
|||
assert result["step_id"] == "init"
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"], user_input={CONF_CALC_METHOD: "makkah"}
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONF_CALC_METHOD: "makkah",
|
||||
CONF_LAT_ADJ_METHOD: "one_seventh",
|
||||
CONF_SCHOOL: "hanafi",
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
||||
assert result["data"][CONF_CALC_METHOD] == "makkah"
|
||||
assert result["data"][CONF_LAT_ADJ_METHOD] == "one_seventh"
|
||||
assert result["data"][CONF_MIDNIGHT_MODE] == "standard"
|
||||
assert result["data"][CONF_SCHOOL] == "hanafi"
|
||||
|
||||
|
||||
async def test_integration_already_configured(hass: HomeAssistant) -> None:
|
||||
|
|
Loading…
Reference in New Issue