fix video tuortial widget

This commit is contained in:
Aaron Seigo 2011-12-05 22:40:16 +01:00
parent 461d2562ce
commit 2435f1cc6a
7 changed files with 104 additions and 1 deletions

View File

@ -21,11 +21,15 @@
#include <QDir> #include <QDir>
#include <KDesktopFile>
#include <KGlobalSettings> #include <KGlobalSettings>
#include <KIO/CopyJob>
#include <KIO/Job> #include <KIO/Job>
#include <KRun> #include <KRun>
#include <KStandardDirs> #include <KStandardDirs>
#include <Plasma/Package>
QScriptValue ScriptEnv::openUrl(QScriptContext *context, QScriptEngine *engine) QScriptValue ScriptEnv::openUrl(QScriptContext *context, QScriptEngine *engine)
{ {
Q_UNUSED(engine) Q_UNUSED(engine)
@ -87,6 +91,67 @@ QScriptValue ScriptEnv::getUrl(QScriptContext *context, QScriptEngine *engine)
return engine->newQObject(job); return engine->newQObject(job);
} }
QScriptValue ScriptEnv::download(QScriptContext *context, QScriptEngine *engine)
{
if (context->argumentCount() == 0) {
return engine->undefinedValue();
}
QScriptValue v = context->argument(0);
KUrl url = v.isString() ? KUrl(v.toString()) : qscriptvalue_cast<KUrl>(v);
if (!url.isValid()) {
return engine->undefinedValue();
}
QString requestedFileName;
if (context->argumentCount() > 1) {
requestedFileName = context->argument(1).toString();
}
ScriptEnv *env = ScriptEnv::findScriptEnv(engine);
if (!env) {
//kDebug() << "findScriptEnv failed";
return engine->undefinedValue();
}
QStringList protocols;
protocols << "http" << "https" << "ftp" << "ftps";
if (!protocols.contains(url.protocol())) {
return engine->undefinedValue();
}
QScriptContext *c = engine->currentContext();
QString destination;
while (c) {
QScriptValue v = c->activationObject().property("__plasma_package");
if (v.isVariant()) {
KDesktopFile config(v.toVariant().value<Plasma::Package>().path() + "/metadata.desktop");
KConfigGroup cg = config.desktopGroup();
const QString pluginName = cg.readEntry("X-KDE-PluginInfo-Name", QString());
destination = KGlobalSettings::downloadPath() + "Plasma/" + pluginName + '/';
break;
}
c = c->parentContext();
}
if (destination.isEmpty()) {
return engine->undefinedValue();
}
requestedFileName.prepend(destination);
QDir dir(requestedFileName);
dir.mkpath(destination);
if (!dir.absolutePath().startsWith(destination)) {
requestedFileName = destination;
}
//TODO: allow showing desktop progress info?
KIO::CopyJob *job = KIO::copy(url, KUrl(requestedFileName), KIO::HideProgressInfo);
return engine->newQObject(job);
}
QScriptValue ScriptEnv::userDataPath(QScriptContext *context, QScriptEngine *engine) QScriptValue ScriptEnv::userDataPath(QScriptContext *context, QScriptEngine *engine)
{ {
Q_UNUSED(engine) Q_UNUSED(engine)

View File

@ -68,7 +68,6 @@ void ScriptEnv::setupGlobalObject()
// property is hidden from scripts. // property is hidden from scripts.
global.setProperty("__plasma_scriptenv", m_engine->newQObject(this), global.setProperty("__plasma_scriptenv", m_engine->newQObject(this),
QScriptValue::ReadOnly|QScriptValue::Undeletable|QScriptValue::SkipInEnumeration); QScriptValue::ReadOnly|QScriptValue::Undeletable|QScriptValue::SkipInEnumeration);
// Add utility functions // Add utility functions
#ifndef DECLARATIVE #ifndef DECLARATIVE
global.setProperty("print", m_engine->newFunction(ScriptEnv::print)); global.setProperty("print", m_engine->newFunction(ScriptEnv::print));
@ -182,6 +181,9 @@ bool ScriptEnv::importBuiltinExtension(const QString &extension, QScriptValue &o
obj.setProperty("userDataPath", m_engine->newFunction(ScriptEnv::userDataPath)); obj.setProperty("userDataPath", m_engine->newFunction(ScriptEnv::userDataPath));
obj.setProperty("runCommand", m_engine->newFunction(ScriptEnv::runCommand)); obj.setProperty("runCommand", m_engine->newFunction(ScriptEnv::runCommand));
return true; return true;
} else if ("download" == extension) {
obj.setProperty("download", m_engine->newFunction(ScriptEnv::download));
return true;
} }
return false; return false;

View File

@ -27,6 +27,11 @@
#include "authorization.h" #include "authorization.h"
namespace Plasma
{
class Package;
} // namespace Plasma
class ScriptEnv : public QObject class ScriptEnv : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -87,6 +92,7 @@ private:
static QScriptValue applicationExists(QScriptContext *context, QScriptEngine *engine); static QScriptValue applicationExists(QScriptContext *context, QScriptEngine *engine);
static QScriptValue openUrl(QScriptContext *context, QScriptEngine *engine); static QScriptValue openUrl(QScriptContext *context, QScriptEngine *engine);
static QScriptValue getUrl(QScriptContext *context, QScriptEngine *engine); static QScriptValue getUrl(QScriptContext *context, QScriptEngine *engine);
static QScriptValue download(QScriptContext *context, QScriptEngine *engine);
static QScriptValue userDataPath(QScriptContext *context, QScriptEngine *engine); static QScriptValue userDataPath(QScriptContext *context, QScriptEngine *engine);
static QScriptValue listAddons(QScriptContext *context, QScriptEngine *engine); static QScriptValue listAddons(QScriptContext *context, QScriptEngine *engine);
static QScriptValue loadAddon(QScriptContext *context, QScriptEngine *engine); static QScriptValue loadAddon(QScriptContext *context, QScriptEngine *engine);

View File

@ -22,12 +22,14 @@
#include "appletinterface.h" #include "appletinterface.h"
#include <QAction> #include <QAction>
#include <QDir>
#include <QFile> #include <QFile>
#include <QScriptEngine> #include <QScriptEngine>
#include <QSignalMapper> #include <QSignalMapper>
#include <QTimer> #include <QTimer>
#include <KDebug> #include <KDebug>
#include <KGlobalSettings>
#include <KIcon> #include <KIcon>
#include <KService> #include <KService>
#include <KServiceTypeTrader> #include <KServiceTypeTrader>
@ -412,6 +414,23 @@ AppletInterface::ItemStatus AppletInterface::status() const
return (AppletInterface::ItemStatus)((int)(applet()->status())); return (AppletInterface::ItemStatus)((int)(applet()->status()));
} }
/*
QString AppletInterface::downloadPath(const QString &file)
{
KDesktopFile config(v.toVariant().value<Plasma::Package>().path() + "/metadata.desktop");
KConfigGroup cg = config.desktopGroup();
const QString pluginName = cg.readEntry("X-KDE-PluginInfo-Name", QString());
destination = KGlobalSettings::downloadPath() + "/Plasma/" + pluginName + '/';
}
*/
QStringList AppletInterface::downloadedFiles() const
{
const QString downloadDir = KGlobalSettings::downloadPath() + "/Plasma/" + applet()->pluginName();
QDir dir(downloadDir);
return dir.entryList(QDir::Files | QDir::NoSymLinks | QDir::Readable);
}
void AppletInterface::gc() void AppletInterface::gc()
{ {
QTimer::singleShot(0, m_appletScriptEngine, SLOT(collectGarbage())); QTimer::singleShot(0, m_appletScriptEngine, SLOT(collectGarbage()));

View File

@ -304,6 +304,9 @@ enum IntervalAlignment {
void setStatus(const ItemStatus &status); void setStatus(const ItemStatus &status);
ItemStatus status() const; ItemStatus status() const;
// Q_INVOKABLE QString downloadPath(const QString &file);
Q_INVOKABLE QStringList downloadedFiles() const;
Q_SIGNALS: Q_SIGNALS:
void releaseVisualFocus(); void releaseVisualFocus();
void configNeedsSaving(); void configNeedsSaving();

View File

@ -390,6 +390,10 @@ void DeclarativeAppletScript::setupObjects()
QScriptValue global = m_engine->globalObject(); QScriptValue global = m_engine->globalObject();
QScriptValue v = m_engine->newVariant(QVariant::fromValue(*applet()->package()));
global.setProperty("__plasma_package", v,
QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
m_self = m_engine->newQObject(m_interface); m_self = m_engine->newQObject(m_interface);
m_self.setScope(global); m_self.setScope(global);
global.setProperty("plasmoid", m_self); global.setProperty("plasmoid", m_self);

View File

@ -510,6 +510,10 @@ void SimpleJavaScriptApplet::setupObjects()
global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup)); global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup));
global.setProperty("ParallelAnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::parallelAnimationGroup)); global.setProperty("ParallelAnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::parallelAnimationGroup));
QScriptValue v = m_engine->newVariant(QVariant::fromValue(*applet()->package()));
global.setProperty("__plasma_package", v,
QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
// Bindings for data engine // Bindings for data engine
bindI18N(m_engine); bindI18N(m_engine);