[vlc-devel] commit: Make playlist_export_t a VLC object ( Rémi Denis-Courmont )

git version control git at videolan.org
Sun Aug 23 19:33:34 CEST 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Aug 23 18:54:47 2009 +0300| [5a2184110b57510d19d2a28845ab68cff84d38a6] | committer: Rémi Denis-Courmont 

Make playlist_export_t a VLC object

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5a2184110b57510d19d2a28845ab68cff84d38a6
---

 include/vlc_common.h         |    1 -
 include/vlc_playlist.h       |    7 ++--
 modules/misc/playlist/html.c |   15 +++-----
 modules/misc/playlist/m3u.c  |   12 +++----
 modules/misc/playlist/old.c  |    5 +--
 modules/misc/playlist/xspf.c |    4 +--
 src/playlist/loadsave.c      |   71 ++++++++++++++++++++++--------------------
 7 files changed, 55 insertions(+), 60 deletions(-)

diff --git a/include/vlc_common.h b/include/vlc_common.h
index fc46567..668df55 100644
--- a/include/vlc_common.h
+++ b/include/vlc_common.h
@@ -162,7 +162,6 @@ typedef enum {
 typedef struct playlist_t playlist_t;
 typedef struct playlist_item_t playlist_item_t;
 typedef struct playlist_view_t playlist_view_t;
-typedef struct playlist_export_t playlist_export_t;
 typedef struct services_discovery_t services_discovery_t;
 typedef struct services_discovery_sys_t services_discovery_sys_t;
 typedef struct playlist_add_t playlist_add_t;
diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h
index 0c63d8d..8503635 100644
--- a/include/vlc_playlist.h
+++ b/include/vlc_playlist.h
@@ -133,12 +133,13 @@ TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t);
  */
 
 /** Helper structure to export to file part of the playlist */
-struct playlist_export_t
+typedef struct playlist_export_t
 {
-    char *psz_filename;
+    VLC_COMMON_MEMBERS
+    const char *psz_filename;
     FILE *p_file;
     playlist_item_t *p_root;
-};
+} playlist_export_t;
 
 /** playlist item / node */
 struct playlist_item_t
diff --git a/modules/misc/playlist/html.c b/modules/misc/playlist/html.c
index 802214a..b2ac715 100644
--- a/modules/misc/playlist/html.c
+++ b/modules/misc/playlist/html.c
@@ -38,13 +38,11 @@ int Export_HTML( vlc_object_t *p_this );
 
 
 /**
- * Recursiveyy follow the playlist
- * @param p_playlist: the playlist
+ * Recursively follow the playlist
  * @param p_export: the export structure
  * @param p_root: the current node
  */
