|
Packit |
67b98c |
/*
|
|
Packit |
67b98c |
* Copyright (C) 2010, 2011 Igalia S.L.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Contact: Iago Toral Quiroga <itoral@igalia.com>
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* This library is free software; you can redistribute it and/or
|
|
Packit |
67b98c |
* modify it under the terms of the GNU Lesser General Public License
|
|
Packit |
67b98c |
* as published by the Free Software Foundation; version 2.1 of
|
|
Packit |
67b98c |
* the License, or (at your option) any later version.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* This library is distributed in the hope that it will be useful, but
|
|
Packit |
67b98c |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
67b98c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
67b98c |
* Lesser General Public License for more details.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
67b98c |
* License along with this library; if not, write to the Free Software
|
|
Packit |
67b98c |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
Packit |
67b98c |
* 02110-1301 USA
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#if !defined (_GRILO_H_INSIDE_) && !defined (GRILO_COMPILATION)
|
|
Packit |
67b98c |
#error "Only <grilo.h> can be included directly."
|
|
Packit |
67b98c |
#endif
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#ifndef _GRL_REGISTRY_H_
|
|
Packit |
67b98c |
#define _GRL_REGISTRY_H_
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#include <glib.h>
|
|
Packit |
67b98c |
#include <glib-object.h>
|
|
Packit |
67b98c |
#include <gmodule.h>
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#include <grl-source.h>
|
|
Packit |
67b98c |
#include <grl-metadata-key.h>
|
|
Packit |
67b98c |
#include <grl-config.h>
|
|
Packit |
67b98c |
#include <grl-definitions.h>
|
|
Packit |
67b98c |
#include <grl-plugin.h>
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_PLUGIN_PATH_VAR "GRL_PLUGIN_PATH"
|
|
Packit |
67b98c |
#define GRL_PLUGIN_LIST_VAR "GRL_PLUGIN_LIST"
|
|
Packit |
67b98c |
#define GRL_PLUGIN_RANKS_VAR "GRL_PLUGIN_RANKS"
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Macros */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_TYPE_REGISTRY \
|
|
Packit |
67b98c |
(grl_registry_get_type ())
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_REGISTRY(obj) \
|
|
Packit |
67b98c |
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
|
|
Packit |
67b98c |
GRL_TYPE_REGISTRY, \
|
|
Packit |
67b98c |
GrlRegistry))
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_IS_REGISTRY(obj) \
|
|
Packit |
67b98c |
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
|
|
Packit |
67b98c |
GRL_TYPE_REGISTRY))
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_REGISTRY_CLASS(klass) \
|
|
Packit |
67b98c |
(G_TYPE_CHECK_CLASS_CAST((klass), \
|
|
Packit |
67b98c |
GRL_TYPE_REGISTRY, \
|
|
Packit |
67b98c |
GrlRegistryClass))
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_IS_REGISTRY_CLASS(klass) \
|
|
Packit |
67b98c |
(G_TYPE_CHECK_CLASS_TYPE((klass), \
|
|
Packit |
67b98c |
GRL_TYPE_REGISTRY))
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#define GRL_REGISTRY_GET_CLASS(obj) \
|
|
Packit |
67b98c |
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
|
|
Packit |
67b98c |
GRL_TYPE_REGISTRY, \
|
|
Packit |
67b98c |
GrlRegistryClass))
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Plugin registration */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* GRL_PLUGIN_DEFINE:
|
|
Packit |
67b98c |
* @major_version: the major version number of core that plugin was compiled for
|
|
Packit |
67b98c |
* @minor_version: the minor version number of core that plugin was compiled for
|
|
Packit |
67b98c |
* @id: the plugin identifier
|
|
Packit |
67b98c |
* @name: name of plugin
|
|
Packit |
67b98c |
* @description: description of plugin
|
|
Packit |
67b98c |
* @author: author of plugin
|
|
Packit |
67b98c |
* @version: version of plugin
|
|
Packit |
67b98c |
* @license: license of plugin
|
|
Packit |
67b98c |
* @site: URL to provider of plugin
|
|
Packit |
67b98c |
* @init: the module initialization. It shall instantiate
|
|
Packit |
67b98c |
* the #GrlPlugins provided
|
|
Packit |
67b98c |
* @deinit: (allow-none): function to execute when the registry needs to dispose
|
|
Packit |
67b98c |
* the module.
|
|
Packit |
67b98c |
* @register_keys: (allow-none): function to execute before loading the
|
|
Packit |
67b98c |
* plugin. It's aim is to register new keys
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Since: 0.3.0
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
#define GRL_PLUGIN_DEFINE(major, \
|
|
Packit |
67b98c |
minor, \
|
|
Packit |
67b98c |
id, \
|
|
Packit |
67b98c |
name, \
|
|
Packit |
67b98c |
description, \
|
|
Packit |
67b98c |
author, \
|
|
Packit |
67b98c |
version, \
|
|
Packit |
67b98c |
license, \
|
|
Packit |
67b98c |
site, \
|
|
Packit |
67b98c |
init, \
|
|
Packit |
67b98c |
deinit, \
|
|
Packit |
67b98c |
register_keys) \
|
|
Packit |
67b98c |
G_MODULE_EXPORT GrlPluginDescriptor GRL_PLUGIN_DESCRIPTOR = { \
|
|
Packit |
67b98c |
major, \
|
|
Packit |
67b98c |
minor, \
|
|
Packit |
67b98c |
id, \
|
|
Packit |
67b98c |
name, \
|
|
Packit |
67b98c |
description, \
|
|
Packit |
67b98c |
author, \
|
|
Packit |
67b98c |
version, \
|
|
Packit |
67b98c |
license, \
|
|
Packit |
67b98c |
site, \
|
|
Packit |
67b98c |
init, \
|
|
Packit |
67b98c |
deinit, \
|
|
Packit |
67b98c |
register_keys \
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Plugin descriptor */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef struct _GrlRegistry GrlRegistry;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef struct _GrlPluginDescriptor GrlPluginDescriptor;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef gboolean (*GrlPluginInitFunc) (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlPlugin *plugin,
|
|
Packit |
67b98c |
GList *configs);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef void (*GrlPluginDeinitFunc) (GrlPlugin *plugin);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef void (*GrlPluginRegisterKeysFunc) (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlPlugin *plugin);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* GrlPluginDescriptor:
|
|
Packit |
67b98c |
* @major_version: the major version number of core that plugin was compiled for
|
|
Packit |
67b98c |
* @minor_version: the minor version number of core that plugin was compiled for
|
|
Packit |
67b98c |
* @id: the plugin identifier
|
|
Packit |
67b98c |
* @name: name of plugin
|
|
Packit |
67b98c |
* @description: description of plugin
|
|
Packit |
67b98c |
* @author: author of plugin
|
|
Packit |
67b98c |
* @version: version of plugin
|
|
Packit |
67b98c |
* @license: license of plugin
|
|
Packit |
67b98c |
* @site: URL to provider of plugin
|
|
Packit |
67b98c |
* @plugin_init: the module initialization. It shall instantiate
|
|
Packit |
67b98c |
* the #GrlPlugins provided
|
|
Packit |
67b98c |
* @plugin_deinit: function to execute when the registry needs
|
|
Packit |
67b98c |
* to dispose the module.
|
|
Packit |
67b98c |
* @plugin_register_keys: function to execute before loading the plugin. It's aim
|
|
Packit |
67b98c |
* is to register new keys
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* This structure is used for the module loader
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Since: 0.3.0
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
struct _GrlPluginDescriptor {
|
|
Packit |
67b98c |
gint major_version;
|
|
Packit |
67b98c |
gint minor_version;
|
|
Packit |
67b98c |
gchar *id;
|
|
Packit |
67b98c |
gchar *name;
|
|
Packit |
67b98c |
gchar *description;
|
|
Packit |
67b98c |
gchar *author;
|
|
Packit |
67b98c |
gchar *version;
|
|
Packit |
67b98c |
gchar *license;
|
|
Packit |
67b98c |
gchar *site;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlPluginInitFunc init;
|
|
Packit |
67b98c |
GrlPluginDeinitFunc deinit;
|
|
Packit |
67b98c |
GrlPluginRegisterKeysFunc register_keys;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/*< private >*/
|
|
Packit |
67b98c |
gpointer _grl_reserved[GRL_PADDING];
|
|
Packit |
67b98c |
};
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Plugin ranks */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* GrlRank:
|
|
Packit |
67b98c |
* @GRL_RANK_LOWEST: will be chosen last or not at all
|
|
Packit |
67b98c |
* @GRL_RANK_LOW: unlikely to be chosen
|
|
Packit |
67b98c |
* @GRL_RANK_DEFAULT: likely to be chosen
|
|
Packit |
67b98c |
* @GRL_RANK_HIGH: will be chosen
|
|
Packit |
67b98c |
* @GRL_RANK_HIGHEST: will be chosen first
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Source priority ranks. Defines the order in which the resolver
|
|
Packit |
67b98c |
* (or similar rank-picking mechanisms) will choose this source
|
|
Packit |
67b98c |
* over an alternative one with the same function.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* These constants serve as a rough guidance for defining the rank
|
|
Packit |
67b98c |
* of a GrlSource. Any value is valid, including values bigger
|
|
Packit |
67b98c |
* than GRL_RANK_HIGHEST.
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
typedef enum {
|
|
Packit |
67b98c |
GRL_RANK_LOWEST = -64,
|
|
Packit |
67b98c |
GRL_RANK_LOW = -32,
|
|
Packit |
67b98c |
GRL_RANK_DEFAULT = 0,
|
|
Packit |
67b98c |
GRL_RANK_HIGH = 32,
|
|
Packit |
67b98c |
GRL_RANK_HIGHEST = 64
|
|
Packit |
67b98c |
} GrlRank;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* GrlRegistry object */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef struct _GrlRegistryPrivate GrlRegistryPrivate;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
struct _GrlRegistry {
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GObject parent;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/*< private >*/
|
|
Packit |
67b98c |
GrlRegistryPrivate *priv;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gpointer _grl_reserved[GRL_PADDING];
|
|
Packit |
67b98c |
};
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* GrlRegistry class */
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
typedef struct _GrlRegistryClass GrlRegistryClass;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* GrlRegistryClass:
|
|
Packit |
67b98c |
* @parent_class: the parent class structure
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Grilo Registry class. Dynamic loader of plugins.
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
struct _GrlRegistryClass {
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GObjectClass parent_class;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/*< private >*/
|
|
Packit |
67b98c |
gpointer _grl_reserved[GRL_PADDING];
|
|
Packit |
67b98c |
};
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
G_BEGIN_DECLS
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GType grl_registry_get_type (void);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlRegistry *grl_registry_get_default (void);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
void grl_registry_add_directory (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *path);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_load_plugin (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *library_filename,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_load_plugin_from_desc (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlPluginDescriptor *plugin_desc,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_load_plugin_directory (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *path,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_unload_plugin (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *plugin_id,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_activate_all_plugins (GrlRegistry *registry);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_load_all_plugins (GrlRegistry *registry,
|
|
Packit |
67b98c |
gboolean activate,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_activate_plugin_by_id (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *plugin_id,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_register_source (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlPlugin *plugin,
|
|
Packit |
67b98c |
GrlSource *source,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_unregister_source (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlSource *source,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlSource *grl_registry_lookup_source (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *source_id);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GList *grl_registry_get_sources (GrlRegistry *registry,
|
|
Packit |
67b98c |
gboolean ranked);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GList *grl_registry_get_sources_by_operations (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlSupportedOps ops,
|
|
Packit |
67b98c |
gboolean ranked);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlPlugin *grl_registry_lookup_plugin (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *plugin_id);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GList *grl_registry_get_plugins (GrlRegistry *registry,
|
|
Packit |
67b98c |
gboolean only_loaded);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlKeyID grl_registry_register_metadata_key (GrlRegistry *registry,
|
|
Packit |
67b98c |
GParamSpec *param_spec,
|
|
Packit |
67b98c |
GrlKeyID bind_key,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GrlKeyID grl_registry_lookup_metadata_key (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *key_name);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
const GList *grl_registry_lookup_metadata_key_relation (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlKeyID key);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
const gchar *grl_registry_lookup_metadata_key_name (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlKeyID key);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
const gchar *grl_registry_lookup_metadata_key_desc (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlKeyID key);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GType grl_registry_lookup_metadata_key_type (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlKeyID key);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_metadata_key_validate (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlKeyID key,
|
|
Packit |
67b98c |
GValue *value);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
GList *grl_registry_get_metadata_keys (GrlRegistry *registry);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_add_config (GrlRegistry *registry,
|
|
Packit |
67b98c |
GrlConfig *config,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_add_config_from_file (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *config_file,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
gboolean grl_registry_add_config_from_resource (GrlRegistry *registry,
|
|
Packit |
67b98c |
const gchar *resource_path,
|
|
Packit |
67b98c |
GError **error);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
G_END_DECLS
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#endif /* _GRL_REGISTRY_H_ */
|