folder.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * folder.c
  3.  *****************************************************************************
  4.  * Copyright (C) 2006 the VideoLAN team
  5.  * $Id: 5a0c3a007b420c7d8eeb447b1dd615c8a7c71992 $
  6.  *
  7.  * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #ifdef HAVE_CONFIG_H
  27. # include "config.h"
  28. #endif
  29. #include <vlc_common.h>
  30. #include <vlc_plugin.h>
  31. #include <vlc_playlist.h>
  32. #include <vlc_charset.h>
  33. #include <vlc_url.h>
  34. #ifdef HAVE_SYS_STAT_H
  35. #   include <sys/stat.h>
  36. #endif
  37. #ifndef MAX_PATH
  38. #   define MAX_PATH 250
  39. #endif
  40. /*****************************************************************************
  41.  * Local prototypes
  42.  *****************************************************************************/
  43. static int FindMeta( vlc_object_t * );
  44. /*****************************************************************************
  45.  * Module descriptor
  46.  *****************************************************************************/
  47. vlc_module_begin ()
  48.     set_shortname( N_( "Folder" ) )
  49.     set_description( N_("Folder meta data") )
  50.     set_capability( "art finder", 90 )
  51.     set_callbacks( FindMeta, NULL )
  52. vlc_module_end ()
  53. /*****************************************************************************
  54.  *****************************************************************************/
  55. static int FindMeta( vlc_object_t *p_this )
  56. {
  57.     input_item_t *p_item = (input_item_t *)p_this->p_private;
  58.     bool b_have_art = false;
  59.     int i = 0;
  60.     struct stat a;
  61.     char psz_filename[MAX_PATH];
  62.     if( !p_item )
  63.         return VLC_EGENERIC;
  64.     char *psz_dir = input_item_GetURI( p_item );
  65.     if( !psz_dir )
  66.         return VLC_EGENERIC;
  67.     char *psz_buf = strrchr( psz_dir, '/' );
  68.     if( psz_buf )
  69.     {
  70.         psz_buf++;
  71.         *psz_buf = '';
  72.     }
  73.     else
  74.     {
  75.         *psz_dir = '';
  76.     }
  77.     char *psz_path = psz_dir;
  78.     if( !strncmp( psz_path, "file://", 7 ) )
  79.         psz_path += 7;
  80.     for( i = 0; b_have_art == false && i < 3; i++ )
  81.     {
  82.         switch( i )
  83.         {
  84.             case 0:
  85.             /* Windows Folder.jpg */
  86.             snprintf( psz_filename, MAX_PATH,
  87.                       "%sFolder.jpg", psz_path );
  88.             break;
  89.             case 1:
  90.             /* Windows AlbumArtSmall.jpg == small version of Folder.jpg */
  91.             snprintf( psz_filename, MAX_PATH,
  92.                   "%sAlbumArtSmall.jpg", psz_path );
  93.             break;
  94.             case 2:
  95.             /* KDE (?) .folder.png */
  96.             snprintf( psz_filename, MAX_PATH,
  97.                   "%s.folder.png", psz_path );
  98.             break;
  99.         }
  100.         if( utf8_stat( psz_filename, &a ) != -1 )
  101.         {
  102.             char *psz_uri = make_URI( psz_filename );
  103.             if( psz_uri )
  104.             {
  105.                 input_item_SetArtURL( p_item, psz_uri );
  106.                 free( psz_uri );
  107.                 b_have_art = true;
  108.             }
  109.         }
  110.     }
  111.     free( psz_dir );
  112.     return b_have_art ? VLC_SUCCESS : VLC_EGENERIC;
  113. }