- version 0.1.4 - experiments with new idle tracking logic

This commit is contained in:
Dmytro Bogovych 2022-05-23 22:11:37 +03:00
parent f6762c5946
commit 56ec61c92e
3 changed files with 39 additions and 24 deletions

View File

@ -4,7 +4,7 @@
// App version // App version
#define QBREAK_VERSION_MAJOR 0 #define QBREAK_VERSION_MAJOR 0
#define QBREAK_VERSION_MINOR 1 #define QBREAK_VERSION_MINOR 1
#define QBREAK_VERSION_SUFFIX 3 #define QBREAK_VERSION_SUFFIX 4
// How often UI is updated - interval in seconds // How often UI is updated - interval in seconds
#define INTERVAL_UPDATE_UI (60) #define INTERVAL_UPDATE_UI (60)

View File

@ -264,34 +264,41 @@ static int msec2min(int msec)
void MainWindow::onUpdateUI() void MainWindow::onUpdateUI()
{ {
if (mAppConfig.idle_timeout != 0 && mTimer->isActive()) if (mAppConfig.idle_timeout != 0 && (mTimer->isActive() || mIdleStart))
{ {
int idle_milliseconds = get_idle_time_dynamically(); int idle_milliseconds = get_idle_time_dynamically();
if (idle_milliseconds >= mAppConfig.idle_timeout * 60 * 1000) if (idle_milliseconds >= mAppConfig.idle_timeout * 60 * 1000)
{ {
// Idle mode is active. Increase the timer interval if (!mIdleStart)
{
// Start idle mode. Save idle start time
mIdleStart = std::chrono::steady_clock::now() - std::chrono::milliseconds(idle_milliseconds); mIdleStart = std::chrono::steady_clock::now() - std::chrono::milliseconds(idle_milliseconds);
mIdleRemaining = mTimer->remainingTime() + idle_milliseconds;
// How much time remains ? // Stop counting
int remaining_milliseconds = mTimer->remainingTime();
// Change the time - increase by (idle_minutes - mLastIdleMinutes)
int delta_idle_milliseconds = idle_milliseconds - mLastIdleMilliseconds;
// Paranoidal
if (delta_idle_milliseconds < 0)
delta_idle_milliseconds = 0;
mTimer->stop(); mTimer->stop();
mTimer->start(std::chrono::milliseconds(remaining_milliseconds + delta_idle_milliseconds));
mLastIdleMilliseconds = idle_milliseconds;
qDebug() << "Increase remaining time from " << remaining_milliseconds << " by " << delta_idle_milliseconds << ". "
<< "New remaining time " << mTimer->remainingTime() << ". Idle in milliseconds " << idle_milliseconds;
} }
else else
mLastIdleMilliseconds = 0; {
// Do nothing here - main timer is stopped, idle time & timer remaining duration are recorded already
// How much time remains ?
}
}
else
{
if (mIdleStart)
{
// Idle interval ended
mIdleStart.reset();
mTimer->setInterval(mIdleRemaining);
mTimer->setSingleShot(true);
mTimer->start();
}
else
{
// Do nothing here - timer is running already
}
}
} }
if (mTrayIcon) if (mTrayIcon)

View File

@ -6,6 +6,8 @@
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#include <chrono> #include <chrono>
#include <optional>
#include "settings.h" #include "settings.h"
#include "settingsdialog.h" #include "settingsdialog.h"
@ -39,7 +41,13 @@ private:
std::chrono::steady_clock::time_point mBreakStartTime; std::chrono::steady_clock::time_point mBreakStartTime;
app_settings::config mAppConfig; app_settings::config mAppConfig;
int mPostponeCount; int mPostponeCount;
std::chrono::steady_clock::time_point mIdleStart;
// Time when idle was started
std::optional<std::chrono::steady_clock::time_point> mIdleStart;
// Time remaining in main timer
int mIdleRemaining;
int mLastIdleMilliseconds; int mLastIdleMilliseconds;
void init(); void init();