File indexing completed on 2024-05-05 05:38:34

0001 /*
0002     SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "activityinfo.h"
0008 
0009 #include <PlasmaActivities/ActivitiesModel>
0010 #include <PlasmaActivities/Consumer>
0011 
0012 namespace TaskManager
0013 {
0014 class Q_DECL_HIDDEN ActivityInfo::Private
0015 {
0016 public:
0017     Private(ActivityInfo *q);
0018     ~Private();
0019 
0020     static int instanceCount;
0021     static KActivities::Consumer *activityConsumer;
0022     static KActivities::ActivitiesModel *activitiesModel;
0023 };
0024 
0025 int ActivityInfo::Private::instanceCount = 0;
0026 KActivities::Consumer *ActivityInfo::Private::activityConsumer = nullptr;
0027 KActivities::ActivitiesModel *ActivityInfo::Private::activitiesModel = nullptr;
0028 
0029 ActivityInfo::Private::Private(ActivityInfo *)
0030 {
0031     ++instanceCount;
0032 }
0033 
0034 ActivityInfo::Private::~Private()
0035 {
0036     --instanceCount;
0037 
0038     if (!instanceCount) {
0039         delete activityConsumer;
0040         activityConsumer = nullptr;
0041         delete activitiesModel;
0042         activitiesModel = nullptr;
0043     }
0044 }
0045 
0046 ActivityInfo::ActivityInfo(QObject *parent)
0047     : QObject(parent)
0048     , d(new Private(this))
0049 {
0050     if (!d->activityConsumer) {
0051         d->activityConsumer = new KActivities::Consumer();
0052     }
0053 
0054     connect(d->activityConsumer, &KActivities::Consumer::currentActivityChanged, this, &ActivityInfo::currentActivityChanged);
0055     connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, this, &ActivityInfo::numberOfRunningActivitiesChanged);
0056     connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, this, &ActivityInfo::namesOfRunningActivitiesChanged);
0057 
0058     if (!d->activitiesModel) {
0059         d->activitiesModel = new KActivities::ActivitiesModel();
0060         d->activitiesModel->setShownStates(QList<KActivities::Info::State>{KActivities::Info::Running});
0061     }
0062 
0063     connect(d->activitiesModel, &KActivities::ActivitiesModel::modelReset, this, &ActivityInfo::namesOfRunningActivitiesChanged);
0064 
0065     connect(d->activitiesModel,
0066             &KActivities::ActivitiesModel::dataChanged,
0067             this,
0068             [this](const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles) {
0069                 Q_UNUSED(topLeft)
0070                 Q_UNUSED(bottomRight)
0071 
0072                 if (roles.isEmpty() || roles.contains(Qt::DisplayRole)) {
0073                     Q_EMIT namesOfRunningActivitiesChanged();
0074                 }
0075             });
0076 }
0077 
0078 ActivityInfo::~ActivityInfo()
0079 {
0080 }
0081 
0082 QString ActivityInfo::currentActivity() const
0083 {
0084     return d->activityConsumer->currentActivity();
0085 }
0086 
0087 int ActivityInfo::numberOfRunningActivities() const
0088 {
0089     return d->activityConsumer->activities(KActivities::Info::State::Running).count();
0090 }
0091 
0092 QStringList ActivityInfo::runningActivities() const
0093 {
0094     return d->activityConsumer->activities(KActivities::Info::State::Running);
0095 }
0096 
0097 QString ActivityInfo::activityName(const QString &id)
0098 {
0099     KActivities::Info info(id);
0100 
0101     if (info.state() != KActivities::Info::Invalid) {
0102         return info.name();
0103     }
0104 
0105     return QString();
0106 }
0107 
0108 QString ActivityInfo::activityIcon(const QString &id)
0109 {
0110     KActivities::Info info(id);
0111 
0112     if (info.state() != KActivities::Info::Invalid) {
0113         return info.icon();
0114     }
0115 
0116     return QString();
0117 }
0118 }