]> git.sesse.net Git - vlc/blobdiff - modules/meta_engine/taglib.cpp
id3tag: code cosmetic and warning killing
[vlc] / modules / meta_engine / taglib.cpp
index 0a62e661782ccd0d0c243b51846b62557143b9d3..227ed04f758b626fd8378c084f7be0a341b932a8 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * taglib.cpp: Taglib tag parser/writer
  *****************************************************************************
- * Copyright (C) 2003-2008 the VideoLAN team
+ * Copyright (C) 2003-2009 the VideoLAN team
  * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
@@ -34,6 +34,7 @@
 #include <vlc_demux.h>
 #include <vlc_strings.h>
 #include <vlc_charset.h>
+#include <vlc_url.h>
 
 #ifdef WIN32
 # include <io.h>
 
 // Local functions
 static int ReadMeta    ( vlc_object_t * );
-static int DownloadArt ( vlc_object_t * );
 static int WriteMeta   ( vlc_object_t * );
 
 vlc_module_begin ()
     set_capability( "meta reader", 1000 )
     set_callbacks( ReadMeta, NULL )
-    add_submodule ()
-        set_capability( "art downloader", 50 )
-        set_callbacks( DownloadArt, NULL )
     add_submodule ()
         set_capability( "meta writer", 50 )
         set_callbacks( WriteMeta, NULL )
@@ -196,8 +193,7 @@ static void ReadMetaFromId3v2( ID3v2::Tag* tag, demux_t* p_demux, demux_meta_t*
         return;
 
     TAB_INIT( p_demux_meta->i_attachments, p_demux_meta->attachments );
-    for( ID3v2::FrameList::Iterator iter = list.begin();
-         iter != list.end(); iter++ )
+    for( iter = list.begin(); iter != list.end(); iter++ )
     {
         ID3v2::AttachedPictureFrame* p_apic =
             dynamic_cast<ID3v2::AttachedPictureFrame*>(*iter);
@@ -327,14 +323,24 @@ static int ReadMeta( vlc_object_t* p_this)
     demux_t*        p_demux = (demux_t*)p_this;
     demux_meta_t*   p_demux_meta = (demux_meta_t*)p_demux->p_private;
     vlc_meta_t*     p_meta;
-    TagLib::FileRef f;
+    FileRef f;
 
     p_demux_meta->p_meta = NULL;
+
+
+#if defined(WIN32) || defined (UNDER_CE)
+    wchar_t wpath[MAX_PATH + 1];
+    if( !MultiByteToWideChar( CP_UTF8, 0, p_demux->psz_path, -1, wpath, MAX_PATH) )
+        return VLC_EGENERIC;
+    wpath[MAX_PATH] = L'\0';
+    f = FileRef( wpath );
+#else
     const char* local_name = ToLocale( p_demux->psz_path );
     if( !local_name )
         return VLC_EGENERIC;
     f = FileRef( local_name );
     LocaleFree( local_name );
+#endif
 
     if( f.isNull() )
         return VLC_EGENERIC;
@@ -511,6 +517,7 @@ static int WriteMeta( vlc_object_t *p_this )
     playlist_t *p_playlist = (playlist_t *)p_this;
     meta_export_t *p_export = (meta_export_t *)p_playlist->p_private;
     input_item_t *p_item = p_export->p_item;
+    FileRef f;
 
     if( !p_item )
     {
@@ -518,15 +525,40 @@ static int WriteMeta( vlc_object_t *p_this )
         return VLC_EGENERIC;
     }
 
-    FileRef f( p_export->psz_file );
+    char *export_file = strdup(p_export->psz_file);
+    if( decode_URI( export_file ) == NULL )
+    {
+        free( export_file );
+        return VLC_EGENERIC;
+    }
+
+#if defined(WIN32) || defined (UNDER_CE)
+    wchar_t wpath[MAX_PATH + 1];
+    if( !MultiByteToWideChar( CP_UTF8, 0, export_file , -1, wpath, MAX_PATH) )
+        return VLC_EGENERIC;
+    wpath[MAX_PATH] = L'\0';
+    f = FileRef( wpath );
+#else
+    const char* local_name = ToLocale( export_file );
+    if( !local_name )
+    {
+        free( export_file );
+        return VLC_EGENERIC;
+    }
+    f = FileRef( local_name );
+    LocaleFree( local_name );
+#endif
+
     if( f.isNull() || !f.tag() || f.file()->readOnly() )
     {
-        msg_Err( p_this, "File %s can't be opened for tag writing\n",
-            p_export->psz_file );
+        msg_Err( p_this, "File %s can't be opened for tag writing",
+            export_file );
+        free( export_file );
         return VLC_EGENERIC;
     }
 
-    msg_Dbg( p_this, "Writing metadata for %s", p_export->psz_file );
+    msg_Dbg( p_this, "Writing metadata for %s", export_file );
+    free( export_file );
 
     Tag *p_tag = f.tag();
 
@@ -542,8 +574,7 @@ static int WriteMeta( vlc_object_t *p_this )
 
     // Saving all common fields
     // If the title is empty, use the name
-    psz_meta = input_item_GetTitle( p_item );
-    if( !psz_meta ) psz_meta = input_item_GetName( p_item );
+    psz_meta = input_item_GetTitleFbName( p_item );
     SET( Title, psz_meta );
     free( psz_meta );
 
@@ -620,13 +651,3 @@ static int WriteMeta( vlc_object_t *p_this )
     return VLC_SUCCESS;
 }
 
-
-
-static int DownloadArt( vlc_object_t *p_this )
-{
-    /* We need to be passed the file name
-     * Fetch the thing from the file, save it to the cache folder
-     */
-    return VLC_EGENERIC;
-}
-