- 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)
mIdleStart = std::chrono::steady_clock::now() - std::chrono::milliseconds(idle_milliseconds); {
// Start idle mode. Save idle start time
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(); mTimer->stop();
}
// Change the time - increase by (idle_minutes - mLastIdleMinutes) else
int delta_idle_milliseconds = idle_milliseconds - mLastIdleMilliseconds; {
// Do nothing here - main timer is stopped, idle time & timer remaining duration are recorded already
// Paranoidal // How much time remains ?
if (delta_idle_milliseconds < 0) }
delta_idle_milliseconds = 0; }
else
mTimer->stop(); {
mTimer->start(std::chrono::milliseconds(remaining_milliseconds + delta_idle_milliseconds)); if (mIdleStart)
{
mLastIdleMilliseconds = idle_milliseconds; // Idle interval ended
mIdleStart.reset();
qDebug() << "Increase remaining time from " << remaining_milliseconds << " by " << delta_idle_milliseconds << ". " mTimer->setInterval(mIdleRemaining);
<< "New remaining time " << mTimer->remainingTime() << ". Idle in milliseconds " << idle_milliseconds; mTimer->setSingleShot(true);
mTimer->start();
}
else
{
// Do nothing here - timer is running already
}
} }
else
mLastIdleMilliseconds = 0;
} }
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();