File indexing completed on 2024-05-26 05:38:27

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "systemmonitor.h"
0008 
0009 #include <QDebug>
0010 #include <QQuickItem>
0011 #include <QQuickWindow>
0012 #include <QStandardPaths>
0013 #include <QWindow>
0014 
0015 #include <sensors/SensorQuery.h>
0016 
0017 #include <KConfigLoader>
0018 #include <KIO/ApplicationLauncherJob>
0019 #include <KLocalizedString>
0020 #include <KNotificationJobUiDelegate>
0021 #include <KService>
0022 #include <PlasmaQuick/SharedQmlEngine>
0023 
0024 SystemMonitor::SystemMonitor(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
0025     : Plasma::Applet(parent, data, args)
0026 {
0027     setHasConfigurationInterface(true);
0028 }
0029 
0030 SystemMonitor::~SystemMonitor() = default;
0031 
0032 void SystemMonitor::init()
0033 {
0034     configChanged();
0035 
0036     // FIXME HACK: better way to get the engine At least AppletQuickItem should have an engine() getter
0037     auto qmlObject = new PlasmaQuick::SharedQmlEngine();
0038     KConfigGroup cg = config();
0039     m_sensorFaceController = new KSysGuard::SensorFaceController(cg, qmlObject->engine().get());
0040     qmlObject->deleteLater();
0041 
0042     // NOTE: taking the pluginId from the child applet (cpu monitor, memory, whatever) is done implicitly by not embedding metadata in this applet
0043     const QString preset = config().readEntry("CurrentPreset", pluginMetaData().pluginId());
0044     // We have initialized our preset, subsequent calls should use the root-plugin id
0045     config().writeEntry("CurrentPreset", "org.kde.plasma.systemmonitor");
0046     m_sensorFaceController->loadPreset(preset);
0047 }
0048 
0049 KSysGuard::SensorFaceController *SystemMonitor::faceController() const
0050 {
0051     return m_sensorFaceController;
0052 }
0053 
0054 KSysGuard::SensorFaceController *SystemMonitor::workaroundController(QQuickItem *context) const
0055 {
0056     KConfigGroup cg = config();
0057     return new KSysGuard::SensorFaceController(cg, qmlEngine(context));
0058 }
0059 
0060 void SystemMonitor::configChanged()
0061 {
0062     if (m_sensorFaceController) {
0063         m_sensorFaceController->reloadConfig();
0064     }
0065 }
0066 
0067 void SystemMonitor::openSystemMonitor()
0068 {
0069     auto job = new KIO::ApplicationLauncherJob(KService::serviceByDesktopName("org.kde.plasma-systemmonitor"));
0070     job->setUiDelegate(new KNotificationJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled));
0071     job->start();
0072 }
0073 
0074 K_PLUGIN_CLASS(SystemMonitor)
0075 
0076 #include "systemmonitor.moc"