55#include " components/ble/SimpleWeatherService.h"
66#include " components/datetime/DateTimeController.h"
77#include " components/settings/Settings.h"
8- #include " displayapp/Weather.h"
98#include " displayapp/DisplayApp.h"
109#include " displayapp/screens/WeatherSymbols.h"
1110#include " displayapp/InfiniTimeTheme.h"
1211
1312using namespace Pinetime ::Applications::Screens;
1413
1514namespace {
16- lv_color_t TemperatureColor (Pinetime::Applications ::Temperature temp) {
17- if (temp.temp <= 0 ) { // freezing
15+ lv_color_t TemperatureColor (Pinetime::Controllers::SimpleWeatherService ::Temperature temp) {
16+ if (temp.Celsius () <= 0 ) { // freezing
1817 return Colors::blue;
19- } else if (temp.temp <= 4 ) { // ice
18+ } else if (temp.Celsius () <= 4 ) { // ice
2019 return LV_COLOR_CYAN;
21- } else if (temp.temp >= 27 ) { // hot
20+ } else if (temp.Celsius () >= 27 ) { // hot
2221 return Colors::deepOrange;
2322 }
2423 return Colors::orange; // normal
2524 }
2625
27- uint8_t TemperatureStyle (Pinetime::Applications ::Temperature temp) {
28- if (temp.temp <= 0 ) { // freezing
26+ uint8_t TemperatureStyle (Pinetime::Controllers::SimpleWeatherService ::Temperature temp) {
27+ if (temp.Celsius () <= 0 ) { // freezing
2928 return LV_TABLE_PART_CELL3;
30- } else if (temp.temp <= 4 ) { // ice
29+ } else if (temp.Celsius () <= 4 ) { // ice
3130 return LV_TABLE_PART_CELL4;
32- } else if (temp.temp >= 27 ) { // hot
31+ } else if (temp.Celsius () >= 27 ) { // hot
3332 return LV_TABLE_PART_CELL6;
3433 }
3534 return LV_TABLE_PART_CELL5; // normal
@@ -119,19 +118,25 @@ void Weather::Refresh() {
119118 if (currentWeather.IsUpdated ()) {
120119 auto optCurrentWeather = currentWeather.Get ();
121120 if (optCurrentWeather) {
122- Applications::Temperature temp = Applications::Convert (optCurrentWeather->temperature , settingsController.GetWeatherFormat ());
123- Applications::Temperature minTemp = Applications::Convert (optCurrentWeather->minTemperature , settingsController.GetWeatherFormat ());
124- Applications::Temperature maxTemp = Applications::Convert (optCurrentWeather->maxTemperature , settingsController.GetWeatherFormat ());
125- lv_obj_set_style_local_text_color (temperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, TemperatureColor (temp));
121+ int16_t temp = optCurrentWeather->temperature .Celsius ();
122+ int16_t minTemp = optCurrentWeather->minTemperature .Celsius ();
123+ int16_t maxTemp = optCurrentWeather->maxTemperature .Celsius ();
126124 char tempUnit = ' C' ;
127125 if (settingsController.GetWeatherFormat () == Controllers::Settings::WeatherFormat::Imperial) {
126+ temp = optCurrentWeather->temperature .Fahrenheit ();
127+ minTemp = optCurrentWeather->minTemperature .Fahrenheit ();
128+ maxTemp = optCurrentWeather->maxTemperature .Fahrenheit ();
128129 tempUnit = ' F' ;
129130 }
131+ lv_obj_set_style_local_text_color (temperature,
132+ LV_LABEL_PART_MAIN,
133+ LV_STATE_DEFAULT,
134+ TemperatureColor (optCurrentWeather->temperature ));
130135 lv_label_set_text (icon, Symbols::GetSymbol (optCurrentWeather->iconId ));
131136 lv_label_set_text (condition, Symbols::GetCondition (optCurrentWeather->iconId ));
132- lv_label_set_text_fmt (temperature, " %d°%c" , temp. temp , tempUnit);
133- lv_label_set_text_fmt (minTemperature, " %d°" , minTemp. temp );
134- lv_label_set_text_fmt (maxTemperature, " %d°" , maxTemp. temp );
137+ lv_label_set_text_fmt (temperature, " %d°%c" , temp, tempUnit);
138+ lv_label_set_text_fmt (minTemperature, " %d°" , minTemp);
139+ lv_label_set_text_fmt (maxTemperature, " %d°" , maxTemp);
135140 } else {
136141 lv_label_set_text (icon, " " );
137142 lv_label_set_text (condition, " " );
@@ -149,12 +154,14 @@ void Weather::Refresh() {
149154 std::tm localTime = *std::localtime (reinterpret_cast <const time_t *>(&optCurrentForecast->timestamp ));
150155
151156 for (int i = 0 ; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) {
152- Applications::Temperature maxTemp =
153- Applications::Convert (optCurrentForecast->days [i].maxTemperature , settingsController.GetWeatherFormat ());
154- Applications::Temperature minTemp =
155- Applications::Convert (optCurrentForecast->days [i].minTemperature , settingsController.GetWeatherFormat ());
156- lv_table_set_cell_type (forecast, 2 , i, TemperatureStyle (maxTemp));
157- lv_table_set_cell_type (forecast, 3 , i, TemperatureStyle (minTemp));
157+ int16_t minTemp = optCurrentForecast->days [i].maxTemperature .Celsius ();
158+ int16_t maxTemp = optCurrentForecast->days [i].minTemperature .Celsius ();
159+ if (settingsController.GetWeatherFormat () == Controllers::Settings::WeatherFormat::Imperial) {
160+ minTemp = optCurrentForecast->days [i].maxTemperature .Fahrenheit ();
161+ maxTemp = optCurrentForecast->days [i].minTemperature .Fahrenheit ();
162+ }
163+ lv_table_set_cell_type (forecast, 2 , i, TemperatureStyle (optCurrentForecast->days [i].maxTemperature ));
164+ lv_table_set_cell_type (forecast, 3 , i, TemperatureStyle (optCurrentForecast->days [i].minTemperature ));
158165 uint8_t wday = localTime.tm_wday + i + 1 ;
159166 if (wday > 7 ) {
160167 wday -= 7 ;
@@ -165,16 +172,16 @@ void Weather::Refresh() {
165172 // Pad cells based on the largest number of digits on each column
166173 char maxPadding[3 ] = " " ;
167174 char minPadding[3 ] = " " ;
168- int diff = snprintf (nullptr , 0 , " %d" , maxTemp. temp ) - snprintf (nullptr , 0 , " %d" , minTemp. temp );
175+ int diff = snprintf (nullptr , 0 , " %d" , maxTemp) - snprintf (nullptr , 0 , " %d" , minTemp);
169176 if (diff <= 0 ) {
170177 maxPadding[-diff] = ' \0 ' ;
171178 minPadding[0 ] = ' \0 ' ;
172179 } else {
173180 maxPadding[0 ] = ' \0 ' ;
174181 minPadding[diff] = ' \0 ' ;
175182 }
176- lv_table_set_cell_value_fmt (forecast, 2 , i, " %s%d" , maxPadding, maxTemp. temp );
177- lv_table_set_cell_value_fmt (forecast, 3 , i, " %s%d" , minPadding, minTemp. temp );
183+ lv_table_set_cell_value_fmt (forecast, 2 , i, " %s%d" , maxPadding, maxTemp);
184+ lv_table_set_cell_value_fmt (forecast, 3 , i, " %s%d" , minPadding, minTemp);
178185 }
179186 } else {
180187 for (int i = 0 ; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) {
0 commit comments