File indexing completed on 2024-05-12 05:35:37

0001 /*
0002  *  SPDX-FileCopyrightText: 2015-2016 Ivan Cukic <ivan.cukic@kde.org>
0003  *  SPDX-FileCopyrightText: 2023 Ismael Asensio <isma.af@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006  */
0007 
0008 #include "kcm_activities.h"
0009 #include "activityconfig.h"
0010 
0011 #include <PlasmaActivities/Controller>
0012 #include <KAuthorized>
0013 #include <KLocalizedString>
0014 #include <KPluginFactory>
0015 
0016 #include <QTimer>
0017 #include <QtQml/QQmlModuleRegistration>
0018 
0019 K_PLUGIN_CLASS_WITH_JSON(ActivitiesModule, "kcm_activities.json")
0020 
0021 ActivitiesModule::ActivitiesModule(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
0022     : KQuickConfigModule(parent, metaData)
0023     , m_isNewActivityAuthorized(KAuthorized::authorize(QStringLiteral("plasma-desktop/add_activities")))
0024 {
0025     qmlRegisterType<ActivityConfig>("org.kde.kcms.activities", 1, 0, "ActivityConfig");
0026 
0027     if (!args.isEmpty()) {
0028         m_firstArgument = args.first().toString();
0029     }
0030 
0031     connect(this, &KAbstractConfigModule::activationRequested, this, [this](const QVariantList &args) {
0032         if (!args.isEmpty()) {
0033             handleArgument(args.first().toString());
0034         }
0035     });
0036 }
0037 
0038 ActivitiesModule::~ActivitiesModule()
0039 {
0040 }
0041 
0042 bool ActivitiesModule::isNewActivityAuthorized() const
0043 {
0044     return m_isNewActivityAuthorized;
0045 }
0046 
0047 void ActivitiesModule::configureActivity(const QString &id)
0048 {
0049     if (!id.isEmpty() && !KActivities::Controller().activities().contains(id)) {
0050         qWarning() << "Cannot configure activity. There is no activity with id" << id;
0051         qWarning() << "List of Activities: " << KActivities::Controller().activities();
0052         return;
0053     }
0054 
0055     if (depth() > 1) {
0056         pop();
0057     }
0058     push(QStringLiteral("ActivityEditor.qml"), QVariantMap{{QStringLiteral("activityId"), id}});
0059 }
0060 
0061 void ActivitiesModule::newActivity()
0062 {
0063     // Launch the editor with an empty string as activity id
0064     configureActivity(QString());
0065 }
0066 
0067 void ActivitiesModule::deleteActivity(const QString &id)
0068 {
0069     if (!m_isNewActivityAuthorized) {
0070         return;
0071     }
0072 
0073     KActivities::Controller().removeActivity(id);
0074 }
0075 
0076 void ActivitiesModule::load()
0077 {
0078     if (m_firstArgument.isEmpty()) {
0079         return;
0080     }
0081 
0082     // Delay so the KActivities::Consumer can load the activities status
0083     QTimer::singleShot(0, this, [this]() {
0084         handleArgument(m_firstArgument);
0085         m_firstArgument = QString();
0086     });
0087 }
0088 
0089 void ActivitiesModule::handleArgument(const QString &argument)
0090 {
0091     if (argument == QStringLiteral("newActivity")) {
0092         newActivity();
0093     } else {
0094         configureActivity(argument);
0095     }
0096 }
0097 
0098 #include "kcm_activities.moc"