5
5
#include " components/ble/SimpleWeatherService.h"
6
6
#include " components/datetime/DateTimeController.h"
7
7
#include " components/settings/Settings.h"
8
- #include " displayapp/Weather.h"
9
8
#include " displayapp/DisplayApp.h"
10
9
#include " displayapp/screens/WeatherSymbols.h"
11
10
#include " displayapp/InfiniTimeTheme.h"
12
11
13
12
using namespace Pinetime ::Applications::Screens;
14
13
15
14
namespace {
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
18
17
return Colors::blue;
19
- } else if (temp.temp <= 4 ) { // ice
18
+ } else if (temp.Celsius () <= 4 ) { // ice
20
19
return LV_COLOR_CYAN;
21
- } else if (temp.temp >= 27 ) { // hot
20
+ } else if (temp.Celsius () >= 27 ) { // hot
22
21
return Colors::deepOrange;
23
22
}
24
23
return Colors::orange; // normal
25
24
}
26
25
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
29
28
return LV_TABLE_PART_CELL3;
30
- } else if (temp.temp <= 4 ) { // ice
29
+ } else if (temp.Celsius () <= 4 ) { // ice
31
30
return LV_TABLE_PART_CELL4;
32
- } else if (temp.temp >= 27 ) { // hot
31
+ } else if (temp.Celsius () >= 27 ) { // hot
33
32
return LV_TABLE_PART_CELL6;
34
33
}
35
34
return LV_TABLE_PART_CELL5; // normal
@@ -119,19 +118,25 @@ void Weather::Refresh() {
119
118
if (currentWeather.IsUpdated ()) {
120
119
auto optCurrentWeather = currentWeather.Get ();
121
120
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 ();
126
124
char tempUnit = ' C' ;
127
125
if (settingsController.GetWeatherFormat () == Controllers::Settings::WeatherFormat::Imperial) {
126
+ temp = optCurrentWeather->temperature .Fahrenheit ();
127
+ minTemp = optCurrentWeather->minTemperature .Fahrenheit ();
128
+ maxTemp = optCurrentWeather->maxTemperature .Fahrenheit ();
128
129
tempUnit = ' F' ;
129
130
}
131
+ lv_obj_set_style_local_text_color (temperature,
132
+ LV_LABEL_PART_MAIN,
133
+ LV_STATE_DEFAULT,
134
+ TemperatureColor (optCurrentWeather->temperature .Celsius ()));
130
135
lv_label_set_text (icon, Symbols::GetSymbol (optCurrentWeather->iconId ));
131
136
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);
135
140
} else {
136
141
lv_label_set_text (icon, " " );
137
142
lv_label_set_text (condition, " " );
@@ -149,12 +154,14 @@ void Weather::Refresh() {
149
154
std::tm localTime = *std::localtime (reinterpret_cast <const time_t *>(&optCurrentForecast->timestamp ));
150
155
151
156
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 ));
158
165
uint8_t wday = localTime.tm_wday + i + 1 ;
159
166
if (wday > 7 ) {
160
167
wday -= 7 ;
@@ -165,16 +172,16 @@ void Weather::Refresh() {
165
172
// Pad cells based on the largest number of digits on each column
166
173
char maxPadding[3 ] = " " ;
167
174
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);
169
176
if (diff <= 0 ) {
170
177
maxPadding[-diff] = ' \0 ' ;
171
178
minPadding[0 ] = ' \0 ' ;
172
179
} else {
173
180
maxPadding[0 ] = ' \0 ' ;
174
181
minPadding[diff] = ' \0 ' ;
175
182
}
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);
178
185
}
179
186
} else {
180
187
for (int i = 0 ; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) {
0 commit comments