mirror of
https://invent.kde.org/network/falkon.git
synced 2024-09-21 17:52:10 +02:00
GreaseMonkey: Rewrite values bridge to pass values as QString
Passing QVariant/QJsonValue is broken in QWebChannel (QtWebEngine?)
This commit is contained in:
parent
b8f9c7e15d
commit
30bad61eea
|
@ -36,6 +36,35 @@ var asyncCall = (func) => {
|
|||
}
|
||||
};
|
||||
|
||||
var decode = (val) => {
|
||||
val = String(val);
|
||||
if (!val.length) {
|
||||
return val;
|
||||
}
|
||||
var v = val.substr(1);
|
||||
if (val[0] == "b") {
|
||||
return Boolean(v == "true" ? true : false);
|
||||
} else if (val[0] == "i") {
|
||||
return Number(v);
|
||||
} else if (val[0] == "s") {
|
||||
return v;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
var encode = (val) => {
|
||||
if (typeof val == "boolean") {
|
||||
return "b" + (val ? "true" : "false");
|
||||
} else if (typeof val == "number") {
|
||||
return "i" + String(val);
|
||||
} else if (typeof val == "string") {
|
||||
return "s" + val;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
GM.deleteValue = function(name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
asyncCall(() => {
|
||||
|
@ -53,7 +82,9 @@ GM.deleteValue = function(name) {
|
|||
GM.getValue = function(name, value) {
|
||||
return new Promise((resolve) => {
|
||||
asyncCall(() => {
|
||||
external.extra.greasemonkey.getValue("%1", name, value, resolve);
|
||||
external.extra.greasemonkey.getValue("%1", name, encode(value), (res) => {
|
||||
resolve(decode(res));
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
@ -61,7 +92,7 @@ GM.getValue = function(name, value) {
|
|||
GM.setValue = function(name, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
asyncCall(() => {
|
||||
external.extra.greasemonkey.setValue("%1", name, value, (res) => {
|
||||
external.extra.greasemonkey.setValue("%1", name, encode(value), (res) => {
|
||||
if (res) {
|
||||
resolve();
|
||||
} else {
|
||||
|
|
5
src/plugins/GreaseMonkey/data/values.min.js
vendored
5
src/plugins/GreaseMonkey/data/values.min.js
vendored
|
@ -1,3 +1,4 @@
|
|||
function GM_deleteValue(a){localStorage.removeItem("%1"+a)}function GM_getValue(a,b){var c=localStorage.getItem("%1"+a);return null===c&&"undefined"!=typeof b?b:c}function GM_listValues(){for(var a=[],b=0;b<localStorage.length;b++){var c=localStorage.key(b);0===c.indexOf("%1")&&a.push(c.replace("%1",""))}return a}function GM_setValue(a,b){localStorage.setItem("%1"+a,b)}var asyncCall=function(a){window._falkon_external?a():document.addEventListener("_falkon_external_created",a)};
|
||||
GM.deleteValue=function(a){return new Promise(function(b,c){asyncCall(function(){external.extra.greasemonkey.deleteValue("%1",a,function(a){a?b():c()})})})};GM.getValue=function(a,b){return new Promise(function(c){asyncCall(function(){external.extra.greasemonkey.getValue("%1",a,b,c)})})};GM.setValue=function(a,b){return new Promise(function(c,d){asyncCall(function(){external.extra.greasemonkey.setValue("%1",a,b,function(a){a?c():d()})})})};
|
||||
function GM_deleteValue(a){localStorage.removeItem("%1"+a)}function GM_getValue(a,b){var c=localStorage.getItem("%1"+a);return null===c&&"undefined"!=typeof b?b:c}function GM_listValues(){for(var a=[],b=0;b<localStorage.length;b++){var c=localStorage.key(b);0===c.indexOf("%1")&&a.push(c.replace("%1",""))}return a}function GM_setValue(a,b){localStorage.setItem("%1"+a,b)}
|
||||
var asyncCall=function(a){window._falkon_external?a():document.addEventListener("_falkon_external_created",a)},decode=function(a){a=String(a);if(!a.length)return a;var b=a.substr(1);if("b"==a[0])return"true"==b?!0:!1;if("i"==a[0])return Number(b);if("s"==a[0])return b},encode=function(a){return"boolean"==typeof a?"b"+(a?"true":"false"):"number"==typeof a?"i"+String(a):"string"==typeof a?"s"+a:""};
|
||||
GM.deleteValue=function(a){return new Promise(function(b,c){asyncCall(function(){external.extra.greasemonkey.deleteValue("%1",a,function(a){a?b():c()})})})};GM.getValue=function(a,b){return new Promise(function(c){asyncCall(function(){external.extra.greasemonkey.getValue("%1",a,encode(b),function(a){c(decode(a))})})})};GM.setValue=function(a,b){return new Promise(function(c,d){asyncCall(function(){external.extra.greasemonkey.setValue("%1",a,encode(b),function(a){a?c():d()})})})};
|
||||
GM.listValues=function(){return new Promise(function(a){asyncCall(function(){external.extra.greasemonkey.listValues("%1",a)})})};
|
||||
|
|
|
@ -36,7 +36,7 @@ void GM_JSObject::setSettingsFile(const QString &name)
|
|||
m_settings = new QSettings(name, QSettings::IniFormat);
|
||||
}
|
||||
|
||||
QVariant GM_JSObject::getValue(const QString &nspace, const QString &name, const QVariant &dValue)
|
||||
QString GM_JSObject::getValue(const QString &nspace, const QString &name, const QString &dValue)
|
||||
{
|
||||
QString valueName = QString("GreaseMonkey-%1/%2").arg(nspace, name);
|
||||
QString savedValue = m_settings->value(valueName, dValue).toString();
|
||||
|
@ -45,58 +45,13 @@ QVariant GM_JSObject::getValue(const QString &nspace, const QString &name, const
|
|||
return dValue;
|
||||
}
|
||||
|
||||
QString actualValue = savedValue.mid(1).trimmed();
|
||||
if (actualValue.isEmpty()) {
|
||||
return dValue;
|
||||
}
|
||||
|
||||
switch (savedValue.at(0).toLatin1()) {
|
||||
case 'b':
|
||||
return QVariant(actualValue == QLatin1String("true"));
|
||||
|
||||
case 'i': {
|
||||
bool ok;
|
||||
int val = actualValue.toInt(&ok);
|
||||
return ok ? QVariant(val) : dValue;
|
||||
}
|
||||
|
||||
case 's':
|
||||
return actualValue;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return dValue;
|
||||
return savedValue;
|
||||
}
|
||||
|
||||
bool GM_JSObject::setValue(const QString &nspace, const QString &name, const QVariant &value)
|
||||
bool GM_JSObject::setValue(const QString &nspace, const QString &name, const QString &value)
|
||||
{
|
||||
QString savedValue;
|
||||
|
||||
switch (value.type()) {
|
||||
case QVariant::Bool:
|
||||
savedValue = value.toBool() ? "btrue" : "bfalse";
|
||||
break;
|
||||
|
||||
case QVariant::Int:
|
||||
case QVariant::UInt:
|
||||
case QVariant::LongLong:
|
||||
case QVariant::ULongLong:
|
||||
case QVariant::Double:
|
||||
savedValue = "i" + QString::number(value.toInt());
|
||||
break;
|
||||
|
||||
case QVariant::String:
|
||||
savedValue = "s" + value.toString();
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
QString valueName = QString("GreaseMonkey-%1/%2").arg(nspace, name);
|
||||
m_settings->setValue(valueName, savedValue);
|
||||
m_settings->setValue(valueName, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,8 +33,8 @@ public:
|
|||
void setSettingsFile(const QString &name);
|
||||
|
||||
public slots:
|
||||
QVariant getValue(const QString &nspace, const QString &name, const QVariant &dValue);
|
||||
bool setValue(const QString &nspace, const QString &name, const QVariant &value);
|
||||
QString getValue(const QString &nspace, const QString &name, const QString &dValue);
|
||||
bool setValue(const QString &nspace, const QString &name, const QString &value);
|
||||
bool deleteValue(const QString &nspace, const QString &name);
|
||||
QStringList listValues(const QString &nspace);
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ PluginSpec GM_Plugin::pluginSpec()
|
|||
spec.name = "GreaseMonkey";
|
||||
spec.info = "Userscripts for Falkon";
|
||||
spec.description = "Provides support for userscripts";
|
||||
spec.version = "0.9.1";
|
||||
spec.version = "0.9.2";
|
||||
spec.author = "David Rosca <nowrep@gmail.com>";
|
||||
spec.icon = QIcon(":gm/data/icon.svg").pixmap(32);
|
||||
spec.hasSettings = true;
|
||||
|
|
Loading…
Reference in New Issue
Block a user