From 5a2184110b57510d19d2a28845ab68cff84d38a6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 23 Aug 2009 18:54:47 +0300 Subject: [PATCH] Make playlist_export_t a VLC object --- 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 | 67 +++++++++++++++++++----------------- 7 files changed, 53 insertions(+), 58 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index fc46567494..668df55179 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 0c63d8d678..8503635acf 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 802214a6f5..b2ac7156b4 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, "\n" @@ -134,7 +131,7 @@ int Export_HTML( vlc_object_t *p_this ) "
    \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, "
\n" diff --git a/modules/misc/playlist/m3u.c b/modules/misc/playlist/m3u.c index d3564d352e..1050c5f5fc 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 2819cac1c9..baf694f32b 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 6360931e9a..85c57b8aaa 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 3437873076..7477b67c62 100644 --- a/src/playlist/loadsave.c +++ b/src/playlist/loadsave.c @@ -37,47 +37,50 @@ #include #include -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 ) -- 2.39.2