From c19c1c3799f0823eabd4113512d8dabcab480be7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 10 May 2019 15:12:46 +0200 Subject: Use new idle-daemon instead of file --- src/saverwidget.cpp | 111 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 33 deletions(-) (limited to 'src/saverwidget.cpp') diff --git a/src/saverwidget.cpp b/src/saverwidget.cpp index 88cf5a3..13340a0 100644 --- a/src/saverwidget.cpp +++ b/src/saverwidget.cpp @@ -10,9 +10,10 @@ #include #include #include -#include +#include +#include -static const QChar C_ZERO('0'); +#define C_ZERO QLatin1Char('0') static QString formatTime(qlonglong span) { @@ -29,14 +30,19 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) : QWidget(parent), ui(new Ui::Saver), _parentWinId(parentWinId), - _lastMouseFake(0), _logoutDeadline(0), _shutdownDeadline(0), _counter(0), _deadlineType(DeadlineType::Unknown), _standbyDisabled(false), - _isLocked(false) + _isLocked(false), + _unixSocket(nullptr), + _display(QString::fromLocal8Bit(qgetenv("DISPLAY"))) { + int i = _display.indexOf('.'); + if (i != -1) { + _display = _display.left(i); + } QString qss = Config::getMainQss(); qDebug() << "Applying QSS: " << qss; this->setStyleSheet(qss); @@ -47,7 +53,7 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) : if (_counter % 60 == 0) { this->reloadValues(); } - if (_counter % 4 == 0) { + if (!_isLocked && _counter % 4 == 0) { _isLocked = ScreenSaver::isLocked(); } _counter++; @@ -99,36 +105,75 @@ SaverWidget::~SaverWidget() void SaverWidget::reloadValues() { - QString display = QString::fromLocal8Bit(qgetenv("DISPLAY")); - int i = display.indexOf('.'); - if (i != -1) { - display = display.left(i); + if (_unixSocket != nullptr) { + _unixSocket->blockSignals(true); + _unixSocket->deleteLater(); } - QSettings s(QString("/run/openslx/idleaction-") + display, QSettings::IniFormat); - _logoutDeadline = s.value("lockDeadline", 0).toLongLong(); - _shutdownDeadline = s.value("shutdownDeadline", 0).toLongLong(); - // TODO: Load text strings for everything - _deadlineType = DeadlineType::Unknown; + _unixSocket = new QLocalSocket(); + connect(_unixSocket, &QLocalSocket::connected, [=]() { + qDebug() << "Connected to daewmweon"; + _unixSocket->write((QLatin1String("get ") + _display).toLocal8Bit()); + QTimer::singleShot(1000, [this]() { + _unixSocket->disconnectFromServer(); + }); + }); + connect(_unixSocket, QOverload::of(&QLocalSocket::error), [=](QLocalSocket::LocalSocketError err) { + qDebug() << "Local socket error:" << err; + }); + connect(_unixSocket, &QLocalSocket::disconnected, this, &SaverWidget::parseDaemonData); + _unixSocket->connectToServer("/run/idle-daemon"); } -void SaverWidget::mouseMoveEvent(QMouseEvent *) +void SaverWidget::parseDaemonData() { - /* - // Doesn't work, method is never called :-( - qint64 now = QDateTime::currentMSecsSinceEpoch(); - if (now - _lastMouseFake < 1000) - return; - ui->lblText->setText(QString::number(int(now / 1000))); - _lastMouseFake = now; - XEvent ev; - memset(&ev, 0, sizeof(ev)); - ev.type = ButtonPress; - ev.xbutton.button = 1; - ev.xbutton.same_screen = True; - ev.xbutton.root = ev.xbutton.window = ev.xbutton.subwindow = _parentWinId; - XSendEvent(QX11Info::display(), _parentWinId, True, 0xfff, &ev); - ev.type = ButtonRelease; - ev.xbutton.state = 0x100; - XSendEvent(QX11Info::display(), _parentWinId, True, 0xfff, &ev); - */ + QTextStream ts(_unixSocket); + QString line; +#define SEC_NONE 0 +#define SEC_GENERAL 1 +#define SEC_ME 2 +#define STORE(x) else if (key == QLatin1String( #x )) x = value.toString() + int sec = SEC_NONE; + QString nextAction, nextActionTime, logoutTime, locked; + while (!ts.atEnd()) { + line = ts.readLine(); + if (line.isEmpty()) + continue; + if (line.at(0) == QLatin1Char('[')) { + // Section + if (line == QLatin1String("[General]")) { + sec = SEC_GENERAL; + } else if ( line == "[" + _display + "]") { + sec = SEC_ME; + } else { + sec = SEC_NONE; + } + } else { + // Value + int i = line.indexOf(QLatin1Char('=')); + if (i == -1) + continue; + const QStringRef key(&line, 0, i); + const QStringRef value(&line, i+ 1, line.size() - (i + 1)); + if (sec == SEC_GENERAL) { + if (false); + STORE(nextAction); + STORE(nextActionTime); + } else if (sec == SEC_ME) { + if (false); + STORE(logoutTime); + STORE(locked); + } + } + } + if (nextAction.isEmpty() || nextAction == QLatin1String("none") || nextActionTime.isEmpty()) { + _shutdownDeadline = 0; + } else { + _shutdownDeadline = nextActionTime.toLongLong(); + } + _logoutDeadline = logoutTime.toLongLong(); + if (!_isLocked && locked.toInt() != 0) { + _isLocked = true; + } + // TODO: Load text strings for everything + _deadlineType = DeadlineType::Unknown; } -- cgit v1.2.3-55-g7522