[vlc-devel] [RFC PATCH 4/8] core: Remove old medialibrary

Hugo Beauzée-Luyssen hugo at beauzee.fr
Mon Jun 25 10:10:02 CEST 2018


---
 include/vlc_media_library.h                   |  88 -------------
 include/vlc_playlist.h                        |  14 +--
 modules/control/oldrc.c                       |   4 +-
 modules/control/win_msg.c                     |   3 +-
 .../VLCConvertAndSaveWindowController.m       |   2 +-
 modules/gui/macosx/VLCMainMenu.m              |   6 +-
 modules/gui/qt/dialogs_provider.cpp           |   2 +-
 modules/gui/qt/recents.cpp                    |   2 +-
 modules/gui/skins2/commands/cmd_playlist.cpp  |   2 +-
 modules/lua/libs/playlist.c                   |   2 +-
 src/playlist/engine.c                         |  23 +---
 src/playlist/item.c                           |  13 +-
 src/playlist/loadsave.c                       | 119 +-----------------
 src/playlist/playlist_internal.h              |   4 -
 14 files changed, 26 insertions(+), 258 deletions(-)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index 640c719158..5ef7c621e8 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -32,94 +32,6 @@
 extern "C" {
 # endif
 
-/*****************************************************************************
- * ML Enums
- *****************************************************************************/
-
-#define ML_PERSON_ARTIST        "Artist"
-#define ML_PERSON_ALBUM_ARTIST  "Album Artist"
-#define ML_PERSON_ENCODER       "Encoder"
-#define ML_PERSON_PUBLISHER     "Publisher"
-
-
-/** List of Query select types.
- * In a query array or variable argument list, each select type is followed
- * by an argument (X) of variable type (char* or int, @see ml_element_t).
- * These types can be used either in the query list or in the result array.
- * Some types are reserved for the result array:
- */
-typedef enum
-{
-    ML_ALBUM = 1,              /**< Album Title */
-    ML_ALBUM_ID,               /**< Album ID */
-    ML_ALBUM_COVER,            /**< Album Cover art url */
-    /* FIXME: Remove ML_ARTIST */
-    ML_ARTIST,                 /**< Artist, interpreted as ML_PEOPLE
-                                    && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */
-    ML_ARTIST_ID,              /**< Artist ID, interpreted as ML_PEOPLE_ID
-                                    && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */
-    ML_COMMENT,                /**< Comment about media */
-    ML_COUNT_MEDIA,            /**< Number of medias */
-    ML_COUNT_ALBUM,            /**< Number of albums */
-    ML_COUNT_PEOPLE,           /**< Number of people */
-    ML_COVER,                  /**< Cover art url */
-    ML_DURATION,               /**< Duration in ms */
-    ML_DISC_NUMBER,            /**< Disc number of the track */
-    ML_EXTRA,                  /**< Extra/comment (string) on the media */
-    ML_FIRST_PLAYED,           /**< First time media was played */
-    ML_FILESIZE,               /**< Size of the media file */
-    ML_GENRE,                  /**< Genre of the media (if any) */
-    ML_ID,                     /**< Media ID */
-    ML_IMPORT_TIME,            /**< Date when media was imported */
-    ML_LANGUAGE,               /**< Language */
-    ML_LAST_PLAYED,            /**< Last play UNIX timestamp */
-    ML_LAST_SKIPPED,           /**< Time when media was last skipped */
-    ML_ORIGINAL_TITLE,         /**< Media original title (if any) */
-    ML_PEOPLE,                 /**< Any People associated with this media */
-    ML_PEOPLE_ID,              /**< Id of a person */
-    ML_PEOPLE_ROLE,            /**< Person role */
-    ML_PLAYED_COUNT,           /**< Media play count */
-    ML_PREVIEW,                /**< Url of the video preview */
-    ML_SKIPPED_COUNT,          /**< Number of times skipped */
-    ML_SCORE,                  /**< Computed media score */
-    ML_TITLE,                  /**< Media title */
-    ML_TRACK_NUMBER,           /**< Media track number (if any) */
-    ML_TYPE,                   /**< Media type. @see ml_type_e */
-    ML_URI,                    /**< Media full URI. */
-    ML_VOTE,                   /**< Media user vote value */
-    ML_YEAR,                   /**< Media publishing year */
-    ML_DIRECTORY,              /**< Monitored directory */
-    ML_MEDIA,                  /**< Full media descriptor. @see ml_media_t */
-    ML_MEDIA_SPARSE,           /**< Sparse media. @see ml_media_t */
-    ML_MEDIA_EXTRA,            /**< Sparse + Extra = Full media */
-
-    /* Some special elements */
-    ML_LIMIT     = -1,         /**< Limit a query to X results */
-    ML_SORT_DESC = -2,         /**< Sort a query descending on argument X */
-    ML_SORT_ASC  = -3,         /**< Sort a query ascending on argument X */
-    ML_DISTINCT  = -4,         /**< Add DISTINCT to SELECT statements. */
-    ML_END       = -42         /**< End of argument list */
-} ml_select_e;
-
-/** Media types (audio, video, etc...) */
-typedef enum
-{
-    ML_UNKNOWN   = 0,       /**< Unknown media type */
-    ML_AUDIO     = 1 << 0,  /**< Audio only media */
-    ML_VIDEO     = 1 << 1,  /**< Video media. May contain audio channels */
-    ML_STREAM    = 1 << 2,  /**< Streamed media = not a local file */
-    ML_NODE      = 1 << 3,  /**< Nodes like simple nodes, directories, playlists, etc */
-    ML_REMOVABLE = 1 << 4,  /**< Removable media: CD/DVD/Card/... */
-} ml_type_e;
-
-/** Query result item/list type: integers, strings, medias, timestamps */
-typedef enum {
-    ML_TYPE_INT,        /**< Object is an int */
-    ML_TYPE_PSZ,        /**< A string char* */
-    ML_TYPE_TIME,       /**< A timestamp vlc_tick_t */
-    ML_TYPE_MEDIA,      /**< A pointer to a media ml_media_t* */
-} ml_result_type_e;
-
 #ifdef __cplusplus
 }
 #endif /* C++ */
diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h
index 5a94eaaae4..51f1d0e82b 100644
--- a/include/vlc_playlist.h
+++ b/include/vlc_playlist.h
@@ -61,7 +61,6 @@ struct intf_thread_t;
  * Under the playlist root item node, the top-level items are the main
  * media sources and include:
  * - the actual playlist,
- * - the media library,
  * - the service discovery root node, whose children are services discovery
  *   module instances.
  *
@@ -75,8 +74,6 @@ struct intf_thread_t;
  * - playlist (id 1)
  *    - category 1 (id 2)
  *      - foo 2 (id 6 - input 2)
- * - media library (id 2)
- *    - foo 1 (id 5 - input 1)
  * \endverbatim
  *
  * Sometimes, an item creates subitems. This happens for the directory access
@@ -88,8 +85,7 @@ struct intf_thread_t;
  *
  * For "standard" item addition, you can use playlist_Add(), playlist_AddExt()
  * (more options) or playlist_AddInput() if you already created your input
- * item. This will add the item at the root of "Playlist" or of "Media library"
- * in each of the two trees.
+ * item. This will add the item at the root of "Playlist" in each of the two trees.
  *
  * You can create nodes with playlist_NodeCreate() and can create items from
  * existing input items to be placed under any node with
@@ -160,7 +156,6 @@ struct playlist_t
     /* Predefined items */
     playlist_item_t  root;
     playlist_item_t *p_playing;
