summaryrefslogtreecommitdiffstats
path: root/src/saverwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saverwidget.cpp')
-rw-r--r--src/saverwidget.cpp99
1 files changed, 26 insertions, 73 deletions
diff --git a/src/saverwidget.cpp b/src/saverwidget.cpp
index 027212f..17353d6 100644
--- a/src/saverwidget.cpp
+++ b/src/saverwidget.cpp
@@ -1,11 +1,13 @@
#include "saverwidget.h"
#include "ui_saver.h"
#include "screensaver.h"
+#include "deadlinetype.h"
#include <QTimer>
#include <QX11Info>
#include <QDateTime>
#include <QSettings>
+#include <QFile>
#include <X11/Xlib.h>
static const QChar C_ZERO('0');
@@ -29,7 +31,7 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) :
_logoutDeadline(0),
_shutdownDeadline(0),
_counter(0),
- _deadlineType(DeadlineType::Unspecified),
+ _deadlineType(DeadlineType::Unknown),
_standbyDisabled(false),
_isLocked(false)
{
@@ -40,52 +42,37 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) :
if (_counter % 60 == 0) {
this->reloadValues();
}
- if (_counter % 10 == 0) {
+ if (_counter % 4 == 0) {
_isLocked = ScreenSaver::isLocked();
}
_counter++;
qlonglong now = QDateTime::currentMSecsSinceEpoch() / 1000;
// Determine what's timing out next (session/schedule)
- DeadlineType type = DeadlineType::Unspecified;
- qlonglong shutdownRemaining = _shutdownDeadline - now;
- qlonglong logoutRemaining = _logoutDeadline - now;
- if (shutdownRemaining > -330 && (shutdownRemaining < logoutRemaining || logoutRemaining <= -330)) {
- type = DeadlineType::Shutdown;
- } else if (logoutRemaining > -330) {
- type = (_isLocked ? DeadlineType::IdleKillLocked : DeadlineType::IdleKill);
- }
- if (type == DeadlineType::Shutdown) {
- // Shutdown is about to happen (sooner than idle logout)
- if (shutdownRemaining < 0) {
- ui->lblHeader->setText(QString("Dieser Rechner ist seit %1 ausgeschaltet (theoretisch zumindest)").arg(formatTime(-shutdownRemaining)));
- } else {
- ui->lblHeader->setText(QString("Achtung: Rechner wird in %1 heruntergefahren!").arg(formatTime(shutdownRemaining)));
- }
- } else if (type == DeadlineType::IdleKillLocked) {
- // Idle logout is about to happen
- if (logoutRemaining < 0) {
- //ui->lblHeader->setText("Diese Sitzung kann durch einen Klick auf 'New Login' beendet werden...");
- ui->lblHeader->setText("Diese Sitzung wird in Kürze beendet...");
- } else {
- ui->lblHeader->setText(QString("Diese Sitzung wird in %1 beendet, wenn sie nicht entsperrt wird.").arg(formatTime(logoutRemaining)));
- }
- } else if (type == DeadlineType::IdleKill) {
- // Idle logout is about to happen, but password is not required to reactivate session
- if (logoutRemaining < 0) {
- ui->lblHeader->setText("Hier hat wohl jemand vergessen sich auszuloggen...");
- } else {
- ui->lblHeader->setText(QString("Diese Sitzung wird in %1 beendet, wenn sie nicht weiter verwendet wird.").arg(formatTime(logoutRemaining)));
- }
- } else {
- if (_isLocked) {
- ui->lblHeader->setText("Rechner gesperrt");
+ const DeadlineType *type;
+ qlonglong remaining = 0;
+ do {
+ qlonglong shutdownRemaining = _shutdownDeadline - now;
+ qlonglong logoutRemaining = _logoutDeadline - now;
+ if (shutdownRemaining > -330 && (shutdownRemaining < logoutRemaining || logoutRemaining <= -330)) {
+ type = DeadlineType::Shutdown;
+ remaining = shutdownRemaining;
+ } else if (logoutRemaining > -330) {
+ type = DeadlineType::IdleKill;
+ remaining = logoutRemaining;
} else {
- ui->lblHeader->setText("Schon schon schon...");
+ type = DeadlineType::NoTimeout;
}
+ } while (0);
+ if (remaining < 0) {
+ remaining = 0;
}
+ ui->lblHeader->setText(type->headerLine(_isLocked).arg(formatTime(remaining)));
ui->lblClock->setText(QDateTime::currentDateTime().toString(QLocale().dateFormat() + " HH:mm "));
- displayText(type);
- bool shouldDisable = (logoutRemaining > -330 && logoutRemaining < 310) || (shutdownRemaining > -330 && shutdownRemaining < 310);
+ if (_deadlineType != type) {
+ _deadlineType = type;
+ ui->lblText->setText(type->bodyText(_isLocked));
+ }
+ bool shouldDisable = (remaining > 0 && remaining < 310);
if (_standbyDisabled != shouldDisable) {
_standbyDisabled = shouldDisable;
if (shouldDisable) {
@@ -97,7 +84,6 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) :
}
});
t->start();
- this->setMouseTracking(true);
reloadValues();
}
@@ -117,40 +103,7 @@ void SaverWidget::reloadValues()
_logoutDeadline = s.value("lockDeadline", 0).toLongLong();
_shutdownDeadline = s.value("shutdownDeadline", 0).toLongLong();
// TODO: Load text strings for everything
- _deadlineType = DeadlineType::Unspecified;
-}
-
-void SaverWidget::displayText(DeadlineType dlt)
-{
- if (_deadlineType == dlt)
- return;
- _deadlineType = dlt;
- if (dlt == DeadlineType::IdleKillLocked) {
- ui->lblText->setText("<html><body><br>"
- "Zum oben angegebenen Zeitpunkt wird die aktuell laufende Sitzung beendet, "
- "wenn sie zuvor nicht wieder entsperrt wird.<br>"
- "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>"
- "werden ohne Nachfrage geschlossen. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>"
- "sämtliche sich in Bearbeitung befindlichen Daten abzuspeichern, bzw. die Sitzung wieder zu entsperren.<br><br>"
- "Dies dient dazu zu vermeiden, dass ein Rechner stundenlang gesperrt wird und somit<br>"
- "anderen Nutzern nicht zur Verfügung steht.</body></html>");
- } else if (dlt == DeadlineType::IdleKill) {
- ui->lblText->setText("<html><body>Keine Nutzeraktivität festgestellt.<br>"
- "Zum oben angegebenen Zeitpunkt wird die aktuell laufende Sitzung beendet, "
- "wenn der Rechner nicht mehr verwendet wird.<br>"
- "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>"
- "werden ohne Nachfrage geschlossen. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>"
- "sämtliche sich in Bearbeitung befindlichen Daten abzuspeichern.<br><br>"
- "Dies dient dazu zu vermeiden, dass ein Rechner stundenlang gesperrt wird und somit<br>"
- "anderen Nutzern nicht zur Verfügung steht.</body></html>");
- } else if (dlt == DeadlineType::Shutdown) {
- ui->lblText->setText("<html><body>Achtung: Zum oben angegebenen Zeitpunkt wird der Computer heruntergefahren bzw. neugestartet.<br>"
- "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>"
- "werden ohne Nachfrage beendet. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>"
- "sämtliche Daten abzuspeichern und die Sitzung zu verlassen.</body></html>");
- } else {
- ui->lblText->setText("");
- }
+ _deadlineType = DeadlineType::Unknown;
}
void SaverWidget::mouseMoveEvent(QMouseEvent *)