File indexing completed on 2024-05-12 05:29:22

0001 /*
0002  *   SPDX-FileCopyrightText: 2010-2016 Ivan Cukic <ivan.cukic@kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 // Self
0010 #include "Activities.h"
0011 
0012 // Qt
0013 #include <QReadWriteLock>
0014 #include <QString>
0015 #include <QTimer>
0016 
0017 // KDE
0018 #include <kconfig.h>
0019 #include <kconfiggroup.h>
0020 
0021 class KSMServer;
0022 
0023 class Activities::Private : public QObject
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     Private(Activities *parent);
0029     ~Private() override;
0030 
0031     // Loads the last activity
0032     // the user has used
0033     void loadLastActivity();
0034 
0035     // If the current activity is not running,
0036     // make some other activity current
0037     void ensureCurrentActivityIsRunning();
0038 
0039 public Q_SLOTS:
0040     bool setCurrentActivity(const QString &activity);
0041     bool previousActivity();
0042     bool nextActivity();
0043     void updateSortedActivityList();
0044 
0045 public:
0046     void setActivityState(const QString &activity, Activities::State state);
0047 
0048     QTimer configSyncTimer;
0049     KConfig config;
0050 
0051     // Interface to the session management
0052     KSMServer *ksmserver;
0053 
0054     QHash<QString, Activities::State> activities;
0055     QList<ActivityInfo> sortedActivities;
0056     QReadWriteLock activitiesLock;
0057     QString currentActivity;
0058 
0059 public:
0060     inline KConfigGroup activityNameConfig()
0061     {
0062         return KConfigGroup(&config, QStringLiteral("activities"));
0063     }
0064 
0065     inline KConfigGroup activityDescriptionConfig()
0066     {
0067         return KConfigGroup(&config, QStringLiteral("activities-descriptions"));
0068     }
0069 
0070     inline KConfigGroup activityIconConfig()
0071     {
0072         return KConfigGroup(&config, QStringLiteral("activities-icons"));
0073     }
0074 
0075     inline KConfigGroup mainConfig()
0076     {
0077         return KConfigGroup(&config, QStringLiteral("main"));
0078     }
0079 
0080     inline QString activityName(const QString &activity)
0081     {
0082         return activityNameConfig().readEntry(activity, QString());
0083     }
0084 
0085     inline QString activityDescription(const QString &activity)
0086     {
0087         return activityDescriptionConfig().readEntry(activity, QString());
0088     }
0089 
0090     inline QString activityIcon(const QString &activity)
0091     {
0092         return activityIconConfig().readEntry(activity, QString());
0093     }
0094 
0095 public Q_SLOTS:
0096     // Schedules config syncing to be done after
0097     // a predefined time interval
0098     void scheduleConfigSync();
0099 
0100     // Immediately syncs the configuration file
0101     void configSync();
0102 
0103     QString addActivity(const QString &name);
0104     void removeActivity(const QString &activity);
0105     void activitySessionStateChanged(const QString &activity, int state);
0106 
0107 private:
0108     Activities *const q;
0109 };