implement package support

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=796112
This commit is contained in:
Aaron J. Seigo 2008-04-12 16:00:43 +00:00
parent 99c036a212
commit 40866fc443
2 changed files with 42 additions and 17 deletions

View File

@ -25,8 +25,10 @@
#include <KDebug> #include <KDebug>
#include <KPluginInfo> #include <KPluginInfo>
#include <KServiceTypeTrader> #include <KServiceTypeTrader>
#include <KStandardDirs>
#include <QTimer> #include <QTimer>
#include "package.h"
#include "scripting/runnerscript.h" #include "scripting/runnerscript.h"
#include "searchcontext.h" #include "searchcontext.h"
@ -35,33 +37,31 @@ namespace Plasma
class AbstractRunner::Private class AbstractRunner::Private
{ {
public: public:
bool hasMatchOptions;
bool hasConfig;
Priority priority;
Speed speed;
RunnerScript* script;
KPluginInfo runnerDescription;
AbstractRunner* runner;
QTime runtime;
int fastRuns;
Private(AbstractRunner* r, KService::Ptr service) Private(AbstractRunner* r, KService::Ptr service)
: priority(NormalPriority), : priority(NormalPriority),
speed(NormalSpeed), speed(NormalSpeed),
script(0), script(0),
runnerDescription(service), runnerDescription(service),
runner(r), runner(r),
fastRuns(0) fastRuns(0),
package(0)
{ {
if (runnerDescription.isValid()) { if (runnerDescription.isValid()) {
QString language = runnerDescription.property("X-Plasma-Language").toString(); const QString language = runnerDescription.property("X-Plasma-Language").toString();
if (!language.isEmpty()) { if (!language.isEmpty()) {
const QString path = KStandardDirs::locate("data",
"plasma/runners/" + runnerDescription.pluginName() + "/");
PackageStructure::Ptr structure = Plasma::packageStructure(language, Plasma::RunnerComponent);
structure->setPath(path);
package = new Package(path, structure);
script = Plasma::loadScriptEngine(language, runner); script = Plasma::loadScriptEngine(language, runner);
if (!script) { if (!script) {
kDebug() << "Could not create a" << language << "ScriptEngine for the" kDebug() << "Could not create a" << language << "ScriptEngine for the"
<< runnerDescription.name() << "Runner."; << runnerDescription.name() << "Runner.";
delete package;
package = 0;
} else { } else {
QTimer::singleShot(0, runner, SLOT(init())); QTimer::singleShot(0, runner, SLOT(init()));
} }
@ -69,14 +69,25 @@ class AbstractRunner::Private
} }
} }
bool hasMatchOptions;
bool hasConfig;
Priority priority;
Speed speed;
RunnerScript* script;
KPluginInfo runnerDescription;
AbstractRunner* runner;
QTime runtime;
int fastRuns;
Package *package;
static QMutex bigLock; static QMutex bigLock;
}; };
QMutex AbstractRunner::Private::bigLock; QMutex AbstractRunner::Private::bigLock;
AbstractRunner::AbstractRunner(QObject* parent, const QString& serviceId) AbstractRunner::AbstractRunner(QObject* parent, const QString& serviceId)
: QObject(parent), : QObject(parent),
d(new Private(this, KService::serviceByStorageId(serviceId))) d(new Private(this, KService::serviceByStorageId(serviceId)))
{ {
} }
@ -221,6 +232,11 @@ QString AbstractRunner::runnerName() const
return d->runnerDescription.property("X-Plasma-RunnerName").toString(); return d->runnerDescription.property("X-Plasma-RunnerName").toString();
} }
const Package* AbstractRunner::package() const
{
return d->package;
}
void AbstractRunner::init() void AbstractRunner::init()
{ {
if (d->script) { if (d->script) {

View File

@ -36,6 +36,7 @@ class KCompletion;
namespace Plasma namespace Plasma
{ {
class Package;
class RunnerScript; class RunnerScript;
/** /**
@ -168,6 +169,14 @@ class PLASMA_EXPORT AbstractRunner : public QObject
*/ */
QString runnerName() const; QString runnerName() const;
/**
* Accessor for the associated Package object if any.
* Generally, only Plasmoids come in a Package.
*
* @return the Package object, or 0 if none
**/
const Package* package() const;
protected: protected:
/** /**
* Sets whether or not the the runner has options for matches * Sets whether or not the the runner has options for matches