[vlc-devel] [PATCH] meta_engine: add art fetching from gvfs.
Rémi Denis-Courmont
remi at remlab.net
Sun Mar 17 12:57:24 CET 2013
Le jeudi 7 mars 2013 21:00:58, Francois Cartegnie a écrit :
> Retrieves art from GVFS metadata.
> Gnome 2.x, MATE. Unsure if it's still used in Gnome 3.x.
> Priority set to 91 (folder module + 1) as it is a user choice.
What is the user choice? Do you assume that desktop-agnostic distributions
will keep this plugin to a separate binary package?
>
> Francois
>
> ---
> configure.ac | 4 +
> modules/meta_engine/Modules.am | 1 +
> modules/meta_engine/gvfs.c | 121
> ++++++++++++++++++++++++++++++++++++++++ po/POTFILES.in |
> 1 +
> 4 files changed, 127 insertions(+), 0 deletions(-)
> create mode 100644 modules/meta_engine/gvfs.c
>
> diff --git a/configure.ac b/configure.ac
> index 127b2e8..ec17570 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -3899,6 +3899,10 @@ AS_IF([test "${enable_taglib}" != "no"], [
> AC_MSG_WARN([${TAGLIB_PKG_ERRORS}.])])
> ])
>
> +dnl
> +dnl gvfs plugin
> +dnl
> +PKG_ENABLE_MODULES_VLC([GVFS], [gvfsmeta], [glib-2.0 >= 2.28.8 gio-2.0 >=
> 2.28.8], (gvfs filesystem metadata), [auto])
>
> dnl
> dnl update checking system
> diff --git a/modules/meta_engine/Modules.am
> b/modules/meta_engine/Modules.am index f9fdcf1..26e88be 100644
> --- a/modules/meta_engine/Modules.am
> +++ b/modules/meta_engine/Modules.am
> @@ -1,5 +1,6 @@
> SOURCES_folder = folder.c
> SOURCES_taglib = taglib.cpp
> +SOURCES_gvfsmeta = gvfs.c
>
> libvlc_LTLIBRARIES += \
> libfolder_plugin.la
> diff --git a/modules/meta_engine/gvfs.c b/modules/meta_engine/gvfs.c
> new file mode 100644
> index 0000000..5779bab
> --- /dev/null
> +++ b/modules/meta_engine/gvfs.c
> @@ -0,0 +1,121 @@
> +/*************************************************************************
> **** + * gfvs.c
> +
> **************************************************************************
> *** + * Copyright (C) 2013 VLC authors and VideoLAN
> + *
> + * This program 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.
> + *
> + * This program 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, write to the Free Software
> Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA
> 02110-1301, USA. +
> **************************************************************************
> ***/ +
> +/*************************************************************************
> **** + * Preamble
> +
> **************************************************************************
> ***/ +
> +#ifdef HAVE_CONFIG_H
> +# include "config.h"
> +#endif
> +
> +#include <vlc_common.h>
> +#include <vlc_plugin.h>
> +#include <vlc_art_finder.h>
> +#include <vlc_url.h>
> +#include <vlc_input_item.h>
> +
> +#include <glib.h>
> +#include <gio/gio.h>
> +
> +/*************************************************************************
> **** + * Local prototypes
> +
> **************************************************************************
> ***/ +static int FindMeta( vlc_object_t * );
> +
> +/*************************************************************************
> **** + * Module descriptor
> +
> **************************************************************************
> ***/ +
> +vlc_module_begin ()
> + set_shortname( N_( "gvfsmeta" ) )
> + set_description( N_("Custom icon metadata finder from gvfs") )
> + set_capability( "art finder", 91 )
> + set_callbacks( FindMeta, NULL )
> +vlc_module_end ()
> +
> +/*************************************************************************
> **** +
> **************************************************************************
> ***/ +static int FindMeta( vlc_object_t *p_this )
> +{
> + art_finder_t *p_finder = (art_finder_t *) p_this;
> + input_item_t *p_item = p_finder->p_item;
> +
> + GError *p_error = NULL;
> + char *psz_uri = NULL;
> +
> + char *psz_dir = input_item_GetURI( p_item );
> + if( !psz_dir )
> + return VLC_EGENERIC;
> +
> + if ( !*psz_dir || strncmp( psz_dir, "file://", 7 ) )
I think this calls for an explanatory comment in the code.
> + {
> + free( psz_dir );
> + return VLC_EGENERIC;
> + }
> +
> + g_type_init ();
> +
> + GFile *p_file = g_file_new_for_uri( psz_dir );
So GVFS and above do not need any initialization?
That seems too good to be true.
> +
> + if ( p_file != NULL )
> + {
> + GFileQueryInfoFlags flags = 0;
> + GFileInfo *p_info = g_file_query_info( p_file,
> "metadata::custom-icon", flags, NULL, &p_error ); +
> + if ( p_info != NULL )
> + {
> + char **pp_attributes = g_file_info_list_attributes( p_info,
> NULL );
> +
> + if ( pp_attributes[0] )
> + {
> + char *psz_icon = g_file_info_get_attribute_as_string(
> p_info, pp_attributes[0] );
> + if ( psz_icon )
> + {
> + if ( asprintf( &psz_uri, "%s/%s", psz_dir, psz_icon )
> >= 0 )
> >+ input_item_SetArtURL( p_item, psz_uri );
> + free( psz_icon );
> + }
> + }
> +
> + g_strfreev( pp_attributes );
> +
> + g_object_unref( p_info );
> + }
> +
> + g_object_unref( p_file );
> + }
> +
> + free( psz_dir );
> +
> + if ( p_error )
> + {
> + msg_Err( p_this, "%s", p_error->message );
> + g_error_free( p_error );
> + }
> +
> + if( psz_uri ) /* Was found and set */
> + {
> + free( psz_uri );
> + return VLC_SUCCESS;
> + }
> +
> + return VLC_EGENERIC;
> +}
> diff --git a/po/POTFILES.in b/po/POTFILES.in
> index 9f520b1..3f68e0f 100644
> --- a/po/POTFILES.in
> +++ b/po/POTFILES.in
> @@ -938,6 +938,7 @@ modules/lua/vlc.h
> modules/media_library/sql_media_library.c
> modules/meta_engine/folder.c
> modules/meta_engine/taglib.cpp
> +modules/meta_engine/gvfs.c
> modules/misc/audioscrobbler.c
> modules/misc/dhparams.h
> modules/misc/gnutls.c
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list