comp.lang.ada
 help / color / mirror / Atom feed
From: Ian Clifton <ian.clifton@chem.ox.ac.uk>
Subject: Re: Empty arrays & libdbusada
Date: Tue, 05 Jul 2016 16:33:40 +0100
Date: 2016-07-05T16:33:40+01:00	[thread overview]
Message-ID: <nlgk0l$849$1@news.ox.ac.uk> (raw)
In-Reply-To: dtlf8tF90i0U1@mid.individual.net

Ian Clifton <ian.clifton@chem.ox.ac.uk> writes:

> Reto Buerki <reet@codelabs.ch> writes:
>
>> On 2016-06-29, Ian Clifton <ian.clifton@chem.ox.ac.uk> wrote:
>>> Reto Buerki <reet@codelabs.ch> writes:
>>>
>>>> On 2016-06-28, Ian Clifton <ian.clifton@chem.ox.ac.uk> wrote:
>>>>> I’m trying to learn a bit about controlling programs through D-bus. I
>>>>> can make things happen with the “D-feet” tool, calling methods in
>>>>> ork.gtk.Actions and org.gtk.Application, supplying empty arrays (notated
>>>>> as “[]”) for un‐needed parameters. But when I try to do the equivalent
>>>>> in Ada code using libdbusada, I hit a snag—libdbusada doesn’t seem to be
>>>>> able to handle empty arrays. Does anyone know of a way round this?
>>>>> Thanks,
>>>>
>>>> Can you please provide a concrete example of what you are trying to do?
>>>> What happens if you just remove the empty array arguments?
>>>>
>>> Thanks for replying. At the moment I’m trying to control the play‐back
>>> of a CD using the “Sound Juicer” application on Debian Linux. The
>>> application exposes the “org.gtk.Actions” interface through D-Bus. Using
>>> D-feet, I can toggle playback by calling the “Activate” method with
>>> three arguments:
>>>
>>> 'play', [], []
>>>
>>> i.e. the string 'play' followed by two empty arrays to mark the places
>>> of un‐needed parameters. 
>>>
>>> If I omit these placeholders in my Ada code I get:
>>>
>>>    raised D_BUS.D_BUS_ERROR : Type of message, '(s)', does not match
>>>    expected type '(sava{sv})'
>>>
>>> If I supply empty arrays (uninitialised
>>> D_Bus.Arguments.Containers.Array_Type variables) I get:
>>>
>>>    raised D_BUS.D_BUS_ERROR : Serialization error: Array is empty
>>>
>>> and if I put either empty strings or nonsense strings into containers of
>>> the expected type, my method calls seem to be passed without error but
>>> are ignored by the application.
>>
>> Thanks for the detailed description.
>>
>> Creating an array containing only an empty string should work in this
>> case. See the D_Bus/Ada notify.adb example where the same is done for
>> the Notify method of the org.freedesktop.Notifications interface.
>
> Thanks, I’ll investigate when I get a bit more time tomorrow night.

I believe I might have solved this problem now. Firstly, I found out how
to generate “variant” values in the D-feet tool (you use an expression
like GLib.Variant('b', False) to create the Boolean value false in a
variant container), this was a great help as it allowed me to learn a
lot more about D-Bus just through experimentation. Then I decided I ought
to be using the SetState method instead of Activate. Finally it turns
out that using the value 0 (i.e., not even an array!) as a placeholder
for the “platform_data” parameter seems to work fine. I haven’t tried
this in my Ada code yet (it’s on a different machine), but I’ve a
feeling I can get it to work now—thanks for your help!
-- 
Ian ◎

      reply	other threads:[~2016-07-05 15:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-28 11:19 Empty arrays & libdbusada Ian Clifton
2016-06-29  9:35 ` Reto Buerki
2016-06-29 21:49   ` Ian Clifton
2016-06-30  7:04     ` Reto Buerki
2016-06-30 20:54       ` Ian Clifton
2016-07-05 15:33         ` Ian Clifton [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox