<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <namespace name="XplayerPlParser"
             version="1.0"
             shared-library="libxplayer-plparser.so.18"
             c:identifier-prefixes="XplayerPl,XplayerDisc,XplayerCd"
             c:symbol-prefixes="xplayer_pl,xplayer_disc,xplayer_cd">
    <alias name="ParserMetadata"
           c:type="XplayerPlParserMetadata"
           introspectable="0">
      <doc xml:space="preserve">An alias for #GHashTable, used in the #XplayerPlParser::entry-parsed and
#XplayerPlParser::playlist-started signals due to #GHashTable not being a
boxed type when xplayer-pl-parser was originally written.

The hash table is a mapping from field names (such as
%XPLAYER_PL_PARSER_FIELD_ALBUM) to their associated values.

It is safe to use #GHashTable instead of #XplayerPlParserMetadata everywhere.</doc>
      <type name="GLib.HashTable" c:type="GHashTable"/>
    </alias>
    <constant name="PARSER_FIELD_ABSTRACT"
              value="abstract"
              c:type="XPLAYER_PL_PARSER_FIELD_ABSTRACT">
      <doc xml:space="preserve">Metadata field for an entry's abstract text.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_ALBUM"
              value="album"
              c:type="XPLAYER_PL_PARSER_FIELD_ALBUM">
      <doc xml:space="preserve">Metadata field for an entry's album.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_AUTHOR"
              value="author"
              c:type="XPLAYER_PL_PARSER_FIELD_AUTHOR">
      <doc xml:space="preserve">Metadata field for an entry's author/composer/director.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_AUTOPLAY"
              value="autoplay"
              c:type="XPLAYER_PL_PARSER_FIELD_AUTOPLAY">
      <doc xml:space="preserve">Metadata field for an entry's "autoplay" flag, which is %TRUE if the entry should play automatically.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_BASE"
              value="base"
              c:type="XPLAYER_PL_PARSER_FIELD_BASE">
      <doc xml:space="preserve">Metadata field for an entry's base path.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_CONTACT"
              value="contact"
              c:type="XPLAYER_PL_PARSER_FIELD_CONTACT">
      <doc xml:space="preserve">Metadata field for an entry's contact details for the webmaster.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_CONTENT_TYPE"
              value="content-type"
              c:type="XPLAYER_PL_PARSER_FIELD_CONTENT_TYPE">
      <doc xml:space="preserve">Metadata field for an entry's content-type (usually a mime-type coming
from a web server).</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_COPYRIGHT"
              value="copyright"
              c:type="XPLAYER_PL_PARSER_FIELD_COPYRIGHT">
      <doc xml:space="preserve">Metadata field for an entry's copyright line.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_DESCRIPTION"
              value="description"
              c:type="XPLAYER_PL_PARSER_FIELD_DESCRIPTION">
      <doc xml:space="preserve">Metadata field for an entry's description.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_DOWNLOAD_URI"
              value="download-url"
              c:type="XPLAYER_PL_PARSER_FIELD_DOWNLOAD_URI"
              version="2.26">
      <doc xml:space="preserve">Metadata field for an entry's download URI. Only used if an alternate download
location is available for the entry.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_DURATION"
              value="duration"
              c:type="XPLAYER_PL_PARSER_FIELD_DURATION">
      <doc xml:space="preserve">Metadata field for an entry's playback duration, which should be parsed using xplayer_pl_parser_parse_duration().</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_DURATION_MS"
              value="duration-ms"
              c:type="XPLAYER_PL_PARSER_FIELD_DURATION_MS">
      <doc xml:space="preserve">Metadata field for an entry's playback duration, in milliseconds. It's only used when an entry's
duration is available in that format, so one would get either the %XPLAYER_PL_PARSER_FIELD_DURATION
or %XPLAYER_PL_PARSER_FIELD_DURATION_MS as metadata.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_ENDTIME"
              value="endtime"
              c:type="XPLAYER_PL_PARSER_FIELD_ENDTIME">
      <doc xml:space="preserve">Metadata field for an entry's playback end time.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_FILESIZE"
              value="filesize"
              c:type="XPLAYER_PL_PARSER_FIELD_FILESIZE">
      <doc xml:space="preserve">Metadata field for an entry's filesize in bytes. This is only advisory, and can sometimes not match the actual filesize of the stream.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_GENRE"
              value="genre"
              c:type="XPLAYER_PL_PARSER_FIELD_GENRE">
      <doc xml:space="preserve">Metadata field for an entry's genre.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_ID"
              value="id"
              c:type="XPLAYER_PL_PARSER_FIELD_ID">
      <doc xml:space="preserve">Metadata field for an entry's identifier. Its use is dependent on the format
of the playlist parsed, and its origin.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_IMAGE_URI"
              value="image-url"
              c:type="XPLAYER_PL_PARSER_FIELD_IMAGE_URI"
              version="2.26">
      <doc xml:space="preserve">Metadata field for an entry's thumbnail image URI.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_IS_PLAYLIST"
              value="is-playlist"
              c:type="XPLAYER_PL_PARSER_FIELD_IS_PLAYLIST">
      <doc xml:space="preserve">Metadata field used to tell the calling code that the parsing of a playlist
started. It is only %TRUE for the metadata passed to #XplayerPlParser::playlist-started or
#XplayerPlParser::playlist-ended signal handlers.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_LANGUAGE"
              value="language"
              c:type="XPLAYER_PL_PARSER_FIELD_LANGUAGE">
      <doc xml:space="preserve">Metadata field for an entry's audio language.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_MOREINFO"
              value="moreinfo"
              c:type="XPLAYER_PL_PARSER_FIELD_MOREINFO">
      <doc xml:space="preserve">Metadata field for an entry's "more info" URI.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_PLAYING"
              value="playing"
              c:type="XPLAYER_PL_PARSER_FIELD_PLAYING">
      <doc xml:space="preserve">Metadata field for an entry's status in a playlist. This is usually
used when saving the state of an on-going playlist.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_PUB_DATE"
              value="publication-date"
              c:type="XPLAYER_PL_PARSER_FIELD_PUB_DATE">
      <doc xml:space="preserve">Metadata field for an entry's publication date, which should be parsed using xplayer_pl_parser_parse_date().</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_SCREENSIZE"
              value="screensize"
              c:type="XPLAYER_PL_PARSER_FIELD_SCREENSIZE">
      <doc xml:space="preserve">Metadata field for an entry's preferred screen size.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_STARTTIME"
              value="starttime"
              c:type="XPLAYER_PL_PARSER_FIELD_STARTTIME">
      <doc xml:space="preserve">Metadata field for an entry's playback start time, which should be parsed using xplayer_pl_parser_parse_duration().</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_SUBTITLE_URI"
              value="subtitle-uri"
              c:type="XPLAYER_PL_PARSER_FIELD_SUBTITLE_URI">
      <doc xml:space="preserve">The URI of the entry's subtitle file.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_TITLE"
              value="title"
              c:type="XPLAYER_PL_PARSER_FIELD_TITLE">
      <doc xml:space="preserve">Metadata field for an entry's displayable title.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_UI_MODE"
              value="ui-mode"
              c:type="XPLAYER_PL_PARSER_FIELD_UI_MODE">
      <doc xml:space="preserve">Metadata field for an entry's preferred UI mode.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_URI"
              value="url"
              c:type="XPLAYER_PL_PARSER_FIELD_URI"
              version="2.26">
      <doc xml:space="preserve">Metadata field for an entry's URI.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_FIELD_VOLUME"
              value="volume"
              c:type="XPLAYER_PL_PARSER_FIELD_VOLUME">
      <doc xml:space="preserve">Metadata field for an entry's playback volume.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PARSER_VERSION_MAJOR"
              value="1"
              c:type="XPLAYER_PL_PARSER_VERSION_MAJOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="PARSER_VERSION_MICRO"
              value="2"
              c:type="XPLAYER_PL_PARSER_VERSION_MICRO">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="PARSER_VERSION_MINOR"
              value="0"
              c:type="XPLAYER_PL_PARSER_VERSION_MINOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <class name="Parser"
           c:symbol-prefix="parser"
           c:type="XplayerPlParser"
           parent="GObject.Object"
           glib:type-name="XplayerPlParser"
           glib:get-type="xplayer_pl_parser_get_type"
           glib:type-struct="ParserClass">
      <doc xml:space="preserve">All the fields in the #XplayerPlParser structure are private and should never be accessed directly.</doc>
      <constructor name="new" c:identifier="xplayer_pl_parser_new">
        <doc xml:space="preserve">Creates a #XplayerPlParser object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XplayerPlParser</doc>
          <type name="Parser" c:type="XplayerPlParser*"/>
        </return-value>
      </constructor>
      <function name="can_parse_from_data"
                c:identifier="xplayer_pl_parser_can_parse_from_data">
        <doc xml:space="preserve">Checks if the first @len bytes of @data can be parsed.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @data can be parsed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">the data to check for parsability</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="len" transfer-ownership="none">
            <doc xml:space="preserve">the length of data to check</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if debug statements should be printed</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="can_parse_from_filename"
                c:identifier="xplayer_pl_parser_can_parse_from_filename">
        <doc xml:space="preserve">Checks if the file can be parsed. Files can be parsed if:
