/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
platform/battery_tracker.cpp
69 строк
2 KB
Arsentiy Milchakov
[core][power_manager] review fixes
22 янв 2019, 15:01
22 янв 2019, 15:01
58182fc
Код
Авторство
О чём код?
#include "platform/battery_tracker.hpp" #include "platform/platform.hpp" namespace { auto const kBatteryTrackingInterval = std::chrono::minutes(10); bool IsLevelExpired(std::chrono::system_clock::time_point lastRequestTime) { return std::chrono::system_clock::now() - lastRequestTime > kBatteryTrackingInterval; } } // namespace namespace platform { void BatteryLevelTracker::Subscribe(Subscriber * subscriber) { m_subscribers.push_back(subscriber); if (!IsLevelExpired(m_lastRequestTime)) subscriber->OnBatteryLevelReceived(m_lastReceivedLevel); if (!m_isTrackingInProgress) { m_isTrackingInProgress = true; RequestBatteryLevel(); } } void BatteryLevelTracker::Unsubscribe(Subscriber * subscriber) { m_subscribers.erase(std::remove(m_subscribers.begin(), m_subscribers.end(), subscriber), m_subscribers.end()); } void BatteryLevelTracker::UnsubscribeAll() { m_subscribers.clear(); } void BatteryLevelTracker::RequestBatteryLevel() { if (m_subscribers.empty()) { m_isTrackingInProgress = false; return; } if (IsLevelExpired(m_lastRequestTime)) { m_lastReceivedLevel = GetPlatform().GetBatteryLevel(); m_lastRequestTime = std::chrono::system_clock::now(); } for (auto s : m_subscribers) { s->OnBatteryLevelReceived(m_lastReceivedLevel); } GetPlatform().RunDelayedTask(Platform::Thread::Background, kBatteryTrackingInterval, [this] { GetPlatform().RunTask(Platform::Thread::Gui, [this] { RequestBatteryLevel(); }); }); } } // namespace platform