-
-#ifndef MAX_PATH
-# define MAX_PATH 250
-#endif
-int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
-{
- char *psz_artist;
- char *psz_album;
- char *psz_type;
- char *psz_filename;
- int i_status = VLC_EGENERIC;
- int i_ret;
- struct stat a;
-
- if( !p_item->p_meta
- || !p_item->p_meta->psz_arturl
- || !*p_item->p_meta->psz_arturl )
- {
- return VLC_EGENERIC;
- }
- if( !strncmp( p_item->p_meta->psz_arturl, "file", 4 ) )
- {
- return VLC_SUCCESS;
- }
-
- psz_artist = p_item->p_meta->psz_artist;
- psz_album = p_item->p_meta->psz_album;
- psz_type = strrchr( p_item->p_meta->psz_arturl, '.' );
- psz_filename = (char *)malloc( MAX_PATH );
-
-
- snprintf( psz_filename, MAX_PATH,
- "file://%s" DIR_SEP CONFIG_DIR DIR_SEP "art"
- DIR_SEP "%s" DIR_SEP "%s" DIR_SEP "art%s",
- p_parent->p_libvlc->psz_homedir,
- psz_artist, psz_album, psz_type );
- msg_Dbg( p_parent, "Saving album art to %s", psz_filename );
-
- /* Check if file exists */
- i_ret = utf8_stat( psz_filename+7, &a );
- if( i_ret == 0 )
- {
- msg_Dbg( p_parent, "Album art %s already exists", psz_filename );
- }
- else
- {
- //if( i_ret == -1 && errno == ENOTDIR )
- {
- /* GRUIKKKKKKKKKK (make sure that all the directories exist) */
- char *psz_dir = malloc( MAX_PATH );
- snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR,
- p_parent->p_libvlc->psz_homedir );
- utf8_mkdir( psz_dir );
- snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP "art",
- p_parent->p_libvlc->psz_homedir );
- utf8_mkdir( psz_dir );
- snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP
- "art" DIR_SEP "%s",
- p_parent->p_libvlc->psz_homedir, psz_artist );
- utf8_mkdir( psz_dir );
- snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP
- "art" DIR_SEP "%s" DIR_SEP "%s",
- p_parent->p_libvlc->psz_homedir,
- psz_artist, psz_album );
- utf8_mkdir( psz_dir );
- free( psz_dir );
- }
-
- stream_t *p_stream = stream_UrlNew( p_parent,
- p_item->p_meta->psz_arturl );
-
- if( p_stream )
- {
- void *p_buffer = malloc( 1<<16 );
- long int l_read;
- FILE *p_file = utf8_fopen( psz_filename+7, "w" );
- while( ( l_read = stream_Read( p_stream, p_buffer, 1<<16 ) ) )
- {
- fwrite( p_buffer, l_read, 1, p_file );
- }
- free( p_buffer );
- fclose( p_file );
- stream_Delete( p_stream );
- msg_Dbg( p_parent, "Album art saved to %s\n", psz_filename );
- free( p_item->p_meta->psz_arturl );
- p_item->p_meta->psz_arturl = strdup( psz_filename );
- i_status = VLC_SUCCESS;
- }
- }
- free( psz_filename );
-
- return i_status;
-}