]> git.sesse.net Git - vlc/blobdiff - modules/meta_engine/folder.c
prevent #1312 from occuring (refs #1312)
[vlc] / modules / meta_engine / folder.c
index b8927a8b4616454451cff0b4f3365ceb7e8ffa86..6e4b7be191662980def8ec0912becae6d30245ce 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#define _GNU_SOURCE
-#include <stdlib.h>                                      /* malloc(), free() */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <vlc/vlc.h>
-#include <vlc/intf.h>
+#include <vlc_interface.h>
 #include <vlc_meta.h>
-#include <charset.h>
+#include <vlc_playlist.h>
+#include <vlc_input.h>
+#include <vlc_charset.h>
 
 #ifdef HAVE_SYS_STAT_H
 #   include <sys/stat.h>
@@ -53,7 +57,7 @@ vlc_module_begin();
     set_shortname( N_( "Folder" ) );
     set_description( _("Folder meta data") );
 
-    set_capability( "art finder", 10 );
+    set_capability( "art finder", 90 );
     set_callbacks( FindMeta, NULL );
 vlc_module_end();
 
@@ -64,15 +68,13 @@ 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;
-    uint32_t i_meta;
 
     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++;
@@ -83,6 +85,10 @@ static int FindMeta( vlc_object_t *p_this )
         *psz_dir = '\0';
     }
 
+    char *psz_path = psz_dir;
+    if( !strncmp( psz_path, "file://", 7 ) )
+        psz_path += 7;
+
     for( i = 0; b_have_art == VLC_FALSE && i < 3; i++ )
     {
         switch( i )
@@ -90,25 +96,25 @@ static int FindMeta( vlc_object_t *p_this )
             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 );
+            input_item_SetArtURL( p_item, psz_filename );
             b_have_art = VLC_TRUE;
         }
     }