]> git.earman.xyz Git - sensor-watch.git/commitdiff
Fixed the tz that the world clock references
authorDavid Volovskiy <devolov@gmail.com>
Sun, 15 Sep 2024 23:13:38 +0000 (19:13 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Sun, 15 Sep 2024 23:13:38 +0000 (19:13 -0400)
movement/watch_faces/clock/world_clock2_face.c
movement/watch_faces/clock/world_clock2_face.h
movement/watch_faces/clock/world_clock_face.c
movement/watch_faces/clock/world_clock_face.h

index cf37a4092c50b5d20b6f2f2ef6d539832383028b..845ec375e09c8532881230ccafed455598ecc3b3 100644 (file)
@@ -184,8 +184,8 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings,
 
             /* Determine current time at time zone and store date/time */
            date_time = watch_rtc_get_date_time();
-           timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60);
-           date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60);
+        timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60);
+           date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60);
            previous_date_time = state->previous_date_time;
            state->previous_date_time = date_time.reg;
 
@@ -234,14 +234,16 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings,
            break;
        case EVENT_ALARM_BUTTON_UP:
            state->current_zone = find_selected_zone(state, FORWARD);
-            state->previous_date_time = REFRESH_TIME;
+        state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
+        state->previous_date_time = REFRESH_TIME;
            break;
        case EVENT_LIGHT_BUTTON_DOWN:
            /* Do nothing. */
            break;
        case EVENT_LIGHT_BUTTON_UP:
            state->current_zone = find_selected_zone(state, BACKWARD);
-            state->previous_date_time = REFRESH_TIME;
+        state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
+        state->previous_date_time = REFRESH_TIME;
            break;
        case EVENT_LIGHT_LONG_PRESS:
            movement_illuminate_led();
@@ -285,7 +287,7 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings,
                 watch_clear_indicator(WATCH_INDICATOR_PM);
                 refresh_face = false;
             }
-           result = div(state->tz, 60);
+           result = div(state->tz_curr, 60);
            hours = result.quot;
            minutes = result.rem;
 
@@ -314,17 +316,21 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings,
            break;
        case EVENT_ALARM_BUTTON_UP:
            state->current_zone = mod(state->current_zone + FORWARD, NUM_TIME_ZONES);
+        state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
            break;
        case EVENT_LIGHT_BUTTON_UP:
            state->current_zone = mod(state->current_zone + BACKWARD, NUM_TIME_ZONES);
+        state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
            break;
        case EVENT_LIGHT_BUTTON_DOWN:
            /* Do nothing */
            break;
        case EVENT_ALARM_LONG_PRESS:
            /* Find next selected zone */
-           if (!state->zones[state->current_zone].selected)
-               state->current_zone = find_selected_zone(state, FORWARD);
+           if (!state->zones[state->current_zone].selected) {
+            state->current_zone = find_selected_zone(state, FORWARD);
+            state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
+        }
 
            /* Switch to display mode */
            state->current_mode = WORLD_CLOCK2_MODE_DISPLAY;
index efc107e12684e7052d97abe02b63af3b978e89ef..5d8310fff444347c567970479f2520bc74746f71 100644 (file)
@@ -105,6 +105,7 @@ typedef struct {
     uint8_t current_zone;
     uint32_t previous_date_time;
     int16_t tz;
+    int16_t tz_curr;
 } world_clock2_state_t;
 
 void world_clock2_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void **context_ptr);
index e7f393e8e8b6ee786e499a99a067a1196922c6ba..b47d1f719eefc1278ac5fe1e57f594e58f8291b7 100644 (file)
@@ -69,7 +69,7 @@ static bool world_clock_face_do_display_mode(movement_event_t event, movement_se
         case EVENT_LOW_ENERGY_UPDATE:
             date_time = watch_rtc_get_date_time();
             timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60);
-            date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60);
+            date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60);
             previous_date_time = state->previous_date_time;
             state->previous_date_time = date_time.reg;
 
@@ -158,6 +158,7 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_
                 case 3:
                     state->settings.bit.timezone_index++;
                     if (state->settings.bit.timezone_index > 40) state->settings.bit.timezone_index = 0;
+                    state->tz_curr = get_timezone_offset(state->settings.bit.timezone_index, watch_rtc_get_date_time());
                     break;
             }
             break;
@@ -172,8 +173,8 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_
     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) (state->tz / 60),
-        (int8_t) (state->tz % 60) * (state->tz < 0 ? -1 : 1));
+        (int8_t) (state->tz_curr / 60),
+        (int8_t) (state->tz_curr % 60) * (state->tz_curr < 0 ? -1 : 1));
     watch_set_colon();
     watch_clear_indicator(WATCH_INDICATOR_PM);
 
index e76d85ea2764f65c471681f359a669ea5b262e22..2de3ceda28263668be11b073e019673ae4702573 100644 (file)
@@ -63,6 +63,7 @@ typedef struct {
     uint8_t current_screen;
     uint32_t previous_date_time;
     int16_t tz;
+    int16_t tz_curr;
 } world_clock_state_t;
 
 void world_clock_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr);