[grilomm] Fix the build with the latest version of grilo.



commit 418d150030cc869972afff4493508016f00ee1e9
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date:   Wed Oct 3 16:39:29 2012 +0200

    Fix the build with the latest version of grilo.
    
    * configure.ac: Change grilo-0.2 to grilo-0.3.
    * .gitignore: Add *~ (gedit's backup files).
    * grilo/.gitignore: Add generated files in grilo/grilomm/.
    * doc/reference/Doxyfile.in: EXTRACT_ALL=YES, EXTRACT_PRIVATE=NO.
    * codegen/extradefs/generate_extra_defs_grilo.cc: Change GRL_TYPE_*.
    * codegen/m4/convert_grilo.m4:
    * examples/example/example.cc:
    * grilo/grilomm.h:
    * grilo/src/filelist.am: Changes caused by changed file names and class names.
    * grilo/src/grilo_docs.xml:
    * grilo/src/grilo_enum.defs:
    * grilo/src/grilo_extra.defs:
    * grilo/src/grilo_method.defs: Regenerated.
    * grilo/src/media-plugin.[hg|ccg]:
    * grilo/src/plugin-registry.[hg|ccg]: Deleted files.
    * codegen/generate_defs_and_docs.sh: New file. Generates all .defs files
    and grilo_docs.xml.
    *	grilo/src/plugin.[hg|ccg]:
    *	grilo/src/source.[hg|ccg]: New files. Replace media-plugin.[hg|ccg].
    Adjustment to grilo commits ae22e96590eed29b2a8d1c4b4bfce6fb11a1d822
    and b9b02d0cff289c8e88f3555cceda8154fd295bf3.
    *	grilo/src/registry.[hg|ccg]: New files. Replace plugin-registry.[hg|ccg].
    Adjustment to grilo commit 41f2fe09990e8f800f829e52867e87864d971b5f.

 .gitignore                                      |   11 +-
 codegen/extradefs/generate_extra_defs_grilo.cc  |    5 +-
 codegen/generate_defs_and_docs.sh               |   31 +
 codegen/m4/convert_grilo.m4                     |    5 +-
 configure.ac                                    |    4 +-
 doc/reference/Doxyfile.in                       |    4 +-
 examples/example/example.cc                     |   20 +-
 grilo/.gitignore                                |    6 +
 grilo/grilomm.h                                 |    5 +-
 grilo/src/filelist.am                           |    2 +-
 grilo/src/grilo_docs.xml                        | 4441 +++++++++++++----------
 grilo/src/grilo_enum.defs                       |  179 +-
 grilo/src/grilo_extra.defs                      |   20 -
 grilo/src/grilo_method.defs                     | 3293 ++++-------------
 grilo/src/media-plugin.hg                       |   51 -
 grilo/src/{media-plugin.ccg => plugin.ccg}      |    0
 grilo/src/plugin.hg                             |   57 +
 grilo/src/{plugin-registry.ccg => registry.ccg} |    0
 grilo/src/{plugin-registry.hg => registry.hg}   |   14 +-
 grilo/src/{media-plugin.ccg => source.ccg}      |    0
 grilo/src/{plugin-registry.hg => source.hg}     |   19 +-
 21 files changed, 3487 insertions(+), 4680 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index bb0d047..e5ab21e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+# wildcard patterns
 .deps/
 .dirstamp
 .libs/
@@ -6,6 +7,9 @@ Makefile.in
 stamp-h?
 *.[ao]
 *.l[ao]
+*~
+
+# /
 /INSTALL
 /aclocal.m4
 /autom4te.cache/
@@ -13,6 +17,11 @@ stamp-h?
 /config.log
 /config.status
 /configure
-/skeletonmm-*.tar.*
+/grilomm-*.tar.*
 /libtool
+
+# codegen/
 /codegen/extradefs/generate_extra_defs
+
+# grilo/ has its own .gitignore
+
diff --git a/codegen/extradefs/generate_extra_defs_grilo.cc b/codegen/extradefs/generate_extra_defs_grilo.cc
index fcb1400..170c1ea 100644
--- a/codegen/extradefs/generate_extra_defs_grilo.cc
+++ b/codegen/extradefs/generate_extra_defs_grilo.cc
@@ -24,8 +24,9 @@ int main(int, char**)
 {
   grl_init(0, 0);
 
-  std::cout << get_defs(GRL_TYPE_MEDIA_PLUGIN)
-    << get_defs(GRL_TYPE_PLUGIN_REGISTRY);
+  std::cout << get_defs(GRL_TYPE_PLUGIN)
+    << get_defs(GRL_TYPE_REGISTRY)
+    << get_defs(GRL_TYPE_SOURCE);
 
   return 0;
 }
diff --git a/codegen/generate_defs_and_docs.sh b/codegen/generate_defs_and_docs.sh
new file mode 100755
index 0000000..1b2c5ee
--- /dev/null
+++ b/codegen/generate_defs_and_docs.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+# grilomm/codegen/generate_defs_and_docs.sh
+
+# This script must be executed from directory grilomm/codegen.
+
+# Assumed directory structure:
+#   glibmm/tools/defs_gen/docextract_to_xml.py
+#   glibmm/tools/defs_gen/h2def.py
+#   glibmm/tools/enum.pl
+#   grilo/src/*.h
+#   grilo/src/*.c
+#   grilo/doc/grilo/*.sgml
+#   grilo/doc/grilo/*.xml
+#   grilomm/codegen/extradefs/generate_extra_defs
+
+# Generated files:
+#   grilomm/grilo/src/grilo_docs.xml
+#   grilomm/grilo/src/grilo_method.defs
+#   grilomm/grilo/src/grilo_enum.defs
+#   grilomm/grilo/src/grilo_extra.defs  (signals and properties)
+
+GLIBMM_TOOLS_DIR=../../glibmm/tools
+GRILO_DIR=../../grilo
+GRILOMM_SRC_DIR=../grilo/src
+
+$GLIBMM_TOOLS_DIR/defs_gen/docextract_to_xml.py -s $GRILO_DIR/src -s $GRILO_DIR/doc/grilo >$GRILOMM_SRC_DIR/grilo_docs.xml
+$GLIBMM_TOOLS_DIR/defs_gen/h2def.py $GRILO_DIR/src/*.h >$GRILOMM_SRC_DIR/grilo_method.defs
+$GLIBMM_TOOLS_DIR/enum.pl $GRILO_DIR/src/*.h >$GRILOMM_SRC_DIR/grilo_enum.defs
+extradefs/generate_extra_defs >$GRILOMM_SRC_DIR/grilo_extra.defs
+
diff --git a/codegen/m4/convert_grilo.m4 b/codegen/m4/convert_grilo.m4
index 8ccc2d2..7a4ede2 100644
--- a/codegen/m4/convert_grilo.m4
+++ b/codegen/m4/convert_grilo.m4
@@ -1,5 +1,6 @@
 dnl Copyright (c) 2012  Murray Cumming <murrayc murrayc com>
 dnl This file is part of grilomm.
 
-_CONVERSION(`GrlPluginRegistry*',`Glib::RefPtr<PluginRegistry>',`Glib::wrap($3)')
-_CONVERSION(`GrlMediaPlugin*',`Glib::RefPtr<MediaPlugin>',`Glib::wrap($3)')
+_CONVERSION(`GrlRegistry*',`Glib::RefPtr<Registry>',`Glib::wrap($3)')
+_CONVERSION(`GrlPlugin*',`Glib::RefPtr<Plugin>',`Glib::wrap($3)')
+_CONVERSION(`GrlPlugin*',`Glib::RefPtr<const Plugin>',`Glib::wrap($3)')
diff --git a/configure.ac b/configure.ac
index 87bf5dc..75c2e08 100644
--- a/configure.ac
+++ b/configure.ac
@@ -40,7 +40,7 @@ AC_DISABLE_STATIC
 AC_LIBTOOL_WIN32_DLL
 AC_PROG_LIBTOOL
 
-AC_SUBST([GRILOMM_MODULES], ['grilo-0.2 >= 0.2.0 glibmm-2.4 >= 2.16'])
+AC_SUBST([GRILOMM_MODULES], ['grilo-0.3 >= 0.3.0 glibmm-2.4 >= 2.16'])
 PKG_CHECK_MODULES([GRILOMM], [$GRILOMM_MODULES])
 
 MM_PKG_CONFIG_SUBST([GTHREAD_CFLAGS], [--cflags-only-other gthread-2.0])
@@ -57,7 +57,7 @@ AC_LANG([C++])
 MM_ARG_ENABLE_WARNINGS([GRILOMM_WXXFLAGS],
                        [-Wall],
                        [-pedantic -Wall -Wextra -Wno-long-long -Wno-variadic-macros -DGSEAL_ENABLE],
-                       [G GRILO])
+                       [G GRILO GLIBMM])
 
 AC_CONFIG_FILES([Makefile
                  codegen/Makefile
diff --git a/doc/reference/Doxyfile.in b/doc/reference/Doxyfile.in
index 7e8ce0b..8424bcd 100644
--- a/doc/reference/Doxyfile.in
+++ b/doc/reference/Doxyfile.in
@@ -48,8 +48,8 @@ SYMBOL_CACHE_SIZE      = 0
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
-EXTRACT_ALL            = NO
-EXTRACT_PRIVATE        = YES
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
 EXTRACT_STATIC         = NO
 EXTRACT_LOCAL_CLASSES  = NO
 EXTRACT_LOCAL_METHODS  = NO
diff --git a/examples/example/example.cc b/examples/example/example.cc
index 026c2cd..3b39779 100644
--- a/examples/example/example.cc
+++ b/examples/example/example.cc
@@ -23,27 +23,25 @@ int main(int, char**)
 {
   Grilo::init();
 
-  const Glib::RefPtr<Grilo::PluginRegistry> plugin_registry = 
-    Grilo::PluginRegistry::get_default();
-  if(!plugin_registry)
+  const Glib::RefPtr<Grilo::Registry> registry = Grilo::Registry::get_default();
+  if(!registry)
   {
-    std::cerr << "Grilo::PluginRegistry::get_default() returned null." << std::endl;
+    std::cerr << "Grilo::Registry::get_default() returned null." << std::endl;
     return EXIT_FAILURE;
   }
 
-  typedef std::vector<Glib::RefPtr<Grilo::MediaPlugin> > typeVecSources;
-  const typeVecSources sources = plugin_registry->get_sources();
+  typedef std::vector<Glib::RefPtr<Grilo::Source> > typeVecSources;
+  const typeVecSources sources = registry->get_sources();
 
-  std::cout << "Plugins:" << std::endl;
+  std::cout << "Sources:" << std::endl;
   for(typeVecSources::const_iterator iter = sources.begin(); iter != sources.end(); ++iter)
   {
-    const Glib::RefPtr<Grilo::MediaPlugin> plugin = *iter;
-    if(!plugin)
+    const Glib::RefPtr<Grilo::Source> source = *iter;
+    if(!source)
       continue;
 
-    std::cout << plugin->get_name() << std::endl;
+    std::cout << source->get_name() << std::endl;
   }
- 
 
   return EXIT_SUCCESS;
 }
diff --git a/grilo/.gitignore b/grilo/.gitignore
index 8e56819..ea720e0 100644
--- a/grilo/.gitignore
+++ b/grilo/.gitignore
@@ -1,5 +1,11 @@
 /grilommconfig.h
 /grilomm-*.pc
+/grilomm/plugin.h
+/grilomm/plugin.cc
+/grilomm/registry.h
+/grilomm/registry.cc
+/grilomm/source.h
+/grilomm/source.cc
 /grilomm/grilo.cc
 /grilomm/grilo.h
 /grilomm/wrap_init.cc
diff --git a/grilo/grilomm.h b/grilo/grilomm.h
index b03072f..246037c 100644
--- a/grilo/grilomm.h
+++ b/grilo/grilomm.h
@@ -39,8 +39,9 @@
 
 #include <grilommconfig.h>
 #include <grilomm/init.h>
-#include <grilomm/media-plugin.h>
-#include <grilomm/plugin-registry.h>
+#include <grilomm/plugin.h>
+#include <grilomm/registry.h>
+#include <grilomm/source.h>
 
 /** @example example/example.cc
  * A grilomm example program.
diff --git a/grilo/src/filelist.am b/grilo/src/filelist.am
index 9eb5d24..a99e993 100644
--- a/grilo/src/filelist.am
+++ b/grilo/src/filelist.am
@@ -7,5 +7,5 @@ files_defs =			\
 	grilo_method.defs	\
 	grilo_docs.xml
 
-files_hg  = media-plugin.hg plugin-registry.hg
+files_hg  = plugin.hg registry.hg source.hg
 files_ccg = $(files_hg:.hg=.ccg)
diff --git a/grilo/src/grilo_docs.xml b/grilo/src/grilo_docs.xml
index 9e5f705..8a30cce 100644
--- a/grilo/src/grilo_docs.xml
+++ b/grilo/src/grilo_docs.xml
@@ -1,5 +1,45 @@
 <root>
-<signal name="GrlMediaSource::content-changed">
+<signal name="GrlRegistry::source-added">
+<description>
+Signals that a source has been added to the registry.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="registry">
+<parameter_description> the registry
+</parameter_description>
+</parameter>
+<parameter name="source">
+<parameter_description> the source that has been added
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</signal>
+
+<signal name="GrlRegistry::source-removed">
+<description>
+Signals that a source has been removed from the registry.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="registry">
+<parameter_description> the registry
+</parameter_description>
+</parameter>
+<parameter name="source">
+<parameter_description> the source that has been removed
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</signal>
+
+<signal name="GrlSource::content-changed">
 <description>
 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
@@ -16,7 +56,7 @@ 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 box (@NULL id) and set
 location_unknown as @TRUE.
 
-Since: 0.1.9
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -42,63 +82,95 @@ of its direct children (when @media is a #GrlMediaBox). @FALSE otherwise
 <return></return>
 </signal>
 
-<signal name="GrlPluginRegistry::source-added">
+<function name="grl_caps_get_key_filter">
 <description>
-Signals that a plugin has been added to the registry.
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry
-</parameter_description>
-</parameter>
-<parameter name="plugin">
-<parameter_description> the plugin that has been added
+<parameter name="caps">
+<parameter_description> a #GrlCaps instance
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
-</signal>
+<return>
 
-<signal name="GrlPluginRegistry::source-removed">
+</return>
+</function>
+
+<function name="grl_caps_get_key_range_filter">
 <description>
-Signals that a plugin has been removed from the registry.
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry
+<parameter name="caps">
+<parameter_description> a #GrlCaps instance
 </parameter_description>
 </parameter>
-<parameter name="plugin">
-<parameter_description> the plugin that has been removed
+</parameters>
+<return>
+
+</return>
+</function>
+
+<function name="grl_caps_get_type_filter">
+<description>
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="caps">
+<parameter_description> a #GrlCaps instance
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
-</signal>
+<return> the supported #GrlTypeFilter
 
-<function name="grl_caps_get_key_filter">
+</return>
+</function>
+
+<function name="grl_caps_is_key_filter">
 <description>
+Checks if @key is supported for filtering in @caps.
+
+Since: 0.2.0
 
 </description>
 <parameters>
+<parameter name="caps">
+<parameter_description> a #GrlCaps instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a #GrlKeyID
+</parameter_description>
+</parameter>
 </parameters>
-<return>
+<return> %TRUE if @key can be used for filtering
+
 </return>
 </function>
 
-<function name="grl_caps_get_key_range_filter">
+<function name="grl_caps_is_key_range_filter">
 <description>
+Checks if @key is supported for filtering by range in @caps.
+
+Since: 0.2.0
 
 </description>
 <parameters>
 <parameter name="caps">
-<parameter_description>
+<parameter_description> a #grlCaps instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a #GrlKeyID
 </parameter_description>
 </parameter>
 </parameters>
-<return>
+<return> %TRUE if @key can be used for filtering
+
 </return>
 </function>
 
@@ -106,21 +178,24 @@ Signals that a plugin has been removed from the registry.
 <description>
 Creates a new caps object.
 
+Since: 0.2.0
 
 </description>
 <parameters>
 </parameters>
 <return> a new caps object.
+
 </return>
 </function>
 
 <function name="grl_caps_set_key_filter">
 <description>
+Since: 0.2.0
 
 </description>
 <parameters>
 <parameter name="caps">
-<parameter_description>
+<parameter_description> a #GrlCaps instance
 </parameter_description>
 </parameter>
 <parameter name="keys">
@@ -133,11 +208,12 @@ Creates a new caps object.
 
 <function name="grl_caps_set_key_range_filter">
 <description>
+Since: 0.2.0
 
 </description>
 <parameters>
 <parameter name="caps">
-<parameter_description>
+<parameter_description> a #GrlCaps instance
 </parameter_description>
 </parameter>
 <parameter name="keys">
@@ -148,10 +224,31 @@ Creates a new caps object.
 <return></return>
 </function>
 
+<function name="grl_caps_set_type_filter">
+<description>
+Sets the supported filter capability.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="caps">
+<parameter_description> a #GrlCaps instance
+</parameter_description>
+</parameter>
+<parameter name="filter">
+<parameter_description> a #GrlTypefilter
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
 <function name="grl_caps_test_option">
 <description>
 Checks whether (@key, @value) are authorized by @caps.
 
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -241,6 +338,93 @@ Since: 0.1.4
 </return>
 </function>
 
+<function name="grl_config_get_binary">
+<description>
+Gets the value of @param encoded as base64. If @size is not %NULL, it puts
+there the size of the value.
+
+Since: 0.1.9
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a binary type parameter
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> place for size of value
+</parameter_description>
+</parameter>
+</parameters>
+<return> @param value
+
+</return>
+</function>
+
+<function name="grl_config_get_boolean">
+<description>
+Since: 0.1.8
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a boolean type parameter
+</parameter_description>
+</parameter>
+</parameters>
+<return> @param value
+
+</return>
+</function>
+
+<function name="grl_config_get_float">
+<description>
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a float type parameter
+</parameter_description>
+</parameter>
+</parameters>
+<return> @param value
+
+</return>
+</function>
+
+<function name="grl_config_get_int">
+<description>
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> an integer type parameter
+</parameter_description>
+</parameter>
+</parameters>
+<return> @param value
+
+</return>
+</function>
+
 <function name="grl_config_get_password">
 <description>
 Since: 0.1.8
@@ -287,6 +471,26 @@ Since: 0.1.4
 </return>
 </function>
 
+<function name="grl_config_get_string">
+<description>
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a string type paramter
+</parameter_description>
+</parameter>
+</parameters>
+<return> @param value
+
+</return>
+</function>
+
 <function name="grl_config_get_username">
 <description>
 Since: 0.1.8
@@ -351,6 +555,30 @@ has been unloaded.
 </return>
 </function>
 
+<function name="grl_config_set">
+<description>
+Set @param @value.
+
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a parameter
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> value
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
 <function name="grl_config_set_api_key">
 <description>
 Set the webservice API key in the configuration
@@ -435,11 +663,11 @@ Since: 0.1.4
 <return></return>
 </function>
 
-<function name="grl_config_set_password">
+<function name="grl_config_set_binary">
 <description>
-Set the password in the configuration
+Set @param value.
 
-Since: 0.1.8
+Since: 0.1.9
 
 </description>
 <parameters>
@@ -447,19 +675,27 @@ Since: 0.1.8
 <parameter_description> the config instance
 </parameter_description>
 </parameter>
-<parameter name="password">
-<parameter_description> the password
+<parameter name="param">
+<parameter_description> a binary type parameter
+</parameter_description>
+</parameter>
+<parameter name="blob">
+<parameter_description> a base64 encoded binary value
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> size of @value
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_config_set_plugin">
+<function name="grl_config_set_boolean">
 <description>
-Set the plugin key in the configuration
+Set @param @value.
 
-Since: 0.1.4
+Since: 0.1.8
 
 </description>
 <parameters>
@@ -467,19 +703,23 @@ Since: 0.1.4
 <parameter_description> the config instance
 </parameter_description>
 </parameter>
-<parameter name="plugin">
-<parameter_description> the plugin id
+<parameter name="param">
+<parameter_description> a boolean type parameter
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> a value
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_config_set_source">
+<function name="grl_config_set_float">
 <description>
-Set the source key in the configuration
+Set @param @value.
 
-Since: 0.1.4
+Since: 0.1.5
 
 </description>
 <parameters>
@@ -487,19 +727,131 @@ Since: 0.1.4
 <parameter_description> the config instance
 </parameter_description>
 </parameter>
-<parameter name="source">
-<parameter_description> the source id
+<parameter name="param">
+<parameter_description> a float type parameter
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> a value
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_config_set_username">
+<function name="grl_config_set_int">
 <description>
-Set the username in the configuration
+Set @param @value.
 
-Since: 0.1.8
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> an integer type parameter
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> a value
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_config_set_password">
+<description>
+Set the password in the configuration
+
+Since: 0.1.8
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="password">
+<parameter_description> the password
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_config_set_plugin">
+<description>
+Set the plugin key in the configuration
+
+Since: 0.1.4
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="plugin">
+<parameter_description> the plugin id
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_config_set_source">
+<description>
+Set the source key in the configuration
+
+Since: 0.1.4
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="source">
+<parameter_description> the source id
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_config_set_string">
+<description>
+Set @param @value.
+
+Since: 0.1.5
+
+</description>
+<parameters>
+<parameter name="config">
+<parameter_description> the config instance
+</parameter_description>
+</parameter>
+<parameter name="param">
+<parameter_description> a string type parameter
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> a value
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_config_set_username">
+<description>
+Set the username in the configuration
+
+Since: 0.1.8
 
 </description>
 <parameters>
@@ -547,6 +899,8 @@ Since: 0.1.10
 <description>
 Appends a new boxed value for @key in @data.
 
+Since: 0.2.0
+
 </description>
 <parameters>
 <parameter name="data">
@@ -708,6 +1062,7 @@ 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.
 
+Since: 0.1.9
 
 </description>
 <parameters>
@@ -726,6 +1081,7 @@ is returned.
 </parameters>
 <return> buffer location associated with the @key, or %NULL in other case. If
 successful @size will be set the to the buffer size.
+
 </return>
 </function>
 
@@ -735,6 +1091,7 @@ 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.
 
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -750,6 +1107,7 @@ then %NULL is returned.
 <return> the boxed instance associated with @key if
 possible, or %NULL in other cases. The caller should not change nor free the
 value.
+
 </return>
 </function>
 
@@ -1071,6 +1429,8 @@ Since: 0.1.4
 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.
 
+Since: 0.1.9
+
 </description>
 <parameters>
 <parameter name="data">
@@ -1098,6 +1458,8 @@ has a first value old value is replaced by the new one.
 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.
 
+Since: 0.2.0
+
 </description>
 <parameters>
 <parameter name="data">
@@ -1220,6 +1582,7 @@ Since: 0.1.4
 
 <function name="grl_date_time_from_iso8601">
 <description>
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -1295,6 +1658,38 @@ Since: 0.1.6
 </return>
 </function>
 
+<function name="grl_log">
+<description>
+Send a log message.
+
+Since: 0.1.7
+
+</description>
+<parameters>
+<parameter name="domain">
+<parameter_description> a domain
+</parameter_description>
+</parameter>
+<parameter name="level">
+<parameter_description> log level
+</parameter_description>
+</parameter>
+<parameter name="strloc">
+<parameter_description> string, usually line of code where function is invoked
+</parameter_description>
+</parameter>
+<parameter name="format">
+<parameter_description> log message
+</parameter_description>
+</parameter>
+<parameter name="Varargs">
+<parameter_description> parameters to insert in the log message
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
 <function name="grl_log_configure">
 <description>
 Configure a set of log domains. The default configuration is to display
@@ -1337,6 +1732,22 @@ Since: 0.1.7
 <return></return>
 </function>
 
+<function name="grl_log_domain_free">
+<description>
+Releases @domain.
+
+Since: 0.1.7
+
+</description>
+<parameters>
+<parameter name="domain">
+<parameter_description> a #GrlLogDomain
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
 <function name="grl_log_domain_new">
 <description>
 Since: 0.1.7
@@ -2045,7 +2456,7 @@ Since: 0.1.6
 
 <function name="grl_media_get_creation_date">
 <description>
-Since: 0.1.12
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -2210,6 +2621,7 @@ Since: 0.1.4
 
 <function name="grl_media_get_modification_date">
 <description>
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -2219,6 +2631,7 @@ Since: 0.1.4
 </parameter>
 </parameters>
 <return>date when the media was last modified (owned by @media).
+
 </return>
 </function>
 
@@ -2277,7 +2690,7 @@ Since: 0.1.10
 
 <function name="grl_media_get_publication_date">
 <description>
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -2341,6 +2754,7 @@ Since: 0.1.4
 
 <function name="grl_media_get_start_time">
 <description>
+Since: 0.1.19
 
 </description>
 <parameters>
@@ -2351,6 +2765,7 @@ Since: 0.1.4
 </parameters>
 <return> the start time of the logical media resource inside the
 file containing it, in seconds.
+
 </return>
 </function>
 
@@ -2769,6 +3184,46 @@ Since: 0.1.4
 <return></return>
 </function>
 
+<function name="grl_media_image_set_iso_speed">
+<description>
+Set the iso_speed of the image
+
+Since: 0.1.12
+
+</description>
+<parameters>
+<parameter name="image">
+<parameter_description> the image instance
+</parameter_description>
+</parameter>
+<parameter name="iso_speed">
+<parameter_description> picture's iso speed
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_media_image_set_orientation">
+<description>
+Set the orientation of the image
+
+Since: 0.1.12
+
+</description>
+<parameters>
+<parameter name="image">
+<parameter_description> the image instance
+</parameter_description>
+</parameter>
+<parameter name="orientation">
+<parameter_description> degrees clockwise orientation of the picture
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
 <function name="grl_media_image_set_size">
 <description>
 Set the size of the image
@@ -2859,307 +3314,101 @@ Since: 0.1.4
 </return>
 </function>
 
-<function name="grl_media_plugin_get_author">
+<function name="grl_media_serialize">
 <description>
-Get the author of the plugin
+Serializes a GrlMedia into a string. It does a basic serialization.
+
+See grl_media_serialize_extended() to get more serialization approaches.
 
-Since: 0.1.1
+Since: 0.1.6
 
 </description>
 <parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
+<parameter name="media">
+<parameter_description> a #GrlMedia
 </parameter_description>
 </parameter>
 </parameters>
-<return> the author of the @plugin
+<return> serialized media
 
 </return>
 </function>
 
-<function name="grl_media_plugin_get_description">
+<function name="grl_media_serialize_extended">
 <description>
-Get the description of the plugin
+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).
 
-Since: 0.1.1
+Since: 0.1.6
 
 </description>
 <parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
+<parameter name="media">
+<parameter_description> a #GrlMedia
+</parameter_description>
+</parameter>
+<parameter name="serial_type">
+<parameter_description> type of serialization
+</parameter_description>
+</parameter>
+<parameter name="Varargs">
+<parameter_description> media keys to serialize
 </parameter_description>
 </parameter>
 </parameters>
-<return> the description of the @plugin
+<return> serialized media
 
 </return>
 </function>
 
-<function name="grl_media_plugin_get_filename">
+<function name="grl_media_set_author">
 <description>
-Get the filename containing the plugin
+Set the media's author
 
-Since: 0.1.6
+Since: 0.1.4
 
 </description>
 <parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
+<parameter name="media">
+<parameter_description> the media
+</parameter_description>
+</parameter>
+<parameter name="author">
+<parameter_description> the media's author
 </parameter_description>
 </parameter>
 </parameters>
-<return> the filename containing @plugin
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_plugin_get_id">
+<function name="grl_media_set_camera_model">
 <description>
-Get the id of the plugin
+Set the camera_model of the image
 
-Since: 0.1.1
+Since: 0.1.12
 
 </description>
 <parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
+<parameter name="image">
+<parameter_description> the image instance
+</parameter_description>
+</parameter>
+<parameter name="camera_model">
+<parameter_description> model of camera used to take picture
 </parameter_description>
 </parameter>
 </parameters>
-<return> the id of the @plugin
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_plugin_get_info">
+<function name="grl_media_set_certificate">
 <description>
-Get the information of the @plugin that is associated with the given key
-
-Since: 0.1.6
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> a key representing information about this plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the information assigned to the given @key or NULL if there is no such information
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_info_keys">
-<description>
-Returns a list of keys that can be queried to retrieve information about the
-plugin.
-
-Since: 0.1.6
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return>
-a #GList of strings containing the keys. The content of the list is
-owned by the plugin and should not be modified or freed. Use g_list_free()
-when done using the list.
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_license">
-<description>
-Get the license of the plugin
-
-Since: 0.1.1
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the license of the @plugin
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_name">
-<description>
-Get the name of the plugin
-
-Since: 0.1.1
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the name of the @plugin
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_rank">
-<description>
-Get the #GrlPluginRank of the plugin
-
-Since: 0.1.3
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the rank of the plugin
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_site">
-<description>
-Get the site of the plugin
-
-Since: 0.1.1
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the site of the @plugin
-
-</return>
-</function>
-
-<function name="grl_media_plugin_get_version">
-<description>
-Get the version of the plugin
-
-Since: 0.1.1
-
-</description>
-<parameters>
-<parameter name="plugin">
-<parameter_description> a plugin
-</parameter_description>
-</parameter>
-</parameters>
-<return> the version of the @plugin
-
-</return>
-</function>
-
-<function name="grl_media_serialize">
-<description>
-Serializes a GrlMedia into a string. It does a basic serialization.
-
-See grl_media_serialize_extended() to get more serialization approaches.
-
-Since: 0.1.6
-
-</description>
-<parameters>
-<parameter name="media">
-<parameter_description> a #GrlMedia
-</parameter_description>
-</parameter>
-</parameters>
-<return> serialized media
-
-</return>
-</function>
-
-<function name="grl_media_serialize_extended">
-<description>
-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).
-
-Since: 0.1.6
-
-</description>
-<parameters>
-<parameter name="media">
-<parameter_description> a #GrlMedia
-</parameter_description>
-</parameter>
-<parameter name="serial_type">
-<parameter_description> type of serialization
-</parameter_description>
-</parameter>
-<parameter name="Varargs">
-<parameter_description> media keys to serialize
-</parameter_description>
-</parameter>
-</parameters>
-<return> serialized media
-
-</return>
-</function>
-
-<function name="grl_media_set_author">
-<description>
-Set the media's author
-
-Since: 0.1.4
-
-</description>
-<parameters>
-<parameter name="media">
-<parameter_description> the media
-</parameter_description>
-</parameter>
-<parameter name="author">
-<parameter_description> the media's author
-</parameter_description>
-</parameter>
-</parameters>
-<return></return>
-</function>
-
-<function name="grl_media_set_camera_model">
-<description>
-Set the camera_model of the image
-
-Since: 0.1.12
-
-</description>
-<parameters>
-<parameter name="image">
-<parameter_description> the image instance
-</parameter_description>
-</parameter>
-<parameter name="camera_model">
-<parameter_description> model of camera used to take picture
-</parameter_description>
-</parameter>
-</parameters>
-<return></return>
-</function>
-
-<function name="grl_media_set_certificate">
-<description>
-Set the media certificate
+Set the media certificate
 
 Since: 0.1.6
 
@@ -3181,7 +3430,7 @@ Since: 0.1.6
 <description>
 Set the creation_date of the media
 
-Since: 0.1.12
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -3339,26 +3588,6 @@ Since: 0.1.4
 <return></return>
 </function>
 
-<function name="grl_media_set_iso_speed">
-<description>
-Set the iso_speed of the image
-
-Since: 0.1.12
-
-</description>
-<parameters>
-<parameter name="image">
-<parameter_description> the image instance
-</parameter_description>
-</parameter>
-<parameter name="iso_speed">
-<parameter_description> picture's iso speed
-</parameter_description>
-</parameter>
-</parameters>
-<return></return>
-</function>
-
 <function name="grl_media_set_last_played">
 <description>
 Set the media last played date
@@ -3443,6 +3672,7 @@ Since: 0.1.4
 <description>
 Set the modification date of the media
 
+Since: 0.2.0
 
 </description>
 <parameters>
@@ -3458,26 +3688,6 @@ Set the modification date of the media
 <return></return>
 </function>
 
-<function name="grl_media_set_orientation">
-<description>
-Set the orientation of the image
-
-Since: 0.1.12
-
-</description>
-<parameters>
-<parameter name="image">
-<parameter_description> the image instance
-</parameter_description>
-</parameter>
-<parameter name="orientation">
-<parameter_description> degrees clockwise orientation of the picture
-</parameter_description>
-</parameter>
-</parameters>
-<return></return>
-</function>
-
 <function name="grl_media_set_play_count">
 <description>
 Set the media play count
@@ -3502,6 +3712,8 @@ Since: 0.1.4
 <description>
 Set the publication date of @media.
 
+Since: 0.2.0
+
 </description>
 <parameters>
 <parameter name="media">
@@ -3518,7 +3730,8 @@ Set the publication date of @media.
 
 <function name="grl_media_set_rating">
 <description>
-This method receives a rating and its scale and normalizes it
+This method receives a rating and its scale and normalizes it on a scale
+from 0...5 to match the usual five-star rating.
 
 Since: 0.1.5
 
@@ -3542,7 +3755,8 @@ Since: 0.1.5
 
 <function name="grl_media_set_site">
 <description>
-Set the media's site
+Set the media's site. A site is a website about the media such as a
+studio's promotional website for a movie.
 
 Since: 0.1.4
 
@@ -3708,495 +3922,519 @@ Since: 0.1.10
 <return></return>
 </function>
 
-<function name="grl_media_source_browse">
+<function name="grl_media_unserialize">
 <description>
-Get the media containers and items that are in @container.
+Unserializes a GrlMedia.
 
-This method is asynchronous.
+Since: 0.1.6
 
-Since: 0.1.4
+</description>
+<parameters>
+<parameter name="serial">
+<parameter_description> a serialized media
+</parameter_description>
+</parameter>
+</parameters>
+<return> the GrlMedia from the serial
+
+</return>
+</function>
+
+<function name="grl_media_video_add_url_data">
+<description>
+Sets all the keys related with the URL of a media resource and adds it to
+ video (useful for resources with more than one URL).
+
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="container">
-<parameter_description> a container of data transfer objects
+<parameter name="url">
+<parameter_description> a video's url
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
+<parameter name="mime">
+<parameter_description> video mime-type
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="framerate">
+<parameter_description> video framerate, or -1 to ignore
 </parameter_description>
 </parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="width">
+<parameter_description> video width, or -1 to ignore
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+<parameter name="height">
+<parameter_description> video height, or -1 to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_source_browse_sync">
+<function name="grl_media_video_get_episode">
 <description>
-Get the media containers and items that are in @container.
-
-This method is synchronous.
-
-Since: 0.1.6
+Since: 0.1.11
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="container">
-<parameter_description> a container of data transfer objects
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+</parameters>
+<return> the episode number of the video
+
+</return>
+</function>
+
+<function name="grl_media_video_get_framerate">
+<description>
+Since: 0.1.4
+
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList with #GrlMedia
-elements. After use g_object_unref() every element and g_list_free() the
-list.
+<return> the framerate of the video
 
 </return>
 </function>
 
-<function name="grl_media_source_get_auto_split_threshold">
+<function name="grl_media_video_get_height">
 <description>
-TBD
-
-Since: 0.1.1
+Since: 0.1.4
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the assigned threshold
+<return> the height of the video
 
 </return>
 </function>
 
-<function name="grl_media_source_get_media_from_uri">
+<function name="grl_media_video_get_season">
 <description>
-Creates an instance of #GrlMedia representing the media resource
-exposed at @uri.
+Since: 0.1.11
 
-It is recommended to call grl_media_source_test_media_from_uri() before
-invoking this to check whether the target source can theoretically do the
-resolution.
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
+</parameter_description>
+</parameter>
+</parameters>
+<return> the season number of the video
 
-This method is asynchronous.
+</return>
+</function>
 
-Since: 0.1.14
+<function name="grl_media_video_get_show">
+<description>
+Since: 0.1.11
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="uri">
-<parameter_description> A URI that can be used to identify a media resource
+</parameters>
+<return> the show title of the video
+
+</return>
+</function>
+
+<function name="grl_media_video_get_url_data">
+<description>
+Since: 0.1.10
+
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> A list of keys to resolve
+<parameter name="mime">
+<parameter_description> the url mime-type, or %NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="framerate">
+<parameter_description> the url framerate, or %NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="width">
+<parameter_description> the url width, or %NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+<parameter name="height">
+<parameter_description> the url height, or %NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
+<return> all the keys related with the URL of a video resource in one go.
 
 </return>
 </function>
 
-<function name="grl_media_source_get_media_from_uri_sync">
+<function name="grl_media_video_get_url_data_nth">
 <description>
-Creates an instance of #GrlMedia representing the media resource
-exposed at @uri.
-
-It is recommended to call grl_media_source_test_media_from_uri() before
-invoking this to check whether the target source can theoretically do the
-resolution.
-
-This method is synchronous.
-
-Since: 0.1.8
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="uri">
-<parameter_description> A URI that can be used to identify a media resource
+<parameter name="index">
+<parameter_description> element to retrieve
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> A list of keys to resolve
+<parameter name="mime">
+<parameter_description> the url mime-type, or %NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="framerate">
+<parameter_description> the url framerate, or %NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="width">
+<parameter_description> the url width, or %NULL to ignore
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> the url height, or %NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> a filled #GrlMedia
+<return> all the keys related with the URL number @index of a video resource
+in one go.
 
 </return>
 </function>
 
-<function name="grl_media_source_metadata">
+<function name="grl_media_video_get_width">
 <description>
-This method is intended to fetch the requested keys of metadata of
-a given @media to the media source.
-
-This method is asynchronous.
-
-Since: 0.1.6
+Since: 0.1.4
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a data transfer object
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
-</parameter_description>
-</parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
+<return> the width of the video
 
 </return>
 </function>
 
-<function name="grl_media_source_metadata_sync">
+<function name="grl_media_video_new">
 <description>
-This method is intended to fetch the requested keys of metadata of
-a given @media to the media source.
+Creates a new data video object.
 
-This method is synchronous.
+Since: 0.1.4
 
-Since: 0.1.6
+</description>
+<parameters>
+</parameters>
+<return> a newly-allocated data video.
+
+</return>
+</function>
+
+<function name="grl_media_video_set_episode">
+<description>
+Sets the episode number of the video
+
+Since: 0.1.11
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a data transfer object
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
+<parameter name="episode">
+<parameter_description> the video's episode
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_media_video_set_framerate">
+<description>
+Set the framerate of the video
+
+Since: 0.1.4
+
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="framerate">
+<parameter_description> the video's framerate
 </parameter_description>
 </parameter>
 </parameters>
-<return> a filled #GrlMedia
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_source_notify_change">
+<function name="grl_media_video_set_height">
 <description>
-Emits &quot;content-changed&quot; signal to notify subscribers that a change ocurred
-in @source.
+Set the height of the video
 
-See #grl_media_source_notify_change_list() function.
+Since: 0.1.4
 
-&lt;note&gt;
-&lt;para&gt;
-This function is intended to be used only by plugins.
-&lt;/para&gt;
-&lt;/note&gt;
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> the video's height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
 
-Since: 0.1.9
+<function name="grl_media_video_set_season">
+<description>
+Sets the season number of the video
+
+Since: 0.1.11
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="media">
-<parameter_description> the media which has changed, or @NULL to use the root box.
+<parameter name="season">
+<parameter_description> the video's season
 </parameter_description>
 </parameter>
-<parameter name="change_type">
-<parameter_description> the type of change
+</parameters>
+<return></return>
+</function>
+
+<function name="grl_media_video_set_show">
+<description>
+Sets the show title of the video
+
+Since: 0.1.11
+
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="location_unknown">
-<parameter_description> if change has happened in @media or any descendant
+<parameter name="show">
+<parameter_description> the video's show name
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_source_notify_change_list">
+<function name="grl_media_video_set_size">
 <description>
-Emits &quot;content-changed&quot; signal to notify subscribers that a change ocurred
-in @source.
+Set the width and the height of the video
 
-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.
+Since: 0.1.4
 
-See GrlMediaSource::content-changed signal.
+</description>
+<parameters>
+<parameter name="video">
+<parameter_description> the media instance
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> the video's width
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> the video's height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
 
-&lt;note&gt;
-&lt;para&gt;
-This function is intended to be used only by plugins.
-&lt;/para&gt;
-&lt;/note&gt;
+<function name="grl_media_video_set_url_data">
+<description>
+Sets all the keys related with the URL of a video resource in one go.
 
-Since: 0.1.14
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="changed_medias">
-<parameter_description>: the list of
-medias that have changed
+<parameter name="url">
+<parameter_description> the video's url
 </parameter_description>
 </parameter>
-<parameter name="change_type">
-<parameter_description> the type of change
+<parameter name="mime">
+<parameter_description> video mime-type
 </parameter_description>
 </parameter>
-<parameter name="location_unknown">
-<parameter_description> if change has happpened in @media or any descendant
+<parameter name="framerate">
+<parameter_description> video framerate, or -1 to ignore
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> video width, or -1 to ignore
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> video height, or -1 to ignore
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_source_notify_change_start">
+<function name="grl_media_video_set_width">
 <description>
-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.
+Set the width of the video
 
-Since: 0.1.9
+Since: 0.1.4
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="video">
+<parameter_description> the media instance
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="width">
+<parameter_description> the video's width
 </parameter_description>
 </parameter>
 </parameters>
-<return> @TRUE if initialization has succeed.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_source_notify_change_stop">
+<function name="grl_metadata_key_get_desc">
 <description>
-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.
+Retrieves the description associated with the key
 
-Since: 0.1.9
+Since: 0.1.6
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="key">
+<parameter_description> key to look up
 </parameter_description>
 </parameter>
 </parameters>
-<return> @TRUE if stop has succeed.
+<return> the description of the key
 
 </return>
 </function>
 
-<function name="grl_media_source_query">
+<function name="grl_metadata_key_get_name">
 <description>
-Execute a specialized query (specific for each provider) on a media
-repository.
-
-It is different from grl_media_source_search() semantically, because
-the query implies a carefully crafted string, rather than a simple
-string to search.
-
-This method is asynchronous.
+Retrieves the name associated with the key
 
-Since: 0.1.1
+Since: 0.1.6
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="query">
-<parameter_description> the query to process
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
-</parameter_description>
-</parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="key">
+<parameter_description> key to look up
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+</parameters>
+<return> The name of the key
+
+</return>
+</function>
+
+<function name="grl_metadata_key_get_type">
+<description>
+Retrieves the expected type for values associated with this key
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> key to look up
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
+<return> the expected value type
 
 </return>
 </function>
 
-<function name="grl_media_source_query_sync">
+<function name="grl_metadata_key_list_new">
 <description>
-Execute a specialized query (specific for each provider) on a media
-repository.
-
-This method is synchronous.
+Returns a #GList containing the va_list keys. Use #GRL_METADATA_KEY_INVALID
+to finalize them.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="query">
-<parameter_description> the query to process
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="first_key">
+<parameter_description> first key
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="Varargs">
+<parameter_description> va_list keys
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList with #GrlMedia
-elements. After use g_object_unref() every element and g_list_free() the
-list.
+<return> a #GList
 
 </return>
 </function>
 
-<function name="grl_media_source_remove">
+<function name="grl_multiple_get_media_from_uri">
 <description>
-Remove a @media from the @source repository.
+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.
 
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="uri">
+<parameter_description> A URI that can be used to identify a media resource
 </parameter_description>
 </parameter>
-<parameter name="media">
-<parameter_description> a data transfer object
+<parameter name="keys">
+<parameter_description> List of metadata keys we want to obtain.
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
 </parameter_description>
 </parameter>
 <parameter name="callback">
@@ -4204,66 +4442,39 @@ Since: 0.1.4
 </parameter_description>
 </parameter>
 <parameter name="user_data">
-<parameter_description> the user data to pass in the callback
-</parameter_description>
-</parameter>
-</parameters>
-<return></return>
-</function>
-
-<function name="grl_media_source_remove_sync">
-<description>
-Remove a @media from the @source repository.
-
-This method is synchronous.
-
-Since: 0.1.6
-
-</description>
-<parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a data transfer object
-</parameter_description>
-</parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter_description> the user data to pass to the user callback
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_source_search">
+<function name="grl_multiple_search">
 <description>
-Search for the @text string in a media source for data identified with
-that string.
+Search for @text in all the sources specified in @sources.
 
-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.
+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.
 
-Since: 0.1.1
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="sources">
+<parameter_description>
+a #GList of #GrlSource&lt;!-- --&gt;s to search from (%NULL for all
+searchable sources)
 </parameter_description>
 </parameter>
 <parameter name="text">
-<parameter_description> the text to search
+<parameter_description> the text to search for
 </parameter_description>
 </parameter>
 <parameter name="keys">
 <parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
+#GrlKeyID to retrieve
 </parameter_description>
 </parameter>
 <parameter name="options">
@@ -4275,7 +4486,7 @@ Since: 0.1.1
 </parameter_description>
 </parameter>
 <parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+<parameter_description> the user data to pass to the user callback
 </parameter_description>
 </parameter>
 </parameters>
@@ -4284,33 +4495,29 @@ Since: 0.1.1
 </return>
 </function>
 
-<function name="grl_media_source_search_sync">
+<function name="grl_multiple_search_sync">
 <description>
-Search for the @text string in a media 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.
+Search for @text in all the sources specified in @sources.
 
 This method is synchronous.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="sources">
+<parameter_description>
+a #GList of #GrlSource&lt;!-- --&gt;s where to search from (%NULL for all
+available sources with search capability)
 </parameter_description>
 </parameter>
 <parameter name="text">
-<parameter_description> the text to search
+<parameter_description> the text to search for
 </parameter_description>
 </parameter>
 <parameter name="keys">
 <parameter_description> the #GList of
-#GrlKeyID&lt;!-- --&gt;s to request
+#GrlKeyID to retrieve
 </parameter_description>
 </parameter>
 <parameter name="options">
@@ -4322,2659 +4529,2937 @@ Since: 0.1.6
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList with #GrlMedia
-elements. After use g_object_unref() every element and g_list_free() the
-list.
+<return> a list with #GrlMedia elements
 
 </return>
 </function>
 
-<function name="grl_media_source_set_auto_split_threshold">
+<function name="grl_operation_cancel">
 <description>
-TBD
-
-Since: 0.1.1
+Cancel an operation.
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="threshold">
-<parameter_description> the threshold to request
+<parameter name="operation_id">
+<parameter_description> the identifier of a running operation
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_source_store">
+<function name="grl_operation_get_data">
 <description>
-Store the @media into the @parent container
-
-This method is asynchronous.
+Obtains the previously attached data
 
-Since: 0.1.4
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="parent">
-<parameter_description> a parent to store the data transfer objects
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a data transfer object
-</parameter_description>
-</parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="operation_id">
+<parameter_description> the identifier of a running operation
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass in the callback
+</parameters>
+<return> The previously attached data.
+</return>
+</function>
+
+<function name="grl_operation_options_copy">
+<description>
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> a new #GrlOperationOptions instance with its values being copies of
+the values of @options.
+
+</return>
 </function>
 
-<function name="grl_media_source_store_sync">
+<function name="grl_operation_options_get_count">
 <description>
-Store the @media into the @parent container.
-
-This method is synchronous.
+Get the count option, that is, the number of elements to retrieve in an
+operation done with @options.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
-</parameter_description>
-</parameter>
-<parameter name="parent">
-<parameter_description> a #GrlMediaBox to store the data transfer objects
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a #GrlMedia data transfer object
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+</parameters>
+<return> the value of the count option, or a default value if it is not set.
+
+</return>
+</function>
+
+<function name="grl_operation_options_get_flags">
+<description>
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> resolution flags of @options.
+
+</return>
 </function>
 
-<function name="grl_media_source_test_media_from_uri">
+<function name="grl_operation_options_get_key_filter">
 <description>
-Tests whether @source can instantiate a #GrlMedia object representing
-the media resource exposed at @uri.
-
-Since: 0.1.7
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a media source
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="uri">
-<parameter_description> A URI that can be used to identify a media resource
+<parameter name="key">
+<parameter_description>
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if it can, %FALSE otherwise.
-
-This method is synchronous.
+<return> the filter
 
 </return>
 </function>
 
-<function name="grl_media_unserialize">
+<function name="grl_operation_options_get_key_filter_list">
 <description>
-Unserializes a GrlMedia.
-
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="serial">
-<parameter_description> a serialized media
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the GrlMedia from the serial
+<return>
 
 </return>
 </function>
 
-<function name="grl_media_video_add_url_data">
+<function name="grl_operation_options_get_key_range_filter">
 <description>
-Sets all the keys related with the URL of a media resource and adds it to
- video (useful for resources with more than one URL).
+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.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
-</parameter_description>
-</parameter>
-<parameter name="url">
-<parameter_description> a video's url
-</parameter_description>
-</parameter>
-<parameter name="mime">
-<parameter_description> video mime-type
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="framerate">
-<parameter_description> video framerate, or -1 to ignore
+<parameter name="key">
+<parameter_description> a #GrlkeyId
 </parameter_description>
 </parameter>
-<parameter name="width">
-<parameter_description> video width, or -1 to ignore
+<parameter name="min_value">
+<parameter_description> the minimum value for the range
 </parameter_description>
-</parameter>
-<parameter name="height">
-<parameter_description> video height, or -1 to ignore
+</parameter>
+<parameter name="max_value">
+<parameter_description> the maximum value for the range
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_video_get_episode">
+<function name="grl_operation_options_get_key_range_filter_list">
 <description>
-Since: 0.1.11
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the episode number of the video
+<return>
 
 </return>
 </function>
 
-<function name="grl_media_video_get_framerate">
+<function name="grl_operation_options_get_skip">
 <description>
-Since: 0.1.4
+Get the skip option, that is, the number of elements to skip before
+retrieving media items in an operation done with @options.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the framerate of the video
+<return> the value of the skip option, or a default value if it is not set.
 
 </return>
 </function>
 
-<function name="grl_media_video_get_height">
+<function name="grl_operation_options_get_type_filter">
 <description>
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> the height of the video
+<return> resolution flags of @options
 
 </return>
 </function>
 
-<function name="grl_media_video_get_season">
+<function name="grl_operation_options_key_is_set">
 <description>
-Since: 0.1.11
+This is an internal method that shouldn't be used outside of Grilo.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> an operation option key
 </parameter_description>
 </parameter>
 </parameters>
-<return> the season number of the video
+<return> whether @key is set in @options.
 
 </return>
 </function>
 
-<function name="grl_media_video_get_show">
+<function name="grl_operation_options_new">
 <description>
-Since: 0.1.11
+Creates a new GrlOperationOptions object.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="caps">
+<parameter_description> caps that options will have to match. If %NULL, all
+options will be accepted.
 </parameter_description>
 </parameter>
 </parameters>
-<return> the show title of the video
+<return> a new GrlOperationOptions instance.
 
 </return>
 </function>
 
-<function name="grl_media_video_get_url_data">
+<function name="grl_operation_options_obey_caps">
 <description>
-Since: 0.1.10
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
-</parameter_description>
-</parameter>
-<parameter name="mime">
-<parameter_description> the url mime-type, or %NULL to ignore
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="framerate">
-<parameter_description> the url framerate, or %NULL to ignore
+<parameter name="caps">
+<parameter_description> capabilities against which we want to test @options
 </parameter_description>
 </parameter>
-<parameter name="width">
-<parameter_description> the url width, or %NULL to ignore
+<parameter name="supported_options">
+<parameter_description> if not %NULL, will contain a
+newly-allocated #GrlOperationOptions instance containing all the values of
+ options that match @caps.
 </parameter_description>
 </parameter>
-<parameter name="height">
-<parameter_description> the url height, or %NULL to ignore
+<parameter name="unsupported_options">
+<parameter_description> if not %NULL, will contain a
+newly-allocated #GrlOperationOptions instance containing all the values of
+ options that do not match @caps.
 </parameter_description>
 </parameter>
 </parameters>
-<return> all the keys related with the URL of a video resource in one go.
+<return> %TRUE if @options obey to @caps, %FALSE otherwise.
 
 </return>
 </function>
 
-<function name="grl_media_video_get_url_data_nth">
+<function name="grl_operation_options_set_count">
 <description>
-Since: 0.1.10
+Set the count option for an operation. Will only succeed if @count obey to
+the inherent capabilities of @options.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
-</parameter_description>
-</parameter>
-<parameter name="index">
-<parameter_description> element to retrieve
-</parameter_description>
-</parameter>
-<parameter name="mime">
-<parameter_description> the url mime-type, or %NULL to ignore
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="framerate">
-<parameter_description> the url framerate, or %NULL to ignore
+<parameter name="count">
+<parameter_description> number of elements to retrieve in an operation
 </parameter_description>
 </parameter>
-<parameter name="width">
-<parameter_description> the url width, or %NULL to ignore
+</parameters>
+<return> %TRUE if @count could be set, %FALSE otherwise.
+
+</return>
+</function>
+
+<function name="grl_operation_options_set_flags">
+<description>
+Set the resolution flags for an operation. Will only succeed if @flags obey
+to the inherent capabilities of @options.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="height">
-<parameter_description> the url height, or %NULL to ignore
+<parameter name="flags">
+<parameter_description> the resolution flags to be set for an operation. See
+#GrlMetadataResolutionFlags for possible values.
 </parameter_description>
 </parameter>
 </parameters>
-<return> all the keys related with the URL number @index of a video resource
-in one go.
+<return> %TRUE if @flags could be set, %FALSE otherwise.
 
 </return>
 </function>
 
-<function name="grl_media_video_get_width">
+<function name="grl_operation_options_set_key_filter_dictionary">
 <description>
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
+</parameter_description>
+</parameter>
+<parameter name="filters">
+<parameter_description>
 </parameter_description>
 </parameter>
 </parameters>
-<return> the width of the video
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_media_video_new">
+<function name="grl_operation_options_set_key_filter_value">
 <description>
-Creates a new data video object.
+Set filter as &quot;@key == @value&quot;.
 
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a #GrlKeyID
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> a #GValue
+</parameter_description>
+</parameter>
 </parameters>
-<return> a newly-allocated data video.
+<return> %TRUE on success
 
 </return>
 </function>
 
-<function name="grl_media_video_set_episode">
+<function name="grl_operation_options_set_key_filters">
 <description>
-Sets the episode number of the video
+Set filter as &quot;k1 == v1 AND k2 == v2 AND ...&quot;
 
-Since: 0.1.11
+&lt;example&gt;
+Elements from album &quot;Frozen&quot; with a bitrate of 256kbs.
+&lt;programlisting&gt;
+grl_operation_options_set_key_filters (my_options,
+GRL_METADATA_KEY_ALBUM, &quot;Frozen&quot;,
+GRL_METADATA_KEY_BITRATE, 256,
+NULL);
+&lt;/programlisting&gt;
+&lt;/example&gt;
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="episode">
-<parameter_description> the video's episode
+<parameter name="Varargs">
+<parameter_description> pairs of #GrlKeyID, value
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE on success
+
+</return>
 </function>
 
-<function name="grl_media_video_set_framerate">
+<function name="grl_operation_options_set_key_range_filter">
 <description>
-Set the framerate of the video
+Set filter as &quot;min1 &lt;= k1 &lt;= max1 AND min2 &lt;= k2 &lt;= max2 AND ...&quot;
 
-Since: 0.1.4
+The range can be open if some of the minX, maxX values are %NULL.
+
+&lt;example&gt;
+Album must start with &quot;T&quot; and the bitrate should be 256kbs or greater.
+&lt;programlisting&gt;
+grl_operation_options_set_key_range_filters (my_options,
+GRL_METADATA_KEY_ALBUM, &quot;Ta&quot;, &quot;Tz&quot;,
+GRL_METADATA_KEY_BITRATE, 256, NULL,
+NULL);
+&lt;/programlisting&gt;
+&lt;/example&gt;
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="framerate">
-<parameter_description> the video's framerate
+<parameter name="Varargs">
+<parameter_description> triplets of #GrlKeyID, minvalue, maxvalue
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE on success
+
+</return>
 </function>
 
-<function name="grl_media_video_set_height">
+<function name="grl_operation_options_set_key_range_filter_value">
 <description>
-Set the height of the video
+Set filter as &quot;@min_value &lt;= @key &lt;= @max_value&quot;.
 
-Since: 0.1.4
+If @min_value is %NULL, then filter is &quot;@key &lt;= @max_value&quot;.
+
+If @max_value is %NULL, then filter is &quot;@key &gt;= @min_value&quot;.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="height">
-<parameter_description> the video's height
+<parameter name="key">
+<parameter_description> a #GrlKeyId
+</parameter_description>
+</parameter>
+<parameter name="min_value">
+<parameter_description> minimum value for range
+</parameter_description>
+</parameter>
+<parameter name="max_value">
+<parameter_description> maximum value for range
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE on success
+
+</return>
 </function>
 
-<function name="grl_media_video_set_season">
+<function name="grl_operation_options_set_skip">
 <description>
-Sets the season number of the video
+Set the skip option for an operation. Will only succeed if @skip obeys to the
+inherent capabilities of @options.
 
-Since: 0.1.11
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="season">
-<parameter_description> the video's season
+<parameter name="skip">
+<parameter_description> number of elements to skip in an operation
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE if @skip could be set, %FALSE otherwise.
+
+</return>
 </function>
 
-<function name="grl_media_video_set_show">
+<function name="grl_operation_options_set_type_filter">
 <description>
-Sets the show title of the video
+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.
 
-Since: 0.1.11
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="options">
+<parameter_description> a #GrlOperationOptions instance
 </parameter_description>
 </parameter>
-<parameter name="show">
-<parameter_description> the video's show name
+<parameter name="filter">
+<parameter_description> the type of media to get
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE if @flags could be set, %FALSE otherwise
+
+</return>
 </function>
 
-<function name="grl_media_video_set_size">
+<function name="grl_operation_set_data">
 <description>
-Set the width and the height of the video
-
-Since: 0.1.4
+Attach a pointer to the specific operation.
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
-</parameter_description>
-</parameter>
-<parameter name="width">
-<parameter_description> the video's width
+<parameter name="operation_id">
+<parameter_description> the identifier of a running operation
 </parameter_description>
 </parameter>
-<parameter name="height">
-<parameter_description> the video's height
+<parameter name="user_data">
+<parameter_description> the data to attach
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_media_video_set_url_data">
+<function name="grl_paging_translate">
 <description>
-Sets all the keys related with the URL of a video resource in one go.
+Grilo browsing implements a paging mechanism through @skip and @count values.
 
-Since: 0.1.10
+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.
+
+Since: 0.1.6
 
 </description>
 <parameters>
-<parameter name="video">
-<parameter_description> the media instance
-</parameter_description>
-</parameter>
-<parameter name="url">
-<parameter_description> the video's url
-</parameter_description>
-</parameter>
-<parameter name="mime">
-<parameter_description> video mime-type
+<parameter name="skip">
+<parameter_description> number of elements to skip
 </parameter_description>
 </parameter>
-<parameter name="framerate">
-<parameter_description> video framerate, or -1 to ignore
+<parameter name="count">
+<parameter_description> number of elements to retrieve
 </parameter_description>
 </parameter>
-<parameter name="width">
-<parameter_description> video width, or -1 to ignore
+<parameter name="max_page_size">
+<parameter_description> maximum value for page size
 </parameter_description>
 </parameter>
-<parameter name="height">
-<parameter_description> video height, or -1 to ignore
+<parameter name="page_size">
+<parameter_description> optimal page size
 </parameter_description>
 </parameter>
-</parameters>
-<return></return>
-</function>
-
-<function name="grl_media_video_set_width">
-<description>
-Set the width of the video
-
-Since: 0.1.4
-
-</description>
-<parameters>
-<parameter name="video">
-<parameter_description> the media instance
+<parameter name="page_number">
+<parameter_description> page which contain the first element to retrieve (starting at 1)
 </parameter_description>
 </parameter>
-<parameter name="width">
-<parameter_description> the video's width
+<parameter name="internal_offset">
+<parameter_description> in the @page_number, offset where first element can be found (starting at 0)
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_metadata_key_get_desc">
+<function name="grl_plugin_get_author">
 <description>
-Retrieves the description associated with the key
+Get the author of the plugin
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="key">
-<parameter_description> key to look up
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> the description of the key
+<return> the author of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_key_get_name">
+<function name="grl_plugin_get_description">
 <description>
-Retrieves the name associated with the key
+Get the description of the plugin
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="key">
-<parameter_description> key to look up
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> The name of the key
+<return> the description of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_key_get_type">
+<function name="grl_plugin_get_filename">
 <description>
-Retrieves the expected type for values associated with this key
+Get the filename containing the plugin
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="key">
-<parameter_description> key to look up
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> the expected value type
+<return> the filename containing @plugin
+
 </return>
 </function>
 
-<function name="grl_metadata_key_list_new">
+<function name="grl_plugin_get_id">
 <description>
-Returns a #GList containing the va_list keys. Use #GRL_METADATA_KEY_INVALID
-to finalize them.
+Get the id of the plugin
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="first_key">
-<parameter_description> first key
-</parameter_description>
-</parameter>
-<parameter name="Varargs">
-<parameter_description> va_list keys
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList
-</return>
-</function>
-
-<function name="grl_metadata_source_expand_operation_keys">
-<description>
-Will add to @keys the keys that should be asked to @source when
-doing an operation with GRL_RESOLVE_FULL.
-
-The added keys are the keys that will be needed by other sources to
-obtain the ones that @source says it cannot resolve.
+<return> the id of the @plugin
 
-</description>
-<parameters>
-</parameters>
-<return></return>
+</return>
 </function>
 
-<function name="grl_metadata_source_filter_slow">
+<function name="grl_plugin_get_info">
 <description>
-This function does the opposite of other filter functions: removes the slow
-keys from @keys. If @return_filtered is %TRUE the removed slow keys are
-returned in a new list.
+Get the information of the @plugin that is associated with the given key
 
-Since: 0.1.1
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description>
-the list of keys to filter out
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
-<parameter name="return_filtered">
-<parameter_description> if %TRUE the return value shall be a new list with
-the slow keys
+<parameter name="key">
+<parameter_description> a key representing information about this plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> if
- return_filtered is %TRUE will return the list of slow keys; otherwise
-%NULL
+<return> the information assigned to the given @key or NULL if there is no such information
 
 </return>
 </function>
 
-<function name="grl_metadata_source_filter_supported">
+<function name="grl_plugin_get_info_keys">
 <description>
-Compares the received @keys list with the supported key list by the
-metadata @source, and deletes those keys which are not supported.
+Returns a list of keys that can be queried to retrieve information about the
+plugin.
 
-Since: 0.1.1
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description>
-the list of keys to filter out
-</parameter_description>
-</parameter>
-<parameter name="return_filtered">
-<parameter_description> if %TRUE the return value shall be a new list with
-the unsupported keys
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
 <return>
-if @return_filtered is %TRUE will return the list of removed keys;
-otherwise %NULL
+a #GList of strings containing the keys. The content of the list is
+owned by the plugin and should not be modified or freed. Use g_list_free()
+when done using the list.
 
 </return>
 </function>
 
-<function name="grl_metadata_source_filter_writable">
+<function name="grl_plugin_get_license">
 <description>
-Similar to grl_metadata_source_filter_supported() but applied to
-the writable keys in grl_metadata_source_writable_keys().
-
-Filter the @keys list keeping only those keys that are writtable in
- source  If @return_filtered is %TRUE then the removed keys are returned in a
-new list.
+Get the license of the plugin
 
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description>
-the list of keys to filter out
-</parameter_description>
-</parameter>
-<parameter name="return_filtered">
-<parameter_description> if %TRUE the return value shall be a new list with
-the non-writable keys
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return>
-if @return_filtered is %TRUE will return the list of non-writtable keys;
-otherwise %NULL
+<return> the license of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_source_get_additional_sources">
-<description>
-Find the sources that should be queried to add @keys to @media.
-
-If @additional_keys is provided, the result may include sources
-that need more metadata to be present in @media, the keys
-corresponding to that metadata will be put in @additional_keys.
-
-If @additional_keys is NULL, will only consider sources that can
-resolve @keys immediately
-
-If @main_source_is_only_resolver is TRUE and @additional_keys is
-not @NULL, only additional keys that can be resolved directly by
- source will be considered. Sources that need other additional keys
-will not be put in the returned list.
-
-Ignore elements of @keys that are already in @media.
-
-</description>
-<parameters>
-</parameters>
-<return></return>
-</function>
-
-<function name="grl_metadata_source_get_caps">
+<function name="grl_plugin_get_module">
 <description>
-Get the capabilities of @source for @operation.
+Gets the #GModule containing the plugin
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="operation">
-<parameter_description> a supported operation. Even though the type allows to specify
-several operations, only one should be provided here.
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> The capabilities
+<return> a #GModule
+
 </return>
 </function>
 
-<function name="grl_metadata_source_get_description">
+<function name="grl_plugin_get_name">
 <description>
-Since: 0.1.1
+Get the name of the plugin
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> the description of the @source
+<return> the name of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_source_get_id">
+<function name="grl_plugin_get_site">
 <description>
-Since: 0.1.1
+Get the site of the plugin
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> the ID of the @source
+<return> the site of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_source_get_name">
+<function name="grl_plugin_get_sources">
 <description>
-Since: 0.1.1
+Gets the sources belonging to @plugin.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
 </parameters>
-<return> the name of the @source
+<return> 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.
 
 </return>
 </function>
 
-<function name="grl_metadata_source_may_resolve">
+<function name="grl_plugin_get_version">
 <description>
-Checks whether @key_id may be resolved with @source for @media, so that the
-caller can avoid calling grl_metadata_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.
+Get the version of the plugin
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> a media on which we want more metadata
-</parameter_description>
-</parameter>
-<parameter name="key_id">
-<parameter_description> the key corresponding to a metadata we might want
-</parameter_description>
-</parameter>
-<parameter name="missing_keys">
-<parameter_description> an optional originally empty list
+<parameter name="plugin">
+<parameter_description> a plugin
 </parameter_description>
 </parameter>
-</parameters>
-<return> @TRUE if there's a possibility that @source resolves @key_id for
- media, @FALSE otherwise.
+</parameters>
+<return> the version of the @plugin
 
 </return>
 </function>
 
-<function name="grl_metadata_source_resolve">
+<function name="grl_registry_add_config">
 <description>
-This is the main method of the #GrlMetadataSource class. It will fetch the
-metadata of the requested keys.
-
-This function is asynchronous.
+Add a configuration for a plugin/source.
 
-Since: 0.1.14
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList
-of #GrlKeyID to retrieve
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> Transfer object where all the metadata is stored.
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options to pass to this operation
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="callback">
-<parameter_description> the callback to execute when the @media metadata is filled up
+<parameter name="config">
+<parameter_description> a configuration set
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> user data set for the @callback
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_metadata_source_resolve_sync">
+<function name="grl_registry_add_config_from_file">
 <description>
-This is the main method of the #GrlMetadataSource class. It will fetch the
-metadata of the requested keys.
-
-This function is synchronous.
+Load plugin configurations from a .ini-like config file.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList
-of #GrlKeyID to retrieve
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> Transfer object where all the metadata is stored
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options to pass to this operation
+<parameter name="config_file">
+<parameter_description> a key-value file containing the configuration
 </parameter_description>
 </parameter>
 <parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the updated #GrlMedia
+<return> %TRUE on success
 
 </return>
 </function>
 
-<function name="grl_metadata_source_set_metadata">
+<function name="grl_registry_add_directory">
 <description>
-This is the main method of the #GrlMetadataSource class. It will
-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.
+Set this path as part of default paths to load plugins.
 
-Since: 0.1.4
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> the #GrlMedia object that we want to operate on.
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> a list
-of #GrlKeyID whose values we want to change.
-</parameter_description>
-</parameter>
-<parameter name="flags">
-<parameter_description> Flags to configure specific behaviors of the operation.
-</parameter_description>
-</parameter>
-<parameter name="callback">
-<parameter_description> the callback to execute when the operation is finished.
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> user data set for the @callback
+<parameter name="path">
+<parameter_description> a path with plugins
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_metadata_source_set_metadata_sync">
+<function name="grl_registry_get_default">
 <description>
-This is the main method of the #GrlMetadataSource class. It will
-get the value for @key from @media and store it permanently. After
-calling this method, future queries that return this media object
-shall return this new value for the selected key.
-
-This function is synchronous.
+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.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
-</parameter_description>
-</parameter>
-<parameter name="media">
-<parameter_description> the #GrlMedia object that we want to operate on
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> a list of
-#GrlKeyID whose values we want to change
-</parameter_description>
-</parameter>
-<parameter name="flags">
-<parameter_description> Flags to configure specific behaviors of the operation.
-</parameter_description>
-</parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
-</parameter_description>
-</parameter>
 </parameters>
-<return>
-a #GList of keys that could not be updated, or @NULL
+<return> a new or an already created instance of the registry.
+
+It is NOT MT-safe
 
 </return>
 </function>
 
-<function name="grl_metadata_source_slow_keys">
+<function name="grl_registry_get_metadata_keys">
 <description>
-Similar to grl_metadata_source_supported_keys(), but this keys
-are marked as slow because of the amount of traffic/processing needed
-to fetch them.
+Returns a list with all registered keys in system.
 
-Since: 0.1.1
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList with the keys
+<return> 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.
 
 </return>
 </function>
 
-<function name="grl_metadata_source_supported_keys">
+<function name="grl_registry_get_plugins">
 <description>
-Get a list of #GrlKeyID, which describe a metadata types that this
-source can fetch and store.
+This function will return all the available plugins in the @registry.
 
-Since: 0.1.1
+If @only_loaded is %TRUE, the plugin list will contain only plugins that are
+loaded.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="only_loaded">
+<parameter_description> whether the returned list shall include only loaded plugins
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList with the keys
+<return> 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.
 
 </return>
 </function>
 
-<function name="grl_metadata_source_supported_operations">
+<function name="grl_registry_get_sources">
 <description>
-By default the derived objects of #GrlMetadataSource can only resolve.
+This function will return all the available sources in the @registry.
 
-Since: 0.1.1
+If @ranked is %TRUE, the source list will be ordered by rank.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="ranked">
+<parameter_description> whether the returned list shall be returned ordered by rank
 </parameter_description>
 </parameter>
 </parameters>
-<return> a bitwise mangle with the supported operations by
-the source
+<return> 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.
 
 </return>
 </function>
 
-<function name="grl_metadata_source_writable_keys">
+<function name="grl_registry_get_sources_by_operations">
 <description>
-Similar to grl_metadata_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.
+Give an array of all the available sources in the @registry capable of
+perform the operations requested in @ops.
 
-Since: 0.1.4
+If @ranked is %TRUE, the source list will be ordered by rank.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="source">
-<parameter_description> a metadata source
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="ops">
+<parameter_description> a bitwise mangle of the requested operations.
+</parameter_description>
+</parameter>
+<parameter name="ranked">
+<parameter_description> whether the returned list shall be returned ordered by rank
 </parameter_description>
 </parameter>
 </parameters>
-<return>
-a #GList with the keys
+<return> 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.
 
 </return>
 </function>
 
-<function name="grl_multiple_get_media_from_uri">
+<function name="grl_registry_load_all_plugins">
 <description>
-Goes though all available media sources until it finds one capable of
-constructing a GrlMedia object representing the media resource exposed
-by @uri.
+Load all the modules available in the default directory path.
 
-This method is asynchronous.
+The default directory path can be changed through the environment
+variable %GRL_PLUGIN_PATH and it can contain several paths separated
+by &quot;:&quot;
 
-Since: 0.1.7
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="uri">
-<parameter_description> A URI that can be used to identify a media resource
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> List of metadata keys we want to obtain.
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+</parameters>
+<return> %FALSE% is all the configured plugin paths are invalid,
+%TRUE% otherwise.
+
+</return>
+</function>
+
+<function name="grl_registry_load_plugin">
+<description>
+Loads a module from shared object file stored in @path
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="library_filename">
+<parameter_description> the path to the so file
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass to the user callback
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE if the module is loaded correctly
+
+</return>
 </function>
 
-<function name="grl_multiple_search">
+<function name="grl_registry_load_plugin_by_id">
 <description>
-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_media_source_search for more details).
+Loads plugin identified by @plugin_id.
 
-This method is asynchronous.
+This requires the XML plugin information file to define a &quot;module&quot; key with
+the name of the module that provides the plugin or the absolute path of the
+actual module file.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="sources">
-<parameter_description>
-a #GList of #GrlMediaSource&lt;!-- --&gt;s to search from (%NULL for all
-searchable sources)
-</parameter_description>
-</parameter>
-<parameter name="text">
-<parameter_description> the text to search for
-</parameter_description>
-</parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID to retrieve
-</parameter_description>
-</parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="callback">
-<parameter_description> the user defined callback
+<parameter name="plugin_id">
+<parameter_description> plugin identifier
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the user data to pass to the user callback
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the operation identifier
+<return> %TRUE if the plugin is loaded correctly
 
 </return>
 </function>
 
-<function name="grl_multiple_search_sync">
+<function name="grl_registry_load_plugin_directory">
 <description>
-Search for @text in all the sources specified in @sources.
-
-This method is synchronous.
+Loads a set of modules from directory in @path which contains
+a group shared object files.
 
-Since: 0.1.6
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="sources">
-<parameter_description>
-a #GList of #GrlMediaSource&lt;!-- --&gt;s where to search from (%NULL for all
-available sources with search capability)
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="text">
-<parameter_description> the text to search for
+<parameter name="path">
+<parameter_description> the path to the directory
 </parameter_description>
 </parameter>
-<parameter name="keys">
-<parameter_description> the #GList of
-#GrlKeyID to retrieve
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
-<parameter name="options">
-<parameter_description> options wanted for that operation
+</parameters>
+<return> %TRUE if the directory is valid.
+
+</return>
+</function>
+
+<function name="grl_registry_lookup_metadata_key">
+<description>
+Look up for the metadata key with name @key_name.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> a #GError, or @NULL
+<parameter name="key_name">
+<parameter_description> the key name
 </parameter_description>
 </parameter>
 </parameters>
-<return> a list with #GrlMedia elements
+<return> The metadata key, or GRL_METADATA_KEY_INVALID if not found
 
 </return>
 </function>
 
-<function name="grl_operation_cancel">
+<function name="grl_registry_lookup_metadata_key_desc">
 <description>
-Cancel an operation.
+Returns @key description.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="operation_id">
-<parameter_description> the identifier of a running operation
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a metadata key
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> metadata key description, or @NULL if not found
+
+</return>
 </function>
 
-<function name="grl_operation_get_data">
+<function name="grl_registry_lookup_metadata_key_name">
 <description>
-Obtains the previously attached data
+Returns @key name.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="operation_id">
-<parameter_description> the identifier of a running operation
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a metadata key
 </parameter_description>
 </parameter>
 </parameters>
-<return> The previously attached data.
+<return> metadata key name, or @NULL if not found
+
 </return>
 </function>
 
-<function name="grl_operation_options_copy">
+<function name="grl_registry_lookup_metadata_key_relation">
 <description>
+Look up the list of keys that have a relation with @key.
+
+ key is included in that list.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a metadata key
 </parameter_description>
 </parameter>
 </parameters>
-<return> a new #GrlOperationOptions instance with its values being copies of
-the values of @options.
+<return> a #GList of
+related keys, or @NULL if key is invalid.
+
 </return>
 </function>
 
-<function name="grl_operation_options_get_count">
+<function name="grl_registry_lookup_metadata_key_type">
 <description>
-Get the count option, that is, the number of elements to retrieve in an
-operation done with @options.
+Returns @key expected value type.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> a metadata key
 </parameter_description>
 </parameter>
 </parameters>
-<return> the value of the count option, or a default value if it is not set.
+<return> metadata key type, or @G_TYPE_INVALID if not found
+
+</return>
+</function>
+
+<function name="grl_registry_lookup_plugin">
+<description>
+This function will search and retrieve a plugin given its identifier.
 
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="plugin_id">
+<parameter_description> the id of a plugin
+</parameter_description>
+</parameter>
+</parameters>
+<return> The plugin found
 
 </return>
 </function>
 
-<function name="grl_operation_options_get_flags">
+<function name="grl_registry_lookup_source">
 <description>
+This function will search and retrieve a source given its identifier.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="source_id">
+<parameter_description> the id of a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> resolution flags of @options.
+<return> The source found.
 
 </return>
 </function>
 
-<function name="grl_operation_options_get_key_filter">
+<function name="grl_registry_metadata_key_validate">
 <description>
+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).
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description>
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
 <parameter name="key">
-<parameter_description>
+<parameter_description> a metadata key
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> value to be validate
 </parameter_description>
 </parameter>
 </parameters>
-<return> the filter
+<return> %TRUE if complies
+
 </return>
 </function>
 
-<function name="grl_operation_options_get_key_filter_list">
+<function name="grl_registry_register_metadata_key">
 <description>
+Registers a metadata key
+
+Since: 0.2.0
 
 </description>
 <parameters>
+<parameter name="registry">
+<parameter_description> The plugin registry
+</parameter_description>
+</parameter>
+<parameter name="param_spec">
+<parameter_description> The definition of the key to register
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
+</parameter_description>
+</parameter>
 </parameters>
-<return>
+<return> The #GrlKeyID registered.
+
 </return>
 </function>
 
-<function name="grl_operation_options_get_key_range_filter_list">
+<function name="grl_registry_register_metadata_key_relation">
 <description>
+Creates a relation between @key1 and @key2, meaning that 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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description>
+<parameter name="registry">
+<parameter_description> the plugin registry
+</parameter_description>
+</parameter>
+<parameter name="key1">
+<parameter_description> key involved in relationship
+</parameter_description>
+</parameter>
+<parameter name="key2">
+<parameter_description> key involved in relationship
 </parameter_description>
 </parameter>
 </parameters>
-<return>
-</return>
+<return></return>
 </function>
 
-<function name="grl_operation_options_get_skip">
+<function name="grl_registry_register_source">
 <description>
-Get the skip option, that is, the number of elements to skip before
-retrieving media items in an operation done with @options.
+Register a @source in the @registry with the given @plugin information
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="plugin">
+<parameter_description> the plugin which owns the source
+</parameter_description>
+</parameter>
+<parameter name="source">
+<parameter_description> the source to register
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> the value of the skip option, or a default value if it is not set.
+<return> %TRUE if success, %FALSE% otherwise.
 
 </return>
 </function>
 
-<function name="grl_operation_options_get_type_filter">
+<function name="grl_registry_unload_plugin">
 <description>
+Unload from memory a module identified by @plugin_id. This means call the
+module's deinit function.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
+</parameter_description>
+</parameter>
+<parameter name="plugin_id">
+<parameter_description> the identifier of the plugin
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> resolution flags of @options
+<return> %TRUE% on success.
+
 </return>
 </function>
 
-<function name="grl_operation_options_key_is_set">
+<function name="grl_registry_unregister_source">
 <description>
-This is an internal method that shouldn't be used outside of Grilo.
+Removes the @source from the @registry hash table
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="registry">
+<parameter_description> the registry instance
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> an operation option key
+<parameter name="source">
+<parameter_description> the source to unregister
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> error return location or @NULL to ignore
 </parameter_description>
 </parameter>
 </parameters>
-<return> whether @key is set in @options.
+<return> %TRUE if success, %FALSE% otherwise.
 
 </return>
 </function>
 
-<function name="grl_operation_options_new">
+<function name="grl_related_keys_dup">
 <description>
-Creates a new GrlOperationOptions object.
+Makes a deep copy of @relkeys and its contents.
 
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="caps">
-<parameter_description> caps that options will have to match. If %NULL, all
-options will be accepted.
+<parameter name="relkeys">
+<parameter_description> set of related keys to duplicate
 </parameter_description>
 </parameter>
 </parameters>
-<return> a new GrlOperationOptions instance.
+<return> a new #GrlRelatedKeys.
+Free it with #g_object_unref.
+
 </return>
 </function>
 
-<function name="grl_operation_options_obey_caps">
+<function name="grl_related_keys_get">
 <description>
-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.
+Get the value associated with @key from @relkeys. If it does not contain any
+value, %NULL will be returned.
 
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
-</parameter_description>
-</parameter>
-<parameter name="caps">
-<parameter_description> capabilities against which we want to test @options
-</parameter_description>
-</parameter>
-<parameter name="supported_options">
-<parameter_description> if not %NULL, will contain a
-newly-allocated #GrlOperationOptions instance containing all the values of
- options that match @caps.
+<parameter name="relkeys">
+<parameter_description> set of related keys to retrieve value
 </parameter_description>
 </parameter>
-<parameter name="unsupported_options">
-<parameter_description> if not %NULL, will contain a
-newly-allocated #GrlOperationOptions instance containing all the values of
- options that do not match @caps.
+<parameter name="key">
+<parameter_description> key to look up.
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @options obey to @caps, %FALSE otherwise.
+<return> a #GValue. This value should not be modified nor
+freed by user.
+
 </return>
 </function>
 
-<function name="grl_operation_options_set_count">
+<function name="grl_related_keys_get_binary">
 <description>
-Set the count option for an operation. Will only succeed if @count obey to
-the inherent capabilities of @options.
+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.
 
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="count">
-<parameter_description> number of elements to retrieve in an operation
+<parameter name="key">
+<parameter_description> key to use
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> location to store the buffer size
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @count could be set, %FALSE otherwise.
+<return> buffer location associated with @key, or %NULL in other case. If
+successful @size will be set to the buffer size.
+
 </return>
 </function>
 
-<function name="grl_operation_options_set_flags">
+<function name="grl_related_keys_get_boxed">
 <description>
-Set the resolution flags for an operation. Will only succeed if @flags obey
-to the inherent capabilities of @options.
+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.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="flags">
-<parameter_description> the resolution flags to be set for an operation. See
-#GrlMetadataResolutionFlags for possible values.
+<parameter name="key">
+<parameter_description> key to use
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @flags could be set, %FALSE otherwise.
+<return> the #GBoxed value associated with @key if
+possible, or %NULL in other case. The caller should not change nor free the
+value.
 
 </return>
 </function>
 
-<function name="grl_operation_options_set_key_filter_dictionary">
+<function name="grl_related_keys_get_float">
 <description>
+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.
+
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description>
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="filters">
-<parameter_description>
+<parameter name="key">
+<parameter_description> key to use
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> float value associated with @key, or 0 in other case.
+
+</return>
 </function>
 
-<function name="grl_operation_options_set_skip">
+<function name="grl_related_keys_get_int">
 <description>
-Set the skip option for an operation. Will only succeed if @skip obeys to the
-inherent capabilities of @options.
+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.
 
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="skip">
-<parameter_description> number of elements to skip in an operation
+<parameter name="key">
+<parameter_description> key to use
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @skip could be set, %FALSE otherwise.
+<return> int value associated with @key, or 0 in other case.
+
 </return>
 </function>
 
-<function name="grl_operation_options_set_type_filter">
+<function name="grl_related_keys_get_keys">
 <description>
-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.
+Returns a list with keys contained in @relkeys.
 
+Since: 0.1.13
 
 </description>
 <parameters>
-<parameter name="options">
-<parameter_description> a #GrlOperationOptions instance
-</parameter_description>
-</parameter>
-<parameter name="filter">
-<parameter_description> the type of media to get
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @flags could be set, %FALSE otherwise
+<return> 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.
+
 </return>
 </function>
 
-<function name="grl_operation_set_data">
+<function name="grl_related_keys_get_string">
 <description>
-Attach a pointer to the specific operation.
+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.
+
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="operation_id">
-<parameter_description> the identifier of a running operation
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="user_data">
-<parameter_description> the data to attach
+<parameter name="key">
+<parameter_description> key to use
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> string associated with @key, or %NULL in other case. Caller should
+not change nor free the value.
+
+</return>
 </function>
 
-<function name="grl_paging_translate">
+<function name="grl_related_keys_has_key">
 <description>
-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.
+Checks if @key is in @relkeys.
 
-Since: 0.1.6
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="skip">
-<parameter_description> number of elements to skip
-</parameter_description>
-</parameter>
-<parameter name="count">
-<parameter_description> number of elements to retrieve
-</parameter_description>
-</parameter>
-<parameter name="max_page_size">
-<parameter_description> maximum value for page size
-</parameter_description>
-</parameter>
-<parameter name="page_size">
-<parameter_description> optimal page size
-</parameter_description>
-</parameter>
-<parameter name="page_number">
-<parameter_description> page which contain the first element to retrieve (starting at 1)
+<parameter name="relkeys">
+<parameter_description> set of related keys to inspect
 </parameter_description>
 </parameter>
-<parameter name="internal_offset">
-<parameter_description> in the @page_number, offset where first element can be found (starting at 0)
+<parameter name="key">
+<parameter_description> key to search
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> %TRUE if @key is in @relkeys, %FALSE in other case.
+
+</return>
 </function>
 
-<function name="grl_plugin_registry_add_config">
+<function name="grl_related_keys_new">
 <description>
-Add a configuration for a plugin/source.
+Creates a new #GrlRelatedKeys instance that can be used to store related
+keys and their values.
 
-Since: 0.1.7
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="config">
-<parameter_description> a configuration set
-</parameter_description>
-</parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
-</parameter_description>
-</parameter>
 </parameters>
-<return></return>
+<return> a new object.
+
+</return>
 </function>
 
-<function name="grl_plugin_registry_add_config_from_file">
+<function name="grl_related_keys_new_valist">
 <description>
-Load plugin configurations from a .ini-like config file.
+Creates a new #GrlRelatedKeys containing pairs of (key, value). Finish the
+list with %NULL.
 
-Since: 0.1.7
+In case of a binary-type key, the expected element is (key, value, size).
 
-</description>
-<parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="config_file">
-<parameter_description> a key-value file containing the configuration
+value type will be extracted from key information.
+
+Since: 0.1.10
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> first key
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="args">
+<parameter_description> #va_list of value, followed by (key,value) pairs to insert
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE on success
+<return> a new #GrlRelatedKeys
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_add_directory">
+<function name="grl_related_keys_new_with_keys">
 <description>
-Set this path as part of default paths to load plugins.
+Creates a initial #GrlRelatedKeys containing the list of (key, value)
+pairs. Finish the list with %NULL.
 
-Since: 0.1.6
+For more information see #grl_related_keys_new_valist.
+
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="key">
+<parameter_description> first key
 </parameter_description>
 </parameter>
-<parameter name="path">
-<parameter_description> a path with plugins
+<parameter name="Varargs">
+<parameter_description> value, following by list of (key, value)
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> a new #GrlRelatedKeys
+
+</return>
 </function>
 
-<function name="grl_plugin_registry_get_default">
+<function name="grl_related_keys_set">
 <description>
-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.
+Sets the value associated with @key into @relkeys. Old value is freed and
+the new one is set.
 
-Since: 0.1.6
+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.
+
+Since: 0.1.10
 
 </description>
 <parameters>
+<parameter name="relkeys">
+<parameter_description> set of related keys to modify
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> key to change or add
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> the new value
+</parameter_description>
+</parameter>
 </parameters>
-<return> a new or an already created instance of the registry.
-
-It is NOT MT-safe
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_get_metadata_keys">
+<function name="grl_related_keys_set_binary">
 <description>
-Returns a list with all registered keys in system.
+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.
 
-Since: 0.1.6
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to change
+</parameter_description>
+</parameter>
+<parameter name="key">
+<parameter_description> key to change or add
+</parameter_description>
+</parameter>
+<parameter name="buf">
+<parameter_description> buffer holding the relkeys
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> size of the buffer
 </parameter_description>
 </parameter>
 </parameters>
-<return> 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.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_get_sources">
+<function name="grl_related_keys_set_boxed">
 <description>
-This function will return all the available sources in the @registry.
-
-If @ranked is %TRUE, the source list will be ordered by rank.
+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.
 
-Since: 0.1.7
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to modify
 </parameter_description>
 </parameter>
-<parameter name="ranked">
-<parameter_description> whether the returned list shall be returned ordered by rank
+<parameter name="key">
+<parameter_description> key to change or add
+</parameter_description>
+</parameter>
+<parameter name="boxed">
+<parameter_description> the new value
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList of
-available #GrlMediaPlugins&lt;!-- --&gt;s. The content of the list should not be
-modified or freed. Use g_list_free() when done using the list.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_get_sources_by_operations">
+<function name="grl_related_keys_set_float">
 <description>
-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.
+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.
 
-Since: 0.1.7
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to change
 </parameter_description>
 </parameter>
-<parameter name="ops">
-<parameter_description> a bitwise mangle of the requested operations.
+<parameter name="key">
+<parameter_description> key to change or add
 </parameter_description>
 </parameter>
-<parameter name="ranked">
-<parameter_description> whether the returned list shall be returned ordered by rank
+<parameter name="floatvalue">
+<parameter_description> the new value
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList of
-available #GrlMediaPlugins&lt;!-- --&gt;s. The content of the list should not be
-modified or freed. Use g_list_free() when done using the list.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_load">
+<function name="grl_related_keys_set_int">
 <description>
-Loads a module from shared object file stored in @path
+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.
 
-Since: 0.1.7
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to change
 </parameter_description>
 </parameter>
-<parameter name="library_filename">
-<parameter_description> the path to the so file
+<parameter name="key">
+<parameter_description> key to change or add
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="intvalue">
+<parameter_description> the new value
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if the module is loaded correctly
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_load_all">
+<function name="grl_related_keys_set_string">
 <description>
-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 &quot;:&quot;
+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.
 
-Since: 0.1.1
+Since: 0.1.10
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="relkeys">
+<parameter_description> set of related keys to modify
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="key">
+<parameter_description> key to change or add
+</parameter_description>
+</parameter>
+<parameter name="strvalue">
+<parameter_description> the new value
 </parameter_description>
 </parameter>
 </parameters>
-<return> %FALSE% is all the configured plugin paths are invalid,
-%TRUE% otherwise.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_load_by_id">
+<function name="grl_source_browse">
 <description>
-Loads plugin identified by @plugin_id.
+Browse from media elements through an available list.
 
-This requires the XML plugin information file to define a &quot;module&quot; key with
-the name of the module that provides the plugin or the absolute path of the
-actual module file.
+This method is asynchronous.
 
-Since: 0.1.14
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="plugin_id">
-<parameter_description> plugin identifier
+<parameter name="container">
+<parameter_description> a container of data transfer objects
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if the plugin is loaded correctly
+<return> the operation identifier
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_load_directory">
+<function name="grl_source_browse_sync">
 <description>
-Loads a set of modules from directory in @path which contains
-a group shared object files.
+Browse media elements through an available
+list.
 
-Since: 0.1.7
+This method is synchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="path">
-<parameter_description> the path to the directory
+<parameter name="container">
+<parameter_description> a container of data transfer objects
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
 </parameter_description>
 </parameter>
 <parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if the directory is valid.
+<return> a #GList with #GrlMedia
+elements. After use g_object_unref() every element and g_list_free() the
+list.
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_metadata_key">
+<function name="grl_source_get_auto_split_threshold">
 <description>
-Look up for the metadata key with name @key_name.
+Gets how much elements the source is able to handle in a single request.
 
-Since: 0.1.6
+See #grl_source_set_auto_split_threshold()
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="key_name">
-<parameter_description> the key name
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> The metadata key, or GRL_METADATA_KEY_INVALID if not found
+<return> the assigned threshold, or 0 if there is no threshold
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_metadata_key_desc">
+<function name="grl_source_get_caps">
 <description>
-Returns @key description.
+Get the capabilities of @source for @operation.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> a metadata key
+<parameter name="operation">
+<parameter_description> a supported operation. Even though the type allows to specify
+several operations, only one should be provided here.
 </parameter_description>
 </parameter>
 </parameters>
-<return> metadata key description, or @NULL if not found
+<return> The capabilities
+
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_metadata_key_name">
+<function name="grl_source_get_description">
 <description>
-Returns @key name.
-
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> a metadata key
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> metadata key name, or @NULL if not found
+<return> the description of the @source
+
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_metadata_key_relation">
+<function name="grl_source_get_id">
 <description>
-Look up the list of keys that have a relation with @key.
-
- key is included in that list.
-
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> a metadata key
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GList of
-related keys, or @NULL if key is invalid.
+<return> the ID of the @source
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_metadata_key_type">
+<function name="grl_source_get_media_from_uri">
 <description>
-Returns @key expected value type.
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> a metadata key
+<parameter name="uri">
+<parameter_description> A URI that can be used to identify a media resource
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> A list of keys to resolve
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> metadata key type, or @G_TYPE_INVALID if not found
+<return> the operation identifier
+
 </return>
 </function>
 
-<function name="grl_plugin_registry_lookup_source">
+<function name="grl_source_get_media_from_uri_sync">
 <description>
-This function will search and retrieve a source given its identifier.
+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.
 
-Since: 0.1.1
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="source_id">
-<parameter_description> the id of a source
+<parameter name="uri">
+<parameter_description> A URI that can be used to identify a media resource
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> a list of keys to resolve
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> The source found.
+<return> a filled #GrlMedia
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_metadata_key_validate">
+<function name="grl_source_get_name">
 <description>
-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).
-
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> a metadata key
-</parameter_description>
-</parameter>
-<parameter name="value">
-<parameter_description> value to be validate
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if complies
+<return> the name of the @source
+
 </return>
 </function>
 
-<function name="grl_plugin_registry_register_metadata_key">
+<function name="grl_source_get_plugin">
 <description>
-Registers a metadata key
-
-Since: 0.1.7
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> The plugin registry
-</parameter_description>
-</parameter>
-<parameter name="param_spec">
-<parameter_description> The definition of the key to register
-</parameter_description>
-</parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> The #GrlKeyID registered.
+<return> the plugin this source belongs to
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_register_metadata_key_relation">
+<function name="grl_source_get_rank">
 <description>
-Creates a relation between @key1 and @key2, meaning that the values of both
-keys are somehow related.
+Gets the source rank
 
-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.
-
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the plugin registry
-</parameter_description>
-</parameter>
-<parameter name="key1">
-<parameter_description> key involved in relationship
-</parameter_description>
-</parameter>
-<parameter name="key2">
-<parameter_description> key involved in relationship
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> rank value
+
+</return>
 </function>
 
-<function name="grl_plugin_registry_register_source">
+<function name="grl_source_may_resolve">
 <description>
-Register a @source in the @registry with the given @plugin information
+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.
 
-Since: 0.1.7
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="plugin">
-<parameter_description> the descriptor of the plugin which owns the source
+<parameter name="media">
+<parameter_description> a media on which we want more metadata
 </parameter_description>
 </parameter>
-<parameter name="source">
-<parameter_description> the source to register
+<parameter name="key_id">
+<parameter_description> the key corresponding to a metadata we might want
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="missing_keys">
+<parameter_description> an optional originally empty list
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if success, %FALSE% otherwise.
+<return> @TRUE if there's a possibility that @source resolves @key_id for
+ media, @FALSE otherwise.
 
 </return>
 </function>
 
-<function name="grl_plugin_registry_restrict_plugins">
+<function name="grl_source_notify_change">
 <description>
-Restrict the plugins that application sees to this list.
+Emits &quot;content-changed&quot; 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;
 
-Other plugins will not be available for the application, unless it uses
-directly #grl_plugin_registry_load() function.
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
+</parameter_description>
+</parameter>
+<parameter name="media">
+<parameter_description> the media which has changed, or @NULL to use the root box.
+</parameter_description>
+</parameter>
+<parameter name="change_type">
+<parameter_description> the type of change
 </parameter_description>
 </parameter>
-<parameter name="plugins">
-<parameter_description> a @NULL-terminated array of plugins identifiers
+<parameter name="location_unknown">
+<parameter_description> if change has happened in @media or any descendant
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_plugin_registry_unload">
+<function name="grl_source_notify_change_list">
 <description>
-Unload from memory a module identified by @plugin_id. This means call the
-module's deinit function.
+Emits &quot;content-changed&quot; signal to notify subscribers that a change ocurred
+in @source.
 
-Since: 0.1.7
+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;
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="plugin_id">
-<parameter_description> the identifier of the plugin
+<parameter name="changed_medias">
+<parameter_description>: the list of
+medias that have changed
 </parameter_description>
 </parameter>
-<parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter name="change_type">
+<parameter_description> the type of change
+</parameter_description>
+</parameter>
+<parameter name="location_unknown">
+<parameter_description> if change has happpened in @media or any descendant
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE% on success.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_plugin_registry_unregister_source">
+<function name="grl_source_notify_change_start">
 <description>
-Removes the @source from the @registry hash table
+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.
 
-Since: 0.1.7
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="registry">
-<parameter_description> the registry instance
-</parameter_description>
-</parameter>
 <parameter name="source">
-<parameter_description> the source to unregister
+<parameter_description> a source
 </parameter_description>
 </parameter>
 <parameter name="error">
-<parameter_description> error return location or @NULL to ignore
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if success, %FALSE% otherwise.
+<return> @TRUE if initialization has succeed.
 
 </return>
 </function>
 
-<function name="grl_related_keys_dup">
+<function name="grl_source_notify_change_stop">
 <description>
-Makes a deep copy of @relkeys and its contents.
+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.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to duplicate
+<parameter name="source">
+<parameter_description> a source
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> a new #GrlRelatedKeys.
-Free it with #g_object_unref.
+<return> @TRUE if stop has succeed.
 
 </return>
 </function>
 
-<function name="grl_related_keys_get">
+<function name="grl_source_query">
 <description>
-Get the value associated with @key from @relkeys. If it does not contain any
-value, %NULL will be returned.
+Execute a specialized query (specific for each provider) on a media
+repository.
 
-Since: 0.1.10
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to retrieve value
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to look up.
+<parameter name="query">
+<parameter_description> the query to process
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> a #GValue. This value should not be modified nor
-freed by user.
+<return> the operation identifier
 
 </return>
 </function>
 
-<function name="grl_related_keys_get_binary">
+<function name="grl_source_query_sync">
 <description>
-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.
+Execute a specialized query (specific for each provider) on a media
+repository.
 
-Since: 0.1.10
+This method is synchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to use
+<parameter name="query">
+<parameter_description> the query to process
 </parameter_description>
 </parameter>
-<parameter name="size">
-<parameter_description> location to store the buffer size
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> buffer location associated with @key, or %NULL in other case. If
-successful @size will be set to the buffer size.
+<return> a #GList with #GrlMedia
+elements. After use g_object_unref() every element and g_list_free() the
+list.
 
 </return>
 </function>
 
-<function name="grl_related_keys_get_boxed">
+<function name="grl_source_remove">
 <description>
-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.
+Remove a @media from the @source repository.
+
+This method is asynchronous.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to use
+<parameter name="media">
+<parameter_description> a data transfer object
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> the #GBoxed value associated with @key if
-possible, or %NULL in other case. The caller should not change nor free the
-value.
-</return>
+<return></return>
 </function>
 
-<function name="grl_related_keys_get_float">
+<function name="grl_source_remove_sync">
 <description>
-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.
+Remove a @media from the @source repository.
 
-Since: 0.1.10
+This method is synchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to use
+<parameter name="media">
+<parameter_description> a data transfer object
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> float value associated with @key, or 0 in other case.
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_related_keys_get_int">
+<function name="grl_source_resolve">
 <description>
-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.
+This method is intended to fetch the requested keys of metadata of
+a given @media to the media source.
 
-Since: 0.1.10
+This method is asynchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to use
+<parameter name="media">
+<parameter_description> a data transfer object
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options to pass to this operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> int value associated with @key, or 0 in other case.
+<return> the operation identifie
 
 </return>
 </function>
 
-<function name="grl_related_keys_get_keys">
+<function name="grl_source_resolve_sync">
 <description>
-Returns a list with keys contained in @relkeys.
+This method is intended to fetch the requested keys of metadata of
+a given @media to the media source.
 
-Since: 0.1.13
+This method is synchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
+</parameter_description>
+</parameter>
+<parameter name="media">
+<parameter_description> a data transfer object
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options to pass to this operation
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> 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.
+<return> a filled #GrlMedia
 
 </return>
 </function>
 
-<function name="grl_related_keys_get_string">
+<function name="grl_source_search">
 <description>
-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.
+Search for the @text string in a source for data identified with that string.
 
-Since: 0.1.10
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to use
+<parameter name="text">
+<parameter_description> the text to search
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
-<return> string associated with @key, or %NULL in other case. Caller should
-not change nor free the value.
+<return> the operation identifier
 
 </return>
 </function>
 
-<function name="grl_related_keys_has_key">
+<function name="grl_source_search_sync">
 <description>
-Checks if @key is in @relkeys.
+Search for the @text string in a source for data identified with that string.
 
-Since: 0.1.10
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to inspect
+<parameter name="source">
+<parameter_description> a source
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text to search
+</parameter_description>
+</parameter>
+<parameter name="keys">
+<parameter_description> the #GList of
+#GrlKeyID&lt;!-- --&gt;s to request
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to search
+<parameter name="options">
+<parameter_description> options wanted for that operation
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return> %TRUE if @key is in @relkeys, %FALSE in other case.
+<return> a #GList with #GrlMedia
+elements. After use g_object_unref() every element and g_list_free() the
+list.
 
 </return>
 </function>
 
-<function name="grl_related_keys_new">
+<function name="grl_source_set_auto_split_threshold">
 <description>
-Creates a new #GrlRelatedKeys instance that can be used to store related
-keys and their values.
-
-Since: 0.1.10
-
-</description>
-<parameters>
-</parameters>
-<return> a new object.
-
-</return>
-</function>
+Sets how much elements the source is able to handle in a single request.
 
-<function name="grl_related_keys_new_valist">
-<description>
-Creates a new #GrlRelatedKeys containing pairs of (key, value). Finish the
-list with %NULL.
+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.
 
-In case of a binary-type key, the expected element is (key, value, size).
+Source will act as if user were asking just a chunk, and user won't notice
+that the request was chunked.
 
-value type will be extracted from key information.
+&lt;note&gt;
+&lt;para&gt;
+This function is intended to be used only by plugins.
+&lt;/para&gt;
+&lt;/note&gt;
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="key">
-<parameter_description> first key
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="args">
-<parameter_description> #va_list of value, followed by (key,value) pairs to insert
+<parameter name="threshold">
+<parameter_description> the threshold to set
 </parameter_description>
 </parameter>
 </parameters>
-<return> a new #GrlRelatedKeys
-
-</return>
+<return></return>
 </function>
 
-<function name="grl_related_keys_new_with_keys">
+<function name="grl_source_slow_keys">
 <description>
-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.
+Similar to grl_source_supported_keys(), but these keys
+are marked as slow because of the amount of traffic/processing needed
+to fetch them.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="key">
-<parameter_description> first key
-</parameter_description>
-</parameter>
-<parameter name="Varargs">
-<parameter_description> value, following by list of (key, value)
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> a new #GrlRelatedKeys
+<return> a #GList with the keys
 
 </return>
 </function>
 
-<function name="grl_related_keys_set">
+<function name="grl_source_store">
 <description>
-Sets the value associated with @key into @relkeys. Old value is freed and
-the new one is set.
+Store the @media into the @parent container
 
-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.
+This method is asynchronous.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to modify
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to change or add
+<parameter name="parent">
+<parameter_description> a parent to store the data transfer objects
 </parameter_description>
 </parameter>
-<parameter name="value">
-<parameter_description> the new value
+<parameter name="media">
+<parameter_description> a data transfer object
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> flags to configure specific behaviour of the operation
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the user defined callback
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> the user data to pass in the callback
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_related_keys_set_binary">
+<function name="grl_source_store_metadata">
 <description>
-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.
+This is the main method of the #GrlMetadataSource class. It will
+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.
 
-Since: 0.1.10
+This function is asynchronous and uses the Glib's main loop.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to change
+<parameter name="source">
+<parameter_description> a metadata source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to change or add
+<parameter name="media">
+<parameter_description> the #GrlMedia object that we want to operate on.
 </parameter_description>
 </parameter>
-<parameter name="buf">
-<parameter_description> buffer holding the relkeys
+<parameter name="keys">
+<parameter_description> a list
+of #GrlKeyID whose values we want to change.
 </parameter_description>
 </parameter>
-<parameter name="size">
-<parameter_description> size of the buffer
+<parameter name="flags">
+<parameter_description> Flags to configure specific behaviors of the operation.
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> the callback to execute when the operation is finished.
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> user data set for the @callback
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_related_keys_set_boxed">
+<function name="grl_source_store_metadata_sync">
 <description>
-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.
+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.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to modify
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to change or add
+<parameter name="media">
+<parameter_description> the #GrlMedia object that we want to operate on
 </parameter_description>
 </parameter>
-<parameter name="boxed">
-<parameter_description> the new value
+<parameter name="keys">
+<parameter_description> a list of
+#GrlKeyID whose values we want to change
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> Flags to configure specific behaviors of the operation.
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return>
+a #GList of keys that could not be updated, or @NULL
+
+</return>
 </function>
 
-<function name="grl_related_keys_set_float">
+<function name="grl_source_store_sync">
 <description>
-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.
+Store the @media into the @parent container.
 
-Since: 0.1.10
+This method is synchronous.
+
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to change
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> key to change or add
+<parameter name="parent">
+<parameter_description> a #GrlMediaBox to store the data transfer objects
 </parameter_description>
 </parameter>
-<parameter name="floatvalue">
-<parameter_description> the new value
+<parameter name="media">
+<parameter_description> a #GrlMedia data transfer object
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> flags to configure specific behaviour of the operation
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> a #GError, or @NULL
 </parameter_description>
 </parameter>
 </parameters>
 <return></return>
 </function>
 
-<function name="grl_related_keys_set_int">
+<function name="grl_source_supported_keys">
 <description>
-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.
+Get a list of #GrlKeyID, which describe a metadata types that this
+source can fetch and store.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to change
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> key to change or add
-</parameter_description>
-</parameter>
-<parameter name="intvalue">
-<parameter_description> the new value
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> a #GList with the keys
+
+</return>
 </function>
 
-<function name="grl_related_keys_set_string">
+<function name="grl_source_supported_operations">
 <description>
-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.
+By default the derived objects of #GrlSource can only resolve.
 
-Since: 0.1.10
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="relkeys">
-<parameter_description> set of related keys to modify
-</parameter_description>
-</parameter>
-<parameter name="key">
-<parameter_description> key to change or add
-</parameter_description>
-</parameter>
-<parameter name="strvalue">
-<parameter_description> the new value
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return></return>
+<return> a bitwise mangle with the supported operations by
+the source
+
+</return>
 </function>
 
-<function name="key_id_handler_add">
+<function name="grl_source_test_media_from_uri">
 <description>
-Add a new key&lt;-&gt;name correspondence.
+Tests whether @source can instantiate a #GrlMedia object representing
+the media resource exposed at @uri.
 
+Since: 0.2.0
 
 </description>
 <parameters>
-<parameter name="handler">
-<parameter_description> the handler
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
-<parameter name="key">
-<parameter_description> a specific key for system keys, or GRL_METADATA_KEY_INVALID for it to
-be assigned
+<parameter name="uri">
+<parameter_description> A URI that can be used to identify a media resource
 </parameter_description>
 </parameter>
-<parameter name="name">
-<parameter_description> the name of the key.
+</parameters>
+<return> %TRUE if it can, %FALSE otherwise.
+
+This method is synchronous.
+
+</return>
+</function>
+
+<function name="grl_source_writable_keys">
+<description>
+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.
+
+Since: 0.2.0
+
+</description>
+<parameters>
+<parameter name="source">
+<parameter_description> a source
 </parameter_description>
 </parameter>
 </parameters>
-<return> the new key number, or GRL_METADATA_KEY_INVALID if the key could
-not be created (typically if @key or @name is already registered).
+<return>
+a #GList with the keys
+
 </return>
 </function>
 
diff --git a/grilo/src/grilo_enum.defs b/grilo/src/grilo_enum.defs
index 5eccb14..089f8a8 100644
--- a/grilo/src/grilo_enum.defs
+++ b/grilo/src/grilo_enum.defs
@@ -29,12 +29,11 @@
 ;;   GRL_CORE_ERROR_SEARCH_FAILED,
 ;;   GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED,
 ;;   GRL_CORE_ERROR_QUERY_FAILED,
-;;   GRL_CORE_ERROR_METADATA_FAILED,
 ;;   GRL_CORE_ERROR_RESOLVE_FAILED,
 ;;   GRL_CORE_ERROR_MEDIA_NOT_FOUND,
 ;;   GRL_CORE_ERROR_STORE_FAILED,
+;;   GRL_CORE_ERROR_STORE_METADATA_FAILED,
 ;;   GRL_CORE_ERROR_REMOVE_FAILED,
-;;   GRL_CORE_ERROR_SET_METADATA_FAILED,
 ;;   GRL_CORE_ERROR_MEDIA_FROM_URI_FAILED,
 ;;   GRL_CORE_ERROR_CONFIG_LOAD_FAILED,
 ;;   GRL_CORE_ERROR_CONFIG_FAILED,
@@ -54,21 +53,20 @@
     '("search-failed" "GRL_CORE_ERROR_SEARCH_FAILED" "2")
     '("search-null-unsupported" "GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED" "3")
     '("query-failed" "GRL_CORE_ERROR_QUERY_FAILED" "4")
-    '("metadata-failed" "GRL_CORE_ERROR_METADATA_FAILED" "5")
-    '("resolve-failed" "GRL_CORE_ERROR_RESOLVE_FAILED" "6")
-    '("media-not-found" "GRL_CORE_ERROR_MEDIA_NOT_FOUND" "7")
-    '("store-failed" "GRL_CORE_ERROR_STORE_FAILED" "8")
+    '("resolve-failed" "GRL_CORE_ERROR_RESOLVE_FAILED" "5")
+    '("media-not-found" "GRL_CORE_ERROR_MEDIA_NOT_FOUND" "6")
+    '("store-failed" "GRL_CORE_ERROR_STORE_FAILED" "7")
+    '("store-metadata-failed" "GRL_CORE_ERROR_STORE_METADATA_FAILED" "8")
     '("remove-failed" "GRL_CORE_ERROR_REMOVE_FAILED" "9")
-    '("set-metadata-failed" "GRL_CORE_ERROR_SET_METADATA_FAILED" "10")
-    '("media-from-uri-failed" "GRL_CORE_ERROR_MEDIA_FROM_URI_FAILED" "11")
-    '("config-load-failed" "GRL_CORE_ERROR_CONFIG_LOAD_FAILED" "12")
-    '("config-failed" "GRL_CORE_ERROR_CONFIG_FAILED" "13")
-    '("unregister-source-failed" "GRL_CORE_ERROR_UNREGISTER_SOURCE_FAILED" "14")
-    '("load-plugin-failed" "GRL_CORE_ERROR_LOAD_PLUGIN_FAILED" "15")
-    '("unload-plugin-failed" "GRL_CORE_ERROR_UNLOAD_PLUGIN_FAILED" "16")
-    '("register-metadata-key-failed" "GRL_CORE_ERROR_REGISTER_METADATA_KEY_FAILED" "17")
-    '("notify-changed-failed" "GRL_CORE_ERROR_NOTIFY_CHANGED_FAILED" "18")
-    '("operation-cancelled" "GRL_CORE_ERROR_OPERATION_CANCELLED" "19")
+    '("media-from-uri-failed" "GRL_CORE_ERROR_MEDIA_FROM_URI_FAILED" "10")
+    '("config-load-failed" "GRL_CORE_ERROR_CONFIG_LOAD_FAILED" "11")
+    '("config-failed" "GRL_CORE_ERROR_CONFIG_FAILED" "12")
+    '("unregister-source-failed" "GRL_CORE_ERROR_UNREGISTER_SOURCE_FAILED" "13")
+    '("load-plugin-failed" "GRL_CORE_ERROR_LOAD_PLUGIN_FAILED" "14")
+    '("unload-plugin-failed" "GRL_CORE_ERROR_UNLOAD_PLUGIN_FAILED" "15")
+    '("register-metadata-key-failed" "GRL_CORE_ERROR_REGISTER_METADATA_KEY_FAILED" "16")
+    '("notify-changed-failed" "GRL_CORE_ERROR_NOTIFY_CHANGED_FAILED" "17")
+    '("operation-cancelled" "GRL_CORE_ERROR_OPERATION_CANCELLED" "18")
   )
 )
 
@@ -100,75 +98,80 @@
   )
 )
 
-;; From grl-media.h
+;; From grl-operation-options.h
 
 ;; Original typedef:
 ;; typedef enum {
-;;   GRL_MEDIA_SERIALIZE_BASIC,
-;;   GRL_MEDIA_SERIALIZE_PARTIAL,
-;;   GRL_MEDIA_SERIALIZE_FULL
-;; } GrlMediaSerializeType;
+;;   GRL_RESOLVE_NORMAL     = 0,        /* Normal mode */
+;;   GRL_RESOLVE_FULL       = (1 << 0), /* Try other plugins if necessary */
+;;   GRL_RESOLVE_IDLE_RELAY = (1 << 1), /* Use idle loop to relay results */
+;;   GRL_RESOLVE_FAST_ONLY  = (1 << 2)  /* Only resolve fast metadata keys */
+;; } GrlResolutionFlags;
 
-(define-enum-extended MediaSerializeType
+(define-flags-extended ResolutionFlags
   (in-module "Grl")
-  (c-name "GrlMediaSerializeType")
+  (c-name "GrlResolutionFlags")
   (values
-    '("basic" "GRL_MEDIA_SERIALIZE_BASIC" "0")
-    '("partial" "GRL_MEDIA_SERIALIZE_PARTIAL" "1")
-    '("full" "GRL_MEDIA_SERIALIZE_FULL" "2")
+    '("normal" "GRL_RESOLVE_NORMAL" "0x0")
+    '("full" "GRL_RESOLVE_FULL" "(1 << 0)")
+    '("idle-relay" "GRL_RESOLVE_IDLE_RELAY" "(1 << 1)")
+    '("fast-only" "GRL_RESOLVE_FAST_ONLY" "(1 << 2)")
   )
 )
 
-;; From grl-media-source.h
-
 ;; Original typedef:
 ;; typedef enum {
-;;   GRL_CONTENT_CHANGED,
-;;   GRL_CONTENT_ADDED,
-;;   GRL_CONTENT_REMOVED
-;; } GrlMediaSourceChangeType;
+;;   GRL_WRITE_NORMAL     = 0,        /* Normal mode */
+;;   GRL_WRITE_FULL       = (1 << 0)  /* Try other plugins if necessary */
+;; } GrlWriteFlags;
 
-(define-enum-extended MediaSourceChangeType
+(define-flags-extended WriteFlags
   (in-module "Grl")
-  (c-name "GrlMediaSourceChangeType")
+  (c-name "GrlWriteFlags")
   (values
-    '("changed" "GRL_CONTENT_CHANGED" "0")
-    '("added" "GRL_CONTENT_ADDED" "1")
-    '("removed" "GRL_CONTENT_REMOVED" "2")
+    '("normal" "GRL_WRITE_NORMAL" "0x0")
+    '("full" "GRL_WRITE_FULL" "(1 << 0)")
   )
 )
 
-;; From grl-metadata-source.h
+;; From grl-registry.h
 
 ;; Original typedef:
 ;; typedef enum {
-;;   GRL_WRITE_NORMAL     = 0,        /* Normal mode */
-;;   GRL_WRITE_FULL       = (1 << 0)  /* Try other plugins if necessary */
-;; } GrlMetadataWritingFlags;
-
-(define-flags-extended MetadataWritingFlags
+;;   GRL_RANK_LOWEST  = -64,
+;;   GRL_RANK_LOW     = -32,
+;;   GRL_RANK_DEFAULT =   0,
+;;   GRL_RANK_HIGH    =  32,
+;;   GRL_RANK_HIGHEST =  64
+;; } GrlRank;
+
+(define-enum-extended Rank
   (in-module "Grl")
-  (c-name "GrlMetadataWritingFlags")
+  (c-name "GrlRank")
   (values
-    '("normal" "GRL_WRITE_NORMAL" "0x0")
-    '("full" "GRL_WRITE_FULL" "(1 << 0)")
+    '("lowest" "GRL_RANK_LOWEST" "-64")
+    '("low" "GRL_RANK_LOW" "-32")
+    '("default" "GRL_RANK_DEFAULT" "0")
+    '("high" "GRL_RANK_HIGH" "32")
+    '("highest" "GRL_RANK_HIGHEST" "64")
   )
 )
 
+;; From grl-source.h
+
 ;; Original typedef:
 ;; typedef enum {
 ;;   GRL_OP_NONE            = 0,
-;;   GRL_OP_METADATA        = 1,
-;;   GRL_OP_RESOLVE         = 1 << 1,
-;;   GRL_OP_BROWSE          = 1 << 2,
-;;   GRL_OP_SEARCH          = 1 << 3,
-;;   GRL_OP_QUERY           = 1 << 4,
-;;   GRL_OP_STORE           = 1 << 5,
-;;   GRL_OP_STORE_PARENT    = 1 << 6,
+;;   GRL_OP_RESOLVE         = 1,
+;;   GRL_OP_BROWSE          = 1 << 1,
+;;   GRL_OP_SEARCH          = 1 << 2,
+;;   GRL_OP_QUERY           = 1 << 3,
+;;   GRL_OP_STORE           = 1 << 4,
+;;   GRL_OP_STORE_PARENT    = 1 << 5,
+;;   GRL_OP_STORE_METADATA  = 1 << 6,
 ;;   GRL_OP_REMOVE          = 1 << 7,
-;;   GRL_OP_SET_METADATA    = 1 << 8,
-;;   GRL_OP_MEDIA_FROM_URI  = 1 << 9,
-;;   GRL_OP_NOTIFY_CHANGE   = 1 << 10
+;;   GRL_OP_MEDIA_FROM_URI  = 1 << 8,
+;;   GRL_OP_NOTIFY_CHANGE   = 1 << 9
 ;; } GrlSupportedOps;
 
 (define-flags-extended SupportedOps
@@ -176,61 +179,33 @@
   (c-name "GrlSupportedOps")
   (values
     '("none" "GRL_OP_NONE" "0x0")
-    '("metadata" "GRL_OP_METADATA" "0x1")
-    '("resolve" "GRL_OP_RESOLVE" "1 << 1")
-    '("browse" "GRL_OP_BROWSE" "1 << 2")
-    '("search" "GRL_OP_SEARCH" "1 << 3")
-    '("query" "GRL_OP_QUERY" "1 << 4")
-    '("store" "GRL_OP_STORE" "1 << 5")
-    '("store-parent" "GRL_OP_STORE_PARENT" "1 << 6")
+    '("resolve" "GRL_OP_RESOLVE" "0x1")
+    '("browse" "GRL_OP_BROWSE" "1 << 1")
+    '("search" "GRL_OP_SEARCH" "1 << 2")
+    '("query" "GRL_OP_QUERY" "1 << 3")
+    '("store" "GRL_OP_STORE" "1 << 4")
+    '("store-parent" "GRL_OP_STORE_PARENT" "1 << 5")
+    '("store-metadata" "GRL_OP_STORE_METADATA" "1 << 6")
     '("remove" "GRL_OP_REMOVE" "1 << 7")
-    '("set-metadata" "GRL_OP_SET_METADATA" "1 << 8")
-    '("media-from-uri" "GRL_OP_MEDIA_FROM_URI" "1 << 9")
-    '("notify-change" "GRL_OP_NOTIFY_CHANGE" "1 << 10")
+    '("media-from-uri" "GRL_OP_MEDIA_FROM_URI" "1 << 8")
+    '("notify-change" "GRL_OP_NOTIFY_CHANGE" "1 << 9")
   )
 )
 
-;; From grl-operation-options.h
-
 ;; Original typedef:
 ;; typedef enum {
-;;   GRL_RESOLVE_NORMAL     = 0,        /* Normal mode */
-;;   GRL_RESOLVE_FULL       = (1 << 0), /* Try other plugins if necessary */
-;;   GRL_RESOLVE_IDLE_RELAY = (1 << 1), /* Use idle loop to relay results */
-;;   GRL_RESOLVE_FAST_ONLY  = (1 << 2)  /* Only resolve fast metadata keys */
-;; } GrlMetadataResolutionFlags;
-
-(define-flags-extended MetadataResolutionFlags
-  (in-module "Grl")
-  (c-name "GrlMetadataResolutionFlags")
-  (values
-    '("normal" "GRL_RESOLVE_NORMAL" "0x0")
-    '("full" "GRL_RESOLVE_FULL" "(1 << 0)")
-    '("idle-relay" "GRL_RESOLVE_IDLE_RELAY" "(1 << 1)")
-    '("fast-only" "GRL_RESOLVE_FAST_ONLY" "(1 << 2)")
-  )
-)
-
-;; From grl-plugin-registry.h
+;;   GRL_CONTENT_CHANGED,
+;;   GRL_CONTENT_ADDED,
+;;   GRL_CONTENT_REMOVED
+;; } GrlSourceChangeType;
 
-;; Original typedef:
-;; typedef enum {
-;;   GRL_PLUGIN_RANK_LOWEST  = -64,
-;;   GRL_PLUGIN_RANK_LOW     = -32,
-;;   GRL_PLUGIN_RANK_DEFAULT =   0,
-;;   GRL_PLUGIN_RANK_HIGH    =  32,
-;;   GRL_PLUGIN_RANK_HIGHEST =  64
-;; } GrlPluginRank;
-
-(define-enum-extended PluginRank
+(define-enum-extended SourceChangeType
   (in-module "Grl")
-  (c-name "GrlPluginRank")
+  (c-name "GrlSourceChangeType")
   (values
-    '("lowest" "GRL_PLUGIN_RANK_LOWEST" "-64")
-    '("low" "GRL_PLUGIN_RANK_LOW" "-32")
-    '("default" "GRL_PLUGIN_RANK_DEFAULT" "0")
-    '("high" "GRL_PLUGIN_RANK_HIGH" "32")
-    '("highest" "GRL_PLUGIN_RANK_HIGHEST" "64")
+    '("changed" "GRL_CONTENT_CHANGED" "0")
+    '("added" "GRL_CONTENT_ADDED" "1")
+    '("removed" "GRL_CONTENT_REMOVED" "2")
   )
 )
 
diff --git a/grilo/src/grilo_extra.defs b/grilo/src/grilo_extra.defs
index c26a4b2..e69de29 100644
--- a/grilo/src/grilo_extra.defs
+++ b/grilo/src/grilo_extra.defs
@@ -1,20 +0,0 @@
-;; From GrlPluginRegistry
-
-(define-signal source-added
-  (of-object "GrlPluginRegistry")
-  (return-type "void")
-  (when "first")
-  (parameters
-    '("GrlMediaPlugin*" "p0")
-  )
-)
-
-(define-signal source-removed
-  (of-object "GrlPluginRegistry")
-  (return-type "void")
-  (when "first")
-  (parameters
-    '("GrlMediaPlugin*" "p0")
-  )
-)
-
diff --git a/grilo/src/grilo_method.defs b/grilo/src/grilo_method.defs
index f1c6c2c..500bdee 100644
--- a/grilo/src/grilo_method.defs
+++ b/grilo/src/grilo_method.defs
@@ -7,95 +7,32 @@
   (gtype-id "GRL_TYPE_CAPS")
 )
 
-(define-object Config
-  (in-module "Grl")
-  (parent "GObject")
-  (c-name "GrlConfig")
-  (gtype-id "GRL_TYPE_CONFIG")
-)
-
-(define-object Data
-  (in-module "Grl")
-  (parent "GObject")
-  (c-name "GrlData")
-  (gtype-id "GRL_TYPE_DATA")
-)
-
-(define-object Media
-  (in-module "Grl")
-  (parent "GrlData")
-  (c-name "GrlMedia")
-  (gtype-id "GRL_TYPE_MEDIA")
-)
-
-(define-object MediaAudio
-  (in-module "Grl")
-  (parent "GrlMedia")
-  (c-name "GrlMediaAudio")
-  (gtype-id "GRL_TYPE_MEDIA_AUDIO")
-)
-
-(define-object MediaBox
-  (in-module "Grl")
-  (parent "GrlMedia")
-  (c-name "GrlMediaBox")
-  (gtype-id "GRL_TYPE_MEDIA_BOX")
-)
-
-(define-object MediaImage
-  (in-module "Grl")
-  (parent "GrlMedia")
-  (c-name "GrlMediaImage")
-  (gtype-id "GRL_TYPE_MEDIA_IMAGE")
-)
-
-(define-object MediaPlugin
+(define-object OperationOptions
   (in-module "Grl")
   (parent "GObject")
-  (c-name "GrlMediaPlugin")
-  (gtype-id "GRL_TYPE_MEDIA_PLUGIN")
-)
-
-(define-object MediaVideo
-  (in-module "Grl")
-  (parent "GrlMedia")
-  (c-name "GrlMediaVideo")
-  (gtype-id "GRL_TYPE_MEDIA_VIDEO")
-)
-
-(define-object MetadataSource
-  (in-module "Grl")
-  (parent "GrlMediaPlugin")
-  (c-name "GrlMetadataSource")
-  (gtype-id "GRL_TYPE_METADATA_SOURCE")
-)
-
-(define-object MediaSource
-  (in-module "Grl")
-  (parent "GrlMetadataSource")
-  (c-name "GrlMediaSource")
-  (gtype-id "GRL_TYPE_MEDIA_SOURCE")
+  (c-name "GrlOperationOptions")
+  (gtype-id "GRL_TYPE_OPERATION_OPTIONS")
 )
 
-(define-object OperationOptions
+(define-object Plugin
   (in-module "Grl")
   (parent "GObject")
-  (c-name "GrlOperationOptions")
-  (gtype-id "GRL_TYPE_OPERATION_OPTIONS")
+  (c-name "GrlPlugin")
+  (gtype-id "GRL_TYPE_PLUGIN")
 )
 
-(define-object PluginRegistry
+(define-object Registry
   (in-module "Grl")
   (parent "GObject")
-  (c-name "GrlPluginRegistry")
-  (gtype-id "GRL_TYPE_PLUGIN_REGISTRY")
+  (c-name "GrlRegistry")
+  (gtype-id "GRL_TYPE_REGISTRY")
 )
 
-(define-object RelatedKeys
+(define-object Source
   (in-module "Grl")
   (parent "GObject")
-  (c-name "GrlRelatedKeys")
-  (gtype-id "GRL_TYPE_RELATED_KEYS")
+  (c-name "GrlSource")
+  (gtype-id "GRL_TYPE_SOURCE")
 )
 
 ;; Enumerations and flags ...
@@ -122,12 +59,11 @@
     '("search-failed" "GRL_CORE_ERROR_SEARCH_FAILED")
     '("search-null-unsupported" "GRL_CORE_ERROR_SEARCH_NULL_UNSUPPORTED")
     '("query-failed" "GRL_CORE_ERROR_QUERY_FAILED")
-    '("metadata-failed" "GRL_CORE_ERROR_METADATA_FAILED")
     '("resolve-failed" "GRL_CORE_ERROR_RESOLVE_FAILED")
     '("media-not-found" "GRL_CORE_ERROR_MEDIA_NOT_FOUND")
     '("store-failed" "GRL_CORE_ERROR_STORE_FAILED")
+    '("store-metadata-failed" "GRL_CORE_ERROR_STORE_METADATA_FAILED")
     '("remove-failed" "GRL_CORE_ERROR_REMOVE_FAILED")
-    '("set-metadata-failed" "GRL_CORE_ERROR_SET_METADATA_FAILED")
     '("media-from-uri-failed" "GRL_CORE_ERROR_MEDIA_FROM_URI_FAILED")
     '("config-load-failed" "GRL_CORE_ERROR_CONFIG_LOAD_FAILED")
     '("config-failed" "GRL_CORE_ERROR_CONFIG_FAILED")
@@ -155,35 +91,38 @@
   )
 )
 
-(define-enum MediaSerializeType
+(define-flags ResolutionFlags
   (in-module "Grl")
-  (c-name "GrlMediaSerializeType")
-  (gtype-id "GRL_TYPE_MEDIA_SERIALIZE_TYPE")
+  (c-name "GrlResolutionFlags")
+  (gtype-id "GRL_TYPE_RESOLUTION_FLAGS")
   (values
-    '("basic" "GRL_MEDIA_SERIALIZE_BASIC")
-    '("partial" "GRL_MEDIA_SERIALIZE_PARTIAL")
-    '("full" "GRL_MEDIA_SERIALIZE_FULL")
+    '("normal" "GRL_RESOLVE_NORMAL")
+    '("full" "GRL_RESOLVE_FULL")
+    '("idle-relay" "GRL_RESOLVE_IDLE_RELAY")
+    '("fast-only" "GRL_RESOLVE_FAST_ONLY")
   )
 )
 
-(define-enum MediaSourceChangeType
+(define-flags WriteFlags
   (in-module "Grl")
-  (c-name "GrlMediaSourceChangeType")
-  (gtype-id "GRL_TYPE_MEDIA_SOURCE_CHANGE_TYPE")
+  (c-name "GrlWriteFlags")
+  (gtype-id "GRL_TYPE_WRITE_FLAGS")
   (values
-    '("changed" "GRL_CONTENT_CHANGED")
-    '("added" "GRL_CONTENT_ADDED")
-    '("removed" "GRL_CONTENT_REMOVED")
+    '("normal" "GRL_WRITE_NORMAL")
+    '("full" "GRL_WRITE_FULL")
   )
 )
 
-(define-flags MetadataWritingFlags
+(define-enum Rank
   (in-module "Grl")
-  (c-name "GrlMetadataWritingFlags")
-  (gtype-id "GRL_TYPE_METADATA_WRITING_FLAGS")
+  (c-name "GrlRank")
+  (gtype-id "GRL_TYPE_RANK")
   (values
-    '("normal" "GRL_WRITE_NORMAL")
-    '("full" "GRL_WRITE_FULL")
+    '("lowest" "GRL_RANK_LOWEST")
+    '("low" "GRL_RANK_LOW")
+    '("default" "GRL_RANK_DEFAULT")
+    '("high" "GRL_RANK_HIGH")
+    '("highest" "GRL_RANK_HIGHEST")
   )
 )
 
@@ -193,44 +132,33 @@
   (gtype-id "GRL_TYPE_SUPPORTED_OPS")
   (values
     '("none" "GRL_OP_NONE")
-    '("metadata" "GRL_OP_METADATA")
     '("resolve" "GRL_OP_RESOLVE")
     '("browse" "GRL_OP_BROWSE")
     '("search" "GRL_OP_SEARCH")
     '("query" "GRL_OP_QUERY")
     '("store" "GRL_OP_STORE")
     '("store-parent" "GRL_OP_STORE_PARENT")
+    '("store-metadata" "GRL_OP_STORE_METADATA")
     '("remove" "GRL_OP_REMOVE")
-    '("set-metadata" "GRL_OP_SET_METADATA")
     '("media-from-uri" "GRL_OP_MEDIA_FROM_URI")
     '("notify-change" "GRL_OP_NOTIFY_CHANGE")
   )
 )
 
-(define-flags MetadataResolutionFlags
+(define-enum SourceChangeType
   (in-module "Grl")
-  (c-name "GrlMetadataResolutionFlags")
-  (gtype-id "GRL_TYPE_METADATA_RESOLUTION_FLAGS")
+  (c-name "GrlSourceChangeType")
+  (gtype-id "GRL_TYPE_SOURCE_CHANGE_TYPE")
   (values
-    '("normal" "GRL_RESOLVE_NORMAL")
-    '("full" "GRL_RESOLVE_FULL")
-    '("idle-relay" "GRL_RESOLVE_IDLE_RELAY")
-    '("fast-only" "GRL_RESOLVE_FAST_ONLY")
+    '("changed" "GRL_CONTENT_CHANGED")
+    '("added" "GRL_CONTENT_ADDED")
+    '("removed" "GRL_CONTENT_REMOVED")
   )
 )
 
-(define-enum PluginRank
-  (in-module "Grl")
-  (c-name "GrlPluginRank")
-  (gtype-id "GRL_TYPE_PLUGIN_RANK")
-  (values
-    '("lowest" "GRL_PLUGIN_RANK_LOWEST")
-    '("low" "GRL_PLUGIN_RANK_LOW")
-    '("default" "GRL_PLUGIN_RANK_DEFAULT")
-    '("high" "GRL_PLUGIN_RANK_HIGH")
-    '("highest" "GRL_PLUGIN_RANK_HIGHEST")
-  )
-)
+
+;; From config.h
+
 
 
 ;; From grilo.h
@@ -339,2460 +267,644 @@
 
 
 
-;; From grl-config.h
+;; From grl-definitions.h
 
-(define-method set_plugin
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_plugin")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "plugin")
-  )
-)
 
-(define-method set_source
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_source")
+
+;; From grl-error.h
+
+
+
+;; From grl-log.h
+
+(define-method free
+  (of-object "GrlLogDomain")
+  (c-name "grl_log_domain_free")
   (return-type "none")
-  (parameters
-    '("const-gchar*" "source")
-  )
 )
 
-(define-method set_api_key
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_api_key")
+(define-function grl_log_configure
+  (c-name "grl_log_configure")
   (return-type "none")
   (parameters
-    '("const-gchar*" "key")
+    '("const-gchar*" "config")
   )
 )
 
-(define-method set_api_key_blob
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_api_key_blob")
+(define-function grl_log
+  (c-name "grl_log")
   (return-type "none")
   (parameters
-    '("const-guint8*" "blob")
-    '("gsize" "size")
+    '("GrlLogDomain*" "domain")
+    '("GrlLogLevel" "level")
+    '("const-gchar*" "strloc")
+    '("const-gchar*" "format")
   )
+  (varargs #t)
 )
 
-(define-method set_api_token
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_api_token")
-  (return-type "none")
+
+
+;; From grl-log-priv.h
+
+
+
+;; From grl-marshal.h
+
+
+
+;; From grl-metadata-key.h
+
+(define-function grl_metadata_key_get_name
+  (c-name "grl_metadata_key_get_name")
+  (return-type "const-gchar*")
   (parameters
-    '("const-gchar*" "token")
+    '("GrlKeyID" "key")
   )
 )
 
-(define-method set_api_secret
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_api_secret")
-  (return-type "none")
+(define-function grl_metadata_key_get_desc
+  (c-name "grl_metadata_key_get_desc")
+  (return-type "const-gchar*")
   (parameters
-    '("const-gchar*" "secret")
+    '("GrlKeyID" "key")
   )
 )
 
-(define-method set_username
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_username")
-  (return-type "none")
+(define-function grl_metadata_key_get_type
+  (c-name "grl_metadata_key_get_type")
+  (return-type "GType")
   (parameters
-    '("const-gchar*" "username")
+    '("GrlKeyID" "key")
   )
 )
 
-(define-method set_password
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_password")
-  (return-type "none")
+(define-function grl_metadata_key_list_new
+  (c-name "grl_metadata_key_list_new")
+  (is-constructor-of "GrlMetadataKeyList")
+  (return-type "GList*")
   (parameters
-    '("const-gchar*" "password")
+    '("GrlKeyID" "first_key")
   )
+  (varargs #t)
 )
 
-(define-method get_plugin
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_plugin")
-  (return-type "gchar*")
-)
 
-(define-method get_source
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_source")
-  (return-type "gchar*")
-)
 
-(define-method get_api_key
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_api_key")
-  (return-type "gchar*")
-)
+;; From grl-metadata-key-priv.h
 
-(define-method get_api_key_blob
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_api_key_blob")
-  (return-type "guint8*")
+(define-function grl_metadata_key_setup_system_keys
+  (c-name "grl_metadata_key_setup_system_keys")
+  (return-type "none")
   (parameters
-    '("gsize*" "size")
+    '("GrlRegistry*" "registry")
   )
 )
 
-(define-method get_api_token
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_api_token")
-  (return-type "gchar*")
-)
 
-(define-method get_api_secret
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_api_secret")
-  (return-type "gchar*")
-)
 
-(define-method get_username
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_username")
-  (return-type "gchar*")
-)
+;; From grl-metadata-source-priv.h
 
-(define-method get_password
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_password")
-  (return-type "gchar*")
-)
 
-(define-function grl_config_get_type
-  (c-name "grl_config_get_type")
-  (return-type "GType")
-)
 
-(define-function grl_config_new
-  (c-name "grl_config_new")
-  (is-constructor-of "GrlConfig")
-  (return-type "GrlConfig*")
+;; From grl-multiple.h
+
+(define-function grl_multiple_search
+  (c-name "grl_multiple_search")
+  (return-type "guint")
   (parameters
-    '("const-gchar*" "plugin")
-    '("const-gchar*" "source")
+    '("const-GList*" "sources")
+    '("const-gchar*" "text")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResultCb" "callback")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method set
-  (of-object "GrlConfig")
-  (c-name "grl_config_set")
-  (return-type "none")
+(define-function grl_multiple_search_sync
+  (c-name "grl_multiple_search_sync")
+  (return-type "GList*")
   (parameters
-    '("const-gchar*" "param")
-    '("const-GValue*" "value")
+    '("const-GList*" "sources")
+    '("const-gchar*" "text")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
   )
 )
 
-(define-method set_string
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_string")
+(define-function grl_multiple_get_media_from_uri
+  (c-name "grl_multiple_get_media_from_uri")
   (return-type "none")
   (parameters
-    '("const-gchar*" "param")
-    '("const-gchar*" "value")
+    '("const-gchar*" "uri")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResolveCb" "callback")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method set_int
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_int")
+
+
+;; From grl-operation.h
+
+(define-function grl_operation_cancel
+  (c-name "grl_operation_cancel")
   (return-type "none")
   (parameters
-    '("const-gchar*" "param")
-    '("gint" "value")
+    '("guint" "operation_id")
   )
 )
 
-(define-method set_float
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_float")
-  (return-type "none")
+(define-function grl_operation_get_data
+  (c-name "grl_operation_get_data")
+  (return-type "gpointer")
   (parameters
-    '("const-gchar*" "param")
-    '("gfloat" "value")
+    '("guint" "operation_id")
   )
 )
 
-(define-method set_boolean
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_boolean")
+(define-function grl_operation_set_data
+  (c-name "grl_operation_set_data")
   (return-type "none")
   (parameters
-    '("const-gchar*" "param")
-    '("gboolean" "value")
+    '("guint" "operation_id")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method set_binary
-  (of-object "GrlConfig")
-  (c-name "grl_config_set_binary")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "param")
-    '("const-guint8*" "blob")
-    '("gsize" "size")
-  )
+
+
+;; From grl-operation-options.h
+
+(define-function grl_operation_options_get_type
+  (c-name "grl_operation_options_get_type")
+  (return-type "GType")
 )
 
-(define-method get_string
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_string")
-  (return-type "gchar*")
+(define-function grl_operation_options_new
+  (c-name "grl_operation_options_new")
+  (is-constructor-of "GrlOperationOptions")
+  (return-type "GrlOperationOptions*")
   (parameters
-    '("const-gchar*" "param")
+    '("GrlCaps*" "caps")
   )
 )
 
-(define-method get_int
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_int")
-  (return-type "gint")
+(define-method obey_caps
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_obey_caps")
+  (return-type "gboolean")
   (parameters
-    '("const-gchar*" "param")
+    '("GrlCaps*" "caps")
+    '("GrlOperationOptions**" "supported_options")
+    '("GrlOperationOptions**" "unsupported_options")
   )
 )
 
-(define-method get_float
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_float")
-  (return-type "gfloat")
-  (parameters
-    '("const-gchar*" "param")
-  )
+(define-method copy
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_copy")
+  (return-type "GrlOperationOptions*")
 )
 
-(define-method get_boolean
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_boolean")
+(define-method set_skip
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_skip")
   (return-type "gboolean")
   (parameters
-    '("const-gchar*" "param")
+    '("guint" "skip")
   )
 )
 
-(define-method get_binary
-  (of-object "GrlConfig")
-  (c-name "grl_config_get_binary")
-  (return-type "guint8*")
-  (parameters
-    '("const-gchar*" "param")
-    '("gsize*" "size")
-  )
+(define-method get_skip
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_skip")
+  (return-type "guint")
 )
 
-(define-method has_param
-  (of-object "GrlConfig")
-  (c-name "grl_config_has_param")
+(define-method set_count
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_count")
   (return-type "gboolean")
   (parameters
-    '("const-gchar*" "param")
+    '("gint" "count")
   )
 )
 
+(define-method get_count
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_count")
+  (return-type "gint")
+)
 
-
-;; From grl-data.h
-
-(define-function grl_data_get_type
-  (c-name "grl_data_get_type")
-  (return-type "GType")
+(define-method set_flags
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_flags")
+  (return-type "gboolean")
+  (parameters
+    '("GrlResolutionFlags" "flags")
+  )
 )
 
-(define-function grl_data_new
-  (c-name "grl_data_new")
-  (is-constructor-of "GrlData")
-  (return-type "GrlData*")
+(define-method get_flags
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_flags")
+  (return-type "GrlResolutionFlags")
 )
 
-(define-method set
-  (of-object "GrlData")
-  (c-name "grl_data_set")
-  (return-type "none")
+(define-method set_type_filter
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_type_filter")
+  (return-type "gboolean")
   (parameters
-    '("GrlKeyID" "key")
-    '("const-GValue*" "value")
+    '("GrlTypeFilter" "filter")
   )
 )
 
-(define-method set_string
-  (of-object "GrlData")
-  (c-name "grl_data_set_string")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("const-gchar*" "strvalue")
-  )
+(define-method get_type_filter
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_type_filter")
+  (return-type "GrlTypeFilter")
 )
 
-(define-method set_int
-  (of-object "GrlData")
-  (c-name "grl_data_set_int")
-  (return-type "none")
+(define-method set_key_filter_value
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_key_filter_value")
+  (return-type "gboolean")
   (parameters
     '("GrlKeyID" "key")
-    '("gint" "intvalue")
+    '("GValue*" "value")
   )
 )
 
-(define-method set_float
-  (of-object "GrlData")
-  (c-name "grl_data_set_float")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gfloat" "floatvalue")
-  )
-)
-
-(define-method set_binary
-  (of-object "GrlData")
-  (c-name "grl_data_set_binary")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("const-guint8*" "buf")
-    '("gsize" "size")
-  )
-)
-
-(define-method set_boxed
-  (of-object "GrlData")
-  (c-name "grl_data_set_boxed")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gconstpointer" "boxed")
-  )
-)
-
-(define-method get
-  (of-object "GrlData")
-  (c-name "grl_data_get")
-  (return-type "const-GValue*")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_string
-  (of-object "GrlData")
-  (c-name "grl_data_get_string")
-  (return-type "const-gchar*")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_int
-  (of-object "GrlData")
-  (c-name "grl_data_get_int")
-  (return-type "gint")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_float
-  (of-object "GrlData")
-  (c-name "grl_data_get_float")
-  (return-type "gfloat")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_binary
-  (of-object "GrlData")
-  (c-name "grl_data_get_binary")
-  (return-type "const-guint8*")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gsize*" "size")
-  )
-)
-
-(define-method get_boxed
-  (of-object "GrlData")
-  (c-name "grl_data_get_boxed")
-  (return-type "gpointer")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method remove
-  (of-object "GrlData")
-  (c-name "grl_data_remove")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method has_key
-  (of-object "GrlData")
-  (c-name "grl_data_has_key")
-  (return-type "gboolean")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_keys
-  (of-object "GrlData")
-  (c-name "grl_data_get_keys")
-  (return-type "GList*")
-)
-
-(define-method add_related_keys
-  (of-object "GrlData")
-  (c-name "grl_data_add_related_keys")
-  (return-type "none")
-  (parameters
-    '("GrlRelatedKeys*" "relkeys")
-  )
-)
-
-(define-method add_string
-  (of-object "GrlData")
-  (c-name "grl_data_add_string")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("const-gchar*" "strvalue")
-  )
-)
-
-(define-method add_int
-  (of-object "GrlData")
-  (c-name "grl_data_add_int")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gint" "intvalue")
-  )
-)
-
-(define-method add_float
-  (of-object "GrlData")
-  (c-name "grl_data_add_float")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gfloat" "floatvalue")
-  )
-)
-
-(define-method add_binary
-  (of-object "GrlData")
-  (c-name "grl_data_add_binary")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("const-guint8*" "buf")
-    '("gsize" "size")
-  )
-)
-
-(define-method add_boxed
-  (of-object "GrlData")
-  (c-name "grl_data_add_boxed")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("gconstpointer" "boxed")
-  )
-)
-
-(define-method length
-  (of-object "GrlData")
-  (c-name "grl_data_length")
-  (return-type "guint")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_related_keys
-  (of-object "GrlData")
-  (c-name "grl_data_get_related_keys")
-  (return-type "GrlRelatedKeys*")
-  (parameters
-    '("GrlKeyID" "key")
-    '("guint" "index")
-  )
-)
-
-(define-method get_single_values_for_key
-  (of-object "GrlData")
-  (c-name "grl_data_get_single_values_for_key")
-  (return-type "GList*")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method get_single_values_for_key_string
-  (of-object "GrlData")
-  (c-name "grl_data_get_single_values_for_key_string")
-  (return-type "GList*")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-method remove_nth
-  (of-object "GrlData")
-  (c-name "grl_data_remove_nth")
-  (return-type "none")
-  (parameters
-    '("GrlKeyID" "key")
-    '("guint" "index")
-  )
-)
-
-(define-method set_related_keys
-  (of-object "GrlData")
-  (c-name "grl_data_set_related_keys")
-  (return-type "none")
-  (parameters
-    '("GrlRelatedKeys*" "relkeys")
-    '("guint" "index")
-  )
-)
-
-(define-method dup
-  (of-object "GrlData")
-  (c-name "grl_data_dup")
-  (return-type "GrlData*")
-)
-
-
-
-;; From grl-definitions.h
-
-
-
-;; From grl-error.h
-
-
-
-;; From grl-log.h
-
-(define-method free
-  (of-object "GrlLogDomain")
-  (c-name "grl_log_domain_free")
-  (return-type "none")
-)
-
-(define-function grl_log_configure
-  (c-name "grl_log_configure")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "config")
-  )
-)
-
-(define-function grl_log
-  (c-name "grl_log")
-  (return-type "none")
-  (parameters
-    '("GrlLogDomain*" "domain")
-    '("GrlLogLevel" "level")
-    '("const-gchar*" "strloc")
-    '("const-gchar*" "format")
-  )
-  (varargs #t)
-)
-
-
-
-;; From grl-media-audio.h
-
-(define-method set_artist
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_artist")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "artist")
-  )
-)
-
-(define-method set_album
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_album")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "album")
-  )
-)
-
-(define-method set_genre
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_genre")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "genre")
-  )
-)
-
-(define-method set_lyrics
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_lyrics")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "lyrics")
-  )
-)
-
-(define-method set_bitrate
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_bitrate")
-  (return-type "none")
-  (parameters
-    '("gint" "bitrate")
-  )
-)
-
-(define-method set_track_number
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_track_number")
-  (return-type "none")
-  (parameters
-    '("gint" "track_number")
-  )
-)
-
-(define-method set_url_data
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_set_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gint" "bitrate")
-  )
-)
-
-(define-method add_artist
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_add_artist")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "artist")
-  )
-)
-
-(define-method add_genre
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_add_genre")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "genre")
-  )
-)
-
-(define-method add_lyrics
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_add_lyrics")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "lyrics")
-  )
-)
-
-(define-method add_url_data
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_add_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gint" "bitrate")
-  )
-)
-
-(define-method get_artist
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_artist")
-  (return-type "const-gchar*")
-)
-
-(define-method get_artist_nth
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_artist_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_album
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_album")
-  (return-type "const-gchar*")
-)
-
-(define-method get_genre
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_genre")
-  (return-type "const-gchar*")
-)
-
-(define-method get_genre_nth
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_genre_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_lyrics
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_lyrics")
-  (return-type "const-gchar*")
-)
-
-(define-method get_lyrics_nth
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_lyrics_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_bitrate
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_bitrate")
-  (return-type "gint")
-)
-
-(define-method get_track_number
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_track_number")
-  (return-type "gint")
-)
-
-(define-method get_url_data
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_url_data")
-  (return-type "const-gchar*")
-  (parameters
-    '("gchar**" "mime")
-    '("gint*" "bitrate")
-  )
-)
-
-(define-method get_url_data_nth
-  (of-object "GrlMediaAudio")
-  (c-name "grl_media_audio_get_url_data_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-    '("gchar**" "mime")
-    '("gint*" "bitrate")
-  )
-)
-
-(define-function grl_media_audio_get_type
-  (c-name "grl_media_audio_get_type")
-  (return-type "GType")
-)
-
-(define-function grl_media_audio_new
-  (c-name "grl_media_audio_new")
-  (is-constructor-of "GrlMediaAudio")
-  (return-type "GrlMedia*")
-)
-
-
-
-;; From grl-media-box.h
-
-(define-function grl_media_box_get_type
-  (c-name "grl_media_box_get_type")
-  (return-type "GType")
-)
-
-(define-function grl_media_box_new
-  (c-name "grl_media_box_new")
-  (is-constructor-of "GrlMediaBox")
-  (return-type "GrlMedia*")
-)
-
-(define-method set_childcount
-  (of-object "GrlMediaBox")
-  (c-name "grl_media_box_set_childcount")
-  (return-type "none")
-  (parameters
-    '("gint" "childcount")
-  )
-)
-
-(define-method get_childcount
-  (of-object "GrlMediaBox")
-  (c-name "grl_media_box_get_childcount")
-  (return-type "gint")
-)
-
-
-
-;; From grl-media.h
-
-(define-method set_id
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_id")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "id")
-  )
-)
-
-(define-method set_url
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_url")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-  )
-)
-
-(define-method set_author
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_author")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "author")
-  )
-)
-
-(define-method set_title
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_title")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "title")
-  )
-)
-
-(define-method set_description
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_description")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "description")
-  )
-)
-
-(define-method set_source
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_source")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "source")
-  )
-)
-
-(define-method set_thumbnail
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_thumbnail")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "thumbnail")
-  )
-)
-
-(define-method set_thumbnail_binary
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_thumbnail_binary")
-  (return-type "none")
-  (parameters
-    '("const-guint8*" "thumbnail")
-    '("gsize" "size")
-  )
-)
-
-(define-method set_site
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_site")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "site")
-  )
-)
-
-(define-method set_duration
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_duration")
-  (return-type "none")
-  (parameters
-    '("gint" "duration")
-  )
-)
-
-(define-method set_publication_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_publication_date")
-  (return-type "none")
-  (parameters
-    '("const-GDateTime*" "date")
-  )
-)
-
-(define-method set_creation_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_creation_date")
-  (return-type "none")
-  (parameters
-    '("const-GDateTime*" "creation_date")
-  )
-)
-
-(define-method set_modification_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_modification_date")
-  (return-type "none")
-  (parameters
-    '("const-GDateTime*" "modification_date")
-  )
-)
-
-(define-method set_mime
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_mime")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "mime")
-  )
-)
-
-(define-method set_play_count
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_play_count")
-  (return-type "none")
-  (parameters
-    '("gint" "play_count")
-  )
-)
-
-(define-method set_last_played
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_last_played")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "last_played")
-  )
-)
-
-(define-method set_last_position
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_last_position")
-  (return-type "none")
-  (parameters
-    '("gint" "last_position")
-  )
-)
-
-(define-method set_external_player
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_external_player")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "player")
-  )
-)
-
-(define-method set_external_url
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_external_url")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-  )
-)
-
-(define-method set_studio
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_studio")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "studio")
-  )
-)
-
-(define-method set_certificate
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_certificate")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "certificate")
-  )
-)
-
-(define-method set_license
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_license")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "license")
-  )
-)
-
-(define-method set_rating
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_rating")
-  (return-type "none")
-  (parameters
-    '("gfloat" "rating")
-    '("gfloat" "max")
-  )
-)
-
-(define-method set_url_data
-  (of-object "GrlMedia")
-  (c-name "grl_media_set_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-  )
-)
-
-(define-method add_url_data
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-  )
-)
-
-(define-method add_author
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_author")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "author")
-  )
-)
-
-(define-method add_thumbnail
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_thumbnail")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "thumbnail")
-  )
-)
-
-(define-method add_thumbnail_binary
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_thumbnail_binary")
-  (return-type "none")
-  (parameters
-    '("const-guint8*" "thumbnail")
-    '("gsize" "size")
-  )
-)
-
-(define-method add_external_player
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_external_player")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "player")
-  )
-)
-
-(define-method add_external_url
-  (of-object "GrlMedia")
-  (c-name "grl_media_add_external_url")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-  )
-)
-
-(define-method get_id
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_id")
-  (return-type "const-gchar*")
-)
-
-(define-method get_url
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_url")
-  (return-type "const-gchar*")
-)
-
-(define-method get_url_data
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_url_data")
-  (return-type "const-gchar*")
-  (parameters
-    '("gchar**" "mime")
-  )
-)
-
-(define-method get_url_data_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_url_data_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-    '("gchar**" "mime")
-  )
-)
-
-(define-method get_author
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_author")
-  (return-type "const-gchar*")
-)
-
-(define-method get_author_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_author_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_title
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_title")
-  (return-type "const-gchar*")
-)
-
-(define-method get_description
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_description")
-  (return-type "const-gchar*")
-)
-
-(define-method get_source
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_source")
-  (return-type "const-gchar*")
-)
-
-(define-method get_thumbnail
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_thumbnail")
-  (return-type "const-gchar*")
-)
-
-(define-method get_thumbnail_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_thumbnail_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_thumbnail_binary
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_thumbnail_binary")
-  (return-type "const-guint8*")
-  (parameters
-    '("gsize*" "size")
-  )
-)
-
-(define-method get_thumbnail_binary_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_thumbnail_binary_nth")
-  (return-type "const-guint8*")
-  (parameters
-    '("gsize*" "size")
-    '("guint" "index")
-  )
-)
-
-(define-method get_site
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_site")
-  (return-type "const-gchar*")
-)
-
-(define-method get_duration
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_duration")
-  (return-type "gint")
-)
-
-(define-method get_publication_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_publication_date")
-  (return-type "GDateTime*")
-)
-
-(define-method get_creation_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_creation_date")
-  (return-type "GDateTime*")
-)
-
-(define-method get_modification_date
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_modification_date")
-  (return-type "GDateTime*")
-)
-
-(define-method get_mime
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_mime")
-  (return-type "const-gchar*")
-)
-
-(define-method get_rating
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_rating")
-  (return-type "gfloat")
-)
-
-(define-method get_play_count
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_play_count")
-  (return-type "gint")
-)
-
-(define-method get_last_position
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_last_position")
-  (return-type "gint")
-)
-
-(define-method get_last_played
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_last_played")
-  (return-type "const-gchar*")
-)
-
-(define-method get_player
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_player")
-  (return-type "const-gchar*")
-)
-
-(define-method get_player_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_player_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_external_url
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_external_url")
-  (return-type "const-gchar*")
-)
-
-(define-method get_external_url_nth
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_external_url_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-  )
-)
-
-(define-method get_studio
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_studio")
-  (return-type "const-gchar*")
-)
-
-(define-method get_certificate
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_certificate")
-  (return-type "const-gchar*")
-)
-
-(define-method get_license
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_license")
-  (return-type "const-gchar*")
-)
-
-(define-method get_start_time
-  (of-object "GrlMedia")
-  (c-name "grl_media_get_start_time")
-  (return-type "gfloat")
-)
-
-(define-function grl_media_get_type
-  (c-name "grl_media_get_type")
-  (return-type "GType")
-)
-
-(define-function grl_media_new
-  (c-name "grl_media_new")
-  (is-constructor-of "GrlMedia")
-  (return-type "GrlMedia*")
-)
-
-(define-method serialize
-  (of-object "GrlMedia")
-  (c-name "grl_media_serialize")
-  (return-type "gchar*")
-)
-
-(define-method serialize_extended
-  (of-object "GrlMedia")
-  (c-name "grl_media_serialize_extended")
-  (return-type "gchar*")
-  (parameters
-    '("GrlMediaSerializeType" "serial_type")
-  )
-  (varargs #t)
-)
-
-(define-function grl_media_unserialize
-  (c-name "grl_media_unserialize")
-  (return-type "GrlMedia*")
-  (parameters
-    '("const-gchar*" "serial")
-  )
-)
-
-
-
-;; From grl-media-image.h
-
-(define-method set_width
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_width")
-  (return-type "none")
-  (parameters
-    '("gint" "width")
-  )
-)
-
-(define-method set_height
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_height")
-  (return-type "none")
-  (parameters
-    '("gint" "height")
-  )
-)
-
-(define-method get_width
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_width")
-  (return-type "gint")
-)
-
-(define-method get_height
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_height")
-  (return-type "gint")
-)
-
-(define-method get_camera_model
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_camera_model")
-  (return-type "const-gchar*")
-)
-
-(define-method get_flash_used
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_flash_used")
-  (return-type "const-gchar*")
-)
-
-(define-method get_exposure_time
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_exposure_time")
-  (return-type "gfloat")
-)
-
-(define-method get_iso_speed
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_iso_speed")
-  (return-type "gfloat")
-)
-
-(define-method get_orientation
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_orientation")
-  (return-type "gint")
-)
-
-(define-method set_size
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_size")
-  (return-type "none")
-  (parameters
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method get_url_data
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_url_data")
-  (return-type "const-gchar*")
-  (parameters
-    '("gchar**" "mime")
-    '("gint*" "width")
-    '("gint*" "height")
-  )
-)
-
-(define-method get_url_data_nth
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_get_url_data_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-    '("gchar**" "mime")
-    '("gint*" "width")
-    '("gint*" "height")
-  )
-)
-
-(define-method set_url_data
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method add_url_data
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_add_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method set_camera_model
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_camera_model")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "camera_model")
-  )
-)
-
-(define-method set_flash_used
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_flash_used")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "flash_used")
-  )
-)
-
-(define-method set_exposure_time
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_exposure_time")
-  (return-type "none")
-  (parameters
-    '("gfloat" "exposure_time")
-  )
-)
-
-(define-method set_iso_speed
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_iso_speed")
-  (return-type "none")
-  (parameters
-    '("gfloat" "iso_speed")
-  )
-)
-
-(define-method set_orientation
-  (of-object "GrlMediaImage")
-  (c-name "grl_media_image_set_orientation")
-  (return-type "none")
-  (parameters
-    '("gint" "orientation")
-  )
-)
-
-(define-function grl_media_image_get_type
-  (c-name "grl_media_image_get_type")
-  (return-type "GType")
-)
-
-(define-function grl_media_image_new
-  (c-name "grl_media_image_new")
-  (is-constructor-of "GrlMediaImage")
-  (return-type "GrlMedia*")
-)
-
-
-
-;; From grl-media-plugin.h
-
-(define-function grl_media_plugin_get_type
-  (c-name "grl_media_plugin_get_type")
-  (return-type "GType")
-)
-
-(define-method get_name
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_name")
-  (return-type "const-gchar*")
-)
-
-(define-method get_description
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_description")
-  (return-type "const-gchar*")
-)
-
-(define-method get_version
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_version")
-  (return-type "const-gchar*")
-)
-
-(define-method get_license
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_license")
-  (return-type "const-gchar*")
-)
-
-(define-method get_author
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_author")
-  (return-type "const-gchar*")
-)
-
-(define-method get_site
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_site")
-  (return-type "const-gchar*")
-)
-
-(define-method get_id
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_id")
-  (return-type "const-gchar*")
-)
-
-(define-method get_filename
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_filename")
-  (return-type "const-gchar*")
-)
-
-(define-method get_rank
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_rank")
-  (return-type "gint")
-)
-
-(define-method get_info_keys
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_info_keys")
-  (return-type "GList*")
-)
-
-(define-method get_info
-  (of-object "GrlMediaPlugin")
-  (c-name "grl_media_plugin_get_info")
-  (return-type "const-gchar*")
-  (parameters
-    '("const-gchar*" "key")
-  )
-)
-
-
-
-;; From grl-media-source.h
-
-(define-function grl_media_source_get_type
-  (c-name "grl_media_source_get_type")
-  (return-type "GType")
-)
-
-(define-method browse
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_browse")
-  (return-type "guint")
-  (parameters
-    '("GrlMedia*" "container")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceResultCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method browse_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_browse_sync")
-  (return-type "GList*")
-  (parameters
-    '("GrlMedia*" "container")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
-
-(define-method search
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_search")
-  (return-type "guint")
-  (parameters
-    '("const-gchar*" "text")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceResultCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method search_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_search_sync")
-  (return-type "GList*")
-  (parameters
-    '("const-gchar*" "text")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
-
-(define-method query
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_query")
-  (return-type "guint")
-  (parameters
-    '("const-gchar*" "query")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceResultCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method query_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_query_sync")
-  (return-type "GList*")
-  (parameters
-    '("const-gchar*" "query")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
-
-(define-method metadata
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_metadata")
-  (return-type "guint")
-  (parameters
-    '("GrlMedia*" "media")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceMetadataCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method metadata_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_metadata_sync")
-  (return-type "GrlMedia*")
-  (parameters
-    '("GrlMedia*" "media")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
-
-(define-method store
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_store")
-  (return-type "none")
-  (parameters
-    '("GrlMediaBox*" "parent")
-    '("GrlMedia*" "media")
-    '("GrlMediaSourceStoreCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method store_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_store_sync")
-  (return-type "none")
-  (parameters
-    '("GrlMediaBox*" "parent")
-    '("GrlMedia*" "media")
-    '("GError**" "error")
-  )
-)
-
-(define-method remove
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_remove")
-  (return-type "none")
-  (parameters
-    '("GrlMedia*" "media")
-    '("GrlMediaSourceRemoveCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method remove_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_remove_sync")
-  (return-type "none")
-  (parameters
-    '("GrlMedia*" "media")
-    '("GError**" "error")
-  )
-)
-
-(define-method set_auto_split_threshold
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_set_auto_split_threshold")
-  (return-type "none")
-  (parameters
-    '("guint" "threshold")
-  )
-)
-
-(define-method get_auto_split_threshold
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_get_auto_split_threshold")
-  (return-type "guint")
-)
-
-(define-method test_media_from_uri
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_test_media_from_uri")
-  (return-type "gboolean")
-  (parameters
-    '("const-gchar*" "uri")
-  )
-)
-
-(define-method get_media_from_uri
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_get_media_from_uri")
-  (return-type "guint")
-  (parameters
-    '("const-gchar*" "uri")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceMetadataCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method get_media_from_uri_sync
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_get_media_from_uri_sync")
-  (return-type "GrlMedia*")
-  (parameters
-    '("const-gchar*" "uri")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
-
-(define-method notify_change_start
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_notify_change_start")
+(define-method set_key_filters
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_key_filters")
   (return-type "gboolean")
   (parameters
-    '("GError**" "error")
   )
+  (varargs #t)
 )
 
-(define-method notify_change_stop
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_notify_change_stop")
+(define-method set_key_filter_dictionary
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_key_filter_dictionary")
   (return-type "gboolean")
   (parameters
-    '("GError**" "error")
-  )
-)
-
-(define-method notify_change_list
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_notify_change_list")
-  (return-type "none")
-  (parameters
-    '("GPtrArray*" "changed_medias")
-    '("GrlMediaSourceChangeType" "change_type")
-    '("gboolean" "location_unknown")
-  )
-)
-
-(define-method notify_change
-  (of-object "GrlMediaSource")
-  (c-name "grl_media_source_notify_change")
-  (return-type "none")
-  (parameters
-    '("GrlMedia*" "media")
-    '("GrlMediaSourceChangeType" "change_type")
-    '("gboolean" "location_unknown")
-  )
-)
-
-
-
-;; From grl-media-video.h
-
-(define-method set_width
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_width")
-  (return-type "none")
-  (parameters
-    '("gint" "width")
-  )
-)
-
-(define-method set_height
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_height")
-  (return-type "none")
-  (parameters
-    '("gint" "height")
-  )
-)
-
-(define-method set_framerate
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_framerate")
-  (return-type "none")
-  (parameters
-    '("gfloat" "framerate")
-  )
-)
-
-(define-method set_season
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_season")
-  (return-type "none")
-  (parameters
-    '("gint" "season")
-  )
-)
-
-(define-method set_episode
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_episode")
-  (return-type "none")
-  (parameters
-    '("gint" "episode")
-  )
-)
-
-(define-method set_show
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_show")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "show")
-  )
-)
-
-(define-method get_width
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_width")
-  (return-type "gint")
-)
-
-(define-method get_height
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_height")
-  (return-type "gint")
-)
-
-(define-method get_framerate
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_framerate")
-  (return-type "gfloat")
-)
-
-(define-method get_season
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_season")
-  (return-type "gint")
-)
-
-(define-method get_episode
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_episode")
-  (return-type "gint")
-)
-
-(define-method get_show
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_show")
-  (return-type "const-gchar*")
-)
-
-(define-function grl_media_video_get_type
-  (c-name "grl_media_video_get_type")
-  (return-type "GType")
-)
-
-(define-function grl_media_video_new
-  (c-name "grl_media_video_new")
-  (is-constructor-of "GrlMediaVideo")
-  (return-type "GrlMedia*")
-)
-
-(define-method set_size
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_size")
-  (return-type "none")
-  (parameters
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method set_url_data
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_set_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gfloat" "framerate")
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method add_url_data
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_add_url_data")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "url")
-    '("const-gchar*" "mime")
-    '("gfloat" "framerate")
-    '("gint" "width")
-    '("gint" "height")
-  )
-)
-
-(define-method get_url_data
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_url_data")
-  (return-type "const-gchar*")
-  (parameters
-    '("gchar**" "mime")
-    '("gfloat*" "framerate")
-    '("gint*" "width")
-    '("gint*" "height")
-  )
-)
-
-(define-method get_url_data_nth
-  (of-object "GrlMediaVideo")
-  (c-name "grl_media_video_get_url_data_nth")
-  (return-type "const-gchar*")
-  (parameters
-    '("guint" "index")
-    '("gchar**" "mime")
-    '("gfloat*" "framerate")
-    '("gint*" "width")
-    '("gint*" "height")
-  )
-)
-
-
-
-;; From grl-metadata-key.h
-
-(define-function grl_metadata_key_get_name
-  (c-name "grl_metadata_key_get_name")
-  (return-type "const-gchar*")
-  (parameters
-    '("GrlKeyID" "key")
-  )
-)
-
-(define-function grl_metadata_key_get_desc
-  (c-name "grl_metadata_key_get_desc")
-  (return-type "const-gchar*")
-  (parameters
-    '("GrlKeyID" "key")
+    '("GHashTable*" "filters")
   )
 )
 
-(define-function grl_metadata_key_get_type
-  (c-name "grl_metadata_key_get_type")
-  (return-type "GType")
+(define-method get_key_filter
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_key_filter")
+  (return-type "GValue*")
   (parameters
     '("GrlKeyID" "key")
   )
 )
 
-(define-function grl_metadata_key_list_new
-  (c-name "grl_metadata_key_list_new")
-  (is-constructor-of "GrlMetadataKeyList")
-  (return-type "GList*")
-  (parameters
-    '("GrlKeyID" "first_key")
-  )
-  (varargs #t)
-)
-
-
-
-;; From grl-metadata-source.h
-
-(define-function grl_metadata_source_get_type
-  (c-name "grl_metadata_source_get_type")
-  (return-type "GType")
-)
-
-(define-method supported_operations
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_supported_operations")
-  (return-type "GrlSupportedOps")
-)
-
-(define-method supported_keys
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_supported_keys")
-  (return-type "const-GList*")
-)
-
-(define-method slow_keys
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_slow_keys")
-  (return-type "const-GList*")
-)
-
-(define-method filter_supported
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_filter_supported")
-  (return-type "GList*")
-  (parameters
-    '("GList**" "keys")
-    '("gboolean" "return_filtered")
-  )
-)
-
-(define-method filter_slow
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_filter_slow")
-  (return-type "GList*")
-  (parameters
-    '("GList**" "keys")
-    '("gboolean" "return_filtered")
-  )
-)
-
-(define-method filter_writable
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_filter_writable")
+(define-method get_key_filter_list
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_key_filter_list")
   (return-type "GList*")
-  (parameters
-    '("GList**" "keys")
-    '("gboolean" "return_filtered")
-  )
-)
-
-(define-method writable_keys
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_writable_keys")
-  (return-type "const-GList*")
 )
 
-(define-method may_resolve
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_may_resolve")
+(define-method set_key_range_filter_value
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_key_range_filter_value")
   (return-type "gboolean")
   (parameters
-    '("GrlMedia*" "media")
-    '("GrlKeyID" "key_id")
-    '("GList**" "missing_keys")
-  )
-)
-
-(define-method resolve
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_resolve")
-  (return-type "guint")
-  (parameters
-    '("const-GList*" "keys")
-    '("GrlMedia*" "media")
-    '("GrlOperationOptions*" "options")
-    '("GrlMetadataSourceResolveCb" "callback")
-    '("gpointer" "user_data")
+    '("GrlKeyID" "key")
+    '("GValue*" "min_value")
+    '("GValue*" "max_value")
   )
 )
 
-(define-method resolve_sync
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_resolve_sync")
-  (return-type "GrlMedia*")
+(define-method set_key_range_filter
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_set_key_range_filter")
+  (return-type "gboolean")
   (parameters
-    '("const-GList*" "keys")
-    '("GrlMedia*" "media")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
   )
+  (varargs #t)
 )
 
-(define-method set_metadata
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_set_metadata")
+(define-method get_key_range_filter
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_key_range_filter")
   (return-type "none")
   (parameters
-    '("GrlMedia*" "media")
-    '("GList*" "keys")
-    '("GrlMetadataWritingFlags" "flags")
-    '("GrlMetadataSourceSetMetadataCb" "callback")
-    '("gpointer" "user_data")
+    '("GrlKeyID" "key")
+    '("GValue**" "min_value")
+    '("GValue**" "max_value")
   )
 )
 
-(define-method set_metadata_sync
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_set_metadata_sync")
+(define-method get_key_range_filter_list
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_get_key_range_filter_list")
   (return-type "GList*")
-  (parameters
-    '("GrlMedia*" "media")
-    '("GList*" "keys")
-    '("GrlMetadataWritingFlags" "flags")
-    '("GError**" "error")
-  )
-)
-
-(define-method get_id
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_get_id")
-  (return-type "const-gchar*")
-)
-
-(define-method get_name
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_get_name")
-  (return-type "const-gchar*")
-)
-
-(define-method get_description
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_get_description")
-  (return-type "const-gchar*")
-)
-
-(define-method get_caps
-  (of-object "GrlMetadataSource")
-  (c-name "grl_metadata_source_get_caps")
-  (return-type "GrlCaps*")
-  (parameters
-    '("GrlSupportedOps" "operation")
-  )
 )
 
 
 
-;; From grl-multiple.h
+;; From grl-operation-options-priv.h
 
-(define-function grl_multiple_search
-  (c-name "grl_multiple_search")
-  (return-type "guint")
+(define-method key_is_set
+  (of-object "GrlOperationOptions")
+  (c-name "grl_operation_options_key_is_set")
+  (return-type "gboolean")
   (parameters
-    '("const-GList*" "sources")
-    '("const-gchar*" "text")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceResultCb" "callback")
-    '("gpointer" "user_data")
+    '("const-gchar*" "key")
   )
 )
 
-(define-function grl_multiple_search_sync
-  (c-name "grl_multiple_search_sync")
-  (return-type "GList*")
-  (parameters
-    '("const-GList*" "sources")
-    '("const-gchar*" "text")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GError**" "error")
-  )
-)
 
-(define-function grl_multiple_get_media_from_uri
-  (c-name "grl_multiple_get_media_from_uri")
-  (return-type "none")
-  (parameters
-    '("const-gchar*" "uri")
-    '("const-GList*" "keys")
-    '("GrlOperationOptions*" "options")
-    '("GrlMediaSourceMetadataCb" "callback")
-    '("gpointer" "user_data")
-  )
-)
 
+;; From grl-operation-priv.h
 
+(define-function grl_operation_init
+  (c-name "grl_operation_init")
+  (return-type "none")
+)
 
-;; From grl-operation.h
+(define-function grl_operation_generate_id
+  (c-name "grl_operation_generate_id")
+  (return-type "guint")
+)
 
-(define-function grl_operation_cancel
-  (c-name "grl_operation_cancel")
+(define-function grl_operation_set_private_data
+  (c-name "grl_operation_set_private_data")
   (return-type "none")
   (parameters
     '("guint" "operation_id")
+    '("gpointer" "private_data")
+    '("GrlOperationCancelCb" "cancel_cb")
+    '("GDestroyNotify" "destroy_cb")
   )
 )
 
-(define-function grl_operation_get_data
-  (c-name "grl_operation_get_data")
+(define-function grl_operation_get_private_data
+  (c-name "grl_operation_get_private_data")
   (return-type "gpointer")
   (parameters
     '("guint" "operation_id")
   )
 )
 
-(define-function grl_operation_set_data
-  (c-name "grl_operation_set_data")
+(define-function grl_operation_remove
+  (c-name "grl_operation_remove")
   (return-type "none")
   (parameters
     '("guint" "operation_id")
-    '("gpointer" "user_data")
   )
 )
 
 
 
-;; From grl-operation-options.h
+;; From grl-plugin.h
 
-(define-function grl_operation_options_get_type
-  (c-name "grl_operation_options_get_type")
+(define-function grl_plugin_get_type
+  (c-name "grl_plugin_get_type")
   (return-type "GType")
 )
 
-(define-function grl_operation_options_new
-  (c-name "grl_operation_options_new")
-  (is-constructor-of "GrlOperationOptions")
-  (return-type "GrlOperationOptions*")
-  (parameters
-    '("GrlCaps*" "caps")
-  )
+(define-method get_name
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_name")
+  (return-type "const-gchar*")
 )
 
-(define-method obey_caps
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_obey_caps")
-  (return-type "gboolean")
-  (parameters
-    '("GrlCaps*" "caps")
-    '("GrlOperationOptions**" "supported_options")
-    '("GrlOperationOptions**" "unsupported_options")
-  )
+(define-method get_description
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_description")
+  (return-type "const-gchar*")
 )
 
-(define-method copy
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_copy")
-  (return-type "GrlOperationOptions*")
+(define-method get_version
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_version")
+  (return-type "const-gchar*")
 )
 
-(define-method set_skip
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_skip")
-  (return-type "gboolean")
-  (parameters
-    '("guint" "skip")
-  )
+(define-method get_license
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_license")
+  (return-type "const-gchar*")
 )
 
-(define-method get_skip
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_skip")
-  (return-type "guint")
+(define-method get_author
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_author")
+  (return-type "const-gchar*")
 )
 
-(define-method set_count
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_count")
-  (return-type "gboolean")
-  (parameters
-    '("gint" "count")
-  )
+(define-method get_site
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_site")
+  (return-type "const-gchar*")
 )
 
-(define-method get_count
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_count")
-  (return-type "gint")
+(define-method get_id
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_id")
+  (return-type "const-gchar*")
 )
 
-(define-method set_flags
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_flags")
-  (return-type "gboolean")
+(define-method get_filename
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_filename")
+  (return-type "const-gchar*")
+)
+
+(define-method get_module
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_module")
+  (return-type "GModule*")
+)
+
+(define-method get_info_keys
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_info_keys")
+  (return-type "GList*")
+)
+
+(define-method get_info
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_info")
+  (return-type "const-gchar*")
   (parameters
-    '("GrlMetadataResolutionFlags" "flags")
+    '("const-gchar*" "key")
   )
 )
 
-(define-method get_flags
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_flags")
-  (return-type "GrlMetadataResolutionFlags")
+(define-method get_sources
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_get_sources")
+  (return-type "GList*")
 )
 
-(define-method set_type_filter
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_type_filter")
-  (return-type "gboolean")
+
+
+;; From grl-plugin-priv.h
+
+(define-method set_optional_info
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_optional_info")
+  (return-type "none")
   (parameters
-    '("GrlTypeFilter" "filter")
+    '("GHashTable*" "info")
   )
 )
 
-(define-method get_type_filter
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_type_filter")
-  (return-type "GrlTypeFilter")
+(define-method set_load_func
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_load_func")
+  (return-type "none")
+  (parameters
+    '("gpointer" "load_function")
+  )
 )
 
-(define-method set_key_filter_value
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_key_filter_value")
-  (return-type "gboolean")
+(define-method set_unload_func
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_unload_func")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("GValue*" "value")
+    '("gpointer" "unload_function")
   )
 )
 
-(define-method set_key_filters
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_key_filters")
+(define-method load
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_load")
   (return-type "gboolean")
   (parameters
+    '("GList*" "configurations")
   )
-  (varargs #t)
 )
 
-(define-method set_key_filter_dictionary
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_key_filter_dictionary")
-  (return-type "gboolean")
+(define-method unload
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_unload")
+  (return-type "none")
+)
+
+(define-method set_id
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_id")
+  (return-type "none")
   (parameters
-    '("GHashTable*" "filters")
+    '("const-gchar*" "id")
   )
 )
 
-(define-method get_key_filter
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_key_filter")
-  (return-type "GValue*")
+(define-method set_filename
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_filename")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
+    '("const-gchar*" "filename")
   )
 )
 
-(define-method get_key_filter_list
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_key_filter_list")
-  (return-type "GList*")
+(define-method set_module
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_module")
+  (return-type "none")
+  (parameters
+    '("GModule*" "module")
+  )
 )
 
-(define-method set_key_range_filter_value
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_key_range_filter_value")
-  (return-type "gboolean")
+(define-method set_info
+  (of-object "GrlPlugin")
+  (c-name "grl_plugin_set_info")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("GValue*" "min_value")
-    '("GValue*" "max_value")
+    '("const-gchar*" "key")
+    '("const-gchar*" "value")
   )
 )
 
-(define-method set_key_range_filter
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_set_key_range_filter")
-  (return-type "gboolean")
+
+
+;; From grl-range-value.h
+
+(define-function grl_range_value_new
+  (c-name "grl_range_value_new")
+  (is-constructor-of "GrlRangeValue")
+  (return-type "GrlRangeValue*")
   (parameters
+    '("GValue*" "min")
+    '("GValue*" "max")
   )
-  (varargs #t)
 )
 
-(define-method get_key_range_filter
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_key_range_filter")
+(define-method free
+  (of-object "GrlRangeValue")
+  (c-name "grl_range_value_free")
+  (return-type "none")
+)
+
+(define-function grl_range_value_hashtable_new
+  (c-name "grl_range_value_hashtable_new")
+  (is-constructor-of "GrlRangeValueHashtable")
+  (return-type "GHashTable*")
+)
+
+(define-method dup
+  (of-object "GrlRangeValue")
+  (c-name "grl_range_value_dup")
+  (return-type "GrlRangeValue*")
+)
+
+(define-function grl_range_value_hashtable_insert
+  (c-name "grl_range_value_hashtable_insert")
   (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("GValue**" "min_value")
-    '("GValue**" "max_value")
+    '("GHashTable*" "hash_table")
+    '("gpointer" "key")
+    '("GValue*" "min")
+    '("GValue*" "max")
   )
 )
 
-(define-method get_key_range_filter_list
-  (of-object "GrlOperationOptions")
-  (c-name "grl_operation_options_get_key_range_filter_list")
-  (return-type "GList*")
+(define-function grl_range_value_get_type
+  (c-name "grl_range_value_get_type")
+  (return-type "GType")
 )
 
 
 
-;; From grl-plugin-registry.h
+;; From grl-registry.h
 
-(define-function grl_plugin_registry_get_type
-  (c-name "grl_plugin_registry_get_type")
+(define-function grl_registry_get_type
+  (c-name "grl_registry_get_type")
   (return-type "GType")
 )
 
-(define-function grl_plugin_registry_get_default
-  (c-name "grl_plugin_registry_get_default")
-  (return-type "GrlPluginRegistry*")
+(define-function grl_registry_get_default
+  (c-name "grl_registry_get_default")
+  (return-type "GrlRegistry*")
 )
 
 (define-method add_directory
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_add_directory")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_add_directory")
   (return-type "none")
   (parameters
     '("const-gchar*" "path")
   )
 )
 
-(define-method load
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_load")
+(define-method load_plugin
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_load_plugin")
   (return-type "gboolean")
   (parameters
     '("const-gchar*" "library_filename")
@@ -2800,9 +912,9 @@
   )
 )
 
-(define-method load_directory
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_load_directory")
+(define-method load_plugin_directory
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_load_plugin_directory")
   (return-type "gboolean")
   (parameters
     '("const-gchar*" "path")
@@ -2810,9 +922,9 @@
   )
 )
 
-(define-method unload
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_unload")
+(define-method unload_plugin
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_unload_plugin")
   (return-type "gboolean")
   (parameters
     '("const-gchar*" "plugin_id")
@@ -2820,18 +932,18 @@
   )
 )
 
-(define-method load_all
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_load_all")
+(define-method load_all_plugins
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_load_all_plugins")
   (return-type "gboolean")
   (parameters
     '("GError**" "error")
   )
 )
 
-(define-method load_by_id
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_load_by_id")
+(define-method load_plugin_by_id
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_load_plugin_by_id")
   (return-type "gboolean")
   (parameters
     '("const-gchar*" "plugin_id")
@@ -2840,38 +952,38 @@
 )
 
 (define-method register_source
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_register_source")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_register_source")
   (return-type "gboolean")
   (parameters
-    '("const-GrlPluginInfo*" "plugin")
-    '("GrlMediaPlugin*" "source")
+    '("GrlPlugin*" "plugin")
+    '("GrlSource*" "source")
     '("GError**" "error")
   )
 )
 
 (define-method unregister_source
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_unregister_source")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_unregister_source")
   (return-type "gboolean")
   (parameters
-    '("GrlMediaPlugin*" "source")
+    '("GrlSource*" "source")
     '("GError**" "error")
   )
 )
 
 (define-method lookup_source
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_source")
-  (return-type "GrlMediaPlugin*")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_source")
+  (return-type "GrlSource*")
   (parameters
     '("const-gchar*" "source_id")
   )
 )
 
 (define-method get_sources
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_get_sources")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_get_sources")
   (return-type "GList*")
   (parameters
     '("gboolean" "ranked")
@@ -2879,8 +991,8 @@
 )
 
 (define-method get_sources_by_operations
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_get_sources_by_operations")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_get_sources_by_operations")
   (return-type "GList*")
   (parameters
     '("GrlSupportedOps" "ops")
@@ -2888,30 +1000,37 @@
   )
 )
 
-(define-method register_metadata_key
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_register_metadata_key")
-  (return-type "GrlKeyID")
+(define-method lookup_plugin
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_plugin")
+  (return-type "GrlPlugin*")
   (parameters
-    '("GParamSpec*" "param_spec")
-    '("GError**" "error")
+    '("const-gchar*" "plugin_id")
   )
 )
 
-(define-method register_metadata_key_full
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_register_metadata_key_full")
+(define-method get_plugins
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_get_plugins")
+  (return-type "GList*")
+  (parameters
+    '("gboolean" "only_loaded")
+  )
+)
+
+(define-method register_metadata_key
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_register_metadata_key")
   (return-type "GrlKeyID")
   (parameters
     '("GParamSpec*" "param_spec")
-    '("GrlKeyID" "key")
     '("GError**" "error")
   )
 )
 
 (define-method register_metadata_key_relation
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_register_metadata_key_relation")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_register_metadata_key_relation")
   (return-type "none")
   (parameters
     '("GrlKeyID" "key1")
@@ -2920,8 +1039,8 @@
 )
 
 (define-method lookup_metadata_key
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_metadata_key")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_metadata_key")
   (return-type "GrlKeyID")
   (parameters
     '("const-gchar*" "key_name")
@@ -2929,8 +1048,8 @@
 )
 
 (define-method lookup_metadata_key_relation
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_metadata_key_relation")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_metadata_key_relation")
   (return-type "const-GList*")
   (parameters
     '("GrlKeyID" "key")
@@ -2938,8 +1057,8 @@
 )
 
 (define-method lookup_metadata_key_name
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_metadata_key_name")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_metadata_key_name")
   (return-type "const-gchar*")
   (parameters
     '("GrlKeyID" "key")
@@ -2947,8 +1066,8 @@
 )
 
 (define-method lookup_metadata_key_desc
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_metadata_key_desc")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_metadata_key_desc")
   (return-type "const-gchar*")
   (parameters
     '("GrlKeyID" "key")
@@ -2956,8 +1075,8 @@
 )
 
 (define-method lookup_metadata_key_type
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_lookup_metadata_key_type")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_lookup_metadata_key_type")
   (return-type "GType")
   (parameters
     '("GrlKeyID" "key")
@@ -2965,8 +1084,8 @@
 )
 
 (define-method metadata_key_validate
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_metadata_key_validate")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_metadata_key_validate")
   (return-type "gboolean")
   (parameters
     '("GrlKeyID" "key")
@@ -2975,14 +1094,14 @@
 )
 
 (define-method get_metadata_keys
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_get_metadata_keys")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_get_metadata_keys")
   (return-type "GList*")
 )
 
 (define-method add_config
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_add_config")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_add_config")
   (return-type "gboolean")
   (parameters
     '("GrlConfig*" "config")
@@ -2991,8 +1110,8 @@
 )
 
 (define-method add_config_from_file
-  (of-object "GrlPluginRegistry")
-  (c-name "grl_plugin_registry_add_config_from_file")
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_add_config_from_file")
   (return-type "gboolean")
   (parameters
     '("const-gchar*" "config_file")
@@ -3002,220 +1121,410 @@
 
 
 
-;; From grl-range-value.h
+;; From grl-registry-priv.h
 
-(define-function grl_range_value_new
-  (c-name "grl_range_value_new")
-  (is-constructor-of "GrlRangeValue")
-  (return-type "GrlRangeValue*")
+(define-method restrict_plugins
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_restrict_plugins")
+  (return-type "none")
   (parameters
-    '("GValue*" "min")
-    '("GValue*" "max")
+    '("gchar**" "plugins")
   )
 )
 
-(define-method free
-  (of-object "GrlRangeValue")
-  (c-name "grl_range_value_free")
-  (return-type "none")
+(define-method register_metadata_key_full
+  (of-object "GrlRegistry")
+  (c-name "grl_registry_register_metadata_key_full")
+  (return-type "GrlKeyID")
+  (parameters
+    '("GParamSpec*" "param_spec")
+    '("GrlKeyID" "key")
+    '("GError**" "error")
+  )
 )
 
-(define-function grl_range_value_hashtable_new
-  (c-name "grl_range_value_hashtable_new")
-  (is-constructor-of "GrlRangeValueHashtable")
-  (return-type "GHashTable*")
+
+
+;; From grl-source.h
+
+(define-function grl_source_get_type
+  (c-name "grl_source_get_type")
+  (return-type "GType")
 )
 
-(define-method dup
-  (of-object "GrlRangeValue")
-  (c-name "grl_range_value_dup")
-  (return-type "GrlRangeValue*")
+(define-method supported_operations
+  (of-object "GrlSource")
+  (c-name "grl_source_supported_operations")
+  (return-type "GrlSupportedOps")
 )
 
-(define-function grl_range_value_hashtable_insert
-  (c-name "grl_range_value_hashtable_insert")
+(define-method supported_keys
+  (of-object "GrlSource")
+  (c-name "grl_source_supported_keys")
+  (return-type "const-GList*")
+)
+
+(define-method slow_keys
+  (of-object "GrlSource")
+  (c-name "grl_source_slow_keys")
+  (return-type "const-GList*")
+)
+
+(define-method writable_keys
+  (of-object "GrlSource")
+  (c-name "grl_source_writable_keys")
+  (return-type "const-GList*")
+)
+
+(define-method get_caps
+  (of-object "GrlSource")
+  (c-name "grl_source_get_caps")
+  (return-type "GrlCaps*")
+  (parameters
+    '("GrlSupportedOps" "operation")
+  )
+)
+
+(define-method set_auto_split_threshold
+  (of-object "GrlSource")
+  (c-name "grl_source_set_auto_split_threshold")
   (return-type "none")
   (parameters
-    '("GHashTable*" "hash_table")
-    '("gpointer" "key")
-    '("GValue*" "min")
-    '("GValue*" "max")
+    '("guint" "threshold")
   )
 )
 
-(define-function grl_range_value_get_type
-  (c-name "grl_range_value_get_type")
-  (return-type "GType")
+(define-method get_auto_split_threshold
+  (of-object "GrlSource")
+  (c-name "grl_source_get_auto_split_threshold")
+  (return-type "guint")
 )
 
+(define-method resolve
+  (of-object "GrlSource")
+  (c-name "grl_source_resolve")
+  (return-type "guint")
+  (parameters
+    '("GrlMedia*" "media")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResolveCb" "callback")
+    '("gpointer" "user_data")
+  )
+)
 
+(define-method resolve_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_resolve_sync")
+  (return-type "GrlMedia*")
+  (parameters
+    '("GrlMedia*" "media")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
+  )
+)
 
-;; From grl-related-keys.h
+(define-method may_resolve
+  (of-object "GrlSource")
+  (c-name "grl_source_may_resolve")
+  (return-type "gboolean")
+  (parameters
+    '("GrlMedia*" "media")
+    '("GrlKeyID" "key_id")
+    '("GList**" "missing_keys")
+  )
+)
 
-(define-function grl_related_keys_get_type
-  (c-name "grl_related_keys_get_type")
-  (return-type "GType")
+(define-method test_media_from_uri
+  (of-object "GrlSource")
+  (c-name "grl_source_test_media_from_uri")
+  (return-type "gboolean")
+  (parameters
+    '("const-gchar*" "uri")
+  )
 )
 
-(define-function grl_related_keys_new
-  (c-name "grl_related_keys_new")
-  (is-constructor-of "GrlRelatedKeys")
-  (return-type "GrlRelatedKeys*")
+(define-method get_media_from_uri
+  (of-object "GrlSource")
+  (c-name "grl_source_get_media_from_uri")
+  (return-type "guint")
+  (parameters
+    '("const-gchar*" "uri")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResolveCb" "callback")
+    '("gpointer" "user_data")
+  )
 )
 
-(define-function grl_related_keys_new_valist
-  (c-name "grl_related_keys_new_valist")
-  (return-type "GrlRelatedKeys*")
+(define-method get_media_from_uri_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_get_media_from_uri_sync")
+  (return-type "GrlMedia*")
   (parameters
-    '("GrlKeyID" "key")
-    '("va_list" "args")
+    '("const-gchar*" "uri")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
   )
 )
 
-(define-function grl_related_keys_new_with_keys
-  (c-name "grl_related_keys_new_with_keys")
-  (return-type "GrlRelatedKeys*")
+(define-method browse
+  (of-object "GrlSource")
+  (c-name "grl_source_browse")
+  (return-type "guint")
   (parameters
-    '("GrlKeyID" "key")
+    '("GrlMedia*" "container")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResultCb" "callback")
+    '("gpointer" "user_data")
   )
-  (varargs #t)
 )
 
-(define-method set
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set")
-  (return-type "none")
+(define-method browse_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_browse_sync")
+  (return-type "GList*")
   (parameters
-    '("GrlKeyID" "key")
-    '("const-GValue*" "value")
+    '("GrlMedia*" "container")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
   )
 )
 
-(define-method set_string
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set_string")
-  (return-type "none")
+(define-method search
+  (of-object "GrlSource")
+  (c-name "grl_source_search")
+  (return-type "guint")
   (parameters
-    '("GrlKeyID" "key")
-    '("const-gchar*" "strvalue")
+    '("const-gchar*" "text")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResultCb" "callback")
+    '("gpointer" "user_data")
+  )
+)
+
+(define-method search_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_search_sync")
+  (return-type "GList*")
+  (parameters
+    '("const-gchar*" "text")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
+  )
+)
+
+(define-method query
+  (of-object "GrlSource")
+  (c-name "grl_source_query")
+  (return-type "guint")
+  (parameters
+    '("const-gchar*" "query")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GrlSourceResultCb" "callback")
+    '("gpointer" "user_data")
+  )
+)
+
+(define-method query_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_query_sync")
+  (return-type "GList*")
+  (parameters
+    '("const-gchar*" "query")
+    '("const-GList*" "keys")
+    '("GrlOperationOptions*" "options")
+    '("GError**" "error")
   )
 )
 
-(define-method set_int
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set_int")
+(define-method remove
+  (of-object "GrlSource")
+  (c-name "grl_source_remove")
   (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("gint" "intvalue")
+    '("GrlMedia*" "media")
+    '("GrlSourceRemoveCb" "callback")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method set_float
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set_float")
+(define-method remove_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_remove_sync")
   (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("gfloat" "floatvalue")
+    '("GrlMedia*" "media")
+    '("GError**" "error")
   )
 )
 
-(define-method set_binary
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set_binary")
+(define-method store
+  (of-object "GrlSource")
+  (c-name "grl_source_store")
   (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("const-guint8*" "buf")
-    '("gsize" "size")
+    '("GrlMediaBox*" "parent")
+    '("GrlMedia*" "media")
+    '("GrlWriteFlags" "flags")
+    '("GrlSourceStoreCb" "callback")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method set_boxed
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_set_boxed")
+(define-method store_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_store_sync")
   (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("gconstpointer" "boxed")
+    '("GrlMediaBox*" "parent")
+    '("GrlMedia*" "media")
+    '("GrlWriteFlags" "flags")
+    '("GError**" "error")
   )
 )
 
-(define-method get
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get")
-  (return-type "const-GValue*")
+(define-method store_metadata
+  (of-object "GrlSource")
+  (c-name "grl_source_store_metadata")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
+    '("GrlMedia*" "media")
+    '("GList*" "keys")
+    '("GrlWriteFlags" "flags")
+    '("GrlSourceStoreCb" "callback")
+    '("gpointer" "user_data")
   )
 )
 
-(define-method get_string
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_string")
-  (return-type "const-gchar*")
+(define-method store_metadata_sync
+  (of-object "GrlSource")
+  (c-name "grl_source_store_metadata_sync")
+  (return-type "GList*")
   (parameters
-    '("GrlKeyID" "key")
+    '("GrlMedia*" "media")
+    '("GList*" "keys")
+    '("GrlWriteFlags" "flags")
+    '("GError**" "error")
   )
 )
 
-(define-method get_int
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_int")
-  (return-type "gint")
+(define-method notify_change_start
+  (of-object "GrlSource")
+  (c-name "grl_source_notify_change_start")
+  (return-type "gboolean")
   (parameters
-    '("GrlKeyID" "key")
+    '("GError**" "error")
   )
 )
 
-(define-method get_float
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_float")
-  (return-type "gfloat")
+(define-method notify_change_stop
+  (of-object "GrlSource")
+  (c-name "grl_source_notify_change_stop")
+  (return-type "gboolean")
   (parameters
-    '("GrlKeyID" "key")
+    '("GError**" "error")
   )
 )
 
-(define-method get_binary
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_binary")
-  (return-type "const-guint8*")
+(define-method notify_change_list
+  (of-object "GrlSource")
+  (c-name "grl_source_notify_change_list")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
-    '("gsize*" "size")
+    '("GPtrArray*" "changed_medias")
+    '("GrlSourceChangeType" "change_type")
+    '("gboolean" "location_unknown")
   )
 )
 
-(define-method get_boxed
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_boxed")
-  (return-type "gconstpointer")
+(define-method notify_change
+  (of-object "GrlSource")
+  (c-name "grl_source_notify_change")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
+    '("GrlMedia*" "media")
+    '("GrlSourceChangeType" "change_type")
+    '("gboolean" "location_unknown")
   )
 )
 
-(define-method has_key
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_has_key")
-  (return-type "gboolean")
+(define-method get_id
+  (of-object "GrlSource")
+  (c-name "grl_source_get_id")
+  (return-type "const-gchar*")
+)
+
+(define-method get_name
+  (of-object "GrlSource")
+  (c-name "grl_source_get_name")
+  (return-type "const-gchar*")
+)
+
+(define-method get_description
+  (of-object "GrlSource")
+  (c-name "grl_source_get_description")
+  (return-type "const-gchar*")
+)
+
+(define-method get_plugin
+  (of-object "GrlSource")
+  (c-name "grl_source_get_plugin")
+  (return-type "GrlPlugin*")
+)
+
+(define-method get_rank
+  (of-object "GrlSource")
+  (c-name "grl_source_get_rank")
+  (return-type "gint")
+)
+
+
+
+;; From grl-sync-priv.h
+
+(define-function grl_wait_for_async_operation_complete
+  (c-name "grl_wait_for_async_operation_complete")
+  (return-type "none")
   (parameters
-    '("GrlKeyID" "key")
+    '("GrlDataSync*" "ds")
   )
 )
 
-(define-method get_keys
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_get_keys")
-  (return-type "GList*")
+
+
+;; From grl-type-builtins.h
+
+(define-function grl_supported_ops_get_type
+  (c-name "grl_supported_ops_get_type")
+  (return-type "GType")
 )
 
-(define-method dup
-  (of-object "GrlRelatedKeys")
-  (c-name "grl_related_keys_dup")
-  (return-type "GrlRelatedKeys*")
+(define-function grl_source_change_type_get_type
+  (c-name "grl_source_change_type_get_type")
+  (return-type "GType")
+)
+
+(define-function grl_type_filter_get_type
+  (c-name "grl_type_filter_get_type")
+  (return-type "GType")
+)
+
+(define-function grl_resolution_flags_get_type
+  (c-name "grl_resolution_flags_get_type")
+  (return-type "GType")
+)
+
+(define-function grl_write_flags_get_type
+  (c-name "grl_write_flags_get_type")
+  (return-type "GType")
 )
 
 
diff --git a/grilo/src/media-plugin.ccg b/grilo/src/plugin.ccg
similarity index 100%
copy from grilo/src/media-plugin.ccg
copy to grilo/src/plugin.ccg
diff --git a/grilo/src/plugin.hg b/grilo/src/plugin.hg
new file mode 100644
index 0000000..f54b04e
--- /dev/null
+++ b/grilo/src/plugin.hg
@@ -0,0 +1,57 @@
+/* Copyright (c) 2012  Murray Cumming <murrayc murrayc com>
+ *
+ * This file is part of grilomm.
+ *
+ * grilomm is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 2.1 of the License,
+ * or (at your option) any later version.
+ *
+ * grilomm is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+_DEFS(grilomm,grilo)
+_CONFIGINCLUDE(grilommconfig.h)
+_PINCLUDE(glibmm/private/object_p.h)
+
+#include <glibmm.h>
+#include <vector>
+#include <grilomm/source.h>
+
+namespace Grilo
+{
+class Source;
+
+class Plugin : public Glib::Object
+{
+  _CLASS_GOBJECT(Plugin, GrlPlugin, GRL_PLUGIN, Glib::Object, GObject)
+
+protected:
+  _CTOR_DEFAULT
+ 
+public:
+  _WRAP_METHOD(Glib::ustring get_name() const, grl_plugin_get_name)
+  _WRAP_METHOD(Glib::ustring get_description() const, grl_plugin_get_description)
+  _WRAP_METHOD(Glib::ustring get_version() const, grl_plugin_get_version)
+  _WRAP_METHOD(Glib::ustring get_license() const, grl_plugin_get_license)
+  _WRAP_METHOD(Glib::ustring get_author() const, grl_plugin_get_author)
+  _WRAP_METHOD(Glib::ustring get_site() const, grl_plugin_get_site)
+  _WRAP_METHOD(Glib::ustring get_id() const, grl_plugin_get_id)
+  _WRAP_METHOD(Glib::ustring get_filename() const, grl_plugin_get_filename)
+
+  //TODO: _WRAP_METHOD(GModule* get_module() const, grl_plugin_get_module)
+  //TODO: _WRAP_METHOD(GList* get_info_keys() const, grl_plugin_get_info_keys)
+
+  _WRAP_METHOD(Glib::ustring get_info(const Glib::ustring& key) const, grl_plugin_get_info)
+
+#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Source> >',`Glib::ListHandler<Glib::RefPtr<Source> >::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(std::vector<Glib::RefPtr<Source> > get_sources(), grl_plugin_get_sources)
+};
+
+} // namespace Grilo
diff --git a/grilo/src/plugin-registry.ccg b/grilo/src/registry.ccg
similarity index 100%
rename from grilo/src/plugin-registry.ccg
rename to grilo/src/registry.ccg
diff --git a/grilo/src/plugin-registry.hg b/grilo/src/registry.hg
similarity index 61%
copy from grilo/src/plugin-registry.hg
copy to grilo/src/registry.hg
index d8dc283..010c5d1 100644
--- a/grilo/src/plugin-registry.hg
+++ b/grilo/src/registry.hg
@@ -20,24 +20,26 @@ _DEFS(grilomm,grilo)
 _CONFIGINCLUDE(grilommconfig.h)
 _PINCLUDE(glibmm/private/object_p.h)
 
-#include <grilomm/media-plugin.h>
+#include <glibmm.h>
+#include <grilomm/source.h>
 #include <vector>
 
 namespace Grilo
 {
 
-class PluginRegistry : public Glib::Object
+class Registry : public Glib::Object
 {
-  _CLASS_GOBJECT(PluginRegistry, GrlPluginRegistry, GRL_PLUGIN_REGISTRY, Glib::Object, GObject)
+  _CLASS_GOBJECT(Registry, GrlRegistry, GRL_REGISTRY, Glib::Object, GObject)
 
 protected:
   _CTOR_DEFAULT
  
 public:
-  _WRAP_METHOD(static Glib::RefPtr<PluginRegistry> get_default(), grl_plugin_registry_get_default)
+  _WRAP_METHOD(static Glib::RefPtr<Registry> get_default(), grl_registry_get_default, refreturn)
+  _WRAP_METHOD(void add_directory(const Glib::ustring& path), grl_registry_add_directory)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<MediaPlugin> >',`Glib::ListHandler<Glib::RefPtr<MediaPlugin> >::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<MediaPlugin> > get_sources(bool ranked = true), grl_plugin_registry_get_sources)
+#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Source> >',`Glib::ListHandler<Glib::RefPtr<Source> >::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(std::vector<Glib::RefPtr<Source> > get_sources(bool ranked = true), grl_registry_get_sources)
 };
 
 } // namespace Grilo
diff --git a/grilo/src/media-plugin.ccg b/grilo/src/source.ccg
similarity index 100%
rename from grilo/src/media-plugin.ccg
rename to grilo/src/source.ccg
diff --git a/grilo/src/plugin-registry.hg b/grilo/src/source.hg
similarity index 59%
rename from grilo/src/plugin-registry.hg
rename to grilo/src/source.hg
index d8dc283..052a41e 100644
--- a/grilo/src/plugin-registry.hg
+++ b/grilo/src/source.hg
@@ -20,24 +20,27 @@ _DEFS(grilomm,grilo)
 _CONFIGINCLUDE(grilommconfig.h)
 _PINCLUDE(glibmm/private/object_p.h)
 
-#include <grilomm/media-plugin.h>
-#include <vector>
+#include <glibmm.h>
+#include <grilomm/plugin.h>
 
 namespace Grilo
 {
+class Plugin;
 
-class PluginRegistry : public Glib::Object
+class Source : public Glib::Object
 {
-  _CLASS_GOBJECT(PluginRegistry, GrlPluginRegistry, GRL_PLUGIN_REGISTRY, Glib::Object, GObject)
+  _CLASS_GOBJECT(Source, GrlSource, GRL_SOURCE, Glib::Object, GObject)
 
 protected:
   _CTOR_DEFAULT
  
 public:
-  _WRAP_METHOD(static Glib::RefPtr<PluginRegistry> get_default(), grl_plugin_registry_get_default)
-
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<MediaPlugin> >',`Glib::ListHandler<Glib::RefPtr<MediaPlugin> >::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<MediaPlugin> > get_sources(bool ranked = true), grl_plugin_registry_get_sources)
+  _WRAP_METHOD(Glib::ustring get_id() const, grl_source_get_id)
+  _WRAP_METHOD(Glib::ustring get_name() const, grl_source_get_name)
+  _WRAP_METHOD(Glib::ustring get_description() const, grl_source_get_description)
+  _WRAP_METHOD(Glib::RefPtr<Plugin> get_plugin(), grl_source_get_plugin, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const Plugin> get_plugin() const, grl_source_get_plugin, refreturn, constversion)
+  _WRAP_METHOD(int get_rank() const, grl_source_get_rank)
 };
 
 } // namespace Grilo



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]