diff --git a/src/c/main.c b/src/c/main.c index 7f66f65..6598143 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -44,7 +44,7 @@ static bool s_pkjs_ready = false; static bool s_fuel_is_warning = false; static int s_batt_level; static bool s_temp_is_warning = false; -static uint8_t s_temp_level; +static int8_t s_temp_level; // bar statics static const uint8_t s_bar_height = 8; @@ -52,8 +52,11 @@ static const uint8_t s_bar_width = 17; static const uint8_t s_bar_spacing = s_bar_height + 1; static void toggle_fuel_warning_state(bool enable_warning, bool force) { + if (!force && (enable_warning == s_fuel_is_warning)) { + return; + } GColor dst = enable_warning ? settings.ColorWarning : settings.ColorFG; - if ((!force && (enable_warning == s_fuel_is_warning)) || (s_first_settings_application && !enable_warning && dst.argb == s_applied_e.argb)) { + if (s_first_settings_application && !enable_warning && dst.argb == s_applied_e.argb) { // at startup, s_applied_e.argb is GColorWhite // for those using white fg, do not pointlessly replace white at startup if that is the destination anyway return; @@ -64,8 +67,11 @@ static void toggle_fuel_warning_state(bool enable_warning, bool force) { } static void toggle_temp_warning_state(bool enable_warning, bool force) { + if (!force && (enable_warning == s_temp_is_warning)) { + return; + } GColor dst = enable_warning ? settings.ColorWarning : settings.ColorFG; - if ((!force && (enable_warning == s_temp_is_warning)) || (s_first_settings_application && !enable_warning && dst.argb == s_applied_c_h.argb)) { + if (s_first_settings_application && !enable_warning && dst.argb == s_applied_c_h.argb) { // at startup, s_applied_c_h.argb is GColorWhite // for those using white fg, do not pointlessly replace white at startup if that is the destination anyway return; @@ -387,8 +393,14 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) { // TEMPERATURE DATA Tuple *temp_bar_count = dict_find(iter, MESSAGE_KEY_PKJS_TEMP_BAR_COUNT); if (temp_bar_count) { - s_temp_level = temp_bar_count->value->uint8; - layer_mark_dirty(s_temp_layer); + int8_t new_temp_level = temp_bar_count->value->int8; + if (new_temp_level >= 0) { + s_temp_level = new_temp_level; + toggle_temp_warning_state(false, false); + layer_mark_dirty(s_temp_layer); + } else { + toggle_temp_warning_state(true, false); + } return; } diff --git a/src/pkjs/weather.js b/src/pkjs/weather.js index e4f79b8..4ebfcaf 100644 --- a/src/pkjs/weather.js +++ b/src/pkjs/weather.js @@ -1,7 +1,22 @@ +function weatherFailure() { + Pebble.sendAppMessage({ PKJS_TEMP_BAR_COUNT: -1 }); +} + var xhrRequest = function (url, type, callback) { var xhr = new XMLHttpRequest(); + xhr.timeout = 7500; xhr.onload = function () { - callback(this.responseText); + if (xhr.status === 200) { + callback(this.responseText); + } else { + weatherFailure(); + } + }; + xhr.onerror = function () { + weatherFailure(); + }; + xhr.ontimeout = function () { + weatherFailure(); }; xhr.open(type, url); xhr.send(); @@ -31,8 +46,8 @@ function locationSuccess(pos) { function getWeather() { navigator.geolocation.getCurrentPosition( locationSuccess, - null, - { timeout: 15000, maximumAge: 60000 } + weatherFailure, + { timeout: 7500, maximumAge: 60000 } ); }