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