|
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 |
/**
|
|
Packit |
67b98c |
* SECTION:grilo
|
|
Packit |
67b98c |
* @short_description: Metadata library supporting several services
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Grilo is a metadata retrieval library. Given a search or browse operation,
|
|
Packit |
67b98c |
* the library will retrieve a set of metadata related to the operation from a
|
|
Packit |
67b98c |
* set of on-line services.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* The Grilo library should be initialized with grl_init() before it can be used.
|
|
Packit |
67b98c |
* You should pass pointers to the main argc and argv variables so that Grilo can
|
|
Packit |
67b98c |
* process its own command line options.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* After using it, in order to close cleanly all the resources opened either by
|
|
Packit |
67b98c |
* the core library or the sources, call grl_deinit().
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#include "grilo.h"
|
|
Packit |
67b98c |
#include "grl-metadata-key-priv.h"
|
|
Packit |
67b98c |
#include "grl-operation-priv.h"
|
|
Packit |
67b98c |
#include "grl-registry-priv.h"
|
|
Packit |
67b98c |
#include "grl-log-priv.h"
|
|
Packit |
67b98c |
#include "config.h"
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
#include <glib/gi18n-lib.h>
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
static gboolean grl_initialized = FALSE;
|
|
Packit |
67b98c |
static const gchar *plugin_path = NULL;
|
|
Packit |
67b98c |
static const gchar *plugin_list = NULL;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
static const gchar *
|
|
Packit |
67b98c |
get_default_plugin_dir (void)
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
#ifdef G_OS_WIN32
|
|
Packit |
67b98c |
static gchar *plugin_dir = NULL;
|
|
Packit |
67b98c |
gchar *run_directory;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
if (plugin_dir)
|
|
Packit |
67b98c |
return plugin_dir;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
run_directory = g_win32_get_package_installation_directory_of_module (NULL);
|
|
Packit |
67b98c |
plugin_dir = g_build_filename (run_directory,
|
|
Packit |
67b98c |
"lib", GRL_NAME,
|
|
Packit |
67b98c |
NULL);
|
|
Packit |
67b98c |
g_free (run_directory);
|
|
Packit |
67b98c |
return plugin_dir;
|
|
Packit |
67b98c |
#else
|
|
Packit |
67b98c |
return GRL_PLUGINS_DIR;
|
|
Packit |
67b98c |
#endif
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
static gboolean
|
|
Packit |
67b98c |
pre_parse_hook_cb (GOptionContext *context,
|
|
Packit |
67b98c |
GOptionGroup *group,
|
|
Packit |
67b98c |
gpointer data,
|
|
Packit |
67b98c |
GError **error)
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
/* Initialize i18n */
|
|
Packit |
67b98c |
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
|
Packit |
67b98c |
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Initialize operations */
|
|
Packit |
67b98c |
grl_operation_init ();
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
return TRUE;
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
static gboolean
|
|
Packit |
67b98c |
post_parse_hook_cb (GOptionContext *context,
|
|
Packit |
67b98c |
GOptionGroup *group,
|
|
Packit |
67b98c |
gpointer data,
|
|
Packit |
67b98c |
GError **error)
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
GrlRegistry *registry;
|
|
Packit |
67b98c |
gchar **split_element;
|
|
Packit |
67b98c |
gchar **split_list;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Initialize GModule */
|
|
Packit |
67b98c |
if (!g_module_supported ()) {
|
|
Packit |
67b98c |
GRL_ERROR ("GModule not supported in this system");
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Setup core log domains */
|
|
Packit |
67b98c |
_grl_log_init_core_domains ();
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Register default metadata keys */
|
|
Packit |
67b98c |
registry = grl_registry_get_default ();
|
|
Packit |
67b98c |
grl_metadata_key_setup_system_keys (registry);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Set default plugin directories */
|
|
Packit |
67b98c |
if (!plugin_path) {
|
|
Packit |
67b98c |
plugin_path = g_getenv (GRL_PLUGIN_PATH_VAR);
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
if (!plugin_path) {
|
|
Packit |
67b98c |
plugin_path = get_default_plugin_dir ();
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
split_list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0);
|
|
Packit |
67b98c |
for (split_element = split_list; *split_element; split_element++) {
|
|
Packit |
67b98c |
grl_registry_add_directory (registry, *split_element);
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
g_strfreev (split_list);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Restrict plugins to load */
|
|
Packit |
67b98c |
if (!plugin_list) {
|
|
Packit |
67b98c |
plugin_list = g_getenv (GRL_PLUGIN_LIST_VAR);
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
if (plugin_list) {
|
|
Packit |
67b98c |
split_list = g_strsplit (plugin_list, ":", 0);
|
|
Packit |
67b98c |
grl_registry_restrict_plugins (registry, split_list);
|
|
Packit |
67b98c |
g_strfreev (split_list);
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
grl_initialized = TRUE;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
return TRUE;
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* grl_init:
|
|
Packit |
67b98c |
* @argc: (inout) (allow-none): number of input arguments, length of @argv
|
|
Packit |
67b98c |
* @argv: (inout) (element-type utf8) (array length=argc) (allow-none) (transfer none): list of arguments
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Initializes the Grilo library
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Since: 0.1.6
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
void
|
|
Packit |
67b98c |
grl_init (gint *argc,
|
|
Packit |
67b98c |
gchar **argv[])
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
GOptionContext *ctx;
|
|
Packit |
67b98c |
GOptionGroup *group;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
if (grl_initialized) {
|
|
Packit |
67b98c |
GRL_DEBUG ("already initialized grl");
|
|
Packit |
67b98c |
return;
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/* Check options */
|
|
Packit |
67b98c |
ctx = g_option_context_new ("- Grilo initialization");
|
|
Packit |
67b98c |
g_option_context_set_ignore_unknown_options (ctx, TRUE);
|
|
Packit |
67b98c |
group = grl_init_get_option_group ();
|
|
Packit |
67b98c |
g_option_context_add_group (ctx, group);
|
|
Packit |
67b98c |
g_option_context_parse (ctx, argc, argv, NULL);
|
|
Packit |
67b98c |
g_option_context_free (ctx);
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* grl_deinit:
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Deinitializes the Grilo library.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Call this function after finalizing using Grilo, in order to free and clean
|
|
Packit |
67b98c |
* up all the resources created.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Since: 0.2.8
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
void
|
|
Packit |
67b98c |
grl_deinit (void)
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
GrlRegistry *registry;
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
if (!grl_initialized) {
|
|
Packit |
67b98c |
GRL_WARNING ("Grilo has not been initialized");
|
|
Packit |
67b98c |
return;
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
registry = grl_registry_get_default ();
|
|
Packit |
67b98c |
grl_registry_shutdown (registry);
|
|
Packit |
67b98c |
grl_initialized = FALSE;
|
|
Packit |
67b98c |
}
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
/**
|
|
Packit |
67b98c |
* grl_init_get_option_group:
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Returns a #GOptionGroup with Grilo's argument specifications.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* This function is useful if you want to integrate Grilo with other
|
|
Packit |
67b98c |
* libraries that use the GOption commandline parser
|
|
Packit |
67b98c |
* (see g_option_context_add_group() ).
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Returns: a pointer to Grilo's option group. Should be dereferenced
|
|
Packit |
67b98c |
* after use.
|
|
Packit |
67b98c |
*
|
|
Packit |
67b98c |
* Since: 0.1.6
|
|
Packit |
67b98c |
*/
|
|
Packit |
67b98c |
GOptionGroup *
|
|
Packit |
67b98c |
grl_init_get_option_group (void)
|
|
Packit |
67b98c |
{
|
|
Packit |
67b98c |
GOptionGroup *group;
|
|
Packit |
67b98c |
static const GOptionEntry grl_args[] = {
|
|
Packit |
67b98c |
{ "grl-plugin-path", 0, 0, G_OPTION_ARG_STRING, &plugin_path,
|
|
Packit |
67b98c |
#ifdef G_OS_WIN32
|
|
Packit |
67b98c |
N_("Semicolon-separated paths containing Grilo plugins"), NULL },
|
|
Packit |
67b98c |
#else
|
|
Packit |
67b98c |
N_("Colon-separated paths containing Grilo plugins"), NULL },
|
|
Packit |
67b98c |
#endif
|
|
Packit |
67b98c |
{ "grl-plugin-use", 0, 0, G_OPTION_ARG_STRING, &plugin_list,
|
|
Packit |
67b98c |
N_("Colon-separated list of Grilo plugins to use"), NULL },
|
|
Packit |
67b98c |
{ NULL }
|
|
Packit |
67b98c |
};
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
group = g_option_group_new ("grl",
|
|
Packit |
67b98c |
_("Grilo Options"),
|
|
Packit |
67b98c |
_("Show Grilo Options"),
|
|
Packit |
67b98c |
NULL,
|
|
Packit |
67b98c |
NULL);
|
|
Packit |
67b98c |
g_option_group_add_entries (group, grl_args);
|
|
Packit |
67b98c |
g_option_group_set_parse_hooks (group, pre_parse_hook_cb, post_parse_hook_cb);
|
|
Packit |
67b98c |
|
|
Packit |
67b98c |
return group;
|
|
Packit |
67b98c |
}
|