]> git.sesse.net Git - vlc/blobdiff - modules/meta_engine/folder.c
directory: assert() at critical places.
[vlc] / modules / meta_engine / folder.c
index 507a700830c4832e3a4aff685fbe10e4291ae4b4..d2fb5dbf4bed28b35fef818bde72b6ac3534e9fa 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#define _GNU_SOURCE
-#include <stdlib.h>                                      /* malloc(), free() */
 
-#include <vlc/vlc.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include <vlc_interface.h>
 #include <vlc_meta.h>
 #include <vlc_playlist.h>
@@ -53,9 +56,9 @@ static int FindMeta( vlc_object_t * );
 
 vlc_module_begin();
     set_shortname( N_( "Folder" ) );
-    set_description( _("Folder meta data") );
+    set_description( N_("Folder meta data") );
 
-    set_capability( "art finder", 10 );
+    set_capability( "art finder", 90 );
     set_callbacks( FindMeta, NULL );
 vlc_module_end();
 
@@ -65,15 +68,14 @@ static int FindMeta( vlc_object_t *p_this )
 {
     playlist_t *p_playlist = (playlist_t *)p_this;
     input_item_t *p_item = (input_item_t *)(p_playlist->p_private);
-    vlc_bool_t b_have_art = VLC_FALSE;
+    bool b_have_art = false;
 
     int i = 0;
     struct stat a;
     char psz_filename[MAX_PATH];
-    char *psz_dir = strdup( p_item->psz_uri );
+    char *psz_dir = input_item_GetURI( p_item );
     char *psz_buf = strrchr( psz_dir, '/' );
 
-    if( !p_item->p_meta ) return VLC_EGENERIC;
     if( psz_buf )
     {
         psz_buf++;
@@ -84,33 +86,37 @@ static int FindMeta( vlc_object_t *p_this )
         *psz_dir = '\0';
     }
 
-    for( i = 0; b_have_art == VLC_FALSE && i < 3; i++ )
+    char *psz_path = psz_dir;
+    if( !strncmp( psz_path, "file://", 7 ) )
+        psz_path += 7;
+
+    for( i = 0; b_have_art == false && i < 3; i++ )
     {
         switch( i )
         {
             case 0:
             /* Windows Folder.jpg */
             snprintf( psz_filename, MAX_PATH,
-                      "file://%sFolder.jpg", psz_dir );
+                      "file://%sFolder.jpg", psz_path );
             break;
 
             case 1:
             /* Windows AlbumArtSmall.jpg == small version of Folder.jpg */
             snprintf( psz_filename, MAX_PATH,
-                  "file://%sAlbumArtSmall.jpg", psz_dir );
+                  "file://%sAlbumArtSmall.jpg", psz_path );
             break;
 
             case 2:
             /* KDE (?) .folder.png */
             snprintf( psz_filename, MAX_PATH,
-                  "file://%s.folder.png", psz_dir );
+                  "file://%s.folder.png", psz_path );
             break;
         }
 
         if( utf8_stat( psz_filename+7, &a ) != -1 )
         {
-            vlc_meta_SetArtURL( p_item->p_meta, psz_filename );
-            b_have_art = VLC_TRUE;
+            input_item_SetArtURL( p_item, psz_filename );
+            b_have_art = true;
         }
     }