24 #include <kservicetypetrader.h>
35 #include "private/packages_p.h"
68 QString constraintTemplate =
"'%1' in [X-Plasma-ComponentTypes]";
75 if (!constraint.isEmpty()) {
76 constraint.append(
" or ");
79 constraint.append(constraintTemplate.arg(
"Applet"));
83 if (!constraint.isEmpty()) {
84 constraint.append(
" or ");
87 constraint.append(constraintTemplate.arg(
"DataEngine"));
91 if (!constraint.isEmpty()) {
92 constraint.append(
" or ");
95 constraint.append(constraintTemplate.arg(
"Runner"));
99 if (!constraint.isEmpty()) {
100 constraint.append(
" or ");
103 constraint.append(constraintTemplate.arg(
"Wallpaper"));
106 KService::List offers = KServiceTypeTrader::self()->query(
"Plasma/ScriptEngine", constraint);
110 QStringList languages;
111 foreach (
const KService::Ptr &service, offers) {
112 QString language = service->property(
"X-Plasma-API").toString();
113 if (!languages.contains(language)) {
114 languages.append(language);
123 if (language.isEmpty()) {
124 return KService::List();
127 QRegExp re(
"[^a-zA-Z0-9\\-_]");
128 if (re.indexIn(language) != -1) {
129 kDebug() <<
"invalid language attempted:" << language;
130 return KService::List();
136 component =
"Applet";
139 component =
"DataEngine";
142 component =
"Runner";
145 component =
"Wallpaper";
148 return KService::List();
152 QString constraint = QString(
"[X-Plasma-API] == '%1' and "
153 "'%2' in [X-Plasma-ComponentTypes]").arg(language, component);
154 KService::List offers = KServiceTypeTrader::self()->query(
"Plasma/ScriptEngine", constraint);
157 if (offers.isEmpty()) {
158 kDebug() <<
"No offers for \"" << language <<
"\"";
172 foreach (
const KService::Ptr &service, offers) {
195 kDebug() <<
"Couldn't load script engine for language " << language
196 <<
"! error reported: " << error;
274 if (offers.isEmpty()) {
278 KService::Ptr offer = offers.first();
279 QString packageFormat = offer->property(
"X-Plasma-PackageFormat").toString();
281 if (packageFormat.isEmpty()) {
291 #include <scriptengine.moc>