@@ -35,8 +35,10 @@ namespace {
35
35
}
36
36
}
37
37
38
- Weather::Weather (Controllers::Settings& settingsController, Controllers::SimpleWeatherService& weatherService)
39
- : settingsController {settingsController}, weatherService {weatherService} {
38
+ Weather::Weather (Controllers::Settings& settingsController,
39
+ Controllers::SimpleWeatherService& weatherService,
40
+ Controllers::DateTime& dateTimeController)
41
+ : settingsController {settingsController}, weatherService {weatherService}, dateTimeController {dateTimeController} {
40
42
41
43
temperature = lv_label_create (lv_scr_act (), nullptr );
42
44
lv_obj_set_style_local_text_color (temperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
@@ -45,6 +47,11 @@ Weather::Weather(Controllers::Settings& settingsController, Controllers::SimpleW
45
47
lv_obj_align (temperature, nullptr , LV_ALIGN_CENTER, 0 , -30 );
46
48
lv_obj_set_auto_realign (temperature, true );
47
49
50
+ lastUpdated = lv_label_create (lv_scr_act (), nullptr );
51
+ lv_obj_set_style_local_text_color (lastUpdated, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::bg);
52
+ lv_label_set_text_fmt (lastUpdated, " " );
53
+ lv_obj_align (lastUpdated, nullptr , LV_ALIGN_CENTER, -40 , 0 );
54
+
48
55
minTemperature = lv_label_create (lv_scr_act (), nullptr );
49
56
lv_obj_set_style_local_text_color (minTemperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::bg);
50
57
lv_label_set_text (minTemperature, " " );
@@ -137,6 +144,20 @@ void Weather::Refresh() {
137
144
lv_label_set_text_fmt (temperature, " %d°%c" , temp, tempUnit);
138
145
lv_label_set_text_fmt (minTemperature, " %d°" , minTemp);
139
146
lv_label_set_text_fmt (maxTemperature, " %d°" , maxTemp);
147
+
148
+ int64_t secondsSinceEpoch = dateTimeController.CurrentDateTime ().time_since_epoch ().count () / 1000000000 ;
149
+ int64_t secondsSinceWeatherUpdate = secondsSinceEpoch - optCurrentWeather->timestamp ;
150
+ if (secondsSinceWeatherUpdate < 0 ) {
151
+ lv_label_set_text_fmt (lastUpdated, " 0s old" , secondsSinceWeatherUpdate);
152
+ }
153
+ else if (secondsSinceWeatherUpdate < 60 ) {
154
+ lv_label_set_text_fmt (lastUpdated, " %ds old" , secondsSinceWeatherUpdate);
155
+ }
156
+ else if (secondsSinceWeatherUpdate > 59 && secondsSinceWeatherUpdate < 3600 ) {
157
+ lv_label_set_text_fmt (lastUpdated, " %dm old" , secondsSinceWeatherUpdate / 60 );
158
+ } else if (secondsSinceWeatherUpdate > 3599 ) {
159
+ lv_label_set_text_fmt (lastUpdated, " %dh old" , secondsSinceWeatherUpdate / 3600 );
160
+ }
140
161
} else {
141
162
lv_label_set_text (icon, " " );
142
163
lv_label_set_text (condition, " " );
0 commit comments