[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/runtime/plasma/scriptengines/javascript [POSSIBLY UNSAFE]
From: Aaron J. Seigo <aseigo () kde ! org>
Date: 2009-11-28 0:42:23
Message-ID: 1259368943.280341.3961.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1055423 by aseigo:
* actually process the optional list, not the required list, in the optional loop
* LaunchApp
M +77 -4 simplejavascriptapplet.cpp [POSSIBLY UNSAFE: KRun::runCommand]
M +5 -0 simplejavascriptapplet.h
--- trunk/KDE/kdebase/runtime/plasma/scriptengines/javascript/simplejavascriptapplet.cpp \
#1055422:1055423 @@ -26,12 +26,15 @@
#include <QGraphicsLayout>
#include <QWidget>
+#include <KConfigGroup>
#include <KDebug>
#include <KFileDialog>
#include <KIcon>
+#include <KMimeType>
+#include <KShell>
+#include <KStandardDirs>
#include <KLocale>
-#include <KStandardDirs>
-#include <KConfigGroup>
+#include <KRun>
#include <Plasma/AbstractAnimation>
#include <Plasma/AnimationGroup>
@@ -395,6 +398,72 @@
return include(mainScript());
}
+QScriptValue SimpleJavaScriptApplet::runApplication(QScriptContext *context, \
QScriptEngine *engine) +{
+ Q_UNUSED(engine)
+ if (context->argumentCount() == 0) {
+ return false;
+ }
+
+ KUrl::List urls;
+ if (context->argumentCount() > 1) {
+ urls = qscriptvalue_cast<KUrl::List>(context->argument(1));
+ }
+
+ const QString app = context->argument(0).toString();
+
+ KService::Ptr service = KService::serviceByStorageId(app);
+ if (service) {
+ return KRun::run(*service, urls, 0);
+ }
+
+ const QString exec = KGlobal::dirs()->findExe(app);
+ if (!exec.isEmpty()) {
+ return KRun::run(exec, urls, 0);
+ }
+
+ return false;
+}
+
+QScriptValue SimpleJavaScriptApplet::runCommand(QScriptContext *context, \
QScriptEngine *engine) +{
+ Q_UNUSED(engine)
+ if (context->argumentCount() == 0) {
+ return false;
+ }
+
+ const QString exec = KGlobal::dirs()->findExe(context->argument(0).toString());
+ if (!exec.isEmpty()) {
+ QString args;
+ if (context->argumentCount() > 1) {
+ const QStringList argList = \
qscriptvalue_cast<QStringList>(context->argument(1)); + if \
(!argList.isEmpty()) { + args = ' ' + KShell::joinArgs(argList);
+ }
+ }
+
+ return KRun::runCommand(exec + args, 0);
+ }
+
+ return false;
+}
+
+QScriptValue SimpleJavaScriptApplet::openUrl(QScriptContext *context, QScriptEngine \
*engine) +{
+ Q_UNUSED(engine)
+ if (context->argumentCount() == 0) {
+ return false;
+ }
+
+ QScriptValue v = context->argument(0);
+ KUrl url = v.isString() ? KUrl(v.toString()) : qscriptvalue_cast<KUrl>(v);
+ if (url.isValid()) {
+ return KRun::runUrl(url, KMimeType::findByUrl(url)->name(), 0);
+ }
+
+ return false;
+}
+
bool SimpleJavaScriptApplet::importBuiltinExtesion(const QString &extension)
{
kDebug() << extension;
@@ -402,6 +471,9 @@
FileDialogProxy::registerWithRuntime(m_engine);
return true;
} else if ("launchapp" == extension) {
+ m_self.setProperty("runApplication", \
m_engine->newFunction(SimpleJavaScriptApplet::runApplication)); + \
m_self.setProperty("runCommand", \
m_engine->newFunction(SimpleJavaScriptApplet::runCommand)); + \
m_self.setProperty("openUrl", \
m_engine->newFunction(SimpleJavaScriptApplet::openUrl)); return true;
} else if ("http" == extension) {
return true;
@@ -445,8 +517,8 @@
}
QStringList optionalExtensions = \
info.service()->property("X-Plasma-OptionalExtensions", \
QVariant::StringList).toStringList();
- kDebug() << "extensions are" << optionalExtensions;
- foreach (const QString &ext, requiredExtensions) {
+ kDebug() << "optional extensions are" << optionalExtensions;
+ foreach (const QString &ext, optionalExtensions) {
QString extension = ext.toLower();
if (m_extensions.contains(extension)) {
@@ -559,6 +631,7 @@
global.setProperty("AnchorLayout", constructAnchorLayoutClass(m_engine));
// Add stuff from KDE libs
+ qScriptRegisterSequenceMetaType<KUrl::List>(m_engine);
global.setProperty("Url", constructKUrlClass(m_engine));
// Add stuff from Plasma
--- trunk/KDE/kdebase/runtime/plasma/scriptengines/javascript/simplejavascriptapplet.h \
#1055422:1055423 @@ -86,6 +86,11 @@
static QScriptValue createPrototype(QScriptEngine *engine, const QString &name);
static QScriptValue widgetAdjustSize(QScriptContext *context, QScriptEngine \
*engine);
+ // run extension
+ static QScriptValue runApplication(QScriptContext *context, QScriptEngine \
*engine); + static QScriptValue runCommand(QScriptContext *context, QScriptEngine \
*engine); + static QScriptValue openUrl(QScriptContext *context, QScriptEngine \
*engine); +
private:
static KSharedPtr<UiLoader> s_widgetLoader;
static QHash<QString, Plasma::Animator::Animation> s_animationDefs;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic