File indexing completed on 2024-04-28 05:36:15

0001 /*
0002  *   SPDX-FileCopyrightText: 2010 Dario Freddi <drf@kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "powerdevilaction.h"
0008 
0009 #include "powerdevil_debug.h"
0010 #include "powerdevilcore.h"
0011 
0012 #include <QDebug>
0013 
0014 namespace PowerDevil
0015 {
0016 
0017 Action::Action(QObject *parent)
0018     : QObject(parent)
0019 {
0020     m_core = qobject_cast<PowerDevil::Core *>(parent);
0021 }
0022 
0023 Action::~Action()
0024 {
0025 }
0026 
0027 void Action::registerIdleTimeout(std::chrono::milliseconds timeout)
0028 {
0029     m_registeredIdleTimeouts.append(timeout);
0030     m_core->registerActionTimeout(this, timeout);
0031 }
0032 
0033 void Action::unregisterIdleTimeouts()
0034 {
0035     // Remove all registered idle timeouts, if any
0036     m_core->unregisterActionTimeouts(this);
0037     m_registeredIdleTimeouts.clear();
0038 }
0039 
0040 void Action::unloadAction()
0041 {
0042     unregisterIdleTimeouts();
0043 }
0044 
0045 bool Action::isSupported()
0046 {
0047     return true;
0048 }
0049 
0050 Core *Action::core() const
0051 {
0052     return m_core;
0053 }
0054 
0055 void Action::trigger(const QVariantMap &args)
0056 {
0057     if (args.contains(QStringLiteral("Explicit")) && args[QStringLiteral("Explicit")].toBool()) {
0058         // The action was explicitly triggered by the user, hence any policy check is bypassed.
0059         triggerImpl(args);
0060     } else {
0061         // The action was taken automatically: let's check if we have the rights to do that
0062         PolicyAgent::RequiredPolicies unsatisfiablePolicies = PolicyAgent::instance()->requirePolicyCheck(m_requiredPolicies);
0063         if (unsatisfiablePolicies == PolicyAgent::None) {
0064             // Ok, let's trigger the action
0065             triggerImpl(args);
0066         } else {
0067             // TODO: Notify somehow?
0068             qCWarning(POWERDEVIL) << "Unsatisfied policies, the action has been aborted";
0069         }
0070     }
0071 }
0072 
0073 void Action::setRequiredPolicies(PolicyAgent::RequiredPolicies requiredPolicies)
0074 {
0075     m_requiredPolicies = requiredPolicies;
0076 }
0077 
0078 void Action::onIdleTimeout(std::chrono::milliseconds /*timeout*/)
0079 {
0080 }
0081 
0082 void Action::onWakeupFromIdle()
0083 {
0084 }
0085 
0086 void Action::onProfileLoad(const QString & /*previousProfile*/, const QString & /*newProfile*/)
0087 {
0088 }
0089 
0090 void Action::onProfileUnload()
0091 {
0092 }
0093 
0094 } // namespace PowerDevil
0095 
0096 #include "moc_powerdevilaction.cpp"