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

List:       amarok
Subject:    Re: Script - writeConfig with QVariant
From:       El boulangero <elboulangero () gmail ! com>
Date:       2013-03-14 23:10:01
Message-ID: CALGUdm9fqVOuZweKBdAZw1==G6tna6vFAEvR3sJK93-zdVYfLg () mail ! gmail ! com
[Download RAW message or body]

Hi again,

> After that, I tried to hack in the writeConfig function, create a new
> QVariant with a simple string, and feed it to the
> KConfigGroup::writeEntry( QString, QVariant ) function.
> But then I got the following error from Amarok:
> > KConfigGroup::writeEntry: KConfigGroup::writeEntry - unhandled type \
> > QVariantMap in group "Good Morning"

My bad, I messed up, I launched the wrong binary.
So, let me start again.

If I hack the writeConfig, and do something like that:
> void AmarokScriptConfig::writeConfig( const QString &name, const QVariant \
> &content, int dummy ) {
> QVariant v("yop");
> KGlobal::config()->group( m_name ).writeEntry( name, v );
> }
It works just fine, I got the expected result.

But if I let function as it is, ie:
> void AmarokScriptConfig::writeConfig( const QString &name, const QVariant \
> &content, int dummy ) {
> KGlobal::config()->group( m_name ).writeEntry( name, content );
> }

I get the error:
> KConfigGroup::writeEntry: KConfigGroup::writeEntry - unhandled type \
> QVariantMap in group "Good Morning"

I guess it means my javascript object is converted to a QVariantMap by
the binding. And KConfigGroup::writeEntry is unabled to interpret
that.
Am I correct ?

Regards


2013/3/14 El boulangero <elboulangero@gmail.com>:
> Hi Matěj,
> 
> thanks for your reply.
> 
> I dug a little bit into the direction you pointed, but I'm not gonna
> continue. Too difficult, sorry.
> 
> What I did is that I added a dummy argument to the function:
> > - void writeConfig( String name, QVariant content )
> which became:
> > - void writeConfig( String name, QVariant content, int dummy )
> 
> With this I'm sure to pass into the right function. Then, I call it
> from my javascript:
> > var conf = { "test": "testing" };
> > Amarok.Script.writeConfig("heho", conf, 0);
> 
> Then, in the amarok conf file, I have the "heho" variable, but the
> value is empty !
> 
> After that, I tried to hack in the writeConfig function, create a new
> QVariant with a simple string, and feed it to the
> KConfigGroup::writeEntry( QString, QVariant ) function.
> But then I got the following error from Amarok:
> > KConfigGroup::writeEntry: KConfigGroup::writeEntry - unhandled type \
> > QVariantMap in group "Good Morning"
> 
> At this point I decided to stop, because I feel like I'm just trying
> random things.
> 
> Thanks anyway for your reply,
> 
> Regards,
> Arnaud
> 
> 
> 2013/3/14 Matěj Laitl <matej@laitl.cz>:
> > On 13. 3. 2013 El boulangero wrote:
> > > Hello everyone,
> > 
> > Hi!
> > 
> > > I writing a scritp for Amarok at the moment, and I have a question
> > > regarding the Amarok.Script API.
> > > 
> > > I understand perfectly the config function with string argument, ie:
> > > - String readConfig( String name, String defaultValue )
> > > - void writeConfig( String name, String content )
> > > 
> > > But I'm curious about the two other ones, with QVariant argument:
> > > - QVariant readConfig( String name, QVariant defaultValue )
> > > - void writeConfig( String name, QVariant content )
> > > 
> > > At first, I thought that with these functions, I could put my script \
> > > config in a JSON object, and save it in one call.
> > > 
> > > For example:
> > > > var defconfig = {
> > > > "time": {
> > > > "monday": {
> > > > "enabled": "true",
> > > > "value": "08:00:00"
> > > > }
> > > > }
> > > > };
> > > > 
> > > > Amarok.Script.writeConfig("", defconfig);
> > > 
> > > But if I try that, I get the following error:
> > > > Script error reported by: Good Morning TypeError: ambiguous call of
> > > > overloaded function writeConfig(); candidates were
> > > > writeConfig(QString,QVariant) writeConfig(QString,QString)
> > > 
> > > Is there something else I should do in order to use these functions? \
> > > Or maybe I'm completely wrong, these functions are not suppose to be \
> > > used with JSON objects?
> > 
> > First, bad news: QtScript bindings of Amarok are in rather unmaintained \
> > state. :-(
> > 
> > Good news: you can fix them! :-)
> > 
> > To answer your question: Your code is much probably right, but the \
> > Amarok part may have never worked, you've just first to shout loudly. \
> > To quote from [1]:
> > > Like other C++ methods, meta-methods can be overloaded, and they can \
> > > have default arguments. The QtScript binding tries to ensure that the \
> > > intended overload is called. First, if there is an overload that \
> > > expects precisely as many arguments as were passed, that overload is \
> > > selected. Second, if there's more than one such overload, the \
> > > decision is based on a heuristic of how well the source (JS) argument \
> > > types match with the target (C++) argument types. If the heuristic \
> > > doesn't help either, a TypeError is thrown.
> > 
> > The error you have seems to happen in the Javascript wrapper of
> > AmarokScriptConfig class. What I suggest is that you rename QVariant \
> > variant of the writeConfig in \
> > src/scriptengine/AmarokScriptConfig.{h,cpp} method and see if it fixes \
> > your problem. 
> > You might encounter another problem that KConfigGroup::writeEntry( \
> > QString, QVariant ) doesn't support complex QVariants (those with \
> > containers in them), please consult its documentation and \
> > implementation. 
> > [1] http://trac.webkit.org/wiki/QtScript (probably best C++ <-> \
> > QtScript interaction documentation, better than official Qt doc)
> > 
> > Regards,
> > Matěj
_______________________________________________
Amarok mailing list
Amarok@kde.org
https://mail.kde.org/mailman/listinfo/amarok


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

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