timer
This commit is contained in:
65
AsuroTool/Timer.cpp
Normal file
65
AsuroTool/Timer.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#include "Timer.h"
|
||||
|
||||
|
||||
float calcElapsedSeconds(std::chrono::system_clock::time_point startTime)
|
||||
{
|
||||
auto elapsedTime = std::chrono::system_clock::now() - startTime;
|
||||
return std::chrono::duration_cast<std::chrono::seconds>(elapsedTime).count();
|
||||
}
|
||||
|
||||
void updateTimer(ApplicationData& appData)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
appData.timerMutex.lock();
|
||||
TimerData& timerData = appData.timerData;
|
||||
|
||||
if (timerData.isTimerActive)
|
||||
{
|
||||
// Main timer
|
||||
float elapsedSeconds = calcElapsedSeconds(timerData.timerStartTimestamp);
|
||||
float timerPercentComplete = elapsedSeconds / appData.settings.timerDuration;
|
||||
|
||||
if (timerPercentComplete >= 1.f)
|
||||
{
|
||||
if (!timerData.timerHasNotified)
|
||||
{
|
||||
// Alert
|
||||
timerData.timerHasNotified = true;
|
||||
|
||||
std::wstring titleText = std::format(L"{} minutes over!", appData.settings.timerDuration / 60.f);
|
||||
|
||||
std::wstring messageText;
|
||||
if (appData.settings.timerRepeating)
|
||||
{
|
||||
messageText = std::format(L"Repeats every {} minutes.", appData.settings.timerRepeatDuration / 60.f);
|
||||
timerData.lastNotifySeconds = elapsedSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
timerData.isTimerActive = false;
|
||||
messageText = L"Timer does not repeat.";
|
||||
}
|
||||
showToastNotification(&timerData.toastHandler, titleText.c_str(), messageText.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Loop timer
|
||||
if (elapsedSeconds - timerData.lastNotifySeconds >= appData.settings.timerRepeatDuration)
|
||||
{
|
||||
timerData.lastNotifySeconds = elapsedSeconds;
|
||||
|
||||
float elapsedSecondsSinceEnd = elapsedSeconds - appData.settings.timerDuration;
|
||||
std::wstring titleText = std::format(L"Timer ended {} minutes ago", elapsedSecondsSinceEnd / 60.f);
|
||||
std::wstring messageText = std::format(L"Repeats every {} minutes.", appData.settings.timerRepeatDuration / 60.f);
|
||||
|
||||
showToastNotification(&timerData.toastHandler, titleText.c_str(), messageText.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
appData.timerMutex.unlock();
|
||||
Sleep(1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user