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

0001 /*
0002     SPDX-FileCopyrightText: 2009 Chani Armitage <chani@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "appsengine.h"
0008 #include "appsource.h"
0009 
0010 #include <KSycoca>
0011 
0012 AppsEngine::AppsEngine(QObject *parent)
0013     : Plasma5Support::DataEngine(parent)
0014 {
0015     init();
0016 }
0017 
0018 AppsEngine::~AppsEngine()
0019 {
0020 }
0021 
0022 void AppsEngine::init()
0023 {
0024     addGroup(KServiceGroup::root());
0025     connect(KSycoca::self(), &KSycoca::databaseChanged, this, [this]() {
0026         removeAllSources();
0027         addGroup(KServiceGroup::root());
0028     });
0029 }
0030 
0031 Plasma5Support::Service *AppsEngine::serviceForSource(const QString &name)
0032 {
0033     AppSource *source = dynamic_cast<AppSource *>(containerForSource(name));
0034     // if source does not exist, return null service
0035     if (!source) {
0036         return Plasma5Support::DataEngine::serviceForSource(name);
0037     }
0038 
0039     // if source represents a group or something, return null service
0040     if (!source->isApp()) {
0041         return Plasma5Support::DataEngine::serviceForSource(name);
0042     }
0043     // if source represent a proper app, return real service
0044     Plasma5Support::Service *service = source->createService();
0045     service->setParent(this);
0046     return service;
0047 }
0048 
0049 void AppsEngine::addGroup(KServiceGroup::Ptr group)
0050 {
0051     if (!(group && group->isValid())) {
0052         return;
0053     }
0054     AppSource *appSource = new AppSource(group, this);
0055     // TODO listen for changes
0056     addSource(appSource);
0057     // do children
0058     foreach (const KServiceGroup::Ptr &subGroup, group->groupEntries(KServiceGroup::NoOptions)) {
0059         addGroup(subGroup);
0060     }
0061     foreach (const KService::Ptr &app, group->serviceEntries(KServiceGroup::NoOptions)) {
0062         addApp(app);
0063     }
0064 }
0065 
0066 void AppsEngine::addApp(KService::Ptr app)
0067 {
0068     AppSource *appSource = new AppSource(app, this);
0069     // TODO listen for changes
0070     addSource(appSource);
0071 }
0072 
0073 K_PLUGIN_CLASS_WITH_JSON(AppsEngine, "plasma-dataengine-apps.json")
0074 
0075 #include "appsengine.moc"