&lt;itemizedlist&gt;
 &lt;listitem&gt;&lt;para&gt;they have a special mimetype, or&lt;/para&gt;&lt;/listitem&gt;
 &lt;listitem&gt;&lt;para&gt;they have a mimetype which could be a video or a playlist.&lt;/para&gt;&lt;/listitem&gt;
&lt;/itemizedlist&gt;</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @filename can be parsed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve">the file to check for parsability</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if debug statements should be printed</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="can_parse_from_uri"
                c:identifier="xplayer_pl_parser_can_parse_from_uri">
        <doc xml:space="preserve">Checks if the remote URI can be parsed. Note that this does
not actually try to open the remote URI, or deduce its mime-type
from filename, as this would bring too many false positives.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @uri could be parsed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the remote URI to check for parsability</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if debug statements should be printed</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="parse_date" c:identifier="xplayer_pl_parser_parse_date">
        <doc xml:space="preserve">Parses the given date string and returns it as a &lt;type&gt;gint64&lt;/type&gt;
denoting the date in seconds since the UNIX Epoch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the date in seconds, or -1 on error</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <parameter name="date_str" transfer-ownership="none">
            <doc xml:space="preserve">the date string to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if debug statements should be printed</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="parse_duration"
                c:identifier="xplayer_pl_parser_parse_duration">
        <doc xml:space="preserve">Parses the given duration string and returns it as a &lt;type&gt;gint64&lt;/type&gt;
denoting the duration in seconds.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the duration in seconds, or -1 on error</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <parameter name="duration" transfer-ownership="none">
            <doc xml:space="preserve">the duration string to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if debug statements should be printed</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="entry_parsed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="metadata" transfer-ownership="none">
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playlist_ended">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playlist_started">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="metadata" transfer-ownership="none">
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_ignored_mimetype"
              c:identifier="xplayer_pl_parser_add_ignored_mimetype">
        <doc xml:space="preserve">Adds a mimetype to the list of mimetypes to ignore, so that
any URI of that mimetype is ignored during playlist parsing.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="mimetype" transfer-ownership="none">
            <doc xml:space="preserve">the mimetype to ignore</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_ignored_scheme"
              c:identifier="xplayer_pl_parser_add_ignored_scheme">
        <doc xml:space="preserve">Adds a scheme to the list of schemes to ignore, so that
any URI using that scheme is ignored during playlist parsing.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="scheme" transfer-ownership="none">
            <doc xml:space="preserve">the scheme to ignore</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse" c:identifier="xplayer_pl_parser_parse">
        <doc xml:space="preserve">Parses a playlist given by the absolute URI @uri. This method is
synchronous, and will block on (e.g.) network requests to slow
servers. xplayer_pl_parser_parse_async() is recommended instead.

Return values are as xplayer_pl_parser_parse_with_base().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XplayerPlParserResult</doc>
          <type name="ParserResult" c:type="XplayerPlParserResult"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the playlist to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="fallback" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the parser should add the playlist URI to the
end of the playlist on parse failure</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_async" c:identifier="xplayer_pl_parser_parse_async">
        <doc xml:space="preserve">Starts asynchronous parsing of a playlist given by the absolute URI @uri. @parser and @uri are both reffed/copied
when this function is called, so can safely be freed after this function returns.

For more details, see xplayer_pl_parser_parse(), which is the synchronous version of this function.

When the operation is finished, @callback will be called. You can then call xplayer_pl_parser_parse_finish()
to get the results of the operation.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the playlist to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="fallback" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the parser should add the playlist URI to the
end of the playlist on parse failure</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="4">
            <doc xml:space="preserve">a #GAsyncReadyCallback to call when parsing is finished</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">data to pass to the @callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_finish"
              c:identifier="xplayer_pl_parser_parse_finish"
              throws="1">
        <doc xml:space="preserve">Finishes an asynchronous playlist parsing operation started with xplayer_pl_parser_parse_async()
or xplayer_pl_parser_parse_with_base_async().

If parsing of the playlist is cancelled part-way through, %XPLAYER_PL_PARSER_RESULT_CANCELLED is returned when
this function is called.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XplayerPlParserResult</doc>
          <type name="ParserResult" c:type="XplayerPlParserResult"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="async_result" transfer-ownership="none">
            <doc xml:space="preserve">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_with_base"
              c:identifier="xplayer_pl_parser_parse_with_base">
        <doc xml:space="preserve">Parses a playlist given by the absolute URI @uri, using
@base to resolve relative paths where appropriate.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XplayerPlParserResult</doc>
          <type name="ParserResult" c:type="XplayerPlParserResult"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the playlist to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="base"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the base path for relative filenames, or %NULL</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="fallback" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the parser should add the playlist URI to the
end of the playlist on parse failure</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_with_base_async"
              c:identifier="xplayer_pl_parser_parse_with_base_async">
        <doc xml:space="preserve">Starts asynchronous parsing of a playlist given by the absolute URI @uri, using @base to resolve relative paths where appropriate.
@parser and @uri are both reffed/copied when this function is called, so can safely be freed after this function returns.

For more details, see xplayer_pl_parser_parse_with_base(), which is the synchronous version of this function.

When the operation is finished, @callback will be called. You can then call xplayer_pl_parser_parse_finish()
to get the results of the operation.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the playlist to parse</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="base"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the base path for relative filenames, or %NULL</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="fallback" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the parser should add the playlist URI to the
end of the playlist on parse failure</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="5">
            <doc xml:space="preserve">a #GAsyncReadyCallback to call when parsing is finished</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">data to pass to the @callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="save" c:identifier="xplayer_pl_parser_save" throws="1">
        <doc xml:space="preserve">Writes the playlist held by @parser and @playlist out to the path
pointed by @dest. The playlist is written in the format @type and is
given the title @title.

If the @output file is a directory the #G_IO_ERROR_IS_DIRECTORY error
will be returned, and if the file is some other form of non-regular file
then a #G_IO_ERROR_NOT_REGULAR_FILE error will be returned. Some file
systems don't allow all file names, and may return a
#G_IO_ERROR_INVALID_FILENAME error, and if the name is too long,
#G_IO_ERROR_FILENAME_TOO_LONG will be returned. Other errors are possible
too, and depend on what kind of filesystem the file is on.

In extreme cases, a #G_IO_ERROR_INVALID_ARGUMENT error can be returned, if
parts of the playlist to be written are too long.

If writing a PLA playlist and there is an error converting a URI's encoding,
a code from #GConvertError will be returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="parser" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParser</doc>
            <type name="Parser" c:type="XplayerPlParser*"/>
          </instance-parameter>
          <parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </parameter>
          <parameter name="dest" transfer-ownership="none">
            <doc xml:space="preserve">output #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="title" transfer-ownership="none">
            <doc xml:space="preserve">the playlist title</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlParserType for the outputted playlist</doc>
            <type name="ParserType" c:type="XplayerPlParserType"/>
          </parameter>
        </parameters>
      </method>
      <property name="debug" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">If %TRUE, the parser will output debug information.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-unsafe" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">If %TRUE, the parser will not parse unsafe locations, such as local devices
and local files if the playlist isn't local. This is useful if the library
is parsing a playlist from a remote location such as a website.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="force" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">If %TRUE, the parser will attempt to parse a playlist, even if it
appears to be unsupported (usually because of its filename extension).</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="recurse"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If %TRUE, the parser will recursively fetch playlists linked to by
the current one.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ParserPrivate" c:type="XplayerPlParserPrivate*"/>
      </field>
      <glib:signal name="entry-parsed" when="last">
        <doc xml:space="preserve">The ::entry-parsed signal is emitted when a new entry is parsed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the entry parsed</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="metadata" transfer-ownership="none">
            <doc xml:space="preserve">a #GHashTable of metadata relating to the entry added</doc>
            <type name="GLib.HashTable">
              <type name="utf8"/>
              <type name="utf8"/>
            </type>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playlist-ended" when="last">
        <doc xml:space="preserve">The ::playlist-ended signal is emitted when a playlist is finished
parsing. It is only called when #XplayerPlParser::playlist-started
has been called for that playlist.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the playlist that finished parsing.</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playlist-started" when="last">
        <doc xml:space="preserve">The ::playlist-started signal is emitted when a playlist parsing has
started. This signal isn't emitted for all types of playlists, but
can be relied on to be called for playlists which support playlist
metadata, such as title.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">the URI of the new playlist started</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="metadata" transfer-ownership="none">
            <doc xml:space="preserve">a #GHashTable of metadata relating to the playlist that
started.</doc>
            <type name="GLib.HashTable">
              <type name="utf8"/>
              <type name="utf8"/>
            </type>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ParserClass"
            c:type="XplayerPlParserClass"
            glib:is-gtype-struct-for="Parser">
      <doc xml:space="preserve">The class structure for the #XplayerPlParser type.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="entry_parsed">
        <callback name="entry_parsed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="parser" transfer-ownership="none">
              <type name="Parser" c:type="XplayerPlParser*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="metadata" transfer-ownership="none">
              <type name="GLib.HashTable" c:type="GHashTable*">
                <type name="gpointer" c:type="gpointer"/>
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playlist_started">
        <callback name="playlist_started">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="parser" transfer-ownership="none">
              <type name="Parser" c:type="XplayerPlParser*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="metadata" transfer-ownership="none">
              <type name="GLib.HashTable" c:type="GHashTable*">
                <type name="gpointer" c:type="gpointer"/>
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playlist_ended">
        <callback name="playlist_ended">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="parser" transfer-ownership="none">
              <type name="Parser" c:type="XplayerPlParser*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <type name="utf8" c:type="const char*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <enumeration name="ParserError"
                 glib:type-name="XplayerPlParserError"
                 glib:get-type="xplayer_pl_parser_error_get_type"
                 c:type="XplayerPlParserError"
                 glib:error-domain="xplayer_pl_parser_error">
      <doc xml:space="preserve">Allows you to differentiate between different
