[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/plasmagenericshell/scripting
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2011-01-15 1:56:05
Message-ID: 20110115015605.42A0F3E1F2 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1214514 by aseigo:

* userDataPath
* applicationPath


 M  +86 -2     scriptengine.cpp  
 M  +2 -0      scriptengine.h  


--- trunk/KDE/kdebase/workspace/libs/plasmagenericshell/scripting/scriptengine.cpp \
#1214513:1214514 @@ -19,12 +19,14 @@
 
 #include "scriptengine.h"
 
+#include <QDir>
 #include <QFile>
 #include <QFileInfo>
 #include <QScriptValueIterator>
 
 #include <KDebug>
 #include <kdeversion.h>
+#include <KGlobalSettings>
 #include <KMimeTypeTrader>
 #include <KServiceTypeTrader>
 #include <KShell>
@@ -408,12 +410,12 @@
     } else {
         // try the files in share/apps/kcm_componentchooser/
         const QStringList services = \
KGlobal::dirs()->findAllResources("data","kcm_componentchooser/*.desktop", \
                KStandardDirs::NoDuplicates);
-        kDebug() << "ok, trying in" << services.count();
+        //kDebug() << "ok, trying in" << services.count();
         foreach (const QString &service, services) {
             KConfig config(service, KConfig::SimpleConfig);
             KConfigGroup cg = config.group(QByteArray());
             const QString type = cg.readEntry("valueName", QString());
-            kDebug() << "    checking" << service << type << application;
+            //kDebug() << "    checking" << service << type << application;
             if (type.compare(application, Qt::CaseInsensitive) == 0) {
                 KConfig store(cg.readPathEntry("storeInFile", "null"));
                 KConfigGroup storeCg(&store, cg.readEntry("valueSection", \
QString())); @@ -431,6 +433,86 @@
     return false;
 }
 
+QScriptValue ScriptEngine::applicationPath(QScriptContext *context, QScriptEngine \
*engine) +{
+    Q_UNUSED(engine)
+    if (context->argumentCount() == 0) {
+        return false;
+    }
+
+    const QString application = context->argument(0).toString();
+    if (application.isEmpty()) {
+        return false;
+    }
+
+    // first, check for it in $PATH
+    const QString path = KStandardDirs::findExe(application);
+    if (!path.isEmpty()) {
+        return path;
+    }
+
+    if (KService::Ptr service = KService::serviceByStorageId(application)) {
+        return KStandardDirs::locate("apps", service->entryPath());
+    }
+
+    if (application.contains("'")) {
+        // apostrophes just screw up the trader lookups below, so check for it
+        return QString();
+    }
+
+    // next, consult ksycoca for an app by that name
+    KService::List offers = KServiceTypeTrader::self()->query("Application", \
QString("Name =~ '%1'").arg(application)); +    if (offers.isEmpty()) {
+        // next, consult ksycoca for an app by that generic name
+        offers = KServiceTypeTrader::self()->query("Application", \
QString("GenericName =~ '%1'").arg(application)); +    }
+
+    if (!offers.isEmpty()) {
+        KService::Ptr offer = offers.first();
+        return KStandardDirs::locate("apps", offer->entryPath());
+    }
+
+    return QString();
+}
+
+QScriptValue ScriptEngine::userDataPath(QScriptContext *context, QScriptEngine \
*engine) +{
+    Q_UNUSED(engine)
+    if (context->argumentCount() == 0) {
+        return QString();
+    }
+
+    const QString type = context->argument(0).toString();
+    if (type.isEmpty()) {
+        return QString();
+    }
+
+    if (context->argumentCount() > 1) {
+        const QString filename = context->argument(1).toString();
+        return KStandardDirs::locateLocal(type.toLatin1(), filename);
+    }
+
+    if (type.compare("home", Qt::CaseInsensitive) == 0) {
+        return QDir::homePath();
+    } else if (type.compare("desktop", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::desktopPath();
+    } else if (type.compare("autostart", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::autostartPath();
+    } else if (type.compare("documents", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::documentPath();
+    } else if (type.compare("music", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::musicPath();
+    } else if (type.compare("video", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::videosPath();
+    } else if (type.compare("downloads", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::downloadPath();
+    } else if (type.compare("pictures", Qt::CaseInsensitive) == 0) {
+        return KGlobalSettings::picturesPath();
+    }
+
+    return QString();
+}
+
 void ScriptEngine::setupEngine()
 {
     QScriptValue v = globalObject();
@@ -455,6 +537,8 @@
     m_scriptSelf.setProperty("loadTemplate", \
                newFunction(ScriptEngine::loadTemplate));
     m_scriptSelf.setProperty("applicationExists", \
                newFunction(ScriptEngine::applicationExists));
     m_scriptSelf.setProperty("defaultApplication", \
newFunction(ScriptEngine::defaultApplication)); +    \
m_scriptSelf.setProperty("userDataPath", newFunction(ScriptEngine::userDataPath)); +  \
m_scriptSelf.setProperty("applicationPath", \
newFunction(ScriptEngine::applicationPath));  
     setGlobalObject(m_scriptSelf);
 }
--- trunk/KDE/kdebase/workspace/libs/plasmagenericshell/scripting/scriptengine.h \
#1214513:1214514 @@ -78,6 +78,8 @@
     static QScriptValue loadTemplate(QScriptContext *context, QScriptEngine \
                *engine);
     static QScriptValue applicationExists(QScriptContext *context, QScriptEngine \
                *engine);
     static QScriptValue defaultApplication(QScriptContext *context, QScriptEngine \
*engine); +    static QScriptValue applicationPath(QScriptContext *context, \
QScriptEngine *engine); +    static QScriptValue userDataPath(QScriptContext \
*context, QScriptEngine *engine);  
     // helpers
     static QScriptValue createContainment(const QString &type, const QString \
&defautPlugin,


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic