Added a few helper functions
This commit is contained in:
parent
797b60397c
commit
154e3d27ad
2 changed files with 59 additions and 4 deletions
|
@ -513,5 +513,51 @@ namespace Pinetime {
|
||||||
uint64_t WeatherService::GetCurrentUnixTimestamp() const {
|
uint64_t WeatherService::GetCurrentUnixTimestamp() const {
|
||||||
return std::chrono::duration_cast<std::chrono::seconds>(dateTimeController.CurrentDateTime().time_since_epoch()).count();
|
return std::chrono::duration_cast<std::chrono::seconds>(dateTimeController.CurrentDateTime().time_since_epoch()).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t WeatherService::getTodayMinTemp() const {
|
||||||
|
uint64_t currentTimestamp = GetCurrentUnixTimestamp();
|
||||||
|
uint64_t currentDayEnd = currentTimestamp - ((24 - dateTimeController.Hours()) * 60 * 60) -
|
||||||
|
((60 - dateTimeController.Minutes()) * 60) - (60 - dateTimeController.Seconds());
|
||||||
|
int16_t result = -32768;
|
||||||
|
for (auto&& header : this->timeline) {
|
||||||
|
if (header->eventType == WeatherData::eventtype::AirQuality && isEventStillValid(header, currentTimestamp) &&
|
||||||
|
header->timestamp < currentDayEnd &&
|
||||||
|
reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature != -32768) {
|
||||||
|
int16_t temperature = reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature;
|
||||||
|
if (result == -32768) {
|
||||||
|
result = temperature;
|
||||||
|
} else if (result > temperature) {
|
||||||
|
result = temperature;
|
||||||
|
} else {
|
||||||
|
// The temperature in this item is higher than the lowest we've found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t WeatherService::getTodayMaxTemp() const {
|
||||||
|
uint64_t currentTimestamp = GetCurrentUnixTimestamp();
|
||||||
|
uint64_t currentDayEnd = currentTimestamp - ((24 - dateTimeController.Hours()) * 60 * 60) -
|
||||||
|
((60 - dateTimeController.Minutes()) * 60) - (60 - dateTimeController.Seconds());
|
||||||
|
int16_t result = -32768;
|
||||||
|
for (auto&& header : this->timeline) {
|
||||||
|
if (header->eventType == WeatherData::eventtype::AirQuality && isEventStillValid(header, currentTimestamp) &&
|
||||||
|
header->timestamp < currentDayEnd &&
|
||||||
|
reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature != -32768) {
|
||||||
|
int16_t temperature = reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature;
|
||||||
|
if (result == -32768) {
|
||||||
|
result = temperature;
|
||||||
|
} else if (result < temperature) {
|
||||||
|
result = temperature;
|
||||||
|
} else {
|
||||||
|
// The temperature in this item is lower than the highest we've found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,17 @@ namespace Pinetime {
|
||||||
std::unique_ptr<WeatherData::Pressure>& GetCurrentPressure();
|
std::unique_ptr<WeatherData::Pressure>& GetCurrentPressure();
|
||||||
std::unique_ptr<WeatherData::AirQuality>& GetCurrentQuality();
|
std::unique_ptr<WeatherData::AirQuality>& GetCurrentQuality();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for the current day's maximum temperature
|
||||||
|
* @return -32768 if there's no data, degrees celcius times 100 otherwise
|
||||||
|
*/
|
||||||
|
int16_t getTodayMaxTemp() const;
|
||||||
|
/**
|
||||||
|
* Searches for the current day's minimum temperature
|
||||||
|
* @return -32768 if there's no data, degrees celcius times 100 otherwise
|
||||||
|
*/
|
||||||
|
int16_t getTodayMinTemp() const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Management functions
|
* Management functions
|
||||||
*/
|
*/
|
||||||
|
@ -75,7 +86,6 @@ namespace Pinetime {
|
||||||
size_t GetTimelineLength() const;
|
size_t GetTimelineLength() const;
|
||||||
/**
|
/**
|
||||||
* Checks if an event of a certain type exists in the timeline
|
* Checks if an event of a certain type exists in the timeline
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
bool HasTimelineEventOfType(WeatherData::eventtype type) const;
|
bool HasTimelineEventOfType(WeatherData::eventtype type) const;
|
||||||
|
|
||||||
|
@ -124,6 +134,8 @@ namespace Pinetime {
|
||||||
Pinetime::Controllers::DateTime& dateTimeController;
|
Pinetime::Controllers::DateTime& dateTimeController;
|
||||||
|
|
||||||
std::vector<std::unique_ptr<WeatherData::TimelineHeader>> timeline;
|
std::vector<std::unique_ptr<WeatherData::TimelineHeader>> timeline;
|
||||||
|
std::unique_ptr<WeatherData::TimelineHeader> nullTimelineheader = std::make_unique<WeatherData::TimelineHeader>();
|
||||||
|
std::unique_ptr<WeatherData::TimelineHeader>* nullHeader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleans up the timeline of expired events
|
* Cleans up the timeline of expired events
|
||||||
|
@ -149,9 +161,6 @@ namespace Pinetime {
|
||||||
* @return if the event is valid
|
* @return if the event is valid
|
||||||
*/
|
*/
|
||||||
static bool isEventStillValid(const std::unique_ptr<WeatherData::TimelineHeader>& uniquePtr, const uint64_t timestamp);
|
static bool isEventStillValid(const std::unique_ptr<WeatherData::TimelineHeader>& uniquePtr, const uint64_t timestamp);
|
||||||
|
|
||||||
std::unique_ptr<WeatherData::TimelineHeader> nullTimelineheader = std::make_unique<WeatherData::TimelineHeader>();
|
|
||||||
std::unique_ptr<WeatherData::TimelineHeader>* nullHeader;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue