<?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="GModule" version="2.0"/>
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <c:include name="grilo.h"/>
  <namespace name="Grl"
             version="0.3"
             shared-library="libgrilo-0.3.so.0.1"
             c:identifier-prefixes="Grl"
             c:symbol-prefixes="grl">
    <alias name="KeyID" c:type="GrlKeyID">
      <type name="guint32" c:type="guint32"/>
    </alias>
    <constant name="CONFIG_KEY_APIKEY"
              value="api-key"
              c:type="GRL_CONFIG_KEY_APIKEY">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_APIKEY_BLOB"
              value="api-key-blob"
              c:type="GRL_CONFIG_KEY_APIKEY_BLOB">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_APISECRET"
              value="api-secret"
              c:type="GRL_CONFIG_KEY_APISECRET">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_APITOKEN"
              value="api-token"
              c:type="GRL_CONFIG_KEY_APITOKEN">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_APITOKEN_SECRET"
              value="api-token-secret"
              c:type="GRL_CONFIG_KEY_APITOKEN_SECRET">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_PASSWORD"
              value="password"
              c:type="GRL_CONFIG_KEY_PASSWORD">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_PLUGIN"
              value="target-plugin"
              c:type="GRL_CONFIG_KEY_PLUGIN">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_SOURCE"
              value="target-source"
              c:type="GRL_CONFIG_KEY_SOURCE">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="CONFIG_KEY_USERNAME"
              value="username"
              c:type="GRL_CONFIG_KEY_USERNAME">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="COUNT_INFINITY" value="-1" c:type="GRL_COUNT_INFINITY">
      <type name="gint" c:type="gint"/>
    </constant>
    <class name="Caps"
           c:symbol-prefix="caps"
           c:type="GrlCaps"
           parent="GObject.Object"
           glib:type-name="GrlCaps"
           glib:get-type="grl_caps_get_type"
           glib:type-struct="CapsClass">
      <constructor name="new" c:identifier="grl_caps_new" version="0.2.0">
        <doc xml:space="preserve">Creates a new caps object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new caps object.</doc>
          <type name="Caps" c:type="GrlCaps*"/>
        </return-value>
      </constructor>
      <method name="get_key_filter"
              c:identifier="grl_caps_get_key_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_key_range_filter"
              c:identifier="grl_caps_get_key_range_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_type_filter"
              c:identifier="grl_caps_get_type_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the supported #GrlTypeFilter</doc>
          <type name="TypeFilter" c:type="GrlTypeFilter"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_key_filter"
              c:identifier="grl_caps_is_key_filter"
              version="0.2.0">
        <doc xml:space="preserve">Checks if @key is supported for filtering in @caps.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @key can be used for filtering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlKeyID</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_key_range_filter"
              c:identifier="grl_caps_is_key_range_filter"
              version="0.2.0">
        <doc xml:space="preserve">Checks if @key is supported for filtering by range in @caps.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @key can be used for filtering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #grlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlKeyID</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_filter"
              c:identifier="grl_caps_set_key_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="keys" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_range_filter"
              c:identifier="grl_caps_set_key_range_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="keys" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_type_filter"
              c:identifier="grl_caps_set_type_filter"
              version="0.2.0">
        <doc xml:space="preserve">Sets the supported filter capability.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="filter" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlTypeFilter</doc>
            <type name="TypeFilter" c:type="GrlTypeFilter"/>
          </parameter>
        </parameters>
      </method>
      <method name="test_option"
              c:identifier="grl_caps_test_option"
              version="0.2.0">
        <doc xml:space="preserve">Checks whether (@key, @value) are authorized by @caps.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if (@key, @value) obey to @caps, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlCaps instance</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a key to test</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the value corresponding to @key to test against @caps</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="CapsPrivate" c:type="GrlCapsPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="CapsClass"
            c:type="GrlCapsClass"
            glib:is-gtype-struct-for="Caps">
      <doc xml:space="preserve">Grilo Capabilities class.</doc>
      <field name="parent">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="CapsPrivate" c:type="GrlCapsPrivate" disguised="1">
    </record>
    <class name="Config"
           c:symbol-prefix="config"
           c:type="GrlConfig"
           parent="GObject.Object"
           glib:type-name="GrlConfig"
           glib:get-type="grl_config_get_type"
           glib:type-struct="ConfigClass">
      <constructor name="new" c:identifier="grl_config_new" version="0.1.4">
        <doc xml:space="preserve">Creates a new data config object that will be associated with a plugin
(if @source is NULL), or a specific source spawned from a plugin (if
@source is not NULL). The latter may be useful for plugins
spawning various sources, each one needing a different configuration.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a newly-allocated data config. The data
config associated with the plugin should not be freed until the plugin
has been unloaded.</doc>
          <type name="Config" c:type="GrlConfig*"/>
        </return-value>
        <parameters>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">plugin id for this configuration</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="source"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">source id for this configuration</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_api_key"
              c:identifier="grl_config_get_api_key"
              version="0.1.4">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the webservice API key</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_api_key_blob"
              c:identifier="grl_config_get_api_key_blob"
              version="0.1.9">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the binary API key, size will reflect the size of the buffer</doc>
          <type name="guint8" c:type="guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">pointer to size of data</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_api_secret"
              c:identifier="grl_config_get_api_secret"
              version="0.1.4">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the webservice API passphrase</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_api_token"
              c:identifier="grl_config_get_api_token"
              version="0.1.4">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the webservice API token</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_api_token_secret"
              c:identifier="grl_config_get_api_token_secret"
              version="0.2.6">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the webservice API token secret
(Needed by OAuth)</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_binary"
              c:identifier="grl_config_get_binary"
              version="0.1.9">
        <doc xml:space="preserve">Gets the value of @param encoded as base64. If @size is not %NULL, it puts
there the size of the value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@param value</doc>
          <type name="guint8" c:type="guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a binary type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="size"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">place for size of value</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean"
              c:identifier="grl_config_get_boolean"
              version="0.1.8">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@param value</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a boolean type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_float"
              c:identifier="grl_config_get_float"
              version="0.1.5">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@param value</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a float type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int" c:identifier="grl_config_get_int" version="0.1.5">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@param value</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">an integer type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_password"
              c:identifier="grl_config_get_password"
              version="0.1.8">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the password</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugin"
              c:identifier="grl_config_get_plugin"
              version="0.1.4">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the plugin id</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_source" c:identifier="grl_config_get_source">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the source id</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="grl_config_get_string"
              version="0.1.5">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">@param value</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a string type paramter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_username"
              c:identifier="grl_config_get_username"
              version="0.1.8">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the username</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_param"
              c:identifier="grl_config_has_param"
              version="0.1.8">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if @params has a defined value within @config, FALSE
otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">the param</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set" c:identifier="grl_config_set" version="0.1.5">
        <doc xml:space="preserve">Set @param @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">value</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_api_key"
              c:identifier="grl_config_set_api_key"
              version="0.1.4">
        <doc xml:space="preserve">Set the webservice API key in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">the API key</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_api_key_blob"
              c:identifier="grl_config_set_api_key_blob"
              version="0.1.9">
        <doc xml:space="preserve">Set the binary API key in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="blob" transfer-ownership="none">
            <doc xml:space="preserve">the binary API key blob</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">the size of the blob</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_api_secret"
              c:identifier="grl_config_set_api_secret"
              version="0.1.4">
        <doc xml:space="preserve">Set the webservice passphrase in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="secret" transfer-ownership="none">
            <doc xml:space="preserve">the webservice passphrase</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_api_token"
              c:identifier="grl_config_set_api_token"
              version="0.1.4">
        <doc xml:space="preserve">Set the webservice API token in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="token" transfer-ownership="none">
            <doc xml:space="preserve">the API token</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_api_token_secret"
              c:identifier="grl_config_set_api_token_secret"
              version="0.2.6">
        <doc xml:space="preserve">Set the webservice API token secret in the configuration
(Needed by OAuth)</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="secret" transfer-ownership="none">
            <doc xml:space="preserve">the API token</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_binary"
              c:identifier="grl_config_set_binary"
              version="0.1.9">
        <doc xml:space="preserve">Set @param value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a binary type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="blob" transfer-ownership="none">
            <doc xml:space="preserve">a base64 encoded binary value</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of @value</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_boolean"
              c:identifier="grl_config_set_boolean"
              version="0.1.8">
        <doc xml:space="preserve">Set @param @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a boolean type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">a value</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_float"
              c:identifier="grl_config_set_float"
              version="0.1.5">
        <doc xml:space="preserve">Set @param @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a float type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">a value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int" c:identifier="grl_config_set_int" version="0.1.5">
        <doc xml:space="preserve">Set @param @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">an integer type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">a value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_password"
              c:identifier="grl_config_set_password"
              version="0.1.8">
        <doc xml:space="preserve">Set the password in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve">the password</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_plugin"
              c:identifier="grl_config_set_plugin"
              version="0.1.4">
        <doc xml:space="preserve">Set the plugin key in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">the plugin id</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_source"
              c:identifier="grl_config_set_source"
              version="0.1.4">
        <doc xml:space="preserve">Set the source key in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">the source id</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_string"
              c:identifier="grl_config_set_string"
              version="0.1.5">
        <doc xml:space="preserve">Set @param @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="param" transfer-ownership="none">
            <doc xml:space="preserve">a string type parameter</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">a value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_username"
              c:identifier="grl_config_set_username"
              version="0.1.8">
        <doc xml:space="preserve">Set the username in the configuration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">the config instance</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </instance-parameter>
          <parameter name="username" transfer-ownership="none">
            <doc xml:space="preserve">the username</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ConfigPrivate" c:type="GrlConfigPrivate*"/>
      </field>
      <field name="_grl_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="ConfigClass"
            c:type="GrlConfigClass"
            glib:is-gtype-struct-for="Config">
      <doc xml:space="preserve">Grilo Config Class</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="ConfigPrivate" c:type="GrlConfigPrivate" disguised="1">
    </record>
    <enumeration name="CoreError" c:type="GrlCoreError">
      <doc xml:space="preserve">These constants identify all the available core errors</doc>
      <member name="browse_failed"
              value="1"
              c:identifier="GRL_CORE_ERROR_BROWSE_FAILED">
        <doc xml:space="preserve">The browse operation failed</doc>
      </member>
      <member name="search_failed"
              value="2"
              c:identifier="GRL_CORE_ERROR_SEARCH_FAILED">
        <doc xml:space="preserve">The search operation failed</doc>
      </member>
      <member name="search_null_unsupported"
              value="3"
              c:identifier="GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED">
        <doc xml:space="preserve">Searching NULL-text is not supported</doc>
      </member>
      <member name="query_failed"
              value="4"
              c:identifier="GRL_CORE_ERROR_QUERY_FAILED">
        <doc xml:space="preserve">The query operation failed</doc>
      </member>
      <member name="resolve_failed"
              value="5"
              c:identifier="GRL_CORE_ERROR_RESOLVE_FAILED">
        <doc xml:space="preserve">The resolution operation failed</doc>
      </member>
      <member name="media_not_found"
              value="6"
              c:identifier="GRL_CORE_ERROR_MEDIA_NOT_FOUND">
        <doc xml:space="preserve">The media was not found</doc>
      </member>
      <member name="store_failed"
              value="7"
              c:identifier="GRL_CORE_ERROR_STORE_FAILED">
        <doc xml:space="preserve">The store operation failed</doc>
      </member>
      <member name="store_metadata_failed"
              value="8"
              c:identifier="GRL_CORE_ERROR_STORE_METADATA_FAILED">
        <doc xml:space="preserve">The store metadata operation failed</doc>
      </member>
      <member name="remove_failed"
              value="9"
              c:identifier="GRL_CORE_ERROR_REMOVE_FAILED">
        <doc xml:space="preserve">The removal operation failed</doc>
      </member>
      <member name="media_from_uri_failed"
              value="10"
              c:identifier="GRL_CORE_ERROR_MEDIA_FROM_URI_FAILED">
        <doc xml:space="preserve">The media from_uri operation failed</doc>
      </member>
      <member name="config_load_failed"
              value="11"
              c:identifier="GRL_CORE_ERROR_CONFIG_LOAD_FAILED">
        <doc xml:space="preserve">Failed to load plugin configuration from a file</doc>
      </member>
      <member name="config_failed"
              value="12"
              c:identifier="GRL_CORE_ERROR_CONFIG_FAILED">
        <doc xml:space="preserve">Failed to set configuration for plugin</doc>
      </member>
      <member name="unregister_source_failed"
              value="13"
              c:identifier="GRL_CORE_ERROR_UNREGISTER_SOURCE_FAILED">
        <doc xml:space="preserve">Failed to unregister source</doc>
      </member>
      <member name="load_plugin_failed"
              value="14"
              c:identifier="GRL_CORE_ERROR_LOAD_PLUGIN_FAILED">
        <doc xml:space="preserve">Failed to load plugin</doc>
      </member>
      <member name="unload_plugin_failed"
              value="15"
              c:identifier="GRL_CORE_ERROR_UNLOAD_PLUGIN_FAILED">
        <doc xml:space="preserve">Failed to unload plugin</doc>
      </member>
      <member name="register_metadata_key_failed"
              value="16"
              c:identifier="GRL_CORE_ERROR_REGISTER_METADATA_KEY_FAILED">
        <doc xml:space="preserve">Failed to register metadata key</doc>
      </member>
      <member name="notify_changed_failed"
              value="17"
              c:identifier="GRL_CORE_ERROR_NOTIFY_CHANGED_FAILED">
        <doc xml:space="preserve">Failed to start changed notifications</doc>
      </member>
      <member name="operation_cancelled"
              value="18"
              c:identifier="GRL_CORE_ERROR_OPERATION_CANCELLED">
        <doc xml:space="preserve">The operation was cancelled</doc>
      </member>
      <member name="authentication_token"
              value="19"
              c:identifier="GRL_CORE_ERROR_AUTHENTICATION_TOKEN">
        <doc xml:space="preserve">Invalid authentication token</doc>
      </member>
    </enumeration>
    <class name="Data"
           c:symbol-prefix="data"
           c:type="GrlData"
           parent="GObject.Object"
           glib:type-name="GrlData"
           glib:get-type="grl_data_get_type"
           glib:type-struct="DataClass">
      <constructor name="new" c:identifier="grl_data_new" version="0.1.4">
        <doc xml:space="preserve">Creates a new data object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new data object.</doc>
          <type name="Data" c:type="GrlData*"/>
        </return-value>
      </constructor>
      <method name="add_binary"
              c:identifier="grl_data_add_binary"
              version="0.1.10">
        <doc xml:space="preserve">Appends a new binary value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="buf" transfer-ownership="none">
            <doc xml:space="preserve">the buffer containing the new value</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_boxed"
              c:identifier="grl_data_add_boxed"
              version="0.2.0">
        <doc xml:space="preserve">Appends a new boxed value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="boxed"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the new value</doc>
            <type name="gpointer" c:type="gconstpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_float"
              c:identifier="grl_data_add_float"
              version="0.1.10">
        <doc xml:space="preserve">Appends a new float value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="floatvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_int" c:identifier="grl_data_add_int" version="0.1.10">
        <doc xml:space="preserve">Appends a new int value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_int64"
              c:identifier="grl_data_add_int64"
              version="0.2.12">
        <doc xml:space="preserve">Appends a new int64 value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_related_keys"
              c:identifier="grl_data_add_related_keys"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new set of values into @data.

All keys in @prop must be related among them.

@data will take the ownership of @relkeys, so do not modify it.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">a set of related properties with their values</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_string"
              c:identifier="grl_data_add_string"
              version="0.1.10">
        <doc xml:space="preserve">Appends a new string value for @key in @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to append</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to append</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="strvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup" c:identifier="grl_data_dup" version="0.1.10">
        <doc xml:space="preserve">Makes a deep copy of @data and all its contents.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GrlData. Free it with #g_object_unref.</doc>
          <type name="Data" c:type="GrlData*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to duplicate</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get" c:identifier="grl_data_get" version="0.1.4">
        <doc xml:space="preserve">Get the first value from @data associated with @key.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GValue. This value should not be modified nor
freed by user.</doc>
          <type name="GObject.Value" c:type="const GValue*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to retrieve value</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to look up.</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_binary"
              c:identifier="grl_data_get_binary"
              version="0.1.9">
        <doc xml:space="preserve">Returns the first binary value associated with @key from @data. If @key has
no first value, or value is not a gfloat, or @key is not in data, then %NULL
is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">buffer location associated with the @key, or %NULL in other case. If
successful @size will be set the to the buffer size.</doc>
          <type name="guint8" c:type="const guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="size"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">location to store the buffer size</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean"
              c:identifier="grl_data_get_boolean"
              version="0.2.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the first boolean value associated with @key from @data. If @key has
no first value, or value is not a gboolean, or @key is not in the data, then
FALSE is returned</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boxed"
              c:identifier="grl_data_get_boxed"
              version="0.2.0">
        <doc xml:space="preserve">Returns the first boxed value associated with @key from @data. If @key has
no first value, that value is not of a boxed type, or @key is not in @data,
then %NULL is returned.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the boxed instance associated with @key if
possible, or %NULL in other cases. The caller should not change nor free the
value.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_float"
              c:identifier="grl_data_get_float"
              version="0.1.5">
        <doc xml:space="preserve">Returns the first float value associated with @key from @data. If @key has no
first value, or value is not a gfloat, or @key is not in data, then 0 is
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">float value associated with @key, or 0 in other case.</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int" c:identifier="grl_data_get_int" version="0.1.4">
        <doc xml:space="preserve">Returns the first int value associated with @key from @data. If @key has no
first value, or value is not a gint, or @key is not in data, then 0 is
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">int value associated with @key, or 0 in other case.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int64"
              c:identifier="grl_data_get_int64"
              version="0.2.12">
        <doc xml:space="preserve">Returns the first int64 value associated with @key from @data. If @key has no
first value, or value is not a gint, or @key is not in data, then 0 is
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">int value associated with @key, or 0 in other case.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_keys" c:identifier="grl_data_get_keys" version="0.1.4">
        <doc xml:space="preserve">Returns a list with keys contained in @data.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">an array with the
keys. The content of the list should not be modified or freed. Use
g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_related_keys"
              c:identifier="grl_data_get_related_keys"
              version="0.1.10">
        <doc xml:space="preserve">Returns a set containing the values for @key and related keys at position
@index from @data.

If user changes any of the values in the related keys, the changes will
become permanent.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GrlRelatedKeys. Do not free it.</doc>
          <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_single_values_for_key"
              c:identifier="grl_data_get_single_values_for_key"
              version="0.1.13">
        <doc xml:space="preserve">Returns all non-%NULL values for @key from @data. This ignores related keys.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList with
values. Do not change or free the values. Free the list with #g_list_free.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="GObject.Value"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_single_values_for_key_string"
              c:identifier="grl_data_get_single_values_for_key_string"
              version="0.1.13">
        <doc xml:space="preserve">Returns all non-%NULL values for @key from @data. @key must have been
registered as a string-type key. This ignores related keys.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList with values. Do
not change or free the strings. Free the list with #g_list_free.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="grl_data_get_string"
              version="0.1.4">
        <doc xml:space="preserve">Returns the first string value associated with @key from @data. If @key has
no first value, or value is not string, or @key is not in @data, then %NULL
is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string associated with @key, or %NULL in other case. Caller should
not change nor free the value.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="has_key" c:identifier="grl_data_has_key" version="0.1.4">
        <doc xml:space="preserve">Checks if @key is in @data.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @key is in @data, %FALSE in other case.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to inspect</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to search</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="length" c:identifier="grl_data_length" version="0.1.10">
        <doc xml:space="preserve">Returns how many values @key or related keys have in @data: if @key has no
