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 <ma...@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