@@ -35,8 +35,10 @@ namespace {
3535 }
3636}
3737
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} {
4042
4143 temperature = lv_label_create (lv_scr_act (), nullptr );
4244 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
4547 lv_obj_align (temperature, nullptr , LV_ALIGN_CENTER, 0 , -30 );
4648 lv_obj_set_auto_realign (temperature, true );
4749
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+
4855 minTemperature = lv_label_create (lv_scr_act (), nullptr );
4956 lv_obj_set_style_local_text_color (minTemperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::bg);
5057 lv_label_set_text (minTemperature, " " );
@@ -137,6 +144,18 @@ void Weather::Refresh() {
137144 lv_label_set_text_fmt (temperature, " %d°%c" , temp, tempUnit);
138145 lv_label_set_text_fmt (minTemperature, " %d°" , minTemp);
139146 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+ } else if (secondsSinceWeatherUpdate < 60 ) {
153+ lv_label_set_text_fmt (lastUpdated, " %ds old" , secondsSinceWeatherUpdate);
154+ } else if (secondsSinceWeatherUpdate > 59 && secondsSinceWeatherUpdate < 3600 ) {
155+ lv_label_set_text_fmt (lastUpdated, " %dm old" , secondsSinceWeatherUpdate / 60 );
156+ } else if (secondsSinceWeatherUpdate > 3599 ) {
157+ lv_label_set_text_fmt (lastUpdated, " %dh old" , secondsSinceWeatherUpdate / 3600 );
158+ }
140159 } else {
141160 lv_label_set_text (icon, " " );
142161 lv_label_set_text (condition, " " );
0 commit comments