value, but a related key has, then it is counted as positive.

As example, let's think in three related keys, K1, K2 and K3, and then thinks
we have added several values for those keys, as:

  (V10, V20, V30),, (V11, NULL, V31), (V12, NULL, V32)

Therefore, when invoking grl_data_length (data, K2) it will return 3:
considering K2 and the related keys (K1 and K3), there are 3 values.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">number of values</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove" c:identifier="grl_data_remove" version="0.1.4">
        <doc xml:space="preserve">Removes the first value for @key from @data. If there are other keys related
to @key their values will also be removed from @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to remove</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_nth"
              c:identifier="grl_data_remove_nth"
              version="0.1.10">
        <doc xml:space="preserve">Removes the value at position @index for @key from @data. If there are other
keys related to @key, their values at position @index will also be removed
from @data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">index of key to be removed, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set" c:identifier="grl_data_set" version="0.1.4">
        <doc xml:space="preserve">Sets the first value associated with @key in @data. If key already has a
value old value is freed and the new one is set.

Also, checks that @value is compliant with @key specification, modifying it
accordingly. For instance, if @key requires a number between 0 and 10, but
@value is outside this range, it will be adapted accordingly.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to modify</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_binary"
              c:identifier="grl_data_set_binary"
              version="0.1.9">
        <doc xml:space="preserve">Sets the first binary value associated with @key in @data. If @key already
has a first value old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="buf" transfer-ownership="none">
            <doc xml:space="preserve">buffer holding the data</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of the buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_boolean"
              c:identifier="grl_data_set_boolean"
              version="0.2.3">
        <doc xml:space="preserve">Sets the first boolean value associated with @key in @data. If @key already
has a first value, old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="boolvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_boxed"
              c:identifier="grl_data_set_boxed"
              version="0.2.0">
        <doc xml:space="preserve">Sets the first boxed value associated with @key in @data. If @key already
has a value, the old value is freed and the new one is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to modify</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="boxed"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the new value</doc>
            <type name="gpointer" c:type="gconstpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_float"
              c:identifier="grl_data_set_float"
              version="0.1.5">
        <doc xml:space="preserve">Sets the first float value associated with @key in @data. If @key already has
a first value old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="floatvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int" c:identifier="grl_data_set_int" version="0.1.4">
        <doc xml:space="preserve">Sets the first int value associated with @key in @data. If @key already has a
first value old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int64"
              c:identifier="grl_data_set_int64"
              version="0.2.12">
        <doc xml:space="preserve">Sets the first int64 value associated with @key in @data. If @key already has a
first value old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to change</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_related_keys"
              c:identifier="grl_data_set_related_keys"
              version="0.1.10">
        <doc xml:space="preserve">Updates the values at position @index in @data with values in @relkeys.

@data will take ownership of @relkeys, so do not free it after invoking this
function.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a data</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">a set of related keys</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">position to be updated, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_string"
              c:identifier="grl_data_set_string"
              version="0.1.4">
        <doc xml:space="preserve">Sets the first string value associated with @key in @data. If @key already
has a value old value is freed and the new one is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">data to modify</doc>
            <type name="Data" c:type="GrlData*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="strvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="DataPrivate" c:type="GrlDataPrivate*"/>
      </field>
      <field name="_grl_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="DataClass"
            c:type="GrlDataClass"
            glib:is-gtype-struct-for="Data">
      <doc xml:space="preserve">Grilo Data class</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="DataPrivate" c:type="GrlDataPrivate" disguised="1">
    </record>
    <constant name="KEYID_FORMAT" value="u" c:type="GRL_KEYID_FORMAT">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <record name="LogDomain" c:type="GrlLogDomain" disguised="1">
      <method name="free" c:identifier="grl_log_domain_free" version="0.1.7">
        <doc xml:space="preserve">Releases @domain.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="domain" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlLogDomain</doc>
            <type name="LogDomain" c:type="GrlLogDomain*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="new"
                c:identifier="grl_log_domain_new"
                version="0.1.7"
                introspectable="0">
        <return-value>
          <doc xml:space="preserve">The new log domain</doc>
          <type name="LogDomain" c:type="GrlLogDomain*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">The name for the new log domain</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
    </record>
    <enumeration name="LogLevel" c:type="GrlLogLevel">
      <doc xml:space="preserve">Grilo log levels. Defines the level of verbosity selected in Grilo.</doc>
      <member name="none" value="0" c:identifier="GRL_LOG_LEVEL_NONE">
        <doc xml:space="preserve">Log level none</doc>
      </member>
      <member name="error" value="1" c:identifier="GRL_LOG_LEVEL_ERROR">
        <doc xml:space="preserve">Log on error</doc>
      </member>
      <member name="warning" value="2" c:identifier="GRL_LOG_LEVEL_WARNING">
        <doc xml:space="preserve">Log on warning</doc>
      </member>
      <member name="message" value="3" c:identifier="GRL_LOG_LEVEL_MESSAGE">
        <doc xml:space="preserve">Log on message</doc>
      </member>
      <member name="info" value="4" c:identifier="GRL_LOG_LEVEL_INFO">
        <doc xml:space="preserve">Log on info</doc>
      </member>
      <member name="debug" value="5" c:identifier="GRL_LOG_LEVEL_DEBUG">
        <doc xml:space="preserve">Log on debug</doc>
      </member>
      <member name="last" value="6" c:identifier="GRL_LOG_LEVEL_LAST">
        <doc xml:space="preserve">Last level of log</doc>
      </member>
    </enumeration>
    <constant name="METADATA_KEY_ALBUM"
              value="1"
              c:type="GRL_METADATA_KEY_ALBUM">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ALBUM_ARTIST"
              value="60"
              c:type="GRL_METADATA_KEY_ALBUM_ARTIST">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ALBUM_DISC_NUMBER"
              value="58"
              c:type="GRL_METADATA_KEY_ALBUM_DISC_NUMBER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ARTIST"
              value="2"
              c:type="GRL_METADATA_KEY_ARTIST">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_AUDIO_TRACK"
              value="57"
              c:type="GRL_METADATA_KEY_AUDIO_TRACK">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_AUTHOR"
              value="3"
              c:type="GRL_METADATA_KEY_AUTHOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_BITRATE"
              value="4"
              c:type="GRL_METADATA_KEY_BITRATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_CAMERA_MODEL"
              value="35"
              c:type="GRL_METADATA_KEY_CAMERA_MODEL">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_CERTIFICATE"
              value="5"
              c:type="GRL_METADATA_KEY_CERTIFICATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_CHILDCOUNT"
              value="6"
              c:type="GRL_METADATA_KEY_CHILDCOUNT">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_CHILDCOUNT_UNKNOWN"
              value="-1"
              c:type="GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_COMPOSER"
              value="59"
              c:type="GRL_METADATA_KEY_COMPOSER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_CREATION_DATE"
              value="34"
              c:type="GRL_METADATA_KEY_CREATION_DATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_DESCRIPTION"
              value="8"
              c:type="GRL_METADATA_KEY_DESCRIPTION">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_DIRECTOR"
              value="48"
              c:type="GRL_METADATA_KEY_DIRECTOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_DURATION"
              value="9"
              c:type="GRL_METADATA_KEY_DURATION">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_EPISODE"
              value="32"
              c:type="GRL_METADATA_KEY_EPISODE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_EPISODE_TITLE"
              value="56"
              c:type="GRL_METADATA_KEY_EPISODE_TITLE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_EXPOSURE_TIME"
              value="38"
              c:type="GRL_METADATA_KEY_EXPOSURE_TIME">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_EXTERNAL_PLAYER"
              value="10"
              c:type="GRL_METADATA_KEY_EXTERNAL_PLAYER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_EXTERNAL_URL"
              value="11"
              c:type="GRL_METADATA_KEY_EXTERNAL_URL">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_FAVOURITE"
              value="43"
              c:type="GRL_METADATA_KEY_FAVOURITE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_FLASH_USED"
              value="37"
              c:type="GRL_METADATA_KEY_FLASH_USED">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_FRAMERATE"
              value="12"
              c:type="GRL_METADATA_KEY_FRAMERATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_GENRE"
              value="13"
              c:type="GRL_METADATA_KEY_GENRE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_HEIGHT"
              value="14"
              c:type="GRL_METADATA_KEY_HEIGHT">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ID" value="15" c:type="GRL_METADATA_KEY_ID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_INVALID"
              value="0"
              c:type="GRL_METADATA_KEY_INVALID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ISO_SPEED"
              value="39"
              c:type="GRL_METADATA_KEY_ISO_SPEED">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_KEYWORD"
              value="45"
              c:type="GRL_METADATA_KEY_KEYWORD">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_LAST_PLAYED"
              value="16"
              c:type="GRL_METADATA_KEY_LAST_PLAYED">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_LAST_POSITION"
              value="17"
              c:type="GRL_METADATA_KEY_LAST_POSITION">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_LICENSE"
              value="18"
              c:type="GRL_METADATA_KEY_LICENSE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_LYRICS"
              value="19"
              c:type="GRL_METADATA_KEY_LYRICS">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MB_ALBUM_ID"
              value="52"
              c:type="GRL_METADATA_KEY_MB_ALBUM_ID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MB_ARTIST_ID"
              value="54"
              c:type="GRL_METADATA_KEY_MB_ARTIST_ID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MB_RECORDING_ID"
              value="55"
              c:type="GRL_METADATA_KEY_MB_RECORDING_ID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MB_TRACK_ID"
              value="53"
              c:type="GRL_METADATA_KEY_MB_TRACK_ID">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MIME"
              value="20"
              c:type="GRL_METADATA_KEY_MIME">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_MODIFICATION_DATE"
              value="41"
              c:type="GRL_METADATA_KEY_MODIFICATION_DATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ORIENTATION"
              value="36"
              c:type="GRL_METADATA_KEY_ORIENTATION">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_ORIGINAL_TITLE"
              value="49"
              c:type="GRL_METADATA_KEY_ORIGINAL_TITLE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_PERFORMER"
              value="46"
              c:type="GRL_METADATA_KEY_PERFORMER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_PLAY_COUNT"
              value="21"
              c:type="GRL_METADATA_KEY_PLAY_COUNT">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_PRODUCER"
              value="47"
              c:type="GRL_METADATA_KEY_PRODUCER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_PUBLICATION_DATE"
              value="7"
              c:type="GRL_METADATA_KEY_PUBLICATION_DATE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_RATING"
              value="22"
              c:type="GRL_METADATA_KEY_RATING">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_REGION"
              value="44"
              c:type="GRL_METADATA_KEY_REGION">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_SEASON"
              value="31"
              c:type="GRL_METADATA_KEY_SEASON">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_SHOW"
              value="33"
              c:type="GRL_METADATA_KEY_SHOW">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_SITE"
              value="23"
              c:type="GRL_METADATA_KEY_SITE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_SIZE"
              value="50"
              c:type="GRL_METADATA_KEY_SIZE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_SOURCE"
              value="24"
              c:type="GRL_METADATA_KEY_SOURCE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_START_TIME"
              value="42"
              c:type="GRL_METADATA_KEY_START_TIME">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_STUDIO"
              value="25"
              c:type="GRL_METADATA_KEY_STUDIO">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_THUMBNAIL"
              value="26"
              c:type="GRL_METADATA_KEY_THUMBNAIL">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_THUMBNAIL_BINARY"
              value="27"
              c:type="GRL_METADATA_KEY_THUMBNAIL_BINARY">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_TITLE"
              value="28"
              c:type="GRL_METADATA_KEY_TITLE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_TITLE_FROM_FILENAME"
              value="51"
              c:type="GRL_METADATA_KEY_TITLE_FROM_FILENAME">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_TRACK_NUMBER"
              value="40"
              c:type="GRL_METADATA_KEY_TRACK_NUMBER">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_URL" value="29" c:type="GRL_METADATA_KEY_URL">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="METADATA_KEY_WIDTH"
              value="30"
              c:type="GRL_METADATA_KEY_WIDTH">
      <type name="gint" c:type="gint"/>
    </constant>
    <class name="Media"
           c:symbol-prefix="media"
           c:type="GrlMedia"
           parent="Data"
           glib:type-name="GrlMedia"
           glib:get-type="grl_media_get_type"
           glib:type-struct="MediaClass">
      <constructor name="audio_new"
                   c:identifier="grl_media_audio_new"
                   version="0.1.4">
        <doc xml:space="preserve">Creates a new media audio object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated media audio.</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
      </constructor>
      <constructor name="container_new"
                   c:identifier="grl_media_container_new"
                   version="0.3.0">
        <doc xml:space="preserve">Creates a new media container object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated media container.</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
      </constructor>
      <constructor name="image_new"
                   c:identifier="grl_media_image_new"
                   version="0.1.4">
        <doc xml:space="preserve">Creates a new media image object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated media image.</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
      </constructor>
      <constructor name="new" c:identifier="grl_media_new">
        <doc xml:space="preserve">Creates a new data media object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated data media.</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
      </constructor>
      <constructor name="video_new"
                   c:identifier="grl_media_video_new"
                   version="0.1.4">
        <doc xml:space="preserve">Creates a new media video object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated media video.</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
      </constructor>
      <function name="unserialize"
                c:identifier="grl_media_unserialize"
                version="0.1.6">
        <doc xml:space="preserve">Unserializes a GrlMedia.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the GrlMedia from the serial</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
        <parameters>
          <parameter name="serial" transfer-ownership="none">
            <doc xml:space="preserve">a serialized media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <method name="add_artist"
              c:identifier="grl_media_add_artist"
              version="0.3.0">
        <doc xml:space="preserve">Adds a new artist to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="artist" transfer-ownership="none">
            <doc xml:space="preserve">an audio's artist</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_author"
              c:identifier="grl_media_add_author"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new author to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">an author for @media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_director"
              c:identifier="grl_media_add_director"
              version="0.3.0">
        <doc xml:space="preserve">Adds the director of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="director" transfer-ownership="none">
            <doc xml:space="preserve">director of the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_external_player"
              c:identifier="grl_media_add_external_player"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new external player to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve">an external player for @media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_external_url"
              c:identifier="grl_media_add_external_url"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new external url to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">an external url for @media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_genre"
              c:identifier="grl_media_add_genre"
              version="0.3.0">
        <doc xml:space="preserve">Adds a new genre to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="genre" transfer-ownership="none">
            <doc xml:space="preserve">an audio's genre</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_keyword"
              c:identifier="grl_media_add_keyword"
              version="0.2.3">
        <doc xml:space="preserve">Adds the keyword describing the @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="keyword" transfer-ownership="none">
            <doc xml:space="preserve">a keyword describing the media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_lyrics"
              c:identifier="grl_media_add_lyrics"
              version="0.3.0">
        <doc xml:space="preserve">Adds a new lyrics to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="lyrics" transfer-ownership="none">
            <doc xml:space="preserve">an audio's lyrics</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_mb_artist_id"
              c:identifier="grl_media_add_mb_artist_id"
              version="0.3.0">
        <doc xml:space="preserve">Adds a new MusicBrainz artist id to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mb_artist_id" transfer-ownership="none">
            <doc xml:space="preserve">a MusicBrainz artist identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_performer"
              c:identifier="grl_media_add_performer"
              version="0.3.0">
        <doc xml:space="preserve">Adds the actor performing in the movie.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="performer" transfer-ownership="none">
            <doc xml:space="preserve">an actor performing in the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_producer"
              c:identifier="grl_media_add_producer"
              version="0.3.0">
        <doc xml:space="preserve">Adds the producer of the media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="producer" transfer-ownership="none">
            <doc xml:space="preserve">producer of the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_region_data"
              c:identifier="grl_media_add_region_data"
              version="0.2.3">
        <doc xml:space="preserve">Adds regional publication and certification information for @region.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="region" transfer-ownership="none">
            <doc xml:space="preserve">the region's ISO-3166-1 code</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="publication_date" transfer-ownership="none">
            <doc xml:space="preserve">the publication date</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
          <parameter name="certificate" transfer-ownership="none">
            <doc xml:space="preserve">the age certification</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_thumbnail"
              c:identifier="grl_media_add_thumbnail"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new thumbnail to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="thumbnail" transfer-ownership="none">
            <doc xml:space="preserve">a thumbnail for @media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_thumbnail_binary"
              c:identifier="grl_media_add_thumbnail_binary"
              version="0.1.10">
        <doc xml:space="preserve">Adds a new thumbnail to @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="thumbnail" transfer-ownership="none">
            <doc xml:space="preserve">a buffer containing the thumbnail for @media</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_url_data"
              c:identifier="grl_media_add_url_data"
              version="0.3.0">
        <doc xml:space="preserve">Sets all the keys related with the URL of a media resource and adds it to
@media (useful for resources with more than one URL).</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">a media's URL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="mime" transfer-ownership="none">
            <doc xml:space="preserve">th @url mime type</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="bitrate" transfer-ownership="none">
            <doc xml:space="preserve">the @url bitrate, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="framerate" transfer-ownership="none">
            <doc xml:space="preserve">media framerate, or -1 to ignore</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">media width, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">media height, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_album"
              c:identifier="grl_media_get_album"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the album of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_album_artist"
              c:identifier="grl_media_get_album_artist"
              version="0.3.1">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the main artist of the album of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_album_disc_number"
              c:identifier="grl_media_get_album_disc_number"
              version="0.3.1">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the disc number of the media for multi-disc album sets.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_artist"
              c:identifier="grl_media_get_artist"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the artist of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_artist_nth"
              c:identifier="grl_media_get_artist_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th artist of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_author"
              c:identifier="grl_media_get_author"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's author</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_author_nth"
              c:identifier="grl_media_get_author_nth"
              version="0.1.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's author.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_bitrate"
              c:identifier="grl_media_get_bitrate"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the bitrate of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_camera_model"
              c:identifier="grl_media_get_camera_model"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">model of camera used to take picture</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_certificate"
              c:identifier="grl_media_get_certificate"
              version="0.1.6">
        <doc xml:space="preserve">Returns the media's first age certificate.
This should usually be the media's most relevant
age certificate. Use grl_media_get_region_data_nth() to
get other age certificates.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's age certification</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_childcount"
              c:identifier="grl_media_get_childcount"
              version="0.3.0">
        <doc xml:space="preserve">Number of children of this container.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">number of children, or #GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN if
unknown.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media container instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_composer"
              c:identifier="grl_media_get_composer"
              version="0.3.1">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the composer of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_composer_nth"
              c:identifier="grl_media_get_composer_nth"
              version="0.3.1">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th composer of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_creation_date"
              c:identifier="grl_media_get_creation_date"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">date when media was created (owned by @media).</doc>
          <type name="GLib.DateTime" c:type="GDateTime*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description"
              c:identifier="grl_media_get_description"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's description</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_director"
              c:identifier="grl_media_get_director"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the director of the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_director_nth"
              c:identifier="grl_media_get_director_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the director of the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_duration"
              c:identifier="grl_media_get_duration"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's duration in seconds</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_episode"
              c:identifier="grl_media_get_episode"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the episode number of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_episode_title"
              c:identifier="grl_media_get_episode_title"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the title of the episode</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_exposure_time"
              c:identifier="grl_media_get_exposure_time"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">picture's exposure time</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_external_url"
              c:identifier="grl_media_get_external_url"
              version="0.1.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">URL of an external location
