File indexing completed on 2024-05-19 05:38:01

0001 /*
0002     SPDX-FileCopyrightText: 2023 Thenujan Sandramohan <sthenujan2002@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QDBusConnection>
0010 #include <QDBusObjectPath>
0011 #include <QObject>
0012 
0013 class QDBusPendingCallWatcher;
0014 
0015 class Unit : public QObject
0016 {
0017     Q_OBJECT
0018     Q_PROPERTY(QString activeState MEMBER m_activeState NOTIFY dataChanged);
0019     Q_PROPERTY(QString activeStateValue MEMBER m_activeStateValue NOTIFY dataChanged);
0020     Q_PROPERTY(QString description MEMBER m_description NOTIFY dataChanged);
0021     Q_PROPERTY(QString timeActivated MEMBER m_timeActivated NOTIFY dataChanged);
0022     Q_PROPERTY(QString logs MEMBER m_logs NOTIFY dataChanged);
0023     Q_PROPERTY(bool invalid MEMBER m_invalid NOTIFY dataChanged);
0024 
0025 public:
0026     explicit Unit(QObject *parent = nullptr, bool invalid = false);
0027     ~Unit() override;
0028 
0029     void setId(const QString &id);
0030 
0031     Q_INVOKABLE void start();
0032     Q_INVOKABLE void stop();
0033     Q_INVOKABLE void reloadLogs();
0034 
0035 Q_SIGNALS:
0036     void journalError(const QString &message);
0037     void error(const QString &message);
0038     void dataChanged();
0039 
0040 private Q_SLOTS:
0041     void dbusPropertiesChanged(QString name, QVariantMap map, QStringList list);
0042     void callFinishedSlot(QDBusPendingCallWatcher *call);
0043 
0044 private:
0045     void loadAllProperties();
0046     void setActiveEnterTimestamp(qulonglong ActiveEnterTimestamp);
0047     void getAllCallback(QDBusPendingCallWatcher *call);
0048     QStringList getLastJournalEntries(const QString &unit);
0049 
0050     QString m_id;
0051     QString m_description;
0052     QString m_activeState;
0053     QString m_activeStateValue;
0054     QString m_timeActivated;
0055     QString m_logs;
0056     QDBusObjectPath m_dbusObjectPath;
0057     bool m_invalid;
0058 
0059     const QString m_connSystemd = QStringLiteral("org.freedesktop.systemd1");
0060     const QString m_pathSysdMgr = QStringLiteral("/org/freedesktop/systemd1");
0061     const QString m_ifaceMgr = QStringLiteral("org.freedesktop.systemd1.Manager");
0062     const QString m_ifaceUnit = QStringLiteral("org.freedesktop.systemd1.Unit");
0063     QDBusConnection m_sessionBus = QDBusConnection::sessionBus();
0064 };
0065 
0066 Q_DECLARE_METATYPE(Unit);