[vlc-devel] [PATCH] medialibrary: Fix and update the playlist 'Convert' function

Benjamin Arnaud benjamin.arnaud at videolabs.io
Fri Apr 9 08:00:44 UTC 2021


---
 include/vlc_media_library.h            |  9 ++++++++-
 modules/misc/medialibrary/entities.cpp | 11 +++++++++++
 src/misc/medialibrary.c                |  3 ++-
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index eeaa1460f6..b038566d7a 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -229,9 +229,16 @@ typedef struct vlc_ml_media_t
 typedef struct vlc_ml_playlist_t
 {
     int64_t i_id;
+
     char* psz_name;
-    uint32_t i_creation_date;
+
+    char* psz_mrl;
+
     char* psz_artwork_mrl;
+
+    uint32_t i_creation_date;
+
+    bool b_is_read_only;
 } vlc_ml_playlist_t;
 
 typedef struct vlc_ml_artist_t
diff --git a/modules/misc/medialibrary/entities.cpp b/modules/misc/medialibrary/entities.cpp
index 02c106e4e1..1e7bbd1cef 100644
--- a/modules/misc/medialibrary/entities.cpp
+++ b/modules/misc/medialibrary/entities.cpp
@@ -410,9 +410,20 @@ bool Convert( const medialibrary::IPlaylist* input, vlc_ml_playlist_t& output )
 {
     output.i_id = input->id();
 
+    output.i_creation_date = input->creationDate();
+
+    output.b_is_read_only = input->isReadOnly();
+
     if( !strdup_helper( input->name(), output.psz_name ) ||
         !strdup_helper( input->artworkMrl(), output.psz_artwork_mrl ) )
         return false;
+
+    // NOTE: mrl() must only be called when isReadOnly() is true.
+    if( output.b_is_read_only && !strdup_helper( input->mrl(), output.psz_mrl ) )
+        return false;
+    else
+        output.psz_mrl = nullptr;
+
     return true;
 }
 
diff --git a/src/misc/medialibrary.c b/src/misc/medialibrary.c
index 140f055b5f..f83fc8584b 100644
--- a/src/misc/medialibrary.c
+++ b/src/misc/medialibrary.c
@@ -233,8 +233,9 @@ void vlc_ml_genre_release( vlc_ml_genre_t* p_genre )
 
 static void vlc_ml_playlist_release_inner( vlc_ml_playlist_t* p_playlist )
 {
-    free( p_playlist->psz_artwork_mrl );
     free( p_playlist->psz_name );
+    free( p_playlist->psz_mrl );
+    free( p_playlist->psz_artwork_mrl );
 }
 
 void vlc_ml_playlist_release( vlc_ml_playlist_t* p_playlist )
-- 
2.25.1



More information about the vlc-devel mailing list