where the user play the media.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_external_url_nth"
              c:identifier="grl_media_get_external_url_nth"
              version="0.1.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's external location where the user can play it.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_favourite"
              c:identifier="grl_media_get_favourite"
              version="0.2.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether the media is favourite or not</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flash_used"
              c:identifier="grl_media_get_flash_used"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether the flash was used.

See
http://library.gnome.org/devel/ontology/unstable/nmm-classes.html#nmm-Flash</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_framerate"
              c:identifier="grl_media_get_framerate"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the framerate of the media</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_genre"
              c:identifier="grl_media_get_genre"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the genre of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_genre_nth"
              c:identifier="grl_media_get_genre_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th genre of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_height"
              c:identifier="grl_media_get_height"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the height of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="grl_media_get_id" version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_iso_speed"
              c:identifier="grl_media_get_iso_speed"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">picture's iso speed</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_keyword"
              c:identifier="grl_media_get_keyword"
              version="0.2.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the keyword describing the @media (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_keyword_nth"
              c:identifier="grl_media_get_keyword_nth"
              version="0.2.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the keyword describing the @media (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_last_played"
              c:identifier="grl_media_get_last_played"
              version="0.3.0">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the media's last played time</doc>
          <type name="GLib.DateTime" c:type="GDateTime*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_last_position"
              c:identifier="grl_media_get_last_position"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's last_played position (in seconds)</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_license"
              c:identifier="grl_media_get_license"
              version="0.1.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the license the media is under</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_lyrics"
              c:identifier="grl_media_get_lyrics"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the lyrics of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_lyrics_nth"
              c:identifier="grl_media_get_lyrics_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th lyrics of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_mb_album_id"
              c:identifier="grl_media_get_mb_album_id"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the MusicBrainz album identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mb_artist_id"
              c:identifier="grl_media_get_mb_artist_id"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the MusicBrainz artist identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mb_artist_id_nth"
              c:identifier="grl_media_get_mb_artist_id_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th MusicBrainz artist identifier of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve, starting at 0</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_mb_recording_id"
              c:identifier="grl_media_get_mb_recording_id"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the MusicBrainz recording identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mb_track_id"
              c:identifier="grl_media_get_mb_track_id"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the MusicBrainz track identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_media_type"
              c:identifier="grl_media_get_media_type"
              version="0.3.0">
        <doc xml:space="preserve">Gets the "media-type" property.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">media type</doc>
          <type name="MediaType" c:type="GrlMediaType"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mime"
              c:identifier="grl_media_get_mime"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's mime-type</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_modification_date"
              c:identifier="grl_media_get_modification_date"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">date when the media was last modified (owned by @media).</doc>
          <type name="GLib.DateTime" c:type="GDateTime*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_orientation"
              c:identifier="grl_media_get_orientation"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">degrees clockwise orientation of the picture</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the image instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_original_title"
              c:identifier="grl_media_get_original_title"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the original, untranslated title of the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_performer"
              c:identifier="grl_media_get_performer"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the actor performing in the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_performer_nth"
              c:identifier="grl_media_get_performer_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the actor performing in the movie (owned by @medi).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_play_count"
              c:identifier="grl_media_get_play_count"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's play count</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_player"
              c:identifier="grl_media_get_player"
              version="0.1.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">URL of an external player
object for this media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_player_nth"
              c:identifier="grl_media_get_player_nth"
              version="0.1.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's external player object.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_producer"
              c:identifier="grl_media_get_producer"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the producer of the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_producer_nth"
              c:identifier="grl_media_get_producer_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the producer of the movie (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_publication_date"
              c:identifier="grl_media_get_publication_date"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the publication date of @media (owned by @media).</doc>
          <type name="GLib.DateTime" c:type="GDateTime*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rating"
              c:identifier="grl_media_get_rating"
              version="0.1.5">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's rating</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_region"
              c:identifier="grl_media_get_region"
              version="0.2.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the ISO-3166-1 of the region where the media was
