From ade29e262f65904c0b95d2849680efd8d105dd43 Mon Sep 17 00:00:00 2001 From: Antoine Cellerier Date: Sat, 23 Sep 2006 22:45:52 +0000 Subject: [PATCH] Add low priority "folder" meta_engine. Will look for files named "Folder.jpg" (Windows), "AlbumArtSmall.jpg" (Windows) or ".folder.png" (Linux) to use as album art. --- configure.ac | 2 +- modules/meta_engine/Modules.am | 1 + modules/meta_engine/folder.c | 127 +++++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 modules/meta_engine/folder.c diff --git a/configure.ac b/configure.ac index fbea6f29a6..6fbf3fa9bc 100644 --- a/configure.ac +++ b/configure.ac @@ -1166,7 +1166,7 @@ VLC_ADD_PLUGINS([packetizer_mpeg4video packetizer_mpeg4audio]) if test "${SYS}" != "mingwce"; then dnl VLC_ADD_PLUGINS([externrun]) VLC_ADD_PLUGINS([access_fake access_filter_timeshift access_filter_record]) - VLC_ADD_PLUGINS([gestures rc telnet hotkeys netsync showintf time marq podcast shout sap fake]) + VLC_ADD_PLUGINS([gestures rc telnet hotkeys netsync showintf time marq podcast shout sap fake folder]) VLC_ADD_PLUGINS([rss mosaic wall motiondetect clone crop]) VLC_ADD_PLUGINS([i420_yuy2 i422_yuy2 i420_ymga]) VLC_ADD_PLUGINS([aout_file linear_resampler bandlimited_resampler]) diff --git a/modules/meta_engine/Modules.am b/modules/meta_engine/Modules.am index 4dbbd9995c..24002f927c 100644 --- a/modules/meta_engine/Modules.am +++ b/modules/meta_engine/Modules.am @@ -1,2 +1,3 @@ SOURCES_musicbrainz = musicbrainz.c SOURCES_dummy = dummy.c +SOURCES_folder = folder.c diff --git a/modules/meta_engine/folder.c b/modules/meta_engine/folder.c new file mode 100644 index 0000000000..8aecfd283c --- /dev/null +++ b/modules/meta_engine/folder.c @@ -0,0 +1,127 @@ +/***************************************************************************** + * folder.c + ***************************************************************************** + * Copyright (C) 2006 the VideoLAN team + * $Id$ + * + * Authors: Antoine Cellerier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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 + *****************************************************************************/ +#define _GNU_SOURCE +#include /* malloc(), free() */ + +#include +#include +#include +#include +#include + +#ifdef HAVE_SYS_STAT_H +# include +#endif + +#ifndef MAX_PATH +# define MAX_PATH 250 +#endif + +/***************************************************************************** + * Local prototypes + *****************************************************************************/ +static int FindMeta( vlc_object_t * ); + +/***************************************************************************** + * Module descriptor + *****************************************************************************/ + +vlc_module_begin(); +/* set_category( CAT_INTERFACE ); + set_subcategory( SUBCAT_INTERFACE_CONTROL );*/ + set_shortname( N_( "Folder" ) ); + set_description( _("Folder meta data") ); + + set_capability( "meta engine", 10 ); + set_callbacks( FindMeta, NULL ); +vlc_module_end(); + +/***************************************************************************** + *****************************************************************************/ +static int FindMeta( vlc_object_t *p_this ) +{ + meta_engine_t *p_me = (meta_engine_t *)p_this; + input_item_t *p_item = p_me->p_item; + vlc_bool_t b_have_art = VLC_FALSE; + + if( !p_item->p_meta ) return VLC_EGENERIC; + + + if( p_me->i_mandatory & VLC_META_ENGINE_ART_URL + || p_me->i_optional & VLC_META_ENGINE_ART_URL ) + { + int i = 0; + struct stat a; + char psz_filename[MAX_PATH]; + char *psz_dir = strdup( p_item->psz_uri ); + char *psz_buf = strrchr( psz_dir, '/' ); + + if( psz_buf ) + { + psz_buf++; + *psz_buf = '\0'; + } + else + { + *psz_dir = '\0'; + } + + for( i = 0; b_have_art == VLC_FALSE && i < 3; i++ ) + { + switch( i ) + { + case 0: + /* Windows Folder.jpg */ + snprintf( psz_filename, MAX_PATH, + "file://%sFolder.jpg", psz_dir ); + break; + + case 1: + /* Windows AlbumArtSmall.jpg == small version of Folder.jpg */ + snprintf( psz_filename, MAX_PATH, + "file://%sAlbumArtSmall.jpg", psz_dir ); + break; + + case 2: + /* KDE (?) .folder.png */ + snprintf( psz_filename, MAX_PATH, + "file://%s.folder.png", psz_dir ); + break; + } + + if( utf8_stat( psz_filename+7, &a ) != -1 ) + { + vlc_meta_SetArtURL( p_item->p_meta, psz_filename ); + b_have_art = VLC_TRUE; + } + } + + free( psz_dir ); + } + + return VLC_SUCCESS; +} -- 2.39.5