The timezone now auto-corrects with DST (but still displays the same offset in the settings screen to the user)

This commit is contained in:
David Volovskiy
2024-08-02 01:25:01 -04:00
parent 149911e4ad
commit 4c546b14dc
22 changed files with 75 additions and 98 deletions

View File

@@ -54,6 +54,7 @@ void world_clock_face_activate(movement_settings_t *settings, void *context) {
static bool world_clock_face_do_display_mode(movement_event_t event, movement_settings_t *settings, world_clock_state_t *state) {
char buf[11];
uint8_t pos;
int16_t tz;
uint32_t timestamp;
uint32_t previous_date_time;
@@ -67,8 +68,9 @@ static bool world_clock_face_do_display_mode(movement_event_t event, movement_se
case EVENT_TICK:
case EVENT_LOW_ENERGY_UPDATE:
date_time = watch_rtc_get_date_time();
timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, movement_timezone_offsets[state->settings.bit.timezone_index] * 60);
tz = get_timezone_offset(settings->bit.time_zone, date_time);
timestamp = watch_utility_date_time_to_unix_time(date_time, tz * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, tz * 60);
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
@@ -125,6 +127,8 @@ static bool world_clock_face_do_display_mode(movement_event_t event, movement_se
}
static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_settings_t *settings, world_clock_state_t *state) {
watch_date_time date_time;
int16_t tz;
switch (event.event_type) {
case EVENT_MODE_BUTTON_UP:
if (state->backup_register) watch_store_backup_data(state->settings.reg, state->backup_register);
@@ -168,11 +172,13 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_
}
char buf[13];
date_time = watch_rtc_get_date_time();
tz = get_timezone_offset(settings->bit.time_zone, date_time);
sprintf(buf, "%c%c %3d%02d ",
movement_valid_position_0_chars[state->settings.bit.char_0],
movement_valid_position_1_chars[state->settings.bit.char_1],
(int8_t) (movement_timezone_offsets[state->settings.bit.timezone_index] / 60),
(int8_t) (movement_timezone_offsets[state->settings.bit.timezone_index] % 60) * (movement_timezone_offsets[state->settings.bit.timezone_index] < 0 ? -1 : 1));
(int8_t) (tz / 60),
(int8_t) (tz % 60) * (tz < 0 ? -1 : 1));
watch_set_colon();
watch_clear_indicator(WATCH_INDICATOR_PM);