diff --git a/homeassistant/components/islamic_prayer_times/config_flow.py b/homeassistant/components/islamic_prayer_times/config_flow.py index 597d67c19f4..333b6b36c87 100644 --- a/homeassistant/components/islamic_prayer_times/config_flow.py +++ b/homeassistant/components/islamic_prayer_times/config_flow.py @@ -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)) diff --git a/homeassistant/components/islamic_prayer_times/const.py b/homeassistant/components/islamic_prayer_times/const.py index 67fac6c9261..926651738a2 100644 --- a/homeassistant/components/islamic_prayer_times/const.py +++ b/homeassistant/components/islamic_prayer_times/const.py @@ -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" diff --git a/homeassistant/components/islamic_prayer_times/coordinator.py b/homeassistant/components/islamic_prayer_times/coordinator.py index 30362c763da..161ce7b2644 100644 --- a/homeassistant/components/islamic_prayer_times/coordinator.py +++ b/homeassistant/components/islamic_prayer_times/coordinator.py @@ -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()) diff --git a/homeassistant/components/islamic_prayer_times/strings.json b/homeassistant/components/islamic_prayer_times/strings.json index d02b26ec533..e07a38ca107 100644 --- a/homeassistant/components/islamic_prayer_times/strings.json +++ b/homeassistant/components/islamic_prayer_times/strings.json @@ -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": { diff --git a/tests/components/islamic_prayer_times/test_config_flow.py b/tests/components/islamic_prayer_times/test_config_flow.py index a25b8ba0f0b..f331c5bf49b 100644 --- a/tests/components/islamic_prayer_times/test_config_flow.py +++ b/tests/components/islamic_prayer_times/test_config_flow.py @@ -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: