# Connector del Grilo

## Introducció

El Grilo és un marc de treball per a navegar i cercar contingut multimèdia de diverses fonts utilitzant una única API. Els connectors del marc de treball Grilo donen accés a diverses fonts de mitjans i metadades.

## Connector del Grilo

### Tràilers d'Apple

Aquest és un connector del Grilo per a tràilers d'Apple. El seu identificador de connector és `«grl-apple-trailers»`

### Adreces d'interès

Aquest és un connector del Grilo per a adreces d'interès. El seu identificador de connector és `«grl-bookmarks»`

### DMap

Aquest és un connector del Grilo per al DMap. El seu identificador de connector és `«grl-dmap»`

### Sistema de fitxers

Aquest és un connector del Grilo per al sistema de fitxers. El seu identificador de connector és `«grl-filesystem»`

### Flickr

Aquest és un connector del Grilo per al Flickr. El seu identificador de connector és `«grl-flickr»`

### Gravatar

Aquest és un connector del Grilo per al Gravatar. El seu identificador de connector és `«grl-gravatar»`

### Jamendo

Aquest és un connector del Grilo per al Jamendo. El seu identificador de connector és `«grl-jamendo»`

### Metadades locals

Aquest és un connector del Grilo per a metadades locals. El seu identificador de connector és `«grl-local-metadata»`

### Emmagatzematge de metadades

Aquest és un connector del Grilo per a l'emmagatzematge de metadades. El seu identificador de connector és `«grl-metadata-store»`

### Suport òptic

Aquest és un connector del Grilo per a suports òptics. El seu identificador de connector és `«grl-optical-media»`

### Podcasts

Aquest és un connector del Grilo per a podcasts. El seu identificador de connector és `«grl-podcasts»`

### Shoutcast

Aquest és un connector del Grilo per al Shoutcast. El seu identificador de connector és `«grl-shoutcast»`

### Connector TMDb

El connector TMDb obté informació sobre pel·lícules del servei en línia TMDb, que és una base de dades de pel·lícules mantinguda per la comunitat. El seu identificador de connector és `«grl-tmdb»`

Abans d'utilitzar aquest connector, hauríeu d'establir la clau API TMDB amb `grl_config_set_api_key()`.

Llavors, podeu utilitzar `grl_source_resolve()` per a descobrir detalls sobre un GrlMediaItem existent.

Aquest connector no permet la cerca mitjançant `grl_source_search()` o consultes mitjançant `grl_source_query()`.

Aquest és un exemple senzill de l'ús del connector Grilo TMDb:

Fitxer: `exemple-tmdb.c`

    /*
    * Copyright (C) 2012 Canonical Ltd.
    *
    * Autor: Jens Georg <jensg@openismus.com>
    *
    * Aquesta biblioteca és programari lliure; podeu redistribuir-la i/o
    * modificar-la sota els termes de la Llicència Pública General Reduïda de GNU
    * tal com l'ha publicada la Free Software Foundation; versió 2.1 de
    * la llicència, o (si ho preferiu) qualsevol versió posterior.
    *
    * Aquesta biblioteca es distribueix amb l'esperança que sigui útil, però
    * SENSE CAP GARANTIA; ni tan sols la garantia implícita de
    * COMERCIALITZACIÓ o ADEQUACIÓ PER A UN PROPÒSIT PARTICULAR. Vegeu la
    * Llicència Pública General Reduïda de GNU per a més detalls.
    *
    * Hauríeu d'haver rebut una còpia de la Llicència Pública General Reduïda
    * de GNU juntament amb aquesta biblioteca; si no, escriu a la Free Software
    * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
    * 02110-1301 USA
    *
    */

    #include <grilo.h>
    #include <stdio.h>

    /**
    * Aquesta clau TMDB és només per a proves.
    * Per a un ús real, sol·liciteu la vostra pròpia clau a
     * http://api.themoviedb.org
    */
    #define TMDB_KEY "719b9b296835b04cd919c4bf5220828a"

    #define TMDB_PLUGIN_ID "grl-tmdb"

    GMainLoop *loop = NULL;
    GrlKeyID director_key = 0;

    static void
    resolve_cb (GrlSource *src, guint operation_id, GrlMedia *media, gpointer user_data, const GError *error)
    {
    const char *title, *studio;

      g_assert_no_error (error);
      g_assert (media);

      title = grl_media_get_title (media);
      studio = grl_media_get_studio (media);
      printf ("Media: Title='%s', Studio='%s'\n",
        title, studio);

      if (director_key != 0) {
        const gchar *director =
          grl_data_get_string (GRL_DATA (media), director_key);
        printf ("  Director=%s\n", director);
      }

      g_main_loop_quit (loop);
    }

    int main (int argc, char *argv[])
    {
      GrlRegistry *reg;
      GrlConfig *config;
      GError *error = NULL;
      GrlSource *src;
      gboolean plugin_activated;
      GrlCaps *caps;
      GrlOperationOptions *options;
      GrlMedia *media;
      const GList *keys;
      const GList* l;

      grl_init (&argc, &argv);

      /*
       * Establiu la clau API TMDB:
       * Heu d'utilitzar la vostra pròpia clau API TMDB a la vostra pròpia aplicació.
       */
      reg = grl_registry_get_default ();
      config = grl_config_new (TMDB_PLUGIN_ID, NULL);
      grl_config_set_api_key (config, TMDB_KEY);
      grl_registry_add_config (reg, config, NULL);
      grl_registry_load_all_plugins (reg, FALSE, NULL);

      /*
       * Obteniu el connector::
       */
      error = NULL;
      plugin_activated =
        grl_registry_activate_plugin_by_id (reg, TMDB_PLUGIN_ID, &error);
      g_assert (plugin_activated);
      g_assert_no_error (error);

      /*
       * Obteniu la font del Grilo:
       */
      src = grl_registry_lookup_source (reg, TMDB_PLUGIN_ID);

      /*
       * Comproveu que té la capacitat esperada:
       */
      g_assert (grl_source_supported_operations (src) & GRL_OP_RESOLVE);
      caps = grl_source_get_caps (src, GRL_OP_RESOLVE);
      g_assert (caps);

      options = grl_operation_options_new (caps);

      /*
       * Un element multimèdia que donaren al connector TMDB
       * per a descobrir-ne els detalls.
       */
      media = grl_media_video_new ();
      grl_media_set_title (media, "Sherlock Holmes");

      /*
       * Descobriu quines claus proporciona la font:
       */
      keys = grl_source_supported_keys (src);
      for (l = keys; l != NULL; l = l->next) {
        const gchar *name;
        GrlKeyID id = GPOINTER_TO_INT (l->data);

        g_assert (id);

        name = grl_metadata_key_get_name (id);
        printf ("Supported key: %s\n", name);

        /*
         * Recordeu això per a ús posterior:
         * Podeu utilitzar grl_registry_lookup_metadata_key_name().
         */
        if (g_strcmp0 (name, "tmdb-director") == 0) {
          director_key = id;
        }
      }

      /*
       * Demaneu els detalls de l'element multimèdia al connector TMDB
       * al servei en línia TMDB:
       */
      grl_source_resolve (src, media,
        keys, options,
        resolve_cb, NULL);

      /*
       * Inicieu el bucle principal perquè es pugui cridar la nostra crida de retorn:
       */
      loop = g_main_loop_new (NULL, FALSE);
      g_main_loop_run (loop);

      /*
       * Allibereu els objectes:
       */
      g_object_unref (media);
      g_object_unref (config);
      g_object_unref (options);

      /*
       * Desinicialitzeu el Grilo:
       */
      grl_deinit ();
    }

### Tracker

Aquest és un connector del Grilo per al Tracker. El seu identificador de connector és `«grl-tracker»`

### Vimeo

Aquest és un connector del Grilo per al Vimeo. El seu identificador de connector és `«grl-vimeo»`

### YouTube

Aquest és un connector del Grilo per al YouTube. El seu identificador de connector és `«grl-youtube»`

### DLeyna

Aquest és un connector del Grilo per a UPnP/DLNA. El seu identificador de connector és `«gr-dleyna»`