dbus2 / zbus-old

Rust D-Bus crate.
https://gitlab.freedesktop.org/dbus/zbus
Other
49 stars 13 forks source link

xmlgen should handle Telepathy D-Bus interface XML extensions #265

Open zeenix opened 2 years ago

zeenix commented 2 years ago

In GitLab by @Absolucy on Mar 29, 2022, 22:54

Hi, I've been trying to use zbus_xmlgen to generate interfaces for MPRIS, and I've ran into several things in their respective XMLs that have caused errors!

Docstrings

    <property name="Fullscreen" type="b" tp:name-for-bindings="Fullscreen" access="readwrite">
      <tp:added version="2.2" />
      <annotation name="org.mpris.MediaPlayer2.property.optional" value="true"/>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Whether the media player is occupying the fullscreen.</p>
        <p>
          This is typically used for videos.  A value of <strong>true</strong>
          indicates that the media player is taking up the full screen.
        </p>
        <p>
          Media centre software may well have this value fixed to <strong>true</strong>
        </p>
        <p>
          If <tp:member-ref>CanSetFullscreen</tp:member-ref> is <strong>true</strong>,
          clients may set this property to <strong>true</strong> to tell the media player
          to enter fullscreen mode, or to <strong>false</strong> to return to windowed
          mode.
        </p>
        <p>
          If <tp:member-ref>CanSetFullscreen</tp:member-ref> is <strong>false</strong>,
          then attempting to set this property should have no effect, and may raise
          an error.  However, even if it is <strong>true</strong>, the media player
          may still be unable to fulfil the request, in which case attempting to set
          this property will have no effect (but should not raise an error).
        </p>
        <tp:rationale>
          <p>
            This allows remote control interfaces, such as LIRC or mobile devices like
            phones, to control whether a video is shown in fullscreen.
          </p>
        </tp:rationale>
      </tp:docstring>
    </property>

Structs

    <tp:struct name="Playlist" array-name="Playlist_List">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>A data structure describing a playlist.</p>
      </tp:docstring>
      <tp:member type="o" tp:type="Playlist_Id" name="Id">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A unique identifier for the playlist.</p>
          <p>This should remain the same if the playlist is renamed.</p>
        </tp:docstring>
      </tp:member>
      <tp:member type="s" name="Name">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The name of the playlist, typically given by the user.</p>
        </tp:docstring>
      </tp:member>
      <tp:member type="s" tp:type="Uri" name="Icon">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The URI of an (optional) icon.</p>
        </tp:docstring>
      </tp:member>
    </tp:struct>

Enums

    <tp:enum name="Playback_Status" tp:name-for-bindings="Playback_Status" type="s">
      <tp:enumvalue suffix="Playing" value="Playing">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A track is currently playing.</p>
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Paused" value="Paused">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A track is currently paused.</p>
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Stopped" value="Stopped">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>There is no track currently playing.</p>
        </tp:docstring>
      </tp:enumvalue>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>A playback state.</p>
      </tp:docstring>
    </tp:enum>

Simple Types

    <tp:simple-type name="Playlist_Id" type="o" array-name="Playlist_Id_List">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Unique playlist identifier.</p>
        <tp:rationale>
          <p>
            Multiple playlists may have the same name.
          </p>
          <p>
            This is a D-Bus object id as that is the definitive way to have
            unique identifiers on D-Bus.  It also allows for future optional
            expansions to the specification where tracks are exported to D-Bus
            with an interface similar to org.gnome.UPnP.MediaItem2.
          </p>
        </tp:rationale>
      </tp:docstring>
    </tp:simple-type>

    <tp:simple-type name="Uri" type="s" array-name="Uri_List">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>A URI.</p>
      </tp:docstring>
    </tp:simple-type>
zeenix commented 2 years ago

@Absolucy Hi and thanks for reporting this. The snippets you provided are not the standard D-Bus interface XML but rather the telepathy extension, which xmlgen currently does not support.

zeenix commented 2 years ago

In GitLab by @Absolucy on Mar 30, 2022, 24:44

It'd be nice if xmlgen could at least ignore the nonstandard XML instead of erroring out whenever it encounters a nonstandard field.

zeenix commented 2 years ago

Right, it should ignore w/ a warning on the stderr.

zeenix commented 2 years ago

Created #256 for this part.