11#include "utils/dbusfuture_p.h"
13#include <QFileSystemWatcher>
19InfoPrivate::InfoPrivate(
Info *info,
const QString &activity)
21 , cache(ActivitiesCache::self())
28#define IMPLEMENT_SIGNAL_HANDLER(INTERNAL) \
29 void InfoPrivate::INTERNAL(const QString &_id) const \
30 { if (id == _id) Q_EMIT q->INTERNAL(); }
32IMPLEMENT_SIGNAL_HANDLER(added)
33IMPLEMENT_SIGNAL_HANDLER(removed)
34IMPLEMENT_SIGNAL_HANDLER(started)
35IMPLEMENT_SIGNAL_HANDLER(stopped)
36IMPLEMENT_SIGNAL_HANDLER(infoChanged)
38#undef IMPLEMENT_SIGNAL_HANDLER
40#define IMPLEMENT_SIGNAL_HANDLER(INTERNAL) \
41 void InfoPrivate::INTERNAL##Changed(const QString &_id, \
42 const QString &val) const \
45 Q_EMIT q->INTERNAL##Changed(val); \
49IMPLEMENT_SIGNAL_HANDLER(name)
50IMPLEMENT_SIGNAL_HANDLER(description)
51IMPLEMENT_SIGNAL_HANDLER(icon)
53#undef IMPLEMENT_SIGNAL_HANDLER
55void InfoPrivate::activityStateChanged(
const QString &idChanged,
58 if (idChanged ==
id) {
59 auto state =
static_cast<Info::State
>(newState);
60 Q_EMIT q->stateChanged(state);
70void InfoPrivate::setCurrentActivity(
const QString ¤tActivity)
73 if (currentActivity !=
id) {
76 Q_EMIT q->isCurrentChanged(
false);
79 if (currentActivity ==
id) {
82 Q_EMIT q->isCurrentChanged(
true);
90 , d(new InfoPrivate(this, activity))
93#define PASS_SIGNAL_HANDLER(SIGNAL_NAME,SLOT_NAME) \
94 connect(d->cache.get(), SIGNAL(SIGNAL_NAME(QString)), \
95 this, SLOT(SLOT_NAME(QString)));
97 PASS_SIGNAL_HANDLER(activityAdded,added)
98 PASS_SIGNAL_HANDLER(activityRemoved,removed)
101 PASS_SIGNAL_HANDLER(activityChanged,infoChanged)
102#undef PASS_SIGNAL_HANDLER
104#define PASS_SIGNAL_HANDLER(SIGNAL_NAME,SLOT_NAME,TYPE) \
105 connect(d->cache.get(), SIGNAL(SIGNAL_NAME(QString,TYPE)), \
106 this, SLOT(SLOT_NAME(QString,TYPE))); \
108 PASS_SIGNAL_HANDLER(activityStateChanged,activityStateChanged,
int);
109 PASS_SIGNAL_HANDLER(activityNameChanged,nameChanged,
QString);
110 PASS_SIGNAL_HANDLER(activityDescriptionChanged,descriptionChanged,
QString);
111 PASS_SIGNAL_HANDLER(activityIconChanged,iconChanged,
QString);
113#undef PASS_SIGNAL_HANDLER
114 connect(d->cache.get(), SIGNAL(currentActivityChanged(
QString)),
this, SLOT(setCurrentActivity(
QString)));
116 d->isCurrent = (d->cache.get()->m_currentActivity == activity);
126 auto currentState = state();
132 return QStringLiteral(
"activities://") + d->id;
140bool Info::isCurrent()
const
151 auto info = d->cache->getInfo(d->id);
169 activityStateChanged(
id, q->state());
178 if (!Manager::isServiceRunning()) {
182 if (Manager::activities()->ListActivities().value().contains(d->id)) {
185 if (Manager::features()->IsFeatureOperational(QStringLiteral(
"resources/linking"))) {
194#define CREATE_GETTER(What) \
195 QString Info::What() const \
197 auto info = d->cache->getInfo(d->id); \
198 return info ? info->What : QString(); \
203CREATE_GETTER(description)
210#include "moc_info.cpp"
ServiceStatus
Different states of the activities service.
@ Unknown
Unable to determine the status of the service.
@ NotRunning
Service is not running.
This class provides info about an activity.
State
State of the activity.
@ Unknown
Information is not yet retrieved from the service.
@ Running
Activity is running.
@ Invalid
This activity does not exist.
@ Stopped
Activity is stopped.
Availability
Specifies which parts of this class are functional.
@ Everything
Everything is available.
@ Nothing
No activity info provided (isValid is false)
@ BasicInfo
Basic info is provided.
Availability availability() const
Q_SCRIPTABLE CaptureState status()
Namespace for everything in libkactivities.
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)