errors occurring during file operations in a #XplayerPlParser.</doc>
      <member name="no_disc"
              value="0"
              c:identifier="XPLAYER_PL_PARSER_ERROR_NO_DISC"
              glib:nick="no-disc">
        <doc xml:space="preserve">Error attempting to open a disc device when no disc is present</doc>
      </member>
      <member name="mount_failed"
              value="1"
              c:identifier="XPLAYER_PL_PARSER_ERROR_MOUNT_FAILED"
              glib:nick="mount-failed">
        <doc xml:space="preserve">An attempted mount operation failed</doc>
      </member>
      <member name="empty_playlist"
              value="2"
              c:identifier="XPLAYER_PL_PARSER_ERROR_EMPTY_PLAYLIST"
              glib:nick="empty-playlist">
        <doc xml:space="preserve">Playlist to be saved is empty</doc>
      </member>
      <function name="quark" c:identifier="xplayer_pl_parser_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <record name="ParserPrivate" c:type="XplayerPlParserPrivate" disguised="1">
    </record>
    <enumeration name="ParserResult"
                 glib:type-name="XplayerPlParserResult"
                 glib:get-type="xplayer_pl_parser_result_get_type"
                 c:type="XplayerPlParserResult">
      <doc xml:space="preserve">Gives the result of parsing a playlist.</doc>
      <member name="unhandled"
              value="0"
              c:identifier="XPLAYER_PL_PARSER_RESULT_UNHANDLED"
              glib:nick="unhandled">
        <doc xml:space="preserve">The playlist could not be handled.</doc>
      </member>
      <member name="error"
              value="1"
              c:identifier="XPLAYER_PL_PARSER_RESULT_ERROR"
              glib:nick="error">
        <doc xml:space="preserve">There was an error parsing the playlist.</doc>
      </member>
      <member name="success"
              value="2"
              c:identifier="XPLAYER_PL_PARSER_RESULT_SUCCESS"
              glib:nick="success">
        <doc xml:space="preserve">The playlist was parsed successfully.</doc>
      </member>
      <member name="ignored"
              value="3"
              c:identifier="XPLAYER_PL_PARSER_RESULT_IGNORED"
              glib:nick="ignored">
        <doc xml:space="preserve">The playlist was ignored due to its scheme or MIME type (see xplayer_pl_parser_add_ignored_scheme()
and xplayer_pl_parser_add_ignored_mimetype()).</doc>
      </member>
      <member name="cancelled"
              value="4"
              c:identifier="XPLAYER_PL_PARSER_RESULT_CANCELLED"
              glib:nick="cancelled">
        <doc xml:space="preserve">Parsing of the playlist was cancelled part-way through.</doc>
      </member>
    </enumeration>
    <enumeration name="ParserType"
                 glib:type-name="XplayerPlParserType"
                 glib:get-type="xplayer_pl_parser_type_get_type"
                 c:type="XplayerPlParserType">
      <doc xml:space="preserve">The type of playlist a #XplayerPlParser will parse.</doc>
      <member name="pls"
              value="0"
              c:identifier="XPLAYER_PL_PARSER_PLS"
              glib:nick="pls">
        <doc xml:space="preserve">PLS parser</doc>
      </member>
      <member name="m3u"
              value="1"
              c:identifier="XPLAYER_PL_PARSER_M3U"
              glib:nick="m3u">
        <doc xml:space="preserve">M3U parser</doc>
      </member>
      <member name="m3u_dos"
              value="2"
              c:identifier="XPLAYER_PL_PARSER_M3U_DOS"
              glib:nick="m3u-dos">
        <doc xml:space="preserve">M3U (DOS linebreaks) parser</doc>
      </member>
      <member name="xspf"
              value="3"
              c:identifier="XPLAYER_PL_PARSER_XSPF"
              glib:nick="xspf">
        <doc xml:space="preserve">XSPF parser</doc>
      </member>
      <member name="iriver_pla"
              value="4"
              c:identifier="XPLAYER_PL_PARSER_IRIVER_PLA"
              glib:nick="iriver-pla">
        <doc xml:space="preserve">iRiver PLA parser</doc>
      </member>
    </enumeration>
    <class name="Playlist"
           c:symbol-prefix="playlist"
           c:type="XplayerPlPlaylist"
           parent="GObject.Object"
           glib:type-name="XplayerPlPlaylist"
           glib:get-type="xplayer_pl_playlist_get_type"
           glib:type-struct="PlaylistClass">
      <doc xml:space="preserve">All the fields in the #XplayerPlPlaylist structure are private and should never be accessed directly.</doc>
      <constructor name="new" c:identifier="xplayer_pl_playlist_new">
        <doc xml:space="preserve">Creates a new #XplayerPlPlaylist object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The newly created #XplayerPlPlaylist</doc>
          <type name="Playlist" c:type="XplayerPlPlaylist*"/>
        </return-value>
      </constructor>
      <method name="append" c:identifier="xplayer_pl_playlist_append">
        <doc xml:space="preserve">Appends a new empty element to @playlist, and modifies @iter so
it points to it. To fill in values, you need to call
xplayer_pl_playlist_set() or xplayer_pl_playlist_set_value().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve">an unset #XplayerPlPlaylistIter for returning the location</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get"
              c:identifier="xplayer_pl_playlist_get"
              introspectable="0">
        <doc xml:space="preserve">Gets the value for one or more keys from the element pointed
by @iter.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">pairs of key/return location for value, terminated by %NULL</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="get_valist"
              c:identifier="xplayer_pl_playlist_get_valist"
              introspectable="0">
        <doc xml:space="preserve">See xplayer_pl_playlist_get(), this function takes a va_list.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="args" transfer-ownership="none">
            <doc xml:space="preserve">a va_list</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_value" c:identifier="xplayer_pl_playlist_get_value">
        <doc xml:space="preserve">Gets the value for @key (Such as %XPLAYER_PL_PARSER_FIELD_URI) in
the playlist item pointed by @iter.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @iter contains data for @key.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">data key</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">an empty #GValue to set</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="insert" c:identifier="xplayer_pl_playlist_insert">
        <doc xml:space="preserve">Inserts a new empty element to @playlist at @position, and modifies
@iter so it points to it. To fill in values, you need to call
xplayer_pl_playlist_set() or xplayer_pl_playlist_set_value().

@position may be minor than 0 to prepend elements, or bigger than
the current @playlist size to append elements.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="position" transfer-ownership="none">
            <doc xml:space="preserve">position in the playlist</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="iter"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve">an unset #XplayerPlPlaylistIter for returning the location</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="iter_first" c:identifier="xplayer_pl_playlist_iter_first">
        <doc xml:space="preserve">Modifies @iter so it points to the first element in @playlist.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there is such first element.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve">an unset #XplayerPlPlaylistIter for returning the location</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="iter_next" c:identifier="xplayer_pl_playlist_iter_next">
        <doc xml:space="preserve">Modifies @iter so it points to the next element it previously
pointed to. This function will return %FALSE if there was no
next element, or @iter didn't actually point to any element
in @playlist.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was next element.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="iter_prev" c:identifier="xplayer_pl_playlist_iter_prev">
        <doc xml:space="preserve">Modifies @iter so it points to the previous element it previously
pointed to. This function will return %FALSE if there was no
previous element, or @iter didn't actually point to any element
in @playlist.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was previous element.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="prepend" c:identifier="xplayer_pl_playlist_prepend">
        <doc xml:space="preserve">Prepends a new empty element to @playlist, and modifies @iter so
it points to it. To fill in values, you need to call
xplayer_pl_playlist_set() or xplayer_pl_playlist_set_value().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve">an unset #XplayerPlPlaylistIter for returning the location</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set"
              c:identifier="xplayer_pl_playlist_set"
              introspectable="0">
        <doc xml:space="preserve">Sets the value for one or several keys in the element pointed
by @iter.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">key/value string pairs, terminated with %NULL</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="set_valist"
              c:identifier="xplayer_pl_playlist_set_valist"
              introspectable="0">
        <doc xml:space="preserve">See xplayer_pl_playlist_set(), this function takes a va_list.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="args" transfer-ownership="none">
            <doc xml:space="preserve">a va_list</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_value" c:identifier="xplayer_pl_playlist_set_value">
        <doc xml:space="preserve">Sets the value for @key in the element pointed by @iter.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the value could be stored in @playlist</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
          <parameter name="iter" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylistIter pointing to some item in @playlist</doc>
            <type name="PlaylistIter" c:type="XplayerPlPlaylistIter*"/>
          </parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to set the value for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">#GValue containing the key value</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="size" c:identifier="xplayer_pl_playlist_size">
        <doc xml:space="preserve">Returns the number of elements in @playlist.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The number of elements</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="playlist" transfer-ownership="none">
            <doc xml:space="preserve">a #XplayerPlPlaylist</doc>
            <type name="Playlist" c:type="XplayerPlPlaylist*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="PlaylistClass"
            c:type="XplayerPlPlaylistClass"
            glib:is-gtype-struct-for="Playlist">
      <doc xml:space="preserve">All the fields in the #XplayerPlPlaylistClass structure are private and should never be accessed directly.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="PlaylistIter" c:type="XplayerPlPlaylistIter">
      <doc xml:space="preserve">All the fields in the #XplayerPlPlaylistIter structure are private and should never be accessed directly.</doc>
      <field name="data1" readable="0" private="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="data2" readable="0" private="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
    </record>
    <function name="parser_error_quark"
              c:identifier="xplayer_pl_parser_error_quark"
              moved-to="ParserError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="parser_metadata_get_type"
              c:identifier="xplayer_pl_parser_metadata_get_type">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
    </function>
  </namespace>
</repository>