-static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
-                        playlist_item_t *p_root )
+static void DoChildren( playlist_export_t *p_export, playlist_item_t *p_root )
 {
     /* Go through the playlist and add items */
     for( int i = 0; i < p_root->i_children ; i++)
@@ -57,7 +55,7 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
 
         if( p_current->i_children >= 0 )
         {
-            DoChildren( p_playlist, p_export, p_current );
+            DoChildren( p_export, p_current );
             continue;
         }
 
@@ -99,10 +97,9 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
  */
 int Export_HTML( vlc_object_t *p_this )
 {
-    playlist_t *p_playlist = (playlist_t*)p_this;
-    playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private;
+    playlist_export_t *p_export = (playlist_export_t *)p_this;
 
-    msg_Dbg( p_playlist, "saving using HTML format" );
+    msg_Dbg( p_export, "saving using HTML format" );
 
     /* Write header */
     fprintf( p_export->p_file, "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
@@ -134,7 +131,7 @@ int Export_HTML( vlc_object_t *p_this )
 "  <ol>\n" );
 
     // Call the playlist constructor
-    DoChildren( p_playlist, p_export, p_export->p_root );
+    DoChildren( p_export, p_export->p_root );
 
     // Print the footer
     fprintf( p_export->p_file, "  </ol>\n"
diff --git a/modules/misc/playlist/m3u.c b/modules/misc/playlist/m3u.c
index d3564d3..1050c5f 100644
--- a/modules/misc/playlist/m3u.c
+++ b/modules/misc/playlist/m3u.c
@@ -44,8 +44,7 @@ int Export_M3U ( vlc_object_t * );
 /*****************************************************************************
  * Export_M3U: main export function
  *****************************************************************************/
-static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
-                        playlist_item_t *p_root )
+static void DoChildren( playlist_export_t *p_export, playlist_item_t *p_root )
 {
     int i, j;
 
@@ -60,7 +59,7 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
 
         if( p_current->i_children >= 0 )
         {
-            DoChildren( p_playlist, p_export, p_current );
+            DoChildren( p_export, p_current );
             continue;
         }
 
@@ -110,14 +109,13 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
 
 int Export_M3U( vlc_object_t *p_this )
 {
-    playlist_t *p_playlist = (playlist_t*)p_this;
-    playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private;
+    playlist_export_t *p_export = (playlist_export_t *)p_this;
 
-    msg_Dbg(p_playlist, "saving using M3U format");
+    msg_Dbg( p_export, "saving using M3U format");
 
     /* Write header */
     fprintf( p_export->p_file, "#EXTM3U\n" );
 
-    DoChildren( p_playlist, p_export, p_export->p_root );
+    DoChildren( p_export, p_export->p_root );
     return VLC_SUCCESS;
 }
diff --git a/modules/misc/playlist/old.c b/modules/misc/playlist/old.c
index 2819cac..baf694f 100644
--- a/modules/misc/playlist/old.c
+++ b/modules/misc/playlist/old.c
@@ -47,11 +47,10 @@ int Export_Old ( vlc_object_t * );
  *****************************************************************************/
 int Export_Old( vlc_object_t *p_this )
 {
-    playlist_t *p_playlist = (playlist_t*)p_this;
-    playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private;
+    playlist_export_t *p_export = (playlist_export_t *)p_this;
     int i;
 
-    msg_Dbg(p_playlist, "saving using old format");
+    msg_Dbg( p_export, "saving using old format");
 
     /* Write header */
     fprintf( p_export->p_file , PLAYLIST_FILE_HEADER "\n" );
diff --git a/modules/misc/playlist/xspf.c b/modules/misc/playlist/xspf.c
index 6360931..85c57b8 100644
--- a/modules/misc/playlist/xspf.c
+++ b/modules/misc/playlist/xspf.c
@@ -50,9 +50,7 @@ static void xspf_extension_item( playlist_item_t *, FILE *, int * );
  */
 int xspf_export_playlist( vlc_object_t *p_this )
 {
-    const playlist_t *p_playlist = (playlist_t *)p_this;
-    const playlist_export_t *p_export =
-        (playlist_export_t *)p_playlist->p_private;
+    const playlist_export_t *p_export = (playlist_export_t *)p_this;
     int               i, i_count;
     char             *psz_temp;
     playlist_item_t  *p_node = p_export->p_root;
diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c
index 3437873..7477b67 100644
--- a/src/playlist/loadsave.c
+++ b/src/playlist/loadsave.c
@@ -37,47 +37,50 @@
 #include <unistd.h>
 #include <errno.h>
 
-int playlist_Export( playlist_t * p_playlist, const char *psz_filename ,
-                     playlist_item_t *p_export_root,const char *psz_type )
+int playlist_Export( playlist_t * p_playlist, const char *psz_filename,
+                     playlist_item_t *p_export_root, const char *psz_type )
 {
-    module_t *p_module;
-    playlist_export_t export;
-
     if( p_export_root == NULL ) return VLC_EGENERIC;
 
-    msg_Dbg( p_playlist, "saving %s to file %s",
-                    p_export_root->p_input->psz_name, psz_filename );
-
-    /* Prepare the playlist_export_t structure */
-    export.psz_filename = psz_filename ? strdup( psz_filename ) : NULL;
-    export.p_file = utf8_fopen( psz_filename, "wt" );
-    if( export.p_file == NULL )
-    {
-        msg_Err( p_playlist , "could not create playlist file %s (%m)",
-                 psz_filename );
-        free( export.psz_filename );
-        return VLC_EGENERIC;
-    }
+    playlist_export_t *p_export =
+        vlc_custom_create( p_playlist, sizeof( *p_export ), VLC_OBJECT_GENERIC,
+                           "playlist export" );
+    if( !p_export )
+        return VLC_ENOMEM;
 
-    export.p_root = p_export_root;
+    vlc_object_attach( p_export, p_playlist );
+    msg_Dbg( p_export, "saving %s to file %s",
+             p_export_root->p_input->psz_name, psz_filename );
 
-    playlist_Lock( p_playlist );
-    p_playlist->p_private = (void *)&export;
+    int ret = VLC_EGENERIC;
 
-    /* And call the module ! All work is done now */
-    p_module = module_need( p_playlist, "playlist export", psz_type, true);
-    if( !p_module )
-        msg_Warn( p_playlist, "exporting playlist failed" );
+    /* Prepare the playlist_export_t structure */
+    p_export->p_root = p_export_root;
+    p_export->psz_filename = psz_filename;
+    p_export->p_file = utf8_fopen( psz_filename, "wt" );
+    if( p_export->p_file == NULL )
+        msg_Err( p_export, "could not create playlist file %s (%m)",
+                 psz_filename );
     else
-        module_unneed( p_playlist , p_module );
-    p_playlist->p_private = NULL;
-    playlist_Unlock( p_playlist );
+    {
+        module_t *p_module;
 
-    /* Clean up */
-    fclose( export.p_file );
-    free( export.psz_filename );
+        /* And call the module ! All work is done now */
+        playlist_Lock( p_playlist );
+        p_module = module_need( p_export, "playlist export", psz_type, true );
+        playlist_Unlock( p_playlist );
 
-    return p_module ? VLC_SUCCESS : VLC_ENOOBJ;
+        if( p_module == NULL )
+            msg_Err( p_playlist, "could not export playlist" );
+        else
+        {
+            module_unneed( p_export, p_module );
+            ret = VLC_SUCCESS;
+        }
+        fclose( p_export->p_file );
+   }
+   vlc_object_release( p_export );
+   return ret;
 }
 
 int playlist_Import( playlist_t *p_playlist, const char *psz_file )




More information about the vlc-devel mailing list