published (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_region_data"
              c:identifier="grl_media_get_region_data"
              version="0.2.3">
        <doc xml:space="preserve">Returns the media's age certificate and publication date for the first region.
This should usually be the media's most relevant region.
Use grl_media_get_region_data_nth() to get the age certificate and
publication date for other regions.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the ISO-3166-1 of the region where the media was
published (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="publication_date"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the publication date, or %NULL to ignore.</doc>
            <type name="GLib.DateTime" c:type="const GDateTime**"/>
          </parameter>
          <parameter name="certificate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the age certification, or %NULL to ignore.</doc>
            <type name="utf8" c:type="const gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_region_data_nth"
              c:identifier="grl_media_get_region_data_nth"
              version="0.2.3">
        <doc xml:space="preserve">Returns the media's age certificate and publication date for one region.
Use grl_data_length() with GRL_METADATA_KEY_REGION to discover
how many regions are available. For instance:
&lt;informalexample&gt;
&lt;programlisting role="C"&gt;&lt;![CDATA[
guint count = grl_data_length (GRL_DATA (media), GRL_METADATA_KEY_REGION);
guint i;
for (i = 0; i &lt; count; ++i) {
  const GDateTime* publication_date = NULL;
  const gchar* certificate = NULL;
  const gchar* region =
    grl_media_get_region_data_nth (media, i,
      &amp;publication_date, &amp;certificate);
  ...
}
]]&gt;&lt;/programlisting&gt;
&lt;/informalexample&gt;</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the ISO-3166-1 of the region where the media was
published (owned by @media).</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="publication_date"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the publication date, or %NULL to ignore.</doc>
            <type name="GLib.DateTime" c:type="const GDateTime**"/>
          </parameter>
          <parameter name="certificate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the age certification, or %NULL to ignore.</doc>
            <type name="utf8" c:type="const gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_season"
              c:identifier="grl_media_get_season"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the season number of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_show"
              c:identifier="grl_media_get_show"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the show title of the media</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_site"
              c:identifier="grl_media_get_site"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's site</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_size"
              c:identifier="grl_media_get_size"
              version="0.2.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's size, in bytes or -1 if unknown.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_source"
              c:identifier="grl_media_get_source"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's source</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object source</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_start_time"
              c:identifier="grl_media_get_start_time"
              version="0.1.19">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the start time of the logical media resource inside the
         file containing it, in seconds.</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_studio"
              c:identifier="grl_media_get_studio"
              version="0.1.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the studio the media is from</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_thumbnail"
              c:identifier="grl_media_get_thumbnail"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's thumbnail URL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_thumbnail_binary"
              c:identifier="grl_media_get_thumbnail_binary"
              version="0.1.9">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's thumbnail data and set size to the thumbnail buffer size</doc>
          <type name="guint8" c:type="const guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">pointer to storing the thumbnail buffer size</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_thumbnail_binary_nth"
              c:identifier="grl_media_get_thumbnail_binary_nth"
              version="0.1.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's thumbnail binary and sets size to the thumbnail
buffer size.</doc>
          <type name="guint8" c:type="const guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">pointer to store the thumbnail buffer size</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_thumbnail_nth"
              c:identifier="grl_media_get_thumbnail_nth"
              version="0.1.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's thumbnail.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_title"
              c:identifier="grl_media_get_title"
              version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's title</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_track_number"
              c:identifier="grl_media_get_track_number"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the track number of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url" c:identifier="grl_media_get_url" version="0.1.4">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's URL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url_data"
              c:identifier="grl_media_get_url_data"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the media's URL and its related properties.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mime"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the mime-type, or %NULL to ignore.</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="bitrate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">the url bitrate, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="framerate" transfer-ownership="none">
            <doc xml:space="preserve">the url framerate, or %NULL to ignore</doc>
            <type name="gfloat" c:type="gfloat*"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">the url width, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">the url height, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_url_data_nth"
              c:identifier="grl_media_get_url_data_nth"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the n-th media's URL and its related properties.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">element to retrieve</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="mime"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve">the mime-type, or %NULL to ignore.</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="bitrate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">the url bitrate, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="framerate" transfer-ownership="none">
            <doc xml:space="preserve">the url framerate, or %NULL to ignore</doc>
            <type name="gfloat" c:type="gfloat*"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">the url width, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">the url height, or %NULL to ignore</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_width"
              c:identifier="grl_media_get_width"
              version="0.3.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the width of the media</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_audio"
              c:identifier="grl_media_is_audio"
              version="0.3.0">
        <doc xml:space="preserve">Check if @media is an audio</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @media is an audio</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_container"
              c:identifier="grl_media_is_container"
              version="0.3.0">
        <doc xml:space="preserve">Check if @media is a container</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @media is a container</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_image"
              c:identifier="grl_media_is_image"
              version="0.3.0">
        <doc xml:space="preserve">Check if @media is an image</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @media is an image</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_video"
              c:identifier="grl_media_is_video"
              version="0.3.0">
        <doc xml:space="preserve">Check if @media is a video</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @media is a video</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="serialize"
              c:identifier="grl_media_serialize"
              version="0.1.6">
        <doc xml:space="preserve">Serializes a GrlMedia into a string. It does a basic serialization.

See grl_media_serialize_extended() to get more serialization approaches.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">serialized media</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="serialize_extended"
              c:identifier="grl_media_serialize_extended"
              version="0.1.6"
              introspectable="0">
        <doc xml:space="preserve">Serializes a GrlMedia into a string.

See grl_media_unserialize() to recover back the GrlMedia from the string.

If serialization type is @GRL_MEDIA_SERIALIZE_PARTIAL then it requires a
@GList with the properties to consider in serialization (id and source are
always considered).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">serialized media</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="serial_type" transfer-ownership="none">
            <doc xml:space="preserve">type of serialization</doc>
            <type name="MediaSerializeType" c:type="GrlMediaSerializeType"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">media keys to serialize</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="set_album"
              c:identifier="grl_media_set_album"
              version="0.3.0">
        <doc xml:space="preserve">Set the album of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="album" transfer-ownership="none">
            <doc xml:space="preserve">the audio's album</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_album_artist"
              c:identifier="grl_media_set_album_artist"
              version="0.3.1">
        <doc xml:space="preserve">Set the main artist of the album of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="album_artist" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_album_disc_number"
              c:identifier="grl_media_set_album_disc_number"
              version="0.3.1">
        <doc xml:space="preserve">Set the disc number of the media for multi-disc album sets.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="disc_number" transfer-ownership="none">
            <doc xml:space="preserve">the disc number within an album</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_artist"
              c:identifier="grl_media_set_artist"
              version="0.3.0">
        <doc xml:space="preserve">Set the artist of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="artist" transfer-ownership="none">
            <doc xml:space="preserve">the audio's artist</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_author"
              c:identifier="grl_media_set_author"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's author</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">the media's author</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_bitrate"
              c:identifier="grl_media_set_bitrate"
              version="0.3.0">
        <doc xml:space="preserve">Set the bitrate of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="bitrate" transfer-ownership="none">
            <doc xml:space="preserve">the audio's bitrate</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_camera_model"
              c:identifier="grl_media_set_camera_model"
              version="0.3.0">
        <doc xml:space="preserve">Set the camera_model of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="camera_model" transfer-ownership="none">
            <doc xml:space="preserve">model of camera used to take picture</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_certificate"
              c:identifier="grl_media_set_certificate"
              version="0.1.6">
        <doc xml:space="preserve">Set the media's first age certification.
This should usually be the media's most relevant
age certificate. Use grl_media_set_region_data() to
set other age certificates.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="certificate" transfer-ownership="none">
            <doc xml:space="preserve">The age certificate of the media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_childcount"
              c:identifier="grl_media_set_childcount"
              version="0.3.0">
        <doc xml:space="preserve">Sets the number of children of this container. Use
#GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN if it is unknown.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media container instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="childcount" transfer-ownership="none">
            <doc xml:space="preserve">number of children</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_composer"
              c:identifier="grl_media_set_composer"
              version="0.3.1">
        <doc xml:space="preserve">Set the composer of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="composer" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_creation_date"
              c:identifier="grl_media_set_creation_date"
              version="0.2.0">
        <doc xml:space="preserve">Set the creation_date of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="creation_date" transfer-ownership="none">
            <doc xml:space="preserve">date when media was created</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_description"
              c:identifier="grl_media_set_description"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's description</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="description" transfer-ownership="none">
            <doc xml:space="preserve">the description</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_director"
              c:identifier="grl_media_set_director"
              version="0.3.0">
        <doc xml:space="preserve">Sets the director of the media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="director" transfer-ownership="none">
            <doc xml:space="preserve">director of the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_duration"
              c:identifier="grl_media_set_duration"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's duration</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="duration" transfer-ownership="none">
            <doc xml:space="preserve">the duration in seconds</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_episode"
              c:identifier="grl_media_set_episode"
              version="0.3.0">
        <doc xml:space="preserve">Sets the episode number of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="episode" transfer-ownership="none">
            <doc xml:space="preserve">the video's episode</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_episode_title"
              c:identifier="grl_media_set_episode_title"
              version="0.3.0">
        <doc xml:space="preserve">Sets the title of an media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="episode_title" transfer-ownership="none">
            <doc xml:space="preserve">the title of the episode</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_exposure_time"
              c:identifier="grl_media_set_exposure_time"
              version="0.3.0">
        <doc xml:space="preserve">Set the exposure_time of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="exposure_time" transfer-ownership="none">
            <doc xml:space="preserve">picture's exposure time</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_external_player"
              c:identifier="grl_media_set_external_player"
              version="0.1.6">
        <doc xml:space="preserve">Set the location of a player for the media (usually a flash player)</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve">location of an external player for this media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_external_url"
              c:identifier="grl_media_set_external_url"
              version="0.1.6">
        <doc xml:space="preserve">Set an external location where users can play the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">external location where this media can be played.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_favourite"
              c:identifier="grl_media_set_favourite"
              version="0.2.3">
        <doc xml:space="preserve">Set if the media is favourite or not</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="favourite" transfer-ownership="none">
            <doc xml:space="preserve">whether the item is favourite or not</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flash_used"
              c:identifier="grl_media_set_flash_used"
              version="0.3.0">
        <doc xml:space="preserve">Set the flash_used of the media
See
http://library.gnome.org/devel/ontology/unstable/nmm-classes.html#nmm-Flash</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="flash_used" transfer-ownership="none">
            <doc xml:space="preserve">whether the flash was used</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_framerate"
              c:identifier="grl_media_set_framerate"
              version="0.3.0">
        <doc xml:space="preserve">Set the framerate of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="framerate" transfer-ownership="none">
            <doc xml:space="preserve">the video's framerate</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_genre"
              c:identifier="grl_media_set_genre"
              version="0.3.0">
        <doc xml:space="preserve">Set the genre of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="genre" transfer-ownership="none">
            <doc xml:space="preserve">the audio's genre</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_height"
              c:identifier="grl_media_set_height"
              version="0.3.0">
        <doc xml:space="preserve">Set the height of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">the video's height</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_id" c:identifier="grl_media_set_id" version="0.1.4">
        <doc xml:space="preserve">Set the media identifier</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">the identifier of the media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_iso_speed"
              c:identifier="grl_media_set_iso_speed"
              version="0.3.0">
        <doc xml:space="preserve">Set the iso_speed of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="iso_speed" transfer-ownership="none">
            <doc xml:space="preserve">picture's iso speed</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_keyword"
              c:identifier="grl_media_set_keyword"
              version="0.2.3">
        <doc xml:space="preserve">Sets the keyword describing the @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="keyword" transfer-ownership="none">
            <doc xml:space="preserve">a keyword describing the media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_last_played"
              c:identifier="grl_media_set_last_played"
              version="0.3.0">
        <doc xml:space="preserve">Set the media last played date</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="last_played" transfer-ownership="none">
            <doc xml:space="preserve">date when the media was last played</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_last_position"
              c:identifier="grl_media_set_last_position"
              version="0.1.4">
        <doc xml:space="preserve">Set the media last played position</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="last_position" transfer-ownership="none">
            <doc xml:space="preserve">second at which the media playback was interrupted</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_license"
              c:identifier="grl_media_set_license"
              version="0.1.6">
        <doc xml:space="preserve">Set the media license</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="license" transfer-ownership="none">
            <doc xml:space="preserve">The license of the media</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_lyrics"
              c:identifier="grl_media_set_lyrics"
              version="0.3.0">
        <doc xml:space="preserve">Set the lyrics of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="lyrics" transfer-ownership="none">
            <doc xml:space="preserve">the audio's lyrics</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mb_album_id"
              c:identifier="grl_media_set_mb_album_id"
              version="0.3.0">
        <doc xml:space="preserve">Set the MusicBrainz album identifier of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mb_album_id" transfer-ownership="none">
            <doc xml:space="preserve">the MusicBrainz album identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mb_artist_id"
              c:identifier="grl_media_set_mb_artist_id"
              version="0.3.0">
        <doc xml:space="preserve">Set the MusicBrainz artist identifier of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mb_artist_id" transfer-ownership="none">
            <doc xml:space="preserve">the MusicBrainz artist identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mb_recording_id"
              c:identifier="grl_media_set_mb_recording_id"
              version="0.3.0">
        <doc xml:space="preserve">Set the MusicBrainz recording identifier of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mb_recording_id" transfer-ownership="none">
            <doc xml:space="preserve">the MusicBrainz recording identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mb_track_id"
              c:identifier="grl_media_set_mb_track_id"
              version="0.3.0">
        <doc xml:space="preserve">Set the MusicBrainz track identifier of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mb_track_id" transfer-ownership="none">
            <doc xml:space="preserve">the MusicBrainz track identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mime"
              c:identifier="grl_media_set_mime"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's mime-type</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="mime" transfer-ownership="none">
            <doc xml:space="preserve">the mime type</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_modification_date"
              c:identifier="grl_media_set_modification_date"
              version="0.2.0">
        <doc xml:space="preserve">Set the modification date of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="modification_date" transfer-ownership="none">
            <doc xml:space="preserve">date when the media was last modified</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_orientation"
              c:identifier="grl_media_set_orientation"
              version="0.3.0">
        <doc xml:space="preserve">Set the orientation of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="orientation" transfer-ownership="none">
            <doc xml:space="preserve">degrees clockwise orientation of the picture</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_original_title"
              c:identifier="grl_media_set_original_title"
              version="0.3.0">
        <doc xml:space="preserve">Sets the original, untranslated title of the media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="original_title" transfer-ownership="none">
            <doc xml:space="preserve">original, untranslated title of the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_performer"
              c:identifier="grl_media_set_performer"
              version="0.3.0">
        <doc xml:space="preserve">Sets the actor performing in the movie.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="performer" transfer-ownership="none">
            <doc xml:space="preserve">an actor performing in the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_play_count"
              c:identifier="grl_media_set_play_count"
              version="0.1.4">
        <doc xml:space="preserve">Set the media play count</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="play_count" transfer-ownership="none">
            <doc xml:space="preserve">the play count</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_producer"
              c:identifier="grl_media_set_producer"
              version="0.3.0">
        <doc xml:space="preserve">Sets the producer of the media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="producer" transfer-ownership="none">
            <doc xml:space="preserve">producer of the movie</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_publication_date"
              c:identifier="grl_media_set_publication_date"
              version="0.2.0">
        <doc xml:space="preserve">Set the publication date of @media.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="date" transfer-ownership="none">
            <doc xml:space="preserve">the date</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rating"
              c:identifier="grl_media_set_rating"
              version="0.1.5">
        <doc xml:space="preserve">This method receives a rating and its scale and normalizes it on a scale
from 0...5 to match the usual five-star rating.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="rating" transfer-ownership="none">
            <doc xml:space="preserve">a rating value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
          <parameter name="max" transfer-ownership="none">
            <doc xml:space="preserve">maximum rating value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_region"
              c:identifier="grl_media_set_region"
              version="0.2.3">
        <doc xml:space="preserve">Sets the @region where @media was published.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="region" transfer-ownership="none">
            <doc xml:space="preserve">the region's ISO-3166-1 code</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_region_data"
              c:identifier="grl_media_set_region_data"
              version="0.2.3">
        <doc xml:space="preserve">Sets regional publication and certification information for @region.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="region" transfer-ownership="none">
            <doc xml:space="preserve">the region's ISO-3166-1 code</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="publication_date" transfer-ownership="none">
            <doc xml:space="preserve">the publication date</doc>
            <type name="GLib.DateTime" c:type="const GDateTime*"/>
          </parameter>
          <parameter name="certificate" transfer-ownership="none">
            <doc xml:space="preserve">the age certification</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_season"
              c:identifier="grl_media_set_season"
              version="0.3.0">
        <doc xml:space="preserve">Sets the season number of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="season" transfer-ownership="none">
            <doc xml:space="preserve">the video's season</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_show"
              c:identifier="grl_media_set_show"
              version="0.3.0">
        <doc xml:space="preserve">Sets the show title of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="show" transfer-ownership="none">
            <doc xml:space="preserve">the video's show name</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_site"
              c:identifier="grl_media_set_site"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's site. A site is a website about the media such as a
studio's promotional website for a movie.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="site" transfer-ownership="none">
            <doc xml:space="preserve">the site</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_size"
              c:identifier="grl_media_set_size"
              version="0.2.10">
        <doc xml:space="preserve">Set the size of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">the size in bytes</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_source"
              c:identifier="grl_media_set_source"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's source</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">the source</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_studio"
              c:identifier="grl_media_set_studio"
              version="0.1.6">
        <doc xml:space="preserve">Set the media studio</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="studio" transfer-ownership="none">
            <doc xml:space="preserve">The studio the media is from</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_thumbnail"
              c:identifier="grl_media_set_thumbnail"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's thumbnail URL</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="thumbnail" transfer-ownership="none">
            <doc xml:space="preserve">the thumbnail URL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_thumbnail_binary"
              c:identifier="grl_media_set_thumbnail_binary"
              version="0.1.9">
        <doc xml:space="preserve">Set the media's binary thumbnail</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="thumbnail" transfer-ownership="none">
            <doc xml:space="preserve">thumbnail buffer</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">thumbnail buffer size</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_title"
              c:identifier="grl_media_set_title"
              version="0.1.4">
        <doc xml:space="preserve">Set the media's title</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="title" transfer-ownership="none">
            <doc xml:space="preserve">the title</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_track_number"
              c:identifier="grl_media_set_track_number"
              version="0.3.0">
        <doc xml:space="preserve">Set the track number of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="track_number" transfer-ownership="none">
            <doc xml:space="preserve">the audio's track number</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_url" c:identifier="grl_media_set_url" version="0.1.4">
        <doc xml:space="preserve">Set the media's URL</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the media's URL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_url_data"
              c:identifier="grl_media_set_url_data"
              version="0.3.0">
        <doc xml:space="preserve">Sets all the keys related with the URL of a media resource in one go.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the media's URL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="mime" transfer-ownership="none">
            <doc xml:space="preserve">the @url mime type</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="bitrate" transfer-ownership="none">
            <doc xml:space="preserve">the @url bitrate, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="framerate" transfer-ownership="none">
            <doc xml:space="preserve">media framerate, or -1 to ignore</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">media width, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">media height, or -1 to ignore</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_width"
              c:identifier="grl_media_set_width"
              version="0.3.0">
        <doc xml:space="preserve">Set the width of the media</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the media instance</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </instance-parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">the video's width</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <property name="media-type"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="MediaType"/>
      </property>
      <field name="parent">
        <type name="Data" c:type="GrlData"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="MediaPrivate" c:type="GrlMediaPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="MediaClass"
            c:type="GrlMediaClass"
            glib:is-gtype-struct-for="Media">
      <doc xml:space="preserve">Grilo Media Class</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="DataClass" c:type="GrlDataClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="MediaPrivate" c:type="GrlMediaPrivate" disguised="1">
    </record>
    <enumeration name="MediaSerializeType"
                 version="0.2.3"
                 glib:type-name="GrlMediaSerializeType"
                 glib:get-type="grl_media_serialize_type_get_type"
                 c:type="GrlMediaSerializeType">
      <doc xml:space="preserve">GrlMedia serialize type</doc>
      <member name="basic"
              value="0"
              c:identifier="GRL_MEDIA_SERIALIZE_BASIC"
              glib:nick="basic">
        <doc xml:space="preserve">Basic mode</doc>
      </member>
      <member name="partial"
              value="1"
              c:identifier="GRL_MEDIA_SERIALIZE_PARTIAL"
              glib:nick="partial">
        <doc xml:space="preserve">Partial mode</doc>
      </member>
      <member name="full"
              value="2"
              c:identifier="GRL_MEDIA_SERIALIZE_FULL"
              glib:nick="full">
        <doc xml:space="preserve">Full mode</doc>
      </member>
    </enumeration>
    <enumeration name="MediaType"
                 glib:type-name="GrlMediaType"
                 glib:get-type="grl_media_type_get_type"
                 c:type="GrlMediaType">
      <member name="unknown"
              value="0"
              c:identifier="GRL_MEDIA_TYPE_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown media</doc>
      </member>
      <member name="audio"
              value="1"
              c:identifier="GRL_MEDIA_TYPE_AUDIO"
              glib:nick="audio">
        <doc xml:space="preserve">audio media</doc>
      </member>
      <member name="video"
              value="2"
              c:identifier="GRL_MEDIA_TYPE_VIDEO"
              glib:nick="video">
        <doc xml:space="preserve">video media</doc>
      </member>
      <member name="image"
              value="3"
              c:identifier="GRL_MEDIA_TYPE_IMAGE"
              glib:nick="image">
        <doc xml:space="preserve">image media</doc>
      </member>
      <member name="container"
              value="4"
              c:identifier="GRL_MEDIA_TYPE_CONTAINER"
              glib:nick="container">
        <doc xml:space="preserve">contaddiner media</doc>
      </member>
    </enumeration>
    <constant name="OPERATION_OPTION_COUNT"
              value="count"
              c:type="GRL_OPERATION_OPTION_COUNT">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="OPERATION_OPTION_KEY_EQUAL_FILTER"
              value="key-equal-filter"
              c:type="GRL_OPERATION_OPTION_KEY_EQUAL_FILTER">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="OPERATION_OPTION_KEY_RANGE_FILTER"
              value="key-range-filter"
              c:type="GRL_OPERATION_OPTION_KEY_RANGE_FILTER">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="OPERATION_OPTION_RESOLUTION_FLAGS"
              value="resolution-flags"
              c:type="GRL_OPERATION_OPTION_RESOLUTION_FLAGS">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="OPERATION_OPTION_SKIP"
              value="skip"
              c:type="GRL_OPERATION_OPTION_SKIP">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="OPERATION_OPTION_TYPE_FILTER"
              value="type-filter"
              c:type="GRL_OPERATION_OPTION_TYPE_FILTER">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <callback name="OperationCancelCb" c:type="GrlOperationCancelCb">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="OperationOptions"
           c:symbol-prefix="operation_options"
           c:type="GrlOperationOptions"
           parent="GObject.Object"
           glib:type-name="GrlOperationOptions"
           glib:get-type="grl_operation_options_get_type"
           glib:type-struct="OperationOptionsClass">
      <constructor name="new"
                   c:identifier="grl_operation_options_new"
                   version="0.2.0">
        <doc xml:space="preserve">Creates a new GrlOperationOptions object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new GrlOperationOptions instance.</doc>
          <type name="OperationOptions" c:type="GrlOperationOptions*"/>
        </return-value>
        <parameters>
          <parameter name="caps"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">caps that options will have to match. If %NULL, all
options will be accepted.</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="grl_operation_options_copy"
              version="0.2.0">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GrlOperationOptions instance with its values being copies of
the values of @options.</doc>
          <type name="OperationOptions" c:type="GrlOperationOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_count"
              c:identifier="grl_operation_options_get_count"
              version="0.2.0">
        <doc xml:space="preserve">Get the count option, that is, the number of elements to retrieve in an
operation done with @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value of the count option, or a default value if it is not set.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_key_filter"
              c:identifier="grl_operation_options_get_key_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the filter</doc>
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_key_filter_list"
              c:identifier="grl_operation_options_get_key_filter_list"
              version="0.2.0">
        <return-value transfer-ownership="container">
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_key_range_filter"
              c:identifier="grl_operation_options_get_key_range_filter"
              version="0.2.0">
        <doc xml:space="preserve">Stores the limits of the range in the filter for @key in @min_value and
@max_value. If some of the values has no limit, it will set a %NULL.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlKeyID</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="min_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">the minimum value for the range</doc>
            <type name="GObject.Value" c:type="GValue**"/>
          </parameter>
          <parameter name="max_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="none"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">the maximum value for the range</doc>
            <type name="GObject.Value" c:type="GValue**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_key_range_filter_list"
              c:identifier="grl_operation_options_get_key_range_filter_list"
              version="0.2.0">
        <return-value transfer-ownership="container">
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_resolution_flags"
              c:identifier="grl_operation_options_get_resolution_flags"
              version="0.2.12">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">resolution flags of @options.</doc>
          <type name="ResolutionFlags" c:type="GrlResolutionFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_skip"
              c:identifier="grl_operation_options_get_skip"
              version="0.2.0">
        <doc xml:space="preserve">Get the skip option, that is, the number of elements to skip before
retrieving media items in an operation done with @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value of the skip option, or a default value if it is not set.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_type_filter"
              c:identifier="grl_operation_options_get_type_filter"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">resolution flags of @options</doc>
          <type name="TypeFilter" c:type="GrlTypeFilter"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="key_is_set"
              c:identifier="grl_operation_options_key_is_set"
              version="0.2.0">
        <doc xml:space="preserve">This is an internal method that shouldn't be used outside of Grilo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether @key is set in @options.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">an operation option key</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="obey_caps"
              c:identifier="grl_operation_options_obey_caps"
              version="0.2.0">
        <doc xml:space="preserve">Check whether @options obey to @caps.
Optionally provide the options that match (respectively don't match) @caps
in @supported_options (respectively @unsupported_options).
This would typically (but not necessarily) be used with a
#GrlOperationOptions instance that was created with %NULL caps.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @options obey to @caps, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">capabilities against which we want to test @options</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </parameter>
          <parameter name="supported_options"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">if not %NULL, will contain a
newly-allocated #GrlOperationOptions instance containing all the values of
@options that match @caps.</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions**"/>
          </parameter>
          <parameter name="unsupported_options"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">if not %NULL, will contain a
newly-allocated #GrlOperationOptions instance containing all the values of
@options that do not match @caps.</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions**"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_count"
              c:identifier="grl_operation_options_set_count"
              version="0.2.0">
        <doc xml:space="preserve">Set the count option for an operation. Will only succeed if @count obey to
the inherent capabilities of @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @count could be set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="count" transfer-ownership="none">
            <doc xml:space="preserve">number of elements to retrieve in an operation</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_filter_dictionary"
              c:identifier="grl_operation_options_set_key_filter_dictionary"
              shadows="set_key_filters"
              version="0.2.0">
        <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="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="filters" transfer-ownership="none">
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="KeyID"/>
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_filter_value"
              c:identifier="grl_operation_options_set_key_filter_value"
              version="0.2.0">
        <doc xml:space="preserve">Set filter as "@key == @value".</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="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlKeyID</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">a #GValue</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_filters"
              c:identifier="grl_operation_options_set_key_filters"
              shadowed-by="set_key_filter_dictionary"
              version="0.2.0"
              introspectable="0">
        <doc xml:space="preserve">Set filter as "k1 == v1 AND k2 == v2 AND ..."

&lt;example&gt;
 Elements from album "Frozen" with a bitrate of 256kbs.
 &lt;programlisting&gt;
  grl_operation_options_set_key_filters (my_options,
                                         GRL_METADATA_KEY_ALBUM, "Frozen",
                                         GRL_METADATA_KEY_BITRATE, 256,
                                         NULL);
 &lt;/programlisting&gt;
&lt;/example&gt;</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="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">pairs of #GrlKeyID, value</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_range_filter"
              c:identifier="grl_operation_options_set_key_range_filter"
              version="0.2.0"
              introspectable="0">
        <doc xml:space="preserve">Set filter as "min1 &lt;= k1 &lt;= max1 AND min2 &lt;= k2 &lt;= max2 AND ..."

The range can be open if some of the minX, maxX values are %NULL.

&lt;example&gt;
 Album must start with "T" and the bitrate should be 256kbs or greater.
 &lt;programlisting&gt;
  grl_operation_options_set_key_range_filters (my_options,
                                               GRL_METADATA_KEY_ALBUM, "Ta", "Tz",
                                               GRL_METADATA_KEY_BITRATE, 256, NULL,
                                               NULL);
 &lt;/programlisting&gt;
&lt;/example&gt;</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="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">triplets of #GrlKeyID, minvalue, maxvalue</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_range_filter_value"
              c:identifier="grl_operation_options_set_key_range_filter_value"
              version="0.2.0">
        <doc xml:space="preserve">Set filter as "@min_value &lt;= @key &lt;= @max_value".

If @min_value is %NULL, then filter is "@key &lt;= @max_value".

If @max_value is %NULL, then filter is "@key &gt;= @min_value".</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="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlKeyID</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="min_value"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">minimum value for range</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
          <parameter name="max_value"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">maximum value for range</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_resolution_flags"
              c:identifier="grl_operation_options_set_resolution_flags"
              version="0.2.12">
        <doc xml:space="preserve">Set the resolution flags for an operation. Will only succeed if @flags obey
to the inherent capabilities of @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @flags could be set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">the resolution flags to be set for an operation. See
#GrlResolutionFlags for possible values.</doc>
            <type name="ResolutionFlags" c:type="GrlResolutionFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_skip"
              c:identifier="grl_operation_options_set_skip"
              version="0.2.0">
        <doc xml:space="preserve">Set the skip option for an operation. Will only succeed if @skip obeys to the
inherent capabilities of @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @skip could be set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="skip" transfer-ownership="none">
            <doc xml:space="preserve">number of elements to skip in an operation</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_type_filter"
              c:identifier="grl_operation_options_set_type_filter"
              version="0.2.0">
        <doc xml:space="preserve">Set the type of media filter for an operation. Only those media elements that
match the @filter will be returned. Will only succeed if @filter obey to the
inherent capabilities of @options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @flags could be set, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlOperationOptions instance</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </instance-parameter>
          <parameter name="filter" transfer-ownership="none">
            <doc xml:space="preserve">the type of media to get</doc>
            <type name="TypeFilter" c:type="GrlTypeFilter"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="OperationOptionsPrivate"
              c:type="GrlOperationOptionsPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="OperationOptionsClass"
            c:type="GrlOperationOptionsClass"
            glib:is-gtype-struct-for="OperationOptions">
      <doc xml:space="preserve">Grilo Operation Options class.</doc>
      <field name="parent">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="OperationOptionsPrivate"
            c:type="GrlOperationOptionsPrivate"
            disguised="1">
    </record>
    <constant name="PADDING" value="16" c:type="GRL_PADDING">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="PADDING_SMALL" value="8" c:type="GRL_PADDING_SMALL">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="PLUGIN_AUTHOR" value="author" c:type="GRL_PLUGIN_AUTHOR">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_DESCRIPTION"
              value="description"
              c:type="GRL_PLUGIN_DESCRIPTION">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_LICENSE"
              value="license"
              c:type="GRL_PLUGIN_LICENSE">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_LIST_VAR"
              value="GRL_PLUGIN_LIST"
              c:type="GRL_PLUGIN_LIST_VAR">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_NAME" value="name" c:type="GRL_PLUGIN_NAME">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_PATH_VAR"
              value="GRL_PLUGIN_PATH"
              c:type="GRL_PLUGIN_PATH_VAR">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_RANKS_VAR"
              value="GRL_PLUGIN_RANKS"
              c:type="GRL_PLUGIN_RANKS_VAR">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_SITE" value="site" c:type="GRL_PLUGIN_SITE">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="PLUGIN_VERSION"
              value="version"
              c:type="GRL_PLUGIN_VERSION">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <class name="Plugin"
           c:symbol-prefix="plugin"
           c:type="GrlPlugin"
           parent="GObject.Object"
           glib:type-name="GrlPlugin"
           glib:get-type="grl_plugin_get_type"
           glib:type-struct="PluginClass">
      <method name="get_author"
              c:identifier="grl_plugin_get_author"
              version="0.2.0">
        <doc xml:space="preserve">Get the author of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the author of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description"
              c:identifier="grl_plugin_get_description"
              version="0.2.0">
        <doc xml:space="preserve">Get the description of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the description of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_filename"
              c:identifier="grl_plugin_get_filename"
              version="0.2.0">
        <doc xml:space="preserve">Get the filename containing the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the filename containing @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="grl_plugin_get_id" version="0.2.0">
        <doc xml:space="preserve">Get the id of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the id of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_license"
              c:identifier="grl_plugin_get_license"
              version="0.2.0">
        <doc xml:space="preserve">Get the license of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the license of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_module"
              c:identifier="grl_plugin_get_module"
              version="0.2.0"
              introspectable="0">
        <doc xml:space="preserve">Gets the #GModule containing the plugin</doc>
        <return-value>
          <doc xml:space="preserve">a #GModule</doc>
          <type name="GModule.Module" c:type="GModule*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_module_name"
              c:identifier="grl_plugin_get_module_name"
              version="0.3.0">
        <doc xml:space="preserve">Get the plugin module name</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the module name containing @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name"
              c:identifier="grl_plugin_get_name"
              version="0.2.0">
        <doc xml:space="preserve">Get the name of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_site"
              c:identifier="grl_plugin_get_site"
              version="0.2.0">
        <doc xml:space="preserve">Get the site of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the site of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_sources"
              c:identifier="grl_plugin_get_sources"
              version="0.2.0">
        <doc xml:space="preserve">Gets the sources belonging to @plugin.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList of
#GrlSource&lt;!-- --&gt;s. The content of the list should not be modified or
freed. Use g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Source"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_version"
              c:identifier="grl_plugin_get_version"
              version="0.2.0">
        <doc xml:space="preserve">Get the version of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the version of the @plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load" c:identifier="grl_plugin_load" introspectable="0">
        <doc xml:space="preserve">Load the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if loaded was successful</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="configurations" transfer-ownership="none">
            <doc xml:space="preserve">a list of configurations</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="Config"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="register_keys" c:identifier="grl_plugin_register_keys">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_desc"
              c:identifier="grl_plugin_set_desc"
              introspectable="0">
        <doc xml:space="preserve">Sets the plugin description.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">a plugin</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="desc" transfer-ownership="none">
            <doc xml:space="preserve">description</doc>
            <type name="PluginDescriptor" c:type="GrlPluginDescriptor*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_filename" c:identifier="grl_plugin_set_filename">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="filename" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_id" c:identifier="grl_plugin_set_id">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_load_func"
              c:identifier="grl_plugin_set_load_func"
              introspectable="0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="load_function" transfer-ownership="none">
            <type name="PluginInitFunc" c:type="GrlPluginInitFunc"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_module" c:identifier="grl_plugin_set_module">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="module" transfer-ownership="none">
            <type name="GModule.Module" c:type="GModule*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_module_name" c:identifier="grl_plugin_set_module_name">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="module_name" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_register_keys_func"
              c:identifier="grl_plugin_set_register_keys_func"
              introspectable="0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="register_keys_function" transfer-ownership="none">
            <type name="PluginRegisterKeysFunc"
                  c:type="GrlPluginRegisterKeysFunc"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_unload_func"
              c:identifier="grl_plugin_set_unload_func"
              introspectable="0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
          <parameter name="unload_function" transfer-ownership="none">
            <type name="PluginDeinitFunc" c:type="GrlPluginDeinitFunc"/>
          </parameter>
        </parameters>
      </method>
      <method name="unload" c:identifier="grl_plugin_unload">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GrlPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="loaded" version="0.2.0" transfer-ownership="none">
        <doc xml:space="preserve">@TRUE if plugin is loaded.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PluginPrivate" c:type="GrlPluginPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="PluginClass"
            c:type="GrlPluginClass"
            glib:is-gtype-struct-for="Plugin">
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="PluginDeinitFunc" c:type="GrlPluginDeinitFunc">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GrlPlugin*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="PluginDescriptor"
            c:type="GrlPluginDescriptor"
            version="0.3.0">
      <doc xml:space="preserve">This structure is used for the module loader</doc>
      <field name="major_version" writable="1">
        <doc xml:space="preserve">the major version number of core that plugin was compiled for</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="minor_version" writable="1">
        <doc xml:space="preserve">the minor version number of core that plugin was compiled for</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="id" writable="1">
        <doc xml:space="preserve">the plugin identifier</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="name" writable="1">
        <doc xml:space="preserve">name of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <doc xml:space="preserve">description of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="author" writable="1">
        <doc xml:space="preserve">author of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="version" writable="1">
        <doc xml:space="preserve">version of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="license" writable="1">
        <doc xml:space="preserve">license of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="site" writable="1">
        <doc xml:space="preserve">URL to provider of plugin</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="init" introspectable="0" writable="1">
        <type name="PluginInitFunc" c:type="GrlPluginInitFunc"/>
      </field>
      <field name="deinit" writable="1">
        <type name="PluginDeinitFunc" c:type="GrlPluginDeinitFunc"/>
      </field>
      <field name="register_keys" writable="1">
        <type name="PluginRegisterKeysFunc"
              c:type="GrlPluginRegisterKeysFunc"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="PluginInitFunc"
              c:type="GrlPluginInitFunc"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="registry" transfer-ownership="none">
          <type name="Registry" c:type="GrlRegistry*"/>
        </parameter>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GrlPlugin*"/>
        </parameter>
        <parameter name="configs" transfer-ownership="none">
          <type name="GLib.List" c:type="GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </parameter>
      </parameters>
    </callback>
    <record name="PluginPrivate" c:type="GrlPluginPrivate" disguised="1">
    </record>
    <callback name="PluginRegisterKeysFunc" c:type="GrlPluginRegisterKeysFunc">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="registry" transfer-ownership="none">
          <type name="Registry" c:type="GrlRegistry*"/>
        </parameter>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GrlPlugin*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="RangeValue"
            c:type="GrlRangeValue"
            glib:type-name="GrlRangeValue"
            glib:get-type="grl_range_value_get_type"
            c:symbol-prefix="range_value">
      <field name="min" writable="1">
        <type name="GObject.Value" c:type="GValue*"/>
      </field>
      <field name="max" writable="1">
        <type name="GObject.Value" c:type="GValue*"/>
      </field>
      <constructor name="new" c:identifier="grl_range_value_new">
        <return-value transfer-ownership="full">
          <type name="RangeValue" c:type="GrlRangeValue*"/>
        </return-value>
        <parameters>
          <parameter name="min" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
          <parameter name="max" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="dup" c:identifier="grl_range_value_dup">
        <return-value transfer-ownership="full">
          <type name="RangeValue" c:type="GrlRangeValue*"/>
        </return-value>
        <parameters>
          <instance-parameter name="range" transfer-ownership="none">
            <type name="RangeValue" c:type="const GrlRangeValue*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="grl_range_value_free">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="range" transfer-ownership="none">
            <type name="RangeValue" c:type="GrlRangeValue*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="hashtable_insert"
                c:identifier="grl_range_value_hashtable_insert">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="hash_table" transfer-ownership="none">
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="key"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="min" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
          <parameter name="max" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </function>
      <function name="hashtable_new"
                c:identifier="grl_range_value_hashtable_new">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GHashTable</doc>
          <type name="GLib.HashTable" c:type="GHashTable*">
            <type name="gpointer"/>
            <type name="RangeValue"/>
          </type>
        </return-value>
      </function>
    </record>
    <enumeration name="Rank" c:type="GrlRank">
      <doc xml:space="preserve">Source priority ranks. Defines the order in which the resolver
(or similar rank-picking mechanisms) will choose this source
over an alternative one with the same function.

These constants serve as a rough guidance for defining the rank
of a GrlSource. Any value is valid, including values bigger
than GRL_RANK_HIGHEST.</doc>
      <member name="lowest" value="-64" c:identifier="GRL_RANK_LOWEST">
        <doc xml:space="preserve">will be chosen last or not at all</doc>
      </member>
      <member name="low" value="-32" c:identifier="GRL_RANK_LOW">
        <doc xml:space="preserve">unlikely to be chosen</doc>
      </member>
      <member name="default" value="0" c:identifier="GRL_RANK_DEFAULT">
        <doc xml:space="preserve">likely to be chosen</doc>
      </member>
      <member name="high" value="32" c:identifier="GRL_RANK_HIGH">
        <doc xml:space="preserve">will be chosen</doc>
      </member>
      <member name="highest" value="64" c:identifier="GRL_RANK_HIGHEST">
        <doc xml:space="preserve">will be chosen first</doc>
      </member>
    </enumeration>
    <class name="Registry"
           c:symbol-prefix="registry"
           c:type="GrlRegistry"
           parent="GObject.Object"
           glib:type-name="GrlRegistry"
           glib:get-type="grl_registry_get_type"
           glib:type-struct="RegistryClass">
      <function name="get_default"
                c:identifier="grl_registry_get_default"
                version="0.2.0">
        <doc xml:space="preserve">As the registry is designed to work as a singleton, this
method is in charge of creating the only instance or
returned it if it is already in memory.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a new or an already created instance of the registry.

It is NOT MT-safe</doc>
          <type name="Registry" c:type="GrlRegistry*"/>
        </return-value>
      </function>
      <method name="activate_all_plugins"
              c:identifier="grl_registry_activate_all_plugins"
              version="0.3.0">
        <doc xml:space="preserve">Activate all the plugins loaded.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if some plugin has been activated</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instace</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="activate_plugin_by_id"
              c:identifier="grl_registry_activate_plugin_by_id"
              version="0.3.0"
              throws="1">
        <doc xml:space="preserve">Activates plugin identified by @plugin_id.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin is loaded correctly</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugin_id" transfer-ownership="none">
            <doc xml:space="preserve">plugin identifier</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_config"
              c:identifier="grl_registry_add_config"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Add a configuration for a plugin/source.</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="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="config" transfer-ownership="full">
            <doc xml:space="preserve">a configuration set</doc>
            <type name="Config" c:type="GrlConfig*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_config_from_file"
              c:identifier="grl_registry_add_config_from_file"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Load plugin configurations from a .ini-like config file.</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="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="config_file" transfer-ownership="none">
            <doc xml:space="preserve">a key-value file containing the configuration</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_config_from_resource"
              c:identifier="grl_registry_add_config_from_resource"
              version="0.2.8"
              throws="1">
        <doc xml:space="preserve">Load plugin configurations from a .ini-like resource file.</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="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="resource_path" transfer-ownership="none">
            <doc xml:space="preserve">a key-value file containing the configuration</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_directory"
              c:identifier="grl_registry_add_directory"
              version="0.2.0">
        <doc xml:space="preserve">Set this path as part of default paths to load plugins.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">a path with plugins</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_metadata_keys"
              c:identifier="grl_registry_get_metadata_keys"
              version="0.2.0">
        <doc xml:space="preserve">Returns a list with all registered keys in system.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList with all the available
#GrlKeyID&lt;!-- --&gt;s. The content of the list should not be modified or freed.
Use g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugins"
              c:identifier="grl_registry_get_plugins"
              version="0.2.0">
        <doc xml:space="preserve">This function will return all the available plugins in the @registry.

If @only_loaded is %TRUE, the plugin list will contain only plugins that are
loaded.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList of
available #GrlPlugin&lt;!-- --&gt;s. The content of the list should not be modified
or freed. Use g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Plugin"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="only_loaded" transfer-ownership="none">
            <doc xml:space="preserve">whether the returned list shall include only loaded plugins</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_sources"
              c:identifier="grl_registry_get_sources"
              version="0.2.0">
        <doc xml:space="preserve">This function will return all the available sources in the @registry.

If @ranked is %TRUE, the source list will be ordered by rank.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList of
available #GrlSource&lt;!-- --&gt;s. The content of the list should not be
modified or freed. Use g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Source"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="ranked" transfer-ownership="none">
            <doc xml:space="preserve">whether the returned list shall be returned ordered by rank</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_sources_by_operations"
              c:identifier="grl_registry_get_sources_by_operations"
              version="0.2.0">
        <doc xml:space="preserve">Give an array of all the available sources in the @registry capable of
perform the operations requested in @ops.

If @ranked is %TRUE, the source list will be ordered by rank.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList of
available #GrlSource&lt;!-- --&gt;s. The content of the list should not be
modified or freed. Use g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Source"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="ops" transfer-ownership="none">
            <doc xml:space="preserve">a bitwise mangle of the requested operations.</doc>
            <type name="SupportedOps" c:type="GrlSupportedOps"/>
          </parameter>
          <parameter name="ranked" transfer-ownership="none">
            <doc xml:space="preserve">whether the returned list shall be returned ordered by rank</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_all_plugins"
              c:identifier="grl_registry_load_all_plugins"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Load all the modules available in the default directory path.

The default directory path can be changed through the environment
variable %GRL_PLUGIN_PATH and it can contain several paths separated
by ":"</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%FALSE% is all the configured plugin paths are invalid,
%TRUE% otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="activate" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if plugins must be activated after loading</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_plugin"
              c:identifier="grl_registry_load_plugin"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Loads a module from shared object file stored in @path</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the module is loaded correctly</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="library_filename" transfer-ownership="none">
            <doc xml:space="preserve">the path to the so file</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_plugin_directory"
              c:identifier="grl_registry_load_plugin_directory"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Loads a set of modules from directory in @path which contains
a group shared object files.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the directory is valid.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the path to the directory</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_plugin_from_desc"
              c:identifier="grl_registry_load_plugin_from_desc"
              version="0.3.0"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve">Loads the grilo plugin defined by @plugin_desc. This is
used to load plugins that aren't shared libraries, and are
built into applications.

&lt;example&gt;
  Minimal example for loading a builtin plugin, in C.
  &lt;programlisting&gt;
    static GrlPluginDescriptor descriptor = {
      .plugin_id = "grl-example",
      .plugin_init = grl_example_plugin_init,
    };

    grl_registry_load_plugin_from_desc (registry, &amp;descriptor, &amp;error);
  &lt;/programlisting&gt;
&lt;/example&gt;</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin is initialised correctly</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugin_desc" transfer-ownership="none">
            <doc xml:space="preserve">the #GrlPluginDescriptor for the plugin</doc>
            <type name="PluginDescriptor" c:type="GrlPluginDescriptor*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_metadata_key"
              c:identifier="grl_registry_lookup_metadata_key"
              version="0.2.0">
        <doc xml:space="preserve">Look up for the metadata key with name @key_name.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The metadata key, or GRL_METADATA_KEY_INVALID if not found</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key_name" transfer-ownership="none">
            <doc xml:space="preserve">the key name</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_metadata_key_desc"
              c:identifier="grl_registry_lookup_metadata_key_desc"
              version="0.2.0">
        <doc xml:space="preserve">Returns @key description.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">metadata key description, or @NULL if not found</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_metadata_key_name"
              c:identifier="grl_registry_lookup_metadata_key_name"
              version="0.2.0">
        <doc xml:space="preserve">Returns @key name.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">metadata key name, or @NULL if not found</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_metadata_key_relation"
              c:identifier="grl_registry_lookup_metadata_key_relation"
              version="0.2.0">
        <doc xml:space="preserve">Look up the list of keys that have a relation with @key.

@key is included in that list.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GList of
related keys, or @NULL if key is invalid.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_metadata_key_type"
              c:identifier="grl_registry_lookup_metadata_key_type"
              version="0.2.0">
        <doc xml:space="preserve">Returns @key expected value type.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">metadata key type, or @G_TYPE_INVALID if not found</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_plugin"
              c:identifier="grl_registry_lookup_plugin"
              version="0.2.0">
        <doc xml:space="preserve">This function will search and retrieve a plugin given its identifier.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The plugin found</doc>
          <type name="Plugin" c:type="GrlPlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugin_id" transfer-ownership="none">
            <doc xml:space="preserve">the id of a plugin</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_source"
              c:identifier="grl_registry_lookup_source"
              version="0.2.0">
        <doc xml:space="preserve">This function will search and retrieve a source given its identifier.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The source found.</doc>
          <type name="Source" c:type="GrlSource*"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="source_id" transfer-ownership="none">
            <doc xml:space="preserve">the id of a source</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="metadata_key_validate"
              c:identifier="grl_registry_metadata_key_validate"
              version="0.2.0">
        <doc xml:space="preserve">Validates @value content complies with the key specification. That is, it has
the expected type, and value are within the range specified in key (for
integer values).</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if complies</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a metadata key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">value to be validate</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_metadata_key"
              c:identifier="grl_registry_register_metadata_key"
              version="0.3.0"
              throws="1">
        <doc xml:space="preserve">Registers a new metadata key, creating a relation between the new key and
@bind_key.

Two keys are related when the values of both keys are somehow related.

One example of a relation would be the one between the URI of a media
resource and its mime-type: they are both tied together and one does not make
sense without the other.

Relations between keys allow the framework to provide all the data that is
somehow related when any of the related keys are requested.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The #GrlKeyID registered.</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">The plugin registry</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="param_spec" transfer-ownership="full">
            <doc xml:space="preserve">The definition of the key to register</doc>
            <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
          </parameter>
          <parameter name="bind_key" transfer-ownership="none">
            <doc xml:space="preserve">The key the new key is bind to, or #GRL_METADATA_KEY_INVALID if it is not bound.</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_metadata_key_system"
              c:identifier="grl_registry_register_metadata_key_system"
              throws="1">
        <return-value transfer-ownership="none">
          <type name="KeyID" c:type="GrlKeyID"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="param_spec" transfer-ownership="none">
            <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
          </parameter>
          <parameter name="key" transfer-ownership="none">
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="bind_key" transfer-ownership="none">
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_source"
              c:identifier="grl_registry_register_source"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Register a @source in the @registry with the given @plugin information</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if success, %FALSE% otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">the plugin which owns the source</doc>
            <type name="Plugin" c:type="GrlPlugin*"/>
          </parameter>
          <parameter name="source" transfer-ownership="full">
            <doc xml:space="preserve">the source to register</doc>
            <type name="Source" c:type="GrlSource*"/>
          </parameter>
        </parameters>
      </method>
      <method name="restrict_plugins"
              c:identifier="grl_registry_restrict_plugins">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugins" transfer-ownership="none">
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="shutdown" c:identifier="grl_registry_shutdown">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unload_plugin"
              c:identifier="grl_registry_unload_plugin"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Unload from memory a module identified by @plugin_id. This means call the
module's deinit function.</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="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="plugin_id" transfer-ownership="none">
            <doc xml:space="preserve">the identifier of the plugin</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unregister_source"
              c:identifier="grl_registry_unregister_source"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Removes the @source from the @registry hash table</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if success, %FALSE% otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="registry" transfer-ownership="none">
            <doc xml:space="preserve">the registry instance</doc>
            <type name="Registry" c:type="GrlRegistry*"/>
          </instance-parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">the source to unregister</doc>
            <type name="Source" c:type="GrlSource*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="RegistryPrivate" c:type="GrlRegistryPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <glib:signal name="metadata-key-added"
                   when="first"
                   action="1"
                   version="0.2.10">
        <doc xml:space="preserve">Signals that a new metadata key has been registered.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">the name of the new key added</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="source-added" when="first" action="1" version="0.2.0">
        <doc xml:space="preserve">Signals that a source has been added to the registry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">the source that has been added</doc>
            <type name="Source"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="source-removed"
                   when="first"
                   action="1"
                   version="0.2.0">
        <doc xml:space="preserve">Signals that a source has been removed from the registry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">the source that has been removed</doc>
            <type name="Source"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="RegistryClass"
            c:type="GrlRegistryClass"
            glib:is-gtype-struct-for="Registry">
      <doc xml:space="preserve">Grilo Registry class. Dynamic loader of plugins.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="RegistryPrivate" c:type="GrlRegistryPrivate" disguised="1">
    </record>
    <class name="RelatedKeys"
           c:symbol-prefix="related_keys"
           c:type="GrlRelatedKeys"
           parent="GObject.Object"
           glib:type-name="GrlRelatedKeys"
           glib:get-type="grl_related_keys_get_type"
           glib:type-struct="RelatedKeysClass">
      <constructor name="new"
                   c:identifier="grl_related_keys_new"
                   version="0.1.10">
        <doc xml:space="preserve">Creates a new #GrlRelatedKeys instance that can be used to store related
keys and their values.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new object.</doc>
          <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
        </return-value>
      </constructor>
      <constructor name="new_valist"
                   c:identifier="grl_related_keys_new_valist"
                   version="0.1.10"
                   introspectable="0">
        <doc xml:space="preserve">Creates a new #GrlRelatedKeys containing pairs of (key, value). Finish the
list with %NULL.

In case of a binary-type key, the expected element is (key, value, size).

value type will be extracted from key information.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GrlRelatedKeys</doc>
          <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
        </return-value>
        <parameters>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">first key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="args" transfer-ownership="none">
            <doc xml:space="preserve">#va_list of value, followed by (key,value) pairs to insert</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_with_keys"
                   c:identifier="grl_related_keys_new_with_keys"
                   version="0.1.10"
                   introspectable="0">
        <doc xml:space="preserve">Creates a initial #GrlRelatedKeys containing the list of (key, value)
pairs. Finish the list with %NULL.

For more information see #grl_related_keys_new_valist.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GrlRelatedKeys</doc>
          <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
        </return-value>
        <parameters>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">first key</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">value, following by list of (key, value)</doc>
            <varargs/>
          </parameter>
        </parameters>
      </constructor>
      <method name="dup" c:identifier="grl_related_keys_dup" version="0.1.10">
        <doc xml:space="preserve">Makes a deep copy of @relkeys and its contents.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GrlRelatedKeys.
Free it with #g_object_unref.</doc>
          <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to duplicate</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get" c:identifier="grl_related_keys_get" version="0.1.10">
        <doc xml:space="preserve">Get the value associated with @key from @relkeys. If it does not contain any
value, %NULL will be returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GValue. This value should not be modified nor
freed by user.</doc>
          <type name="GObject.Value" c:type="const GValue*"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to retrieve value</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to look up.</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_binary"
              c:identifier="grl_related_keys_get_binary"
              version="0.1.10">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not a binary, or @key is not in @relkeys, then 0 is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">buffer location associated with @key, or %NULL in other case. If
successful @size will be set to the buffer size.</doc>
          <type name="guint8" c:type="const guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="size"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">location to store the buffer size</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean"
              c:identifier="grl_related_keys_get_boolean"
              version="0.2.3">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not a gboolean, or @key is not in @relkeys, then %FALSE is
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">float value associated with @key, or %FALSE in other case.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boxed"
              c:identifier="grl_related_keys_get_boxed"
              version="0.2.0">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
the value is not of a boxed type, or @key is not in @relkeys, then %NULL is
returned.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the #GBoxed value associated with @key if
possible, or %NULL in other case. The caller should not change nor free the
value.</doc>
          <type name="gpointer" c:type="gconstpointer"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_float"
              c:identifier="grl_related_keys_get_float"
              version="0.1.10">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not a gfloat, or @key is not in @relkeys, then 0 is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">float value associated with @key, or 0 in other case.</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int"
              c:identifier="grl_related_keys_get_int"
              version="0.1.10">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not a gint, or @key is not in @relkeys, then 0 is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">int value associated with @key, or 0 in other case.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int64"
              c:identifier="grl_related_keys_get_int64"
              version="0.2.12">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not a gint64, or @key is not in @relkeys, then 0 is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">int64 value associated with @key, or 0 in other case.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_keys"
              c:identifier="grl_related_keys_get_keys"
              version="0.1.13">
        <doc xml:space="preserve">Returns a list with keys contained in @relkeys.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a list with
the keys. The content of the list should not be modified or freed. Use
g_list_free() when done using the list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="grl_related_keys_get_string"
              version="0.1.10">
        <doc xml:space="preserve">Returns the value associated with @key from @relkeys. If @key has no value,
or value is not string, or @key is not in @relkeys, then %NULL is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string associated with @key, or %NULL in other case. Caller should
not change nor free the value.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to use</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="has_key"
              c:identifier="grl_related_keys_has_key"
              version="0.1.10">
        <doc xml:space="preserve">Checks if @key is in @relkeys.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @key is in @relkeys, %FALSE in other case.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to inspect</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to search</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove"
              c:identifier="grl_related_keys_remove"
              version="0.2.3">
        <doc xml:space="preserve">Removes @key from @relkeys set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to remove</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
        </parameters>
      </method>
      <method name="set" c:identifier="grl_related_keys_set" version="0.1.10">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. Old value is freed and
the new one is set.

Also, checks that @value is compliant with @key specification, modifying it
accordingly. For instance, if @key requires a number between 0 and 10, but
value is outside this range, it will be adapted accordingly.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to modify</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_binary"
              c:identifier="grl_related_keys_set_binary"
              version="0.1.10">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a binary-type key. Old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to change</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="buf" transfer-ownership="none">
            <doc xml:space="preserve">buffer holding the relkeys</doc>
            <type name="guint8" c:type="const guint8*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of the buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_boolean"
              c:identifier="grl_related_keys_set_boolean"
              version="0.2.3">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a boolean-type key. Old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to change</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="booleanvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_boxed"
              c:identifier="grl_related_keys_set_boxed"
              version="0.2.0">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a boxed-type key. Old value is freed and the new one is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to modify</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="boxed"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the new value</doc>
            <type name="gpointer" c:type="gconstpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_float"
              c:identifier="grl_related_keys_set_float"
              version="0.1.10">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a float-type key. Old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to change</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="floatvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int"
              c:identifier="grl_related_keys_set_int"
              version="0.1.10">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as an int-type key. Old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to change</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int64"
              c:identifier="grl_related_keys_set_int64"
              version="0.2.12">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a int64-type key. Old value is replaced by the new one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to change</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="intvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_string"
              c:identifier="grl_related_keys_set_string"
              version="0.1.10">
        <doc xml:space="preserve">Sets the value associated with @key into @relkeys. @key must have been
registered as a strying-type key. Old value is freed and the new one is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="relkeys" transfer-ownership="none">
            <doc xml:space="preserve">set of related keys to modify</doc>
            <type name="RelatedKeys" c:type="GrlRelatedKeys*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">key to change or add</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="strvalue" transfer-ownership="none">
            <doc xml:space="preserve">the new value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="RelatedKeysPrivate" c:type="GrlRelatedKeysPrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="8">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="RelatedKeysClass"
            c:type="GrlRelatedKeysClass"
            glib:is-gtype-struct-for="RelatedKeys">
      <doc xml:space="preserve">Grilo Data Multivalued class</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="RelatedKeysPrivate"
            c:type="GrlRelatedKeysPrivate"
            disguised="1">
    </record>
    <bitfield name="ResolutionFlags"
              glib:type-name="GrlResolutionFlags"
              glib:get-type="grl_resolution_flags_get_type"
              c:type="GrlResolutionFlags">
      <doc xml:space="preserve">Resolution flags</doc>
      <member name="normal"
              value="0"
              c:identifier="GRL_RESOLVE_NORMAL"
              glib:nick="normal">
        <doc xml:space="preserve">Normal mode.</doc>
      </member>
      <member name="full"
              value="1"
              c:identifier="GRL_RESOLVE_FULL"
              glib:nick="full">
        <doc xml:space="preserve">Try other plugins if necessary.</doc>
      </member>
      <member name="idle_relay"
              value="2"
              c:identifier="GRL_RESOLVE_IDLE_RELAY"
              glib:nick="idle-relay">
        <doc xml:space="preserve">Use idle loop to relay results.</doc>
      </member>
      <member name="fast_only"
              value="4"
              c:identifier="GRL_RESOLVE_FAST_ONLY"
              glib:nick="fast-only">
        <doc xml:space="preserve">Only resolve fast metadata keys.</doc>
      </member>
    </bitfield>
    <constant name="SOURCE_REMAINING_UNKNOWN"
              value="-1"
              c:type="GRL_SOURCE_REMAINING_UNKNOWN">
      <type name="gint" c:type="gint"/>
    </constant>
    <class name="Source"
           c:symbol-prefix="source"
           c:type="GrlSource"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GrlSource"
           glib:get-type="grl_source_get_type"
           glib:type-struct="SourceClass">
      <virtual-method name="browse">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="bs" transfer-ownership="none">
            <type name="SourceBrowseSpec" c:type="GrlSourceBrowseSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cancel">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="operation_id" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_caps" invoker="get_caps" version="0.2.0">
        <doc xml:space="preserve">Get the capabilities of @source for @operation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The capabilities</doc>
          <type name="Caps" c:type="GrlCaps*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="operation" transfer-ownership="none">
            <doc xml:space="preserve">a supported operation. Even though the type allows to specify
several operations, only one should be provided here.</doc>
            <type name="SupportedOps" c:type="GrlSupportedOps"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="may_resolve" invoker="may_resolve" version="0.2.0">
        <doc xml:space="preserve">Checks whether @key_id may be resolved with @source for @media, so that the
caller can avoid calling grl_source_resolve() if it can be known in
advance it will fail.

If the resolution is known to be impossible because more keys are needed in
@media, and @missing_keys is not @NULL, it is populated with the list of
GrlKeyID that would be needed.

This function is synchronous and should not block.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if there's a possibility that @source resolves @key_id for
@media, @FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media on which we want more metadata</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="key_id" transfer-ownership="none">
            <doc xml:space="preserve">the key corresponding to a metadata we might want</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="missing_keys" transfer-ownership="none">
            <doc xml:space="preserve">an optional originally empty list</doc>
            <type name="GLib.List" c:type="GList**">
              <type name="KeyID"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="media_from_uri">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="mfus" transfer-ownership="none">
            <type name="SourceMediaFromUriSpec"
                  c:type="GrlSourceMediaFromUriSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="notify_change_start"
                      invoker="notify_change_start"
                      version="0.2.0"
                      throws="1">
        <doc xml:space="preserve">Starts emitting ::content-changed signals when @source discovers changes in
the content. This instructs @source to setup the machinery needed to be aware
of changes in the content.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if initialization has succeed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="notify_change_stop"
                      invoker="notify_change_stop"
                      version="0.2.0"
                      throws="1">
        <doc xml:space="preserve">This will drop emission of ::content-changed signals from @source. When this
is done @source should stop the machinery required for it to track changes in
the content.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if stop has succeed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="query">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="qs" transfer-ownership="none">
            <type name="SourceQuerySpec" c:type="GrlSourceQuerySpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="rs" transfer-ownership="none">
            <type name="SourceRemoveSpec" c:type="GrlSourceRemoveSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="resolve">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="ms" transfer-ownership="none">
            <type name="SourceResolveSpec" c:type="GrlSourceResolveSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="search">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="ss" transfer-ownership="none">
            <type name="SourceSearchSpec" c:type="GrlSourceSearchSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="slow_keys" invoker="slow_keys" version="0.2.0">
        <doc xml:space="preserve">Similar to grl_source_supported_keys(), but these keys
are marked as slow because of the amount of traffic/processing needed
to fetch them.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="store">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="ss" transfer-ownership="none">
            <type name="SourceStoreSpec" c:type="GrlSourceStoreSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="store_metadata">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="sms" transfer-ownership="none">
            <type name="SourceStoreMetadataSpec"
                  c:type="GrlSourceStoreMetadataSpec*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="supported_keys"
                      invoker="supported_keys"
                      version="0.2.0">
        <doc xml:space="preserve">Get a list of #GrlKeyID, which describe a metadata types that this
source can fetch and store.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="supported_operations">
        <return-value transfer-ownership="none">
          <type name="SupportedOps" c:type="GrlSupportedOps"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="test_media_from_uri"
                      invoker="test_media_from_uri"
                      version="0.2.0">
        <doc xml:space="preserve">Tests whether @source can instantiate a #GrlMedia object representing
the media resource exposed at @uri.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if it can, %FALSE otherwise.

This method is synchronous.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="writable_keys"
                      invoker="writable_keys"
                      version="0.2.0">
        <doc xml:space="preserve">Similar to grl_source_supported_keys(), but these keys
are marked as writable, meaning the source allows the client
to provide new values for these keys that will be stored permanently.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">
a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="browse" c:identifier="grl_source_browse" version="0.2.0">
        <doc xml:space="preserve">Browse from media elements through an available list.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="container"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a container of data transfer objects</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="browse_sync"
              c:identifier="grl_source_browse_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Browse media elements through an available
list.

This method is synchronous.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GList with #GrlMedia
elements. After use g_object_unref() every element and g_list_free() the
list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Media"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="container"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a container of data transfer objects</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_auto_split_threshold"
              c:identifier="grl_source_get_auto_split_threshold"
              version="0.2.0">
        <doc xml:space="preserve">Gets how much elements the source is able to handle in a single request.

See #grl_source_set_auto_split_threshold()</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the assigned threshold, or 0 if there is no threshold</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_caps"
              c:identifier="grl_source_get_caps"
              version="0.2.0">
        <doc xml:space="preserve">Get the capabilities of @source for @operation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The capabilities</doc>
          <type name="Caps" c:type="GrlCaps*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="operation" transfer-ownership="none">
            <doc xml:space="preserve">a supported operation. Even though the type allows to specify
several operations, only one should be provided here.</doc>
            <type name="SupportedOps" c:type="GrlSupportedOps"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_description"
              c:identifier="grl_source_get_description"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the description of the @source</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_icon"
              c:identifier="grl_source_get_icon"
              version="0.2.8">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GIcon</doc>
          <type name="Gio.Icon" c:type="GIcon*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="grl_source_get_id" version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the ID of the @source</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_media_from_uri"
              c:identifier="grl_source_get_media_from_uri"
              version="0.2.0">
        <doc xml:space="preserve">Creates an instance of #GrlMedia representing the media resource
exposed at @uri.

It is recommended to call grl_source_test_media_from_uri() before invoking
this to check whether the target source can theoretically do the resolution.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">A list of keys to resolve</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceResolveCb" c:type="GrlSourceResolveCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_media_from_uri_sync"
              c:identifier="grl_source_get_media_from_uri_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Creates an instance of #GrlMedia representing the media resource
exposed at @uri.

It is recommended to call grl_source_test_media_from_uri() before
invoking this to check whether the target source can theoretically do the
resolution.

This method is synchronous.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a filled #GrlMedia</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">a list of keys to resolve</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_name"
              c:identifier="grl_source_get_name"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the @source</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugin"
              c:identifier="grl_source_get_plugin"
              version="0.2.0">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the plugin this source belongs to</doc>
          <type name="Plugin" c:type="GrlPlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rank"
              c:identifier="grl_source_get_rank"
              version="0.2.0">
        <doc xml:space="preserve">Gets the source rank</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">rank value</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_supported_media"
              c:identifier="grl_source_get_supported_media"
              version="0.3.0">
        <doc xml:space="preserve">Gets the supported type of medias @source can deal with.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GrlSupportedMedia value</doc>
          <type name="SupportedMedia" c:type="GrlSupportedMedia"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_tags"
              c:identifier="grl_source_get_tags"
              version="0.2.10">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a %NULL-terminated list of tags</doc>
          <array c:type="const char**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="may_resolve"
              c:identifier="grl_source_may_resolve"
              version="0.2.0">
        <doc xml:space="preserve">Checks whether @key_id may be resolved with @source for @media, so that the
caller can avoid calling grl_source_resolve() if it can be known in
advance it will fail.

If the resolution is known to be impossible because more keys are needed in
@media, and @missing_keys is not @NULL, it is populated with the list of
GrlKeyID that would be needed.

This function is synchronous and should not block.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if there's a possibility that @source resolves @key_id for
@media, @FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a media on which we want more metadata</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="key_id" transfer-ownership="none">
            <doc xml:space="preserve">the key corresponding to a metadata we might want</doc>
            <type name="KeyID" c:type="GrlKeyID"/>
          </parameter>
          <parameter name="missing_keys" transfer-ownership="none">
            <doc xml:space="preserve">an optional originally empty list</doc>
            <type name="GLib.List" c:type="GList**">
              <type name="KeyID"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="notify_change"
              c:identifier="grl_source_notify_change"
              version="0.2.0">
        <doc xml:space="preserve">Emits "content-changed" signal to notify subscribers that a change ocurred
in @source.

See #grl_source_notify_change_list() function.

&lt;note&gt;
 &lt;para&gt;
   This function is intended to be used only by plugins.
 &lt;/para&gt;
&lt;/note&gt;</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the media which has changed, or @NULL to use the root container.</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="change_type" transfer-ownership="none">
            <doc xml:space="preserve">the type of change</doc>
            <type name="SourceChangeType" c:type="GrlSourceChangeType"/>
          </parameter>
          <parameter name="location_unknown" transfer-ownership="none">
            <doc xml:space="preserve">if change has happened in @media or any descendant</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_change_list"
              c:identifier="grl_source_notify_change_list"
              version="0.2.0">
        <doc xml:space="preserve">Emits "content-changed" signal to notify subscribers that a change ocurred
in @source.

The function will take ownership of @changed medias and it should not be
manipulated in any way by the caller after invoking this function. If that is
needed, the caller must ref the array in advance.

See GrlSource::content-changed signal.

&lt;note&gt;
 &lt;para&gt;
   This function is intended to be used only by plugins.
 &lt;/para&gt;
&lt;/note&gt;</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="changed_medias" transfer-ownership="full">
            <doc xml:space="preserve">the list of
medias that have changed</doc>
            <array name="GLib.PtrArray" c:type="GPtrArray*">
              <type name="Media"/>
            </array>
          </parameter>
          <parameter name="change_type" transfer-ownership="none">
            <doc xml:space="preserve">the type of change</doc>
            <type name="SourceChangeType" c:type="GrlSourceChangeType"/>
          </parameter>
          <parameter name="location_unknown" transfer-ownership="none">
            <doc xml:space="preserve">if change has happpened in @media or any descendant</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_change_start"
              c:identifier="grl_source_notify_change_start"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Starts emitting ::content-changed signals when @source discovers changes in
the content. This instructs @source to setup the machinery needed to be aware
of changes in the content.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if initialization has succeed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="notify_change_stop"
              c:identifier="grl_source_notify_change_stop"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">This will drop emission of ::content-changed signals from @source. When this
is done @source should stop the machinery required for it to track changes in
the content.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">@TRUE if stop has succeed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="query" c:identifier="grl_source_query" version="0.2.0">
        <doc xml:space="preserve">Execute a specialized query (specific for each provider) on a media
repository.

It is different from grl_source_search() semantically, because the query
implies a carefully crafted string, rather than a simple string to search.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">the query to process</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_sync"
              c:identifier="grl_source_query_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Execute a specialized query (specific for each provider) on a media
repository.

This method is synchronous.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GList with #GrlMedia
elements. After use g_object_unref() every element and g_list_free() the
list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Media"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">the query to process</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove" c:identifier="grl_source_remove" version="0.2.0">
        <doc xml:space="preserve">Remove a @media from the @source repository.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceRemoveCb" c:type="GrlSourceRemoveCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_sync"
              c:identifier="grl_source_remove_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Remove a @media from the @source repository.

This method is synchronous.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
        </parameters>
      </method>
      <method name="resolve" c:identifier="grl_source_resolve" version="0.2.0">
        <doc xml:space="preserve">This method is intended to fetch the requested keys of metadata of
a given @media to the media source.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the operation identifie</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options to pass to this operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceResolveCb" c:type="GrlSourceResolveCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="resolve_sync"
              c:identifier="grl_source_resolve_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">This method is intended to fetch the requested keys of metadata of
a given @media to the media source.

This method is synchronous.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a filled #GrlMedia</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options to pass to this operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search" c:identifier="grl_source_search" version="0.2.0">
        <doc xml:space="preserve">Search for the @text string in a source for data identified with that string.

If @text is @NULL then no text filter will be applied, and thus, no media
items from @source will be filtered. If @source does not support NULL-text
search operations it should notiy the client by setting
@GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED in @callback's error parameter.

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve">the text to search</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="search_sync"
              c:identifier="grl_source_search_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Search for the @text string in a source for data identified with that string.

If @text is @NULL then no text filter will be applied, and thus, no media
items from @source will be filtered. If @source does not support NULL-text
search operations it should notiy the client by setting
@GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED in the error parameter.

This method is synchronous.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GList with #GrlMedia
elements. After use g_object_unref() every element and g_list_free() the
list.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Media"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve">the text to search</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="keys" transfer-ownership="none">
            <doc xml:space="preserve">the #GList of
#GrlKeyID&lt;!-- --&gt;s to request</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">options wanted for that operation</doc>
            <type name="OperationOptions" c:type="GrlOperationOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_auto_split_threshold"
              c:identifier="grl_source_set_auto_split_threshold"
              version="0.2.0">
        <doc xml:space="preserve">Sets how much elements the source is able to handle in a single request.

If user, during a search or browsing operation, asks for more elements than
the threshold, the request will be automatically splitted in chunks, so up to
@threshold elements will be asked in each request.

Source will act as if user were asking just a chunk, and user won't notice
that the request was chunked.

&lt;note&gt;
 &lt;para&gt;
   This function is intended to be used only by plugins.
 &lt;/para&gt;
&lt;/note&gt;</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="threshold" transfer-ownership="none">
            <doc xml:space="preserve">the threshold to set</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="slow_keys"
              c:identifier="grl_source_slow_keys"
              version="0.2.0">
        <doc xml:space="preserve">Similar to grl_source_supported_keys(), but these keys
are marked as slow because of the amount of traffic/processing needed
to fetch them.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="store" c:identifier="grl_source_store" version="0.3.0">
        <doc xml:space="preserve">Store the @media into the @parent container

This method is asynchronous.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="parent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a parent to store the data transfer objects</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags to configure specific behaviour of the operation</doc>
            <type name="WriteFlags" c:type="GrlWriteFlags"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the user defined callback</doc>
            <type name="SourceStoreCb" c:type="GrlSourceStoreCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data to pass in the callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="store_metadata"
              c:identifier="grl_source_store_metadata"
              version="0.2.0">
        <doc xml:space="preserve">Get the values for @keys from @media and store it permanently. After
calling this method, future queries that return this media object
shall return this new values for the selected keys.

This function is asynchronous and uses the Glib's main loop.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a metadata source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the #GrlMedia object that we want to operate on.</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a list
of #GrlKeyID whose values we want to change.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">Flags to configure specific behaviors of the operation.</doc>
            <type name="WriteFlags" c:type="GrlWriteFlags"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="4">
            <doc xml:space="preserve">the callback to execute when the operation is finished.</doc>
            <type name="SourceStoreCb" c:type="GrlSourceStoreCb"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user data set for the @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="store_metadata_sync"
              c:identifier="grl_source_store_metadata_sync"
              version="0.2.0"
              throws="1">
        <doc xml:space="preserve">Update @keys values from @media in the @source. After calling this method,
future queries that return this media object shall return this new value for
the selected key.

This function is synchronous.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">
a #GList of keys that could not be updated, or @NULL</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">the #GrlMedia object that we want to operate on</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="keys"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a list of
#GrlKeyID whose values we want to change</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="KeyID"/>
            </type>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">Flags to configure specific behaviors of the operation.</doc>
            <type name="WriteFlags" c:type="GrlWriteFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="store_sync"
              c:identifier="grl_source_store_sync"
              version="0.3.0"
              throws="1">
        <doc xml:space="preserve">Store the @media into the @parent container.

This method is synchronous.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="parent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GrlMedia container to store the data transfer objects</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="media" transfer-ownership="none">
            <doc xml:space="preserve">a #GrlMedia data transfer object</doc>
            <type name="Media" c:type="GrlMedia*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags to configure specific behaviour of the operation</doc>
            <type name="WriteFlags" c:type="GrlWriteFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="supported_keys"
              c:identifier="grl_source_supported_keys"
              version="0.2.0">
        <doc xml:space="preserve">Get a list of #GrlKeyID, which describe a metadata types that this
source can fetch and store.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="supported_operations"
              c:identifier="grl_source_supported_operations"
              version="0.2.0">
        <doc xml:space="preserve">By default the derived objects of #GrlSource can only resolve.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a bitwise mangle with the supported operations by
the source</doc>
          <type name="guint" c:type="GrlSupportedOps"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="test_media_from_uri"
              c:identifier="grl_source_test_media_from_uri"
              version="0.2.0">
        <doc xml:space="preserve">Tests whether @source can instantiate a #GrlMedia object representing
the media resource exposed at @uri.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if it can, %FALSE otherwise.

This method is synchronous.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="writable_keys"
              c:identifier="grl_source_writable_keys"
              version="0.2.0">
        <doc xml:space="preserve">Similar to grl_source_supported_keys(), but these keys
are marked as writable, meaning the source allows the client
to provide new values for these keys that will be stored permanently.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">
a #GList with the keys</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a source</doc>
            <type name="Source" c:type="GrlSource*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="auto-split-threshold"
                version="0.2.0"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Transparently split queries with count requests
bigger than a certain threshold into smaller queries.</doc>
        <type name="guint" c:type="guint"/>
      </property>
      <property name="plugin"
                version="0.2.0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Plugin the source belongs to</doc>
        <type name="Plugin"/>
      </property>
      <property name="rank"
                version="0.2.0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Source rank</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="source-desc"
                version="0.2.0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A description of the source</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="source-icon"
                version="0.2.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#GIcon representing the source</doc>
        <type name="Gio.Icon"/>
      </property>
      <property name="source-id"
                version="0.2.0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">The identifier of the source.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="source-name"
                version="0.2.0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">The name of the source.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="source-tags"
                version="0.2.10"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A string array of tags relevant this source.

The tags are arbitrary, and applications should just pass over the tags
it does not understand. Applications would usually use this to either
group sources together, or hide certain sources: a radio application
would filter for %GRL_MEDIA_TYPE_AUDIO in GrlSource::supported-media as
well as "radio" being listed in the tags.

To avoid irrelevant content being listed in applications, sources
such as generic video sites should not be tagged as "cinema" or
"tv" as they contain a lot of content that's not either of those.

This is a list of commonly used values:

- "cinema", or "tv"
  The content served is from cinema or TV sources. For example, a
  source for movie trailers would select the former, a source for
  streaming live TV would select the latter.

- "radio"
  The content served is from streaming radios.

- "music"
  The content served is music, for example, music stores such as
  Jamendo or Magnatune.

- "country:country-code"
  The content is mostly relevant to users from a particular country,
  such as a national broadcaster. For example, BBC content would be
  tagged as "country:uk". Country codes should be an ISO-639-1 or
  ISO-639-2 code.

- "protocol:protocol-name"
  The content browsing or searching uses a particular protocol, such
  as DLNA/UPnP or DMAP/DAAP. This makes it easier to whitelist or
  blacklist sources rather than matching the implementation specific
  source ID. Examples are "protocol:dlna" and "protocol:dmap".

- "localhost", or "localuser"
  The content is served from the machine the application is running on,
  or by an application the user is running. Applications might choose to
  avoid showing the user's own data in their interfaces, or integrate it
  in the user's local collection.

  "net:local", or "net:internet"
  The source requires a connection to the local network, or a connection
  to the Internet. Sources with those tags will be automatically hidden
  from the application's reach when such networks aren't available, or
  we're not connected to a network.

  "net:plaintext"
  The source makes requests over plain text, non-encrypted, network channels,
  such as using HTTP to do searches or lookups. Applications would usually
  disable those by default, so that privacy is respected by default, and no
  data is leaked unintentionally.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="supported-media"
                version="0.2.3"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">List of supported media types by this source.</doc>
        <type name="SupportedMedia"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SourcePrivate" c:type="GrlSourcePrivate*"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <glib:signal name="content-changed"
                   when="first"
                   action="1"
                   version="0.2.0">
        <doc xml:space="preserve">Signals that the content in the source has changed. @changed_medias is the
list of elements that have changed. Usually these medias are of type
#GrlMedia container, meaning that the content of that container has changed.

If @location_unknown is @TRUE it means the source cannot establish where the
change happened: could be either in the container, in any child, or in any other
descendant of the container in the hierarchy.

Both @change_type and @location_unknown are applied to all elements in the
list.

For the cases where the source can only signal that a change happened, but
not where, it would use a list with the the root container (@NULL id) and set
location_unknown as @TRUE.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="changed_medias" transfer-ownership="none">
            <doc xml:space="preserve">a #GPtrArray with the medias
that changed or a common ancestor of them of type #GrlMedia.</doc>
            <array name="GLib.PtrArray">
              <type name="Media"/>
            </array>
          </parameter>
          <parameter name="change_type" transfer-ownership="none">
            <doc xml:space="preserve">the kind of change that ocurred</doc>
            <type name="SourceChangeType"/>
          </parameter>
          <parameter name="location_unknown" transfer-ownership="none">
            <doc xml:space="preserve">@TRUE if the change happened in @media itself or in one
of its direct children (when @media is a #GrlMedia). @FALSE otherwise</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="SourceBrowseSpec" c:type="GrlSourceBrowseSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
browse vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="operation_id" writable="1">
        <doc xml:space="preserve">operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="container" writable="1">
        <doc xml:space="preserve">a container of data transfer objects</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">the #GList of #GrlKeyID&lt;!-- --&gt;s to request</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="options" writable="1">
        <doc xml:space="preserve">options wanted for that operation</doc>
        <type name="OperationOptions" c:type="GrlOperationOptions*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <enumeration name="SourceChangeType"
                 glib:type-name="GrlSourceChangeType"
                 glib:get-type="grl_source_change_type_get_type"
                 c:type="GrlSourceChangeType">
      <doc xml:space="preserve">Specifies which kind of change has happened in the plugin</doc>
      <member name="changed"
              value="0"
              c:identifier="GRL_CONTENT_CHANGED"
              glib:nick="changed">
        <doc xml:space="preserve">content has changed. It is used when any property of
#GrlMedia has changed, or in case of containers, if several children have
been added and removed.</doc>
      </member>
      <member name="added"
              value="1"
              c:identifier="GRL_CONTENT_ADDED"
              glib:nick="added">
        <doc xml:space="preserve">new content has been added.</doc>
      </member>
      <member name="removed"
              value="2"
              c:identifier="GRL_CONTENT_REMOVED"
              glib:nick="removed">
        <doc xml:space="preserve">content has been removed</doc>
      </member>
    </enumeration>
    <record name="SourceClass"
            c:type="GrlSourceClass"
            glib:is-gtype-struct-for="Source">
      <doc xml:space="preserve">Grilo Source class. Override the vmethods to implement the
element functionality.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">the parent class structure</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="supported_operations">
        <callback name="supported_operations">
          <return-value transfer-ownership="none">
            <type name="SupportedOps" c:type="GrlSupportedOps"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="supported_keys">
        <callback name="supported_keys">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">a #GList with the keys</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="slow_keys">
        <callback name="slow_keys">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">a #GList with the keys</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="writable_keys">
        <callback name="writable_keys">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">
a #GList with the keys</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="KeyID"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_caps">
        <callback name="get_caps">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">The capabilities</doc>
            <type name="Caps" c:type="GrlCaps*"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="operation" transfer-ownership="none">
              <doc xml:space="preserve">a supported operation. Even though the type allows to specify
several operations, only one should be provided here.</doc>
              <type name="SupportedOps" c:type="GrlSupportedOps"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="resolve">
        <callback name="resolve">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="ms" transfer-ownership="none">
              <type name="SourceResolveSpec" c:type="GrlSourceResolveSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="may_resolve">
        <callback name="may_resolve">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">@TRUE if there's a possibility that @source resolves @key_id for
@media, @FALSE otherwise.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="media" transfer-ownership="none">
              <doc xml:space="preserve">a media on which we want more metadata</doc>
              <type name="Media" c:type="GrlMedia*"/>
            </parameter>
            <parameter name="key_id" transfer-ownership="none">
              <doc xml:space="preserve">the key corresponding to a metadata we might want</doc>
              <type name="KeyID" c:type="GrlKeyID"/>
            </parameter>
            <parameter name="missing_keys" transfer-ownership="none">
              <doc xml:space="preserve">an optional originally empty list</doc>
              <type name="GLib.List" c:type="GList**">
                <type name="KeyID"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="test_media_from_uri">
        <callback name="test_media_from_uri">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if it can, %FALSE otherwise.

This method is synchronous.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="media_from_uri">
        <callback name="media_from_uri">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="mfus" transfer-ownership="none">
              <type name="SourceMediaFromUriSpec"
                    c:type="GrlSourceMediaFromUriSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="browse">
        <callback name="browse">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="bs" transfer-ownership="none">
              <type name="SourceBrowseSpec" c:type="GrlSourceBrowseSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="search">
        <callback name="search">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="ss" transfer-ownership="none">
              <type name="SourceSearchSpec" c:type="GrlSourceSearchSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="query">
        <callback name="query">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="qs" transfer-ownership="none">
              <type name="SourceQuerySpec" c:type="GrlSourceQuerySpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove">
        <callback name="remove">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="rs" transfer-ownership="none">
              <type name="SourceRemoveSpec" c:type="GrlSourceRemoveSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="store">
        <callback name="store">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="ss" transfer-ownership="none">
              <type name="SourceStoreSpec" c:type="GrlSourceStoreSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="store_metadata">
        <callback name="store_metadata">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="sms" transfer-ownership="none">
              <type name="SourceStoreMetadataSpec"
                    c:type="GrlSourceStoreMetadataSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cancel">
        <callback name="cancel">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
            <parameter name="operation_id" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="notify_change_start">
        <callback name="notify_change_start" throws="1">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">@TRUE if initialization has succeed.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="notify_change_stop">
        <callback name="notify_change_stop" throws="1">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">@TRUE if stop has succeed.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="source" transfer-ownership="none">
              <doc xml:space="preserve">a source</doc>
              <type name="Source" c:type="GrlSource*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="SourceMediaFromUriSpec" c:type="GrlSourceMediaFromUriSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
media_from_uri vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="operation_id" writable="1">
        <doc xml:space="preserve">operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="uri" writable="1">
        <doc xml:space="preserve">A URI that can be used to identify a media resource</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">Metadata keys to resolve</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="options" writable="1">
        <doc xml:space="preserve">options wanted for that operation</doc>
        <type name="OperationOptions" c:type="GrlOperationOptions*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceResolveCb" c:type="GrlSourceResolveCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="SourcePrivate" c:type="GrlSourcePrivate" disguised="1">
    </record>
    <record name="SourceQuerySpec" c:type="GrlSourceQuerySpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
query vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="operation_id" writable="1">
        <doc xml:space="preserve">operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="query" writable="1">
        <doc xml:space="preserve">the query to process</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">the #GList of #GrlKeyID&lt;!-- --&gt;s to request</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="options" writable="1">
        <doc xml:space="preserve">options wanted for that operation</doc>
        <type name="OperationOptions" c:type="GrlOperationOptions*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="SourceRemoveCb" c:type="GrlSourceRemoveCb">
      <doc xml:space="preserve">Prototype for the callback passed to grl_source_remove()</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="source" transfer-ownership="none">
          <doc xml:space="preserve">a source</doc>
          <type name="Source" c:type="GrlSource*"/>
        </parameter>
        <parameter name="media" transfer-ownership="full">
          <doc xml:space="preserve">a data transfer object</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user data passed to grl_source_remove()</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="error"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">possible #GError generated at processing</doc>
          <type name="GLib.Error" c:type="const GError*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="SourceRemoveSpec" c:type="GrlSourceRemoveSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
store vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="media_id" writable="1">
        <doc xml:space="preserve">media identifier to remove</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="media" writable="1">
        <doc xml:space="preserve">a data transfer object</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceRemoveCb" c:type="GrlSourceRemoveCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="SourceResolveCb" c:type="GrlSourceResolveCb">
      <doc xml:space="preserve">Prototype for the callback passed to grl_source_resolve(). If the URI did
not resolve to a valid media record, @media will be %NULL. If there was an
error during resolution, @error will be set.

If @media is non-%NULL, ownership of it is transferred to the callback, and
it must be freed afterwards using g_object_unref().</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="source" transfer-ownership="none">
          <doc xml:space="preserve">a source</doc>
          <type name="Source" c:type="GrlSource*"/>
        </parameter>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="media" transfer-ownership="full">
          <doc xml:space="preserve">a data transfer object</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <doc xml:space="preserve">user data passed to grl_source_resolve()</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="error"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">possible #GError generated at processing</doc>
          <type name="GLib.Error" c:type="const GError*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="SourceResolveSpec" c:type="GrlSourceResolveSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
resolve vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="operation_id" writable="1">
        <doc xml:space="preserve">operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="media" writable="1">
        <doc xml:space="preserve">a data transfer object</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">the #GList of #GrlKeyID&lt;!-- --&gt;s to request</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="options" writable="1">
        <doc xml:space="preserve">options wanted for that operation</doc>
        <type name="OperationOptions" c:type="GrlOperationOptions*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceResolveCb" c:type="GrlSourceResolveCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="SourceResultCb" c:type="GrlSourceResultCb">
      <doc xml:space="preserve">Prototype for the callback passed to the media sources' methods</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="source" transfer-ownership="none">
          <doc xml:space="preserve">a source</doc>
          <type name="Source" c:type="GrlSource*"/>
        </parameter>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="media"
                   transfer-ownership="full"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">a data transfer object</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </parameter>
        <parameter name="remaining" transfer-ownership="none">
          <doc xml:space="preserve">the number of remaining #GrlMedia to process, or
GRL_SOURCE_REMAINING_UNKNOWN if it is unknown</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <doc xml:space="preserve">user data passed to the used method</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="error"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">possible #GError generated at processing</doc>
          <type name="GLib.Error" c:type="const GError*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="SourceSearchSpec" c:type="GrlSourceSearchSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
search vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="operation_id" writable="1">
        <doc xml:space="preserve">operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="text" writable="1">
        <doc xml:space="preserve">the text to search</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">the #GList of #GrlKeyID&lt;!-- --&gt;s to request</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="options" writable="1">
        <doc xml:space="preserve">options wanted for that operation</doc>
        <type name="OperationOptions" c:type="GrlOperationOptions*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="SourceStoreCb" c:type="GrlSourceStoreCb">
      <doc xml:space="preserve">Prototype for the callback passed to grl_source_store_foo functions</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="source" transfer-ownership="none">
          <doc xml:space="preserve">a source</doc>
          <type name="Source" c:type="GrlSource*"/>
        </parameter>
        <parameter name="media" transfer-ownership="full">
          <doc xml:space="preserve">a #GrlMedia transfer object</doc>
          <type name="Media" c:type="GrlMedia*"/>
        </parameter>
        <parameter name="failed_keys" transfer-ownership="none">
          <doc xml:space="preserve">#GList of
keys that could not be updated, if any</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="KeyID"/>
          </type>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <doc xml:space="preserve">user data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="error"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">possible #GError generated</doc>
          <type name="GLib.Error" c:type="const GError*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="SourceStoreMetadataSpec" c:type="GrlSourceStoreMetadataSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
store_metadata vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="media" writable="1">
        <doc xml:space="preserve">a #GrlMedia transfer object</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="keys" writable="1">
        <doc xml:space="preserve">List of keys to be stored/updated.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="flags" writable="1">
        <doc xml:space="preserve">Flags to control specific bahviors of the set metadata operation.</doc>
        <type name="WriteFlags" c:type="GrlWriteFlags"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the callback passed to grl_source_store_metadata()</doc>
        <type name="SourceStoreCb" c:type="GrlSourceStoreCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">user data passed to grl_source_store_metadata()</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="failed_keys" writable="1">
        <doc xml:space="preserve">for internal use of the framework only.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="SourceStoreSpec" c:type="GrlSourceStoreSpec">
      <doc xml:space="preserve">Data transport structure used internally by the plugins which support
store vmethod.</doc>
      <field name="source" writable="1">
        <doc xml:space="preserve">a media source</doc>
        <type name="Source" c:type="GrlSource*"/>
      </field>
      <field name="parent" writable="1">
        <doc xml:space="preserve">a parent to store the data transfer objects</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="media" writable="1">
        <doc xml:space="preserve">a data transfer object</doc>
        <type name="Media" c:type="GrlMedia*"/>
      </field>
      <field name="callback" writable="1">
        <doc xml:space="preserve">the user defined callback</doc>
        <type name="SourceStoreCb" c:type="GrlSourceStoreCb"/>
      </field>
      <field name="user_data" writable="1">
        <doc xml:space="preserve">the user data to pass in the callback</doc>
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="_grl_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="16">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <bitfield name="SupportedMedia"
              glib:type-name="GrlSupportedMedia"
              glib:get-type="grl_supported_media_get_type"
              c:type="GrlSupportedMedia">
      <member name="none"
              value="0"
              c:identifier="GRL_SUPPORTED_MEDIA_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no media</doc>
      </member>
      <member name="audio"
              value="1"
              c:identifier="GRL_SUPPORTED_MEDIA_AUDIO"
              glib:nick="audio">
        <doc xml:space="preserve">audio media</doc>
      </member>
      <member name="video"
              value="2"
              c:identifier="GRL_SUPPORTED_MEDIA_VIDEO"
              glib:nick="video">
        <doc xml:space="preserve">video media</doc>
      </member>
      <member name="image"
              value="4"
              c:identifier="GRL_SUPPORTED_MEDIA_IMAGE"
              glib:nick="image">
        <doc xml:space="preserve">image media</doc>
      </member>
      <member name="all"
              value="7"
              c:identifier="GRL_SUPPORTED_MEDIA_ALL"
              glib:nick="all">
        <doc xml:space="preserve">any media</doc>
      </member>
    </bitfield>
    <bitfield name="SupportedOps"
              glib:type-name="GrlSupportedOps"
              glib:get-type="grl_supported_ops_get_type"
              c:type="GrlSupportedOps">
      <doc xml:space="preserve">Bitwise flags which reflect the kind of operations that a
#GrlSource supports.</doc>
      <member name="none"
              value="0"
              c:identifier="GRL_OP_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no operation is supported</doc>
      </member>
      <member name="resolve"
              value="1"
              c:identifier="GRL_OP_RESOLVE"
              glib:nick="resolve">
        <doc xml:space="preserve">Fetch specific keys of metadata based on other metadata.</doc>
      </member>
      <member name="browse"
              value="2"
              c:identifier="GRL_OP_BROWSE"
              glib:nick="browse">
        <doc xml:space="preserve">Retrieve complete sets of #GrlMedia</doc>
      </member>
      <member name="search"
              value="4"
              c:identifier="GRL_OP_SEARCH"
              glib:nick="search">
        <doc xml:space="preserve">Look up for #GrlMedia given a search text</doc>
      </member>
      <member name="query"
              value="8"
              c:identifier="GRL_OP_QUERY"
              glib:nick="query">
        <doc xml:space="preserve">Look up for #GrlMedia give a service specific query</doc>
      </member>
      <member name="store"
              value="16"
              c:identifier="GRL_OP_STORE"
              glib:nick="store">
        <doc xml:space="preserve">Store content in a service</doc>
      </member>
      <member name="store_parent"
              value="32"
              c:identifier="GRL_OP_STORE_PARENT"
              glib:nick="store-parent">
        <doc xml:space="preserve">Store content as child of a certian parent category.</doc>
      </member>
      <member name="store_metadata"
              value="64"
              c:identifier="GRL_OP_STORE_METADATA"
              glib:nick="store-metadata">
        <doc xml:space="preserve">Update metadata of a #GrlMedia in a service.</doc>
      </member>
      <member name="remove"
              value="128"
              c:identifier="GRL_OP_REMOVE"
              glib:nick="remove">
        <doc xml:space="preserve">Remove content from a service.</doc>
      </member>
      <member name="media_from_uri"
              value="256"
              c:identifier="GRL_OP_MEDIA_FROM_URI"
              glib:nick="media-from-uri">
        <doc xml:space="preserve">Create a #GrlMedia instance from an URI
representing a media resource.</doc>
      </member>
      <member name="notify_change"
              value="512"
              c:identifier="GRL_OP_NOTIFY_CHANGE"
              glib:nick="notify-change">
        <doc xml:space="preserve">Notify about changes in the #GrlSource.</doc>
      </member>
    </bitfield>
    <bitfield name="TypeFilter"
              glib:type-name="GrlTypeFilter"
              glib:get-type="grl_type_filter_get_type"
              c:type="GrlTypeFilter">
      <doc xml:space="preserve">Type of media to allow.</doc>
      <member name="none"
              value="0"
              c:identifier="GRL_TYPE_FILTER_NONE"
              glib:nick="none">
        <doc xml:space="preserve">allow no content (only containers)</doc>
      </member>
      <member name="audio"
              value="1"
              c:identifier="GRL_TYPE_FILTER_AUDIO"
              glib:nick="audio">
        <doc xml:space="preserve">allow audio content</doc>
      </member>
      <member name="video"
              value="2"
              c:identifier="GRL_TYPE_FILTER_VIDEO"
              glib:nick="video">
        <doc xml:space="preserve">allow video content</doc>
      </member>
      <member name="image"
              value="4"
              c:identifier="GRL_TYPE_FILTER_IMAGE"
              glib:nick="image">
        <doc xml:space="preserve">allow image content</doc>
      </member>
      <member name="all"
              value="7"
              c:identifier="GRL_TYPE_FILTER_ALL"
              glib:nick="all">
        <doc xml:space="preserve">allow any type of content</doc>
      </member>
    </bitfield>
    <bitfield name="WriteFlags"
              glib:type-name="GrlWriteFlags"
              glib:get-type="grl_write_flags_get_type"
              c:type="GrlWriteFlags">
      <doc xml:space="preserve">Flags for writing operations.</doc>
      <member name="normal"
              value="0"
              c:identifier="GRL_WRITE_NORMAL"
              glib:nick="normal">
        <doc xml:space="preserve">Normal mode.</doc>
      </member>
      <member name="full"
              value="1"
              c:identifier="GRL_WRITE_FULL"
              glib:nick="full">
        <doc xml:space="preserve">Try other plugins if necessary.</doc>
      </member>
    </bitfield>
    <function name="date_time_from_iso8601"
              c:identifier="grl_date_time_from_iso8601"
              version="0.2.0">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a newly-allocated #GDateTime set to the time corresponding to
@date, or %NULL if @date could not be parsed properly.</doc>
        <type name="GLib.DateTime" c:type="GDateTime*"/>
      </return-value>
      <parameters>
        <parameter name="date" transfer-ownership="none">
          <doc xml:space="preserve">a date expressed in iso8601 format</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="deinit" c:identifier="grl_deinit" version="0.2.8">
      <doc xml:space="preserve">Deinitializes the Grilo library.

Call this function after finalizing using Grilo, in order to free and clean
up all the resources created.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="g_value_dup" c:identifier="grl_g_value_dup">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a duplicated #GValue</doc>
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <doc xml:space="preserve">the #GValue to copy</doc>
          <type name="GObject.Value" c:type="const GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="g_value_free" c:identifier="grl_g_value_free">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="g_value_hashtable_new"
              c:identifier="grl_g_value_hashtable_new">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a new hash table made to contain GValues.</doc>
        <type name="GLib.HashTable" c:type="GHashTable*">
          <type name="utf8"/>
          <type name="GObject.Value"/>
        </type>
      </return-value>
    </function>
    <function name="g_value_hashtable_new_direct"
              c:identifier="grl_g_value_hashtable_new_direct">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a new hash table made to contain GValues.</doc>
        <type name="GLib.HashTable" c:type="GHashTable*">
          <type name="gpointer"/>
          <type name="GObject.Value"/>
        </type>
      </return-value>
    </function>
    <function name="g_value_new" c:identifier="grl_g_value_new">
      <return-value transfer-ownership="full">
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="g_type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
      </parameters>
    </function>
    <function name="init" c:identifier="grl_init" version="0.1.6">
      <doc xml:space="preserve">Initializes the Grilo library</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="argc"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">number of input arguments, length of @argv</doc>
          <type name="gint" c:type="gint*"/>
        </parameter>
        <parameter name="argv"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">list of arguments</doc>
          <array length="0" zero-terminated="0" c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="init_get_option_group"
              c:identifier="grl_init_get_option_group"
              version="0.1.6">
      <doc xml:space="preserve">Returns a #GOptionGroup with Grilo's argument specifications.

This function is useful if you want to integrate Grilo with other
libraries that use the GOption commandline parser
(see g_option_context_add_group() ).</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a pointer to Grilo's option group. Should be dereferenced
after use.</doc>
        <type name="GLib.OptionGroup" c:type="GOptionGroup*"/>
      </return-value>
    </function>
    <function name="list_from_va"
              c:identifier="grl_list_from_va"
              version="0.1.6"
              introspectable="0">
      <doc xml:space="preserve">Returns a #GList containing the va_list pointers. Use @NULL to finalize them,</doc>
      <return-value>
        <doc xml:space="preserve">a #GList.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </return-value>
      <parameters>
        <parameter name="p"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">first pointer</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="..." transfer-ownership="none">
          <doc xml:space="preserve">va_list pointers</doc>
          <varargs/>
        </parameter>
      </parameters>
    </function>
    <function name="log"
              c:identifier="grl_log"
              version="0.1.7"
              introspectable="0">
      <doc xml:space="preserve">Send a log message.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="domain" transfer-ownership="none">
          <doc xml:space="preserve">a domain</doc>
          <type name="LogDomain" c:type="GrlLogDomain*"/>
        </parameter>
        <parameter name="level" transfer-ownership="none">
          <doc xml:space="preserve">log level</doc>
          <type name="LogLevel" c:type="GrlLogLevel"/>
        </parameter>
        <parameter name="strloc" transfer-ownership="none">
          <doc xml:space="preserve">string, usually line of code where function is invoked</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">log message</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="..." transfer-ownership="none">
          <doc xml:space="preserve">parameters to insert in the log message</doc>
          <varargs/>
        </parameter>
      </parameters>
    </function>
    <function name="log_configure"
              c:identifier="grl_log_configure"
              version="0.1.7">
      <doc xml:space="preserve">Configure a set of log domains. The default configuration is to display
warning and error messages only for all the log domains.

The configuration string follows the following grammar:

|[
  config-list: config | config ',' config-list
  config: domain ':' level
  domain: '*' | [a-zA-Z0-9]+
  level: '*' | '-' | named-level | num-level
  named-level: "none" | "error" | "warning" | "message" | "info" | "debug"
  num-level: [0-5]
]|

examples:
&lt;itemizedlist&gt;
  &lt;listitem&gt;&lt;para&gt;"*:*": maximum verbosity for all the log domains&lt;/para&gt;
  &lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;"*:-": don't print any message&lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;"media-source:debug,metadata-source:debug": prints debug,
  info, message warning and error messages for the media-source and
  metadata-source log domains&lt;/para&gt;&lt;/listitem&gt;
&lt;/itemizedlist&gt;

&lt;note&gt;It's possible to override the log configuration at runtime by
defining the GRL_DEBUG environment variable to a configuration string
as described above&lt;/note&gt;</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="config" transfer-ownership="none">
          <doc xml:space="preserve">A string describing the wanted log configuration</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="log_domain_new"
              c:identifier="grl_log_domain_new"
              moved-to="LogDomain.new"
              version="0.1.7"
              introspectable="0">
      <return-value>
        <doc xml:space="preserve">The new log domain</doc>
        <type name="LogDomain" c:type="GrlLogDomain*"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <doc xml:space="preserve">The name for the new log domain</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="marshal_VOID__BOXED_ENUM_BOOLEAN"
              c:identifier="grl_marshal_VOID__BOXED_ENUM_BOOLEAN">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="closure" transfer-ownership="none">
          <type name="GObject.Closure" c:type="GClosure*"/>
        </parameter>
        <parameter name="return_value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="n_param_values" transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="param_values" transfer-ownership="none">
          <type name="GObject.Value" c:type="const GValue*"/>
        </parameter>
        <parameter name="invocation_hint"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="marshal_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="metadata_key_get_desc"
              c:identifier="grl_metadata_key_get_desc"
              version="0.1.6">
      <doc xml:space="preserve">Retrieves the description associated with the key</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the description of the key</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">key to look up</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </parameter>
      </parameters>
    </function>
    <function name="metadata_key_get_name"
              c:identifier="grl_metadata_key_get_name"
              version="0.1.6">
      <doc xml:space="preserve">Retrieves the name associated with the key</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The name of the key</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">key to look up</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </parameter>
      </parameters>
    </function>
    <function name="metadata_key_get_type"
              c:identifier="grl_metadata_key_get_type"
              version="0.2.0">
      <doc xml:space="preserve">Retrieves the expected type for values associated with this key</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the expected value type</doc>
        <type name="GType" c:type="GType"/>
      </return-value>
      <parameters>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">key to look up</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </parameter>
      </parameters>
    </function>
    <function name="metadata_key_list_new"
              c:identifier="grl_metadata_key_list_new"
              version="0.2.0"
              introspectable="0">
      <doc xml:space="preserve">Returns a #GList containing the va_list keys. Use #GRL_METADATA_KEY_INVALID
to finalize them.</doc>
      <return-value>
        <doc xml:space="preserve">a #GList</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </return-value>
      <parameters>
        <parameter name="first_key" transfer-ownership="none">
          <doc xml:space="preserve">first key</doc>
          <type name="KeyID" c:type="GrlKeyID"/>
        </parameter>
        <parameter name="..." transfer-ownership="none">
          <doc xml:space="preserve">va_list keys</doc>
          <varargs/>
        </parameter>
      </parameters>
    </function>
    <function name="metadata_key_setup_system_keys"
              c:identifier="grl_metadata_key_setup_system_keys">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="registry" transfer-ownership="none">
          <type name="Registry" c:type="GrlRegistry*"/>
        </parameter>
      </parameters>
    </function>
    <function name="multiple_get_media_from_uri"
              c:identifier="grl_multiple_get_media_from_uri"
              version="0.2.0">
      <doc xml:space="preserve">Goes though all available media sources until it finds one capable of
constructing a GrlMedia object representing the media resource exposed
by @uri.

This method is asynchronous.</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">A URI that can be used to identify a media resource</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="keys" transfer-ownership="none">
          <doc xml:space="preserve">List of metadata keys we want to obtain.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </parameter>
        <parameter name="options" transfer-ownership="none">
          <doc xml:space="preserve">options wanted for that operation</doc>
          <type name="OperationOptions" c:type="GrlOperationOptions*"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   scope="notified"
                   closure="4">
          <doc xml:space="preserve">the user defined callback</doc>
          <type name="SourceResolveCb" c:type="GrlSourceResolveCb"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the user data to pass to the user callback</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="multiple_search"
              c:identifier="grl_multiple_search"
              version="0.2.0">
      <doc xml:space="preserve">Search for @text in all the sources specified in @sources.

If @text is @NULL then NULL-text searchs will be used for each searchable
plugin (see #grl_source_search for more details).

This method is asynchronous.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the operation identifier</doc>
        <type name="guint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="sources"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">
a #GList of #GrlSource&lt;!-- --&gt;s to search from (%NULL for all
searchable sources)</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="Source"/>
          </type>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">the text to search for</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="keys" transfer-ownership="none">
          <doc xml:space="preserve">the #GList of
#GrlKeyID to retrieve</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </parameter>
        <parameter name="options" transfer-ownership="none">
          <doc xml:space="preserve">options wanted for that operation</doc>
          <type name="OperationOptions" c:type="GrlOperationOptions*"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   scope="notified"
                   closure="5">
          <doc xml:space="preserve">the user defined callback</doc>
          <type name="SourceResultCb" c:type="GrlSourceResultCb"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the user data to pass to the user callback</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="multiple_search_sync"
              c:identifier="grl_multiple_search_sync"
              version="0.2.0"
              throws="1">
      <doc xml:space="preserve">Search for @text in all the sources specified in @sources.

This method is synchronous.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a list with #GrlMedia elements</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="Media"/>
        </type>
      </return-value>
      <parameters>
        <parameter name="sources"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">
a #GList of #GrlSource&lt;!-- --&gt;s where to search from (%NULL for all
available sources with search capability)</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="Source"/>
          </type>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">the text to search for</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="keys" transfer-ownership="none">
          <doc xml:space="preserve">the #GList of
#GrlKeyID to retrieve</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="KeyID"/>
          </type>
        </parameter>
        <parameter name="options" transfer-ownership="none">
          <doc xml:space="preserve">options wanted for that operation</doc>
          <type name="OperationOptions" c:type="GrlOperationOptions*"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_cancel" c:identifier="grl_operation_cancel">
      <doc xml:space="preserve">Cancel an operation.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">the identifier of a running operation</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_generate_id"
              c:identifier="grl_operation_generate_id">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </return-value>
    </function>
    <function name="operation_get_data" c:identifier="grl_operation_get_data">
      <doc xml:space="preserve">Obtains the previously attached data</doc>
      <return-value transfer-ownership="none" nullable="1">
        <doc xml:space="preserve">The previously attached data.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">the identifier of a running operation</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_get_private_data"
              c:identifier="grl_operation_get_private_data"
              introspectable="0">
      <return-value transfer-ownership="none" nullable="1">
        <type name="gpointer" c:type="gpointer"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">operation identifier</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_init" c:identifier="grl_operation_init">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="operation_remove" c:identifier="grl_operation_remove">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_set_data" c:identifier="grl_operation_set_data">
      <doc xml:space="preserve">Attach a pointer to the specific operation.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">the identifier of a running operation</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the data to attach</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_set_data_full"
              c:identifier="grl_operation_set_data_full"
              version="0.2.7">
      <doc xml:space="preserve">Attach a pointer to the specific operation.

Note that the @destroy_func callback is not called if @user_data is %NULL.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <doc xml:space="preserve">the identifier of a running operation</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the data to attach</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="destroy_func"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   scope="async">
          <doc xml:space="preserve">function to release @user_data when the operation terminates</doc>
          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
        </parameter>
      </parameters>
    </function>
    <function name="operation_set_private_data"
              c:identifier="grl_operation_set_private_data">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="operation_id" transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="private_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="cancel_cb"
                   transfer-ownership="none"
                   scope="notified"
                   destroy="3">
          <type name="OperationCancelCb" c:type="GrlOperationCancelCb"/>
        </parameter>
        <parameter name="destroy_cb" transfer-ownership="none" scope="async">
          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
        </parameter>
      </parameters>
    </function>
    <function name="paging_translate"
              c:identifier="grl_paging_translate"
              version="0.1.6">
      <doc xml:space="preserve">Grilo browsing implements a paging mechanism through @skip and @count values.

But there are some services (like Jamendo or Flickr) where paging is done
through a page number and page size: user request all elements in a page,
specifying in most cases what is the page size.

This function is a helper for this task, computing from @skip and @count what
is the optimal value of page size (limited by @max_page_size), which page
should the user request, and where requested data start inside the page.

By optimal we mean that it computes those values so only one page is required
to satisfy the data, using the smallest page size. If user is limiting page
size, then more requests to services might be needed. But still page size
will be an optimal value.

If @page_size is @NULL, then page size will be @max_page_size. If the later
is also 0, then page size will be #G_MAXUINT.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="skip" transfer-ownership="none">
          <doc xml:space="preserve">number of elements to skip</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve">number of elements to retrieve</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="max_page_size" transfer-ownership="none">
          <doc xml:space="preserve">maximum value for page size (0 for unlimited size)</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="page_size" transfer-ownership="none">
          <doc xml:space="preserve">optimal page size</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="page_number" transfer-ownership="none">
          <doc xml:space="preserve">page which contain the first element to retrieve (starting at 1)</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="internal_offset" transfer-ownership="none">
          <doc xml:space="preserve">in the @page_number, offset where first element can be found (starting at 0)</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="range_value_hashtable_insert"
              c:identifier="grl_range_value_hashtable_insert"
              moved-to="RangeValue.hashtable_insert">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="hash_table" transfer-ownership="none">
          <type name="GLib.HashTable" c:type="GHashTable*">
            <type name="gpointer" c:type="gpointer"/>
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </parameter>
        <parameter name="key"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="min" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="max" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="range_value_hashtable_new"
              c:identifier="grl_range_value_hashtable_new"
              moved-to="RangeValue.hashtable_new">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a #GHashTable</doc>
        <type name="GLib.HashTable" c:type="GHashTable*">
          <type name="gpointer"/>
          <type name="RangeValue"/>
        </type>
      </return-value>
    </function>
  </namespace>
</repository>
