From 8b44eefd773c8e5cf4ec443dcc0ad53d7dc21c8f Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sun, 28 Jun 2026 17:51:42 -0400 Subject: [PATCH] Reduce code duplication in received handler --- package.json | 4 +- src/c/main.c | 98 +++++++++++++++++----------------------------- src/c/settings.h | 4 +- src/pkjs/config.js | 4 +- 4 files changed, 42 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index ca85ee1..9229707 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "PKJS_READY", "PKJS_TEMP_BAR_COUNT", "CLAY_ENABLE_PEEK", - "CLAY_SHOW_TIME_MG", + "CLAY_SHOW_DIGITS_MG", "CLAY_TRACK_BT_STATUS", "CLAY_DATE_TIMEOUT_SECS", "CLAY_LOW_FUEL_PERCENT", @@ -40,7 +40,7 @@ "CLAY_COLOR_BAR_FILL", "CLAY_COLOR_BAR_COOL", "CLAY_COLOR_BAR_HOT", - "CLAY_COLOR_TIME_MG", + "CLAY_COLOR_DIGITS_MG", "CLAY_COLOR_LETTERS", "CLAY_COLOR_HOURS", "CLAY_COLOR_MINUTES", diff --git a/src/c/main.c b/src/c/main.c index 8b19fe2..211e833 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -108,7 +108,7 @@ static void recolor_digit_bitmaps(GBitmap **bitmaps, GColor *applied, GColor new static void bt_callback(bool connected) { GColor dst = connected ? settings.ColorHours : settings.ColorWarning; if (s_first_settings_application && connected && dst.argb == s_applied_hour.argb) { - // at startup, s_applied_time_date.argb is GColorWhite + // at startup, s_applied_hour.argb is GColorWhite // for those using white fg, do not pointlessly replace white at startup if that is the destination anyway return; } @@ -217,7 +217,7 @@ static void update_minute_1() { s_time_digits[3] = minute % 10; if (!s_peek_active) { - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { bitmap_layer_set_bitmap(s_digit_mg_layers[2], s_digit_mg_super8); bitmap_layer_set_bitmap(s_digit_mg_layers[3], s_digit_mg_super8); } @@ -226,7 +226,7 @@ static void update_minute_1() { bitmap_layer_set_bitmap(s_digit_fg_layers[2], s_minute_bitmaps[s_time_digits[2]]); bitmap_layer_set_bitmap(s_digit_fg_layers[3], s_minute_bitmaps[s_time_digits[3]]); } else { - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { bitmap_layer_set_bitmap(s_digit_mg_layers[2], s_digit_mg_super8_mini); bitmap_layer_set_bitmap(s_digit_mg_layers[3], s_digit_mg_super8_mini); } @@ -294,7 +294,7 @@ static void peek_change(AnimationProgress progress, void *context) { if (!s_peek_active) { layer_set_frame(bitmap_layer_get_layer(s_digit_fg_layers[2]), s_digit_grects[2]); layer_set_frame(bitmap_layer_get_layer(s_digit_fg_layers[3]), s_digit_grects[3]); - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { layer_set_frame(bitmap_layer_get_layer(s_digit_mg_layers[2]), s_digit_grects[2]); layer_set_frame(bitmap_layer_get_layer(s_digit_mg_layers[3]), s_digit_grects[3]); } @@ -302,7 +302,7 @@ static void peek_change(AnimationProgress progress, void *context) { uint8_t y = s_digit_grects[2].origin.y - 1; layer_set_frame(bitmap_layer_get_layer(s_digit_fg_layers[2]), GRect(s_digit_grects[2].origin.x, y, 69, 54)); layer_set_frame(bitmap_layer_get_layer(s_digit_fg_layers[3]), GRect(s_digit_grects[3].origin.x, y, 69, 54)); - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { layer_set_frame(bitmap_layer_get_layer(s_digit_mg_layers[2]), GRect(s_digit_grects[2].origin.x, y, 69, 54)); layer_set_frame(bitmap_layer_get_layer(s_digit_mg_layers[3]), GRect(s_digit_grects[3].origin.x, y, 69, 54)); } @@ -328,7 +328,7 @@ static void apply_settings() { window_set_background_color(s_main_window, settings.ColorBG); // TIME MG - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { //// load bitmap if not already loaded if (!s_digit_mg_super8) { s_digit_mg_super8 = gbitmap_create_with_resource(RESOURCE_ID_SUPER8); @@ -354,14 +354,14 @@ static void apply_settings() { } } //// set bitmap color and mark layers dirty - if (s_digit_mg_super8 && settings.ColorMGDigits.argb != s_applied_digits_mg.argb) { - replace_gbitmap_color(s_applied_digits_mg, settings.ColorMGDigits, s_digit_mg_super8, NULL); + if (s_digit_mg_super8 && settings.ColorDigitsMG.argb != s_applied_digits_mg.argb) { + replace_gbitmap_color(s_applied_digits_mg, settings.ColorDigitsMG, s_digit_mg_super8, NULL); for (int i = 0; i < 4; ++i) { if (s_digit_mg_layers[i]) { layer_mark_dirty(bitmap_layer_get_layer(s_digit_mg_layers[i])); } } - s_applied_digits_mg = settings.ColorMGDigits; + s_applied_digits_mg = settings.ColorDigitsMG; } } else { if (s_digit_mg_super8) { @@ -448,19 +448,19 @@ static void apply_settings() { force_update_minutes = true; // mg handling - if (settings.ShowTimeMG) { + if (settings.ShowDigitsMG) { if (!s_digit_mg_super8_mini) { s_digit_mg_super8_mini = gbitmap_create_with_resource(RESOURCE_ID_SUPER8_M); s_applied_digits_mg_mini = GColorDarkGray; } - if (settings.ColorMGDigits.argb != s_applied_digits_mg_mini.argb) { - replace_gbitmap_color(s_applied_digits_mg_mini, settings.ColorMGDigits, s_digit_mg_super8_mini, NULL); + if (settings.ColorDigitsMG.argb != s_applied_digits_mg_mini.argb) { + replace_gbitmap_color(s_applied_digits_mg_mini, settings.ColorDigitsMG, s_digit_mg_super8_mini, NULL); for (int i = 0; i < 4; ++i) { if (s_digit_mg_layers[i]) { layer_mark_dirty(bitmap_layer_get_layer(s_digit_mg_layers[i])); } } - s_applied_digits_mg_mini = settings.ColorMGDigits; + s_applied_digits_mg_mini = settings.ColorDigitsMG; } } else if (s_digit_mg_super8_mini) { gbitmap_destroy(s_digit_mg_super8_mini); @@ -568,6 +568,13 @@ static void main_window_unload() { } } +static void apply_color_from_tuple(DictionaryIterator *iter, uint32_t key, GColor *dest) { + Tuple *t = dict_find(iter, key); + if (!t) + return; + *dest = GColorFromHEX(t->value->int32); +} + static void inbox_received_handler(DictionaryIterator *iter, void *context) { Tuple *ready_tuple = dict_find(iter, MESSAGE_KEY_PKJS_READY); if (ready_tuple) { @@ -592,27 +599,27 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) { // CLAY SETTINGS Tuple *enable_peek_tuple = dict_find(iter, MESSAGE_KEY_CLAY_ENABLE_PEEK); - Tuple *show_time_mg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_SHOW_TIME_MG); + Tuple *show_digits_mg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_SHOW_DIGITS_MG); Tuple *track_bt_status_tuple = dict_find(iter, MESSAGE_KEY_CLAY_TRACK_BT_STATUS); Tuple *date_timeout_secs_tuple = dict_find(iter, MESSAGE_KEY_CLAY_DATE_TIMEOUT_SECS); Tuple *low_fuel_percent_tuple = dict_find(iter, MESSAGE_KEY_CLAY_LOW_FUEL_PERCENT); Tuple *use_custom_led_tuple = dict_find(iter, MESSAGE_KEY_CLAY_USE_CUSTOM_LED); - Tuple *color_led_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_LED); - Tuple *color_bg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_BG); - Tuple *color_bar_mg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_BAR_MG); - Tuple *color_bar_fill_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_BAR_FILL); - Tuple *color_bar_cool_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_BAR_COOL); - Tuple *color_bar_hot_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_BAR_HOT); - Tuple *color_time_mg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_TIME_MG); - Tuple *color_letters_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_LETTERS); - Tuple *color_hours_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_HOURS); - Tuple *color_minutes_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_MINUTES); - Tuple *color_warning_tuple = dict_find(iter, MESSAGE_KEY_CLAY_COLOR_WARNING); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_LED, &settings.ColorLED); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_BG, &settings.ColorBG); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_BAR_MG, &settings.ColorBarsMG); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_BAR_FILL, &settings.ColorBarsFill); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_BAR_COOL, &settings.ColorBarsCool); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_BAR_HOT, &settings.ColorBarsHot); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_DIGITS_MG, &settings.ColorDigitsMG); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_LETTERS, &settings.ColorLetters); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_HOURS, &settings.ColorHours); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_MINUTES, &settings.ColorMinutes); + apply_color_from_tuple(iter, MESSAGE_KEY_CLAY_COLOR_WARNING, &settings.ColorWarning); if (enable_peek_tuple) { settings.EnablePeek = enable_peek_tuple->value->uint8; } - if (show_time_mg_tuple) { - settings.ShowTimeMG = show_time_mg_tuple->value->uint8; + if (show_digits_mg_tuple) { + settings.ShowDigitsMG = show_digits_mg_tuple->value->uint8; } if (track_bt_status_tuple) { settings.TrackBTStatus = track_bt_status_tuple->value->uint8; @@ -626,39 +633,6 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) { if (use_custom_led_tuple) { settings.UseCustomLED = use_custom_led_tuple->value->uint8; } - if (color_led_tuple) { - settings.ColorLED = GColorFromHEX(color_led_tuple->value->int32); - } - if (color_bg_tuple) { - settings.ColorBG = GColorFromHEX(color_bg_tuple->value->int32); - } - if (color_bar_mg_tuple) { - settings.ColorBarsMG = GColorFromHEX(color_bar_mg_tuple->value->int32); - } - if (color_bar_fill_tuple) { - settings.ColorBarsFill = GColorFromHEX(color_bar_fill_tuple->value->int32); - } - if (color_bar_cool_tuple) { - settings.ColorBarsCool = GColorFromHEX(color_bar_cool_tuple->value->int32); - } - if (color_bar_hot_tuple) { - settings.ColorBarsHot = GColorFromHEX(color_bar_hot_tuple->value->int32); - } - if (color_time_mg_tuple) { - settings.ColorMGDigits = GColorFromHEX(color_time_mg_tuple->value->int32); - } - if (color_letters_tuple) { - settings.ColorLetters = GColorFromHEX(color_letters_tuple->value->int32); - } - if (color_hours_tuple) { - settings.ColorHours = GColorFromHEX(color_hours_tuple->value->int32); - } - if (color_minutes_tuple) { - settings.ColorMinutes = GColorFromHEX(color_minutes_tuple->value->int32); - } - if (color_warning_tuple) { - settings.ColorWarning = GColorFromHEX(color_warning_tuple->value->int32); - } persist_write_data(STORAGE_KEY_SETTINGS, &settings, sizeof(settings)); apply_settings(); } @@ -670,7 +644,7 @@ static void init() { } else { settings.EnablePeek = true; settings.TrackBTStatus = false; - settings.ShowTimeMG = false; + settings.ShowDigitsMG = false; settings.UseCustomLED = false; settings.DateTimeoutSecs = 3; settings.LowFuelPercent = 20; @@ -680,7 +654,7 @@ static void init() { settings.ColorBarsFill = GColorWhite; settings.ColorBarsCool = GColorDukeBlue; settings.ColorBarsHot = GColorRed; - settings.ColorMGDigits = GColorDarkGray; + settings.ColorDigitsMG = GColorDarkGray; settings.ColorLetters = GColorWhite; settings.ColorHours = GColorWhite; settings.ColorMinutes = GColorWhite; diff --git a/src/c/settings.h b/src/c/settings.h index 3b43dfb..3f4c145 100644 --- a/src/c/settings.h +++ b/src/c/settings.h @@ -5,7 +5,7 @@ typedef struct ClaySettings { bool EnablePeek; - bool ShowTimeMG; + bool ShowDigitsMG; bool TrackBTStatus; uint8_t DateTimeoutSecs; uint8_t LowFuelPercent; @@ -16,7 +16,7 @@ typedef struct ClaySettings { GColor ColorBarsFill; GColor ColorBarsCool; GColor ColorBarsHot; - GColor ColorMGDigits; + GColor ColorDigitsMG; GColor ColorLetters; GColor ColorHours; GColor ColorMinutes; diff --git a/src/pkjs/config.js b/src/pkjs/config.js index 1fb54b3..e29f60e 100644 --- a/src/pkjs/config.js +++ b/src/pkjs/config.js @@ -22,7 +22,7 @@ module.exports = [ { "id": "time_mg_toggle", "type": "toggle", - "messageKey": "CLAY_SHOW_TIME_MG", + "messageKey": "CLAY_SHOW_DIGITS_MG", "defaultValue": false, "label": "Show time segments midground", "description": "Show or hide the unlit segments behind the time." @@ -172,7 +172,7 @@ module.exports = [ { "id": "custom_color_mg_time", "type": "color", - "messageKey": "CLAY_COLOR_TIME_MG", + "messageKey": "CLAY_COLOR_DIGITS_MG", "defaultValue": "555555", "label": "Time segment midground color", "sunlight": true,