-    playlist_item_t *p_media_library;
 };
 
 /* A bit of macro magic to generate an enum out of the following list,
@@ -334,13 +329,12 @@ VLC_API int playlist_Status( playlist_t * );
 
 /**
  * Export a node of the playlist to a certain type of playlistfile
- * \param b_playlist true for the playlist, false for the media library
  * \param psz_filename the location where the exported file will be saved
  * \param psz_type the type of playlist file to create (m3u, pls, ..)
  * \return VLC_SUCCESS on success
  */
 VLC_API int playlist_Export( playlist_t *p_playlist, const char *psz_name,
-                             bool b_playlist, const char *psz_type );
+                             const char *psz_type );
 
 /**
  * Open a playlist file, add its content to the current playlist
@@ -374,8 +368,8 @@ VLC_API int playlist_SetRenderer( playlist_t* p_pl, vlc_renderer_item_t* p_item
 
 /******************** Item addition ********************/
 VLC_API int playlist_Add( playlist_t *, const char *, bool );
-VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, bool, int, const char *const *, unsigned, bool );
-VLC_API int playlist_AddInput( playlist_t *, input_item_t *, bool, bool );
+VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, bool, int, const char *const *, unsigned );
+VLC_API int playlist_AddInput( playlist_t *, input_item_t *, bool );
 VLC_API playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *, int );
 VLC_API int playlist_NodeAddCopy( playlist_t *, playlist_item_t *, playlist_item_t *, int );
 
diff --git a/modules/control/oldrc.c b/modules/control/oldrc.c
index 2c9c2728e3..0a909f878e 100644
--- a/modules/control/oldrc.c
+++ b/modules/control/oldrc.c
@@ -1306,7 +1306,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         if( p_item )
         {
             msg_rc( "Trying to add %s to playlist.", newval.psz_string );
-            int i_ret = playlist_AddInput( p_playlist, p_item, true, true );
+            int i_ret = playlist_AddInput( p_playlist, p_item, true );
             input_item_Release( p_item );
             if( i_ret != VLC_SUCCESS )
             {
@@ -1322,7 +1322,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         if( p_item )
         {
             msg_rc( "trying to enqueue %s to playlist", newval.psz_string );
-            int ret =  playlist_AddInput( p_playlist, p_item, false, true );
+            int ret =  playlist_AddInput( p_playlist, p_item, false );
             input_item_Release( p_item );
             if( ret != VLC_SUCCESS )
             {
diff --git a/modules/control/win_msg.c b/modules/control/win_msg.c
index e73465b238..3587c18d6f 100644
--- a/modules/control/win_msg.c
+++ b/modules/control/win_msg.c
@@ -103,8 +103,7 @@ static LRESULT CALLBACK WMCOPYWNDPROC(HWND hwnd, UINT uMsg,
                         NULL, (i_opt == 0 && !p_data->enqueue),
                         i_options,
                         (char const **)( i_options ? &ppsz_argv[i_opt+1] : NULL ),
-                        VLC_INPUT_OPTION_TRUSTED,
-                        true );
+                        VLC_INPUT_OPTION_TRUSTED );
 
                 i_opt += i_options;
                 free( psz_URI );
diff --git a/modules/gui/macosx/VLCConvertAndSaveWindowController.m b/modules/gui/macosx/VLCConvertAndSaveWindowController.m
index 2781a2d44f..8a91719109 100644
--- a/modules/gui/macosx/VLCConvertAndSaveWindowController.m
+++ b/modules/gui/macosx/VLCConvertAndSaveWindowController.m
@@ -290,7 +290,7 @@
         input_item_AddOption(p_input, [[NSString stringWithFormat:@"ttl=%@", [_streamTTLField stringValue]] UTF8String], VLC_INPUT_OPTION_TRUSTED);
 
     int returnValue;
-    returnValue = playlist_AddInput(p_playlist, p_input, false, true );
+    returnValue = playlist_AddInput(p_playlist, p_input, false );
 
     if (returnValue == VLC_SUCCESS) {
         /* let's "play" */
diff --git a/modules/gui/macosx/VLCMainMenu.m b/modules/gui/macosx/VLCMainMenu.m
index 407bfe8d8c..6a3f18c605 100644
--- a/modules/gui/macosx/VLCMainMenu.m
+++ b/modules/gui/macosx/VLCMainMenu.m
@@ -1182,7 +1182,7 @@
 
             playlist_Export(p_playlist,
                             [actualFilename fileSystemRepresentation],
-                            true, "export-m3u");
+                            "export-m3u");
         } else if ([_playlistSaveAccessoryPopup indexOfSelectedItem] == 1) {
             NSString *actualFilename;
             NSRange range;
@@ -1196,7 +1196,7 @@
 
             playlist_Export(p_playlist,
                             [actualFilename fileSystemRepresentation],
-                            true, "export-xspf");
+                            "export-xspf");
         } else {
             NSString *actualFilename;
             NSRange range;
@@ -1210,7 +1210,7 @@
 
             playlist_Export(p_playlist,
                             [actualFilename fileSystemRepresentation],
-                            true, "export-html");
+                            "export-html");
         }
     }
 }
diff --git a/modules/gui/qt/dialogs_provider.cpp b/modules/gui/qt/dialogs_provider.cpp
index 27212bd769..32ee5b0d22 100644
--- a/modules/gui/qt/dialogs_provider.cpp
+++ b/modules/gui/qt/dialogs_provider.cpp
@@ -677,7 +677,7 @@ void DialogsProvider::savePlayingToPlaylist()
 
     if ( psz_selected_module )
     {
-        playlist_Export( THEPL, qtu( toNativeSeparators( file ) ), true,
+        playlist_Export( THEPL, qtu( toNativeSeparators( file ) ),
                          psz_selected_module );
         getSettings()->setValue( "last-playlist-ext", psz_last_playlist_ext );
     }
diff --git a/modules/gui/qt/recents.cpp b/modules/gui/qt/recents.cpp
index 5aa190ed31..914f378c41 100644
--- a/modules/gui/qt/recents.cpp
+++ b/modules/gui/qt/recents.cpp
@@ -211,7 +211,7 @@ int Open::openMRLwithOptions( intf_thread_t* p_intf,
 
     /* Add to playlist */
     int i_ret = playlist_AddExt( THEPL, qtu(mrl), title, b_start,
-                  i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED, true );
+                  i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED );
 
     /* Add to recent items, only if played */
     if( i_ret == VLC_SUCCESS && b_start )
diff --git a/modules/gui/skins2/commands/cmd_playlist.cpp b/modules/gui/skins2/commands/cmd_playlist.cpp
index ab5d94c119..7555c80e39 100644
--- a/modules/gui/skins2/commands/cmd_playlist.cpp
+++ b/modules/gui/skins2/commands/cmd_playlist.cpp
@@ -91,7 +91,7 @@ void CmdPlaylistSave::execute()
         return;
     }
 
-    playlist_Export( getPL(), m_file.c_str(), true, psz_module );
+    playlist_Export( getPL(), m_file.c_str(), psz_module );
 }
 
 void CmdPlaylistFirst::execute()
diff --git a/modules/lua/libs/playlist.c b/modules/lua/libs/playlist.c
index 5e06d65ec2..3375ba809c 100644
--- a/modules/lua/libs/playlist.c
+++ b/modules/lua/libs/playlist.c
@@ -195,7 +195,7 @@ static int vlclua_playlist_add_common(lua_State *L, bool play)
         {
             /* Play or Enqueue (preparse) */
             /* FIXME: playlist_AddInput() can fail */
-            playlist_AddInput(playlist, item, play, true);
+            playlist_AddInput(playlist, item, play);
             input_item_Release(item);
             count++;
         }
diff --git a/src/playlist/engine.c b/src/playlist/engine.c
index 10c4cf03e6..05afa2240f 100644
--- a/src/playlist/engine.c
+++ b/src/playlist/engine.c
@@ -226,26 +226,19 @@ playlist_t *playlist_Create( vlc_object_t *p_parent )
     p_playlist->root.i_id = 0;
     p_playlist->root.i_flags = 0;
 
-    /* Create the root, playing items and meida library nodes */
-    playlist_item_t *playing, *ml;
+    /* Create the root, playing items nodes */
+    playlist_item_t *playing;
 
     PL_LOCK;
     playing = playlist_NodeCreate( p_playlist, _( "Playlist" ),
                                    &p_playlist->root, PLAYLIST_END,
                                    PLAYLIST_RO_FLAG|PLAYLIST_NO_INHERIT_FLAG );
-    if( var_InheritBool( p_parent, "media-library") )
-        ml = playlist_NodeCreate( p_playlist, _( "Media Library" ),
-                                  &p_playlist->root, PLAYLIST_END,
-                                  PLAYLIST_RO_FLAG|PLAYLIST_NO_INHERIT_FLAG );
-    else
-        ml = NULL;
     PL_UNLOCK;
 
     if( unlikely(playing == NULL) )
         abort();
 
     p_playlist->p_playing = playing;
-    p_playlist->p_media_library = ml;
 
     /* Initial status */
     pl_priv(p_playlist)->status.p_item = NULL;
@@ -253,9 +246,6 @@ playlist_t *playlist_Create( vlc_object_t *p_parent )
     pl_priv(p_playlist)->request.b_request = false;
     p->request.input_dead = false;
 
-    if (ml != NULL)
-        playlist_MLLoad( p_playlist );
-
     /* Input resources */
     p->p_input_resource = input_resource_New( VLC_OBJECT( p_playlist ) );
     if( unlikely(p->p_input_resource == NULL) )
@@ -315,9 +305,6 @@ void playlist_Destroy( playlist_t *p_playlist )
     if( p_sys->p_renderer )
         vlc_renderer_item_release( p_sys->p_renderer );
 
-    if( p_playlist->p_media_library != NULL )
-        playlist_MLDump( p_playlist );
-
     PL_LOCK;
     /* Release the current node */
     set_current_status_node( p_playlist, NULL );
@@ -329,12 +316,6 @@ void playlist_Destroy( playlist_t *p_playlist )
     ARRAY_RESET( p_playlist->current );
 
     /* Remove all remaining items */
-    if( p_playlist->p_media_library != NULL )
-    {
-        playlist_NodeDeleteExplicit( p_playlist, p_playlist->p_media_library,
-            PLAYLIST_DELETE_FORCE );
-    }
-
     playlist_NodeDeleteExplicit( p_playlist, p_playlist->p_playing,
         PLAYLIST_DELETE_FORCE );
 
diff --git a/src/playlist/item.c b/src/playlist/item.c
index cdece423eb..39ab665ef1 100644
--- a/src/playlist/item.c
+++ b/src/playlist/item.c
@@ -453,7 +453,7 @@ void playlist_Clear( playlist_t * p_playlist, bool b_locked )
 int playlist_Add( playlist_t *p_playlist, const char *psz_uri, bool play_now )
 {
     return playlist_AddExt( p_playlist, psz_uri, NULL, play_now,
-                            0, NULL, 0, true );
+                            0, NULL, 0 );
 }
 
 /**
@@ -466,20 +466,18 @@ int playlist_Add( playlist_t *p_playlist, const char *psz_uri, bool play_now )
  * \param i_options the number of options
  * \param ppsz_options an array of options
  * \param i_option_flags options flags
- * \param b_playlist TRUE for playlist, FALSE for media library
  * \return VLC_SUCCESS or a VLC error code
 */
 int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
                      const char *psz_name, bool play_now,
                      int i_options, const char *const *ppsz_options,
-                     unsigned i_option_flags,
-                     bool b_playlist )
+                     unsigned i_option_flags )
 {
     input_item_t *p_input = input_item_New( psz_uri, psz_name );
     if( !p_input )
         return VLC_ENOMEM;
     input_item_AddOptions( p_input, i_options, ppsz_options, i_option_flags );
-    int i_ret = playlist_AddInput( p_playlist, p_input, play_now, b_playlist );
+    int i_ret = playlist_AddInput( p_playlist, p_input, play_now );
     input_item_Release( p_input );
     return i_ret;
 }
@@ -494,11 +492,10 @@ int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
  * \return VLC_SUCCESS or VLC_ENOMEM or VLC_EGENERIC
 */
 int playlist_AddInput( playlist_t* p_playlist, input_item_t *p_input,
-                       bool play_now, bool b_playlist )
+                       bool play_now)
 {
     PL_LOCK;
-    playlist_item_t *item = b_playlist ? p_playlist->p_playing
-                                       : p_playlist->p_media_library;
+    playlist_item_t *item = p_playlist->p_playing;
 
     item = playlist_NodeAddInput( p_playlist, p_input, item, PLAYLIST_END );
 
diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c
index 178ec1fbb4..790aed4031 100644
--- a/src/playlist/loadsave.c
+++ b/src/playlist/loadsave.c
@@ -39,15 +39,14 @@
 #include <vlc_modules.h>
 
 int playlist_Export( playlist_t * p_playlist, const char *psz_filename,
-                     bool b_playlist, const char *psz_type )
+                     const char *psz_type )
 {
     playlist_export_t *p_export =
         vlc_custom_create( p_playlist, sizeof( *p_export ), "playlist export" );
     if( unlikely(p_export == NULL) )
         return VLC_ENOMEM;
 
-    msg_Dbg( p_export, "saving %s to file %s",
-             b_playlist ? "playlist" : "media library", psz_filename );
+    msg_Dbg( p_export, "saving playlist to file %s", psz_filename );
 
     int ret = VLC_EGENERIC;
 
@@ -65,8 +64,7 @@ int playlist_Export( playlist_t * p_playlist, const char *psz_filename,
 
     /* And call the module ! All work is done now */
     playlist_Lock( p_playlist );
-    p_export->p_root = b_playlist ? p_playlist->p_playing
-                                  : p_playlist->p_media_library;
+    p_export->p_root = p_playlist->p_playing;
 
     p_module = module_need( p_export, "playlist export", psz_type, true );
     playlist_Unlock( p_playlist );
@@ -100,7 +98,7 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file )
     p_input = input_item_New( psz_uri, psz_file );
     free( psz_uri );
 
-    playlist_AddInput( p_playlist, p_input, false, true );
+    playlist_AddInput( p_playlist, p_input, false );
 
     vlc_object_t *dummy = vlc_object_create( p_playlist, sizeof (*dummy) );
     var_Create( dummy, "meta-file", VLC_VAR_VOID );
@@ -110,112 +108,3 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file )
     vlc_object_release( dummy );
     return ret;
 }
-
-/*****************************************************************************
- * A subitem has been added to the Media Library (Event Callback)
- *****************************************************************************/
-static void input_item_subitem_tree_added( const vlc_event_t * p_event,
-                                      void * user_data )
-{
-    playlist_t *p_playlist = user_data;
-    input_item_node_t *p_root =
-        p_event->u.input_item_subitem_tree_added.p_root;
-
-    PL_LOCK;
-    playlist_InsertInputItemTree ( p_playlist, p_playlist->p_media_library,
-                                   p_root, 0, false );
-    PL_UNLOCK;
-}
-
-int playlist_MLLoad( playlist_t *p_playlist )
-{
-    char *psz_datadir = config_GetUserDir( VLC_USERDATA_DIR );
-    if( !psz_datadir ) /* XXX: This should never happen */
-    {
-        msg_Err( p_playlist, "no data directory, cannot load media library") ;
-        return VLC_EGENERIC;
-    }
-
-    char *psz_file;
-    if( asprintf( &psz_file, "%s" DIR_SEP "ml.xspf", psz_datadir ) == -1 )
-        psz_file = NULL;
-    free( psz_datadir );
-    if( psz_file == NULL )
-        return VLC_ENOMEM;
-
-    /* lousy check for media library file */
-    struct stat st;
-    if( vlc_stat( psz_file, &st ) )
-    {
-        free( psz_file );
-        return VLC_EGENERIC;
-    }
-
-    char *psz_uri = vlc_path2uri( psz_file, "file/directory" );
-    free( psz_file );
-    if( psz_uri == NULL )
-        return VLC_ENOMEM;
-
-    input_item_t *p_input = input_item_New( psz_uri, _("Media Library") );
-    free( psz_uri );
-    if( p_input == NULL )
-        return VLC_EGENERIC;
-
-    vlc_event_attach( &p_input->event_manager, vlc_InputItemSubItemTreeAdded,
-                        input_item_subitem_tree_added, p_playlist );
-
-    vlc_object_t *dummy = vlc_object_create( p_playlist, sizeof (*dummy) );
-    var_Create( dummy, "meta-file", VLC_VAR_VOID );
-    input_Read( dummy, p_input );
-    vlc_object_release( dummy );
-
-    vlc_event_detach( &p_input->event_manager, vlc_InputItemSubItemTreeAdded,
-                        input_item_subitem_tree_added, p_playlist );
-    input_item_Release( p_input );
-
-    return VLC_SUCCESS;
-}
-
-int playlist_MLDump( playlist_t *p_playlist )
-{
-    char *psz_temp;
-
-    psz_temp = config_GetUserDir( VLC_USERDATA_DIR );
-
-    if( !psz_temp ) /* XXX: This should never happen */
-    {
-        msg_Err( p_playlist, "no data directory, cannot save media library") ;
-        return VLC_EGENERIC;
-    }
-
-    char psz_dirname[ strlen( psz_temp ) + sizeof( DIR_SEP "ml.xspf")];
-    strcpy( psz_dirname, psz_temp );
-    free( psz_temp );
-    if( config_CreateDir( (vlc_object_t *)p_playlist, psz_dirname ) )
-    {
-        return VLC_EGENERIC;
-    }
-
-    strcat( psz_dirname, DIR_SEP "ml.xspf" );
-
-    if ( asprintf( &psz_temp, "%s.tmp%"PRIu32, psz_dirname, (uint32_t)getpid() ) < 1 )
-        return VLC_EGENERIC;
-
-    int i_ret = playlist_Export( p_playlist, psz_temp, false, "export-xspf" );
-    if ( i_ret != VLC_SUCCESS )
-    {
-        vlc_unlink( psz_temp );
-        free( psz_temp );
-        return i_ret;
-    }
-
-    i_ret = vlc_rename( psz_temp, psz_dirname );
-    free( psz_temp );
-    if( i_ret == -1 )
-    {
-        msg_Err( p_playlist, "could not rename %s.tmp: %s",
-                 psz_dirname, vlc_strerror_c(errno) );
-        return VLC_EGENERIC;
-    }
-    return VLC_SUCCESS;
-}
diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h
index 6432c6e083..9a228614df 100644
--- a/src/playlist/playlist_internal.h
+++ b/src/playlist/playlist_internal.h
@@ -109,10 +109,6 @@ playlist_item_t * get_current_status_node( playlist_t * p_playlist );
 void set_current_status_item( playlist_t *, playlist_item_t * );
 void set_current_status_node( playlist_t *, playlist_item_t * );
 
-/* Load/Save */
-int playlist_MLLoad( playlist_t *p_playlist );
-int playlist_MLDump( playlist_t *p_playlist );
-
 /**********************************************************************
  * Item management
  **********************************************************************/
-- 
2.18.0



More information about the vlc-devel mailing list