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"