- fixes in idle tracking

This commit is contained in:
Dmytro Bogovych 2022-05-14 22:53:13 +03:00
parent 36ea53b1df
commit ec7c293366
4 changed files with 39 additions and 21 deletions

View File

@ -25,7 +25,7 @@ int get_idle_time()
screen = DefaultScreen(display); screen = DefaultScreen(display);
XScreenSaverQueryInfo(display, RootWindow(display, screen), mit_info); XScreenSaverQueryInfo(display, RootWindow(display, screen), mit_info);
idle_time = (mit_info->idle) / 1000 / 60; idle_time = (mit_info->idle);
XFree(mit_info); XFree(mit_info);
XCloseDisplay(display); XCloseDisplay(display);

View File

@ -1,7 +1,7 @@
#ifndef __IDLE_TRACKING_H #ifndef __IDLE_TRACKING_H
#define __IDLE_TRACKING_H #define __IDLE_TRACKING_H
// Returns the idle time in minutes // Returns the idle time in milliseconds
extern int get_idle_time(); extern int get_idle_time();
#endif #endif

View File

@ -79,6 +79,9 @@ void MainWindow::init()
// No postpone attempts yet // No postpone attempts yet
mPostponeCount = 0; mPostponeCount = 0;
// Idle is not detected yet
mLastIdleMilliseconds = 0;
// Timer to start break // Timer to start break
mTimer = new QTimer(this); mTimer = new QTimer(this);
mTimer->setTimerType(Qt::TimerType::CoarseTimer); mTimer->setTimerType(Qt::TimerType::CoarseTimer);
@ -253,6 +256,36 @@ void MainWindow::createTrayIcon()
void MainWindow::onUpdateUI() void MainWindow::onUpdateUI()
{ {
if (mAppConfig.idle_timeout != 0 && mTimer->isActive())
{
int idle_milliseconds = get_idle_time();
if (idle_milliseconds >= mAppConfig.idle_timeout * 60 * 1000)
{
// Idle mode is active. Increase the timer interval
mIdleStart = std::chrono::steady_clock::now() - std::chrono::milliseconds(idle_milliseconds);
// How much time remains ?
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->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();
}
else
mLastIdleMilliseconds = 0;
}
if (mTrayIcon) if (mTrayIcon)
{ {
if (mProgressTimer->isActive()) if (mProgressTimer->isActive())
@ -272,25 +305,6 @@ void MainWindow::onUpdateUI()
} }
ui->mSkipButton->setVisible(mPostponeCount > 0); ui->mSkipButton->setVisible(mPostponeCount > 0);
if (mAppConfig.idle_timeout != 0 && mTimer->isActive())
{
int idle_minutes = get_idle_time();
if (idle_minutes >= mAppConfig.idle_timeout)
{
// Idle mode is active. Increase the timer interval
mIdleStart = std::chrono::steady_clock::now() - std::chrono::minutes(idle_minutes);
int remaining_minutes = mTimer->remainingTime() / 1000 / 60;
// Change the time
mTimer->stop();
mTimer->start(std::chrono::minutes(remaining_minutes + idle_minutes));
qDebug() << "Idle detected for " << idle_minutes << " minutes. "
<< "Remaining " << mTimer->remainingTime() / 1000 / 60 << " until the next break.";
}
}
} }
void MainWindow::onLongBreakNotify() void MainWindow::onLongBreakNotify()
@ -305,6 +319,9 @@ void MainWindow::onLongBreakStart()
{ {
qDebug() << "Long break starts for " << secondsToText(mAppConfig.longbreak_postpone_interval); qDebug() << "Long break starts for " << secondsToText(mAppConfig.longbreak_postpone_interval);
// Reset idle counter
mLastIdleMilliseconds = 0;
ui->mPostponeButton->setText(tr("Postpone for ") + secondsToText(mAppConfig.longbreak_postpone_interval)); ui->mPostponeButton->setText(tr("Postpone for ") + secondsToText(mAppConfig.longbreak_postpone_interval));
showMe(); showMe();

View File

@ -40,6 +40,7 @@ private:
app_settings::config mAppConfig; app_settings::config mAppConfig;
int mPostponeCount; int mPostponeCount;
std::chrono::steady_clock::time_point mIdleStart; std::chrono::steady_clock::time_point mIdleStart;
int mLastIdleMilliseconds;
void init(); void init();
void loadConfig(); void loadConfig();