[vlc-commits] medialibrary: entry points: Use the same list as for other ml entities

Hugo Beauzée-Luyssen git at videolan.org
Wed Aug 22 11:44:32 CEST 2018


vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Tue Aug 21 15:36:44 2018 +0200| [2ae42bae1c894a1852de2f507cd659d72481dcc8] | committer: Hugo Beauzée-Luyssen

medialibrary: entry points: Use the same list as for other ml entities

This also rename vlc_ml_entrypoint_t to vlc_ml_entry_point_t to follow
the same naming convention as the entry point related events

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

 include/vlc_media_library.h              | 24 +++++++++++++++---------
 modules/misc/medialibrary/entities.cpp   | 18 ++++++++++++++++++
 modules/misc/medialibrary/medialib.cpp   | 31 +++----------------------------
 modules/misc/medialibrary/medialibrary.h |  1 +
 src/libvlccore.sym                       |  2 +-
 src/misc/medialibrary.c                  | 18 +++++++++---------
 6 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index 922431583a..95d10e3ccf 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -268,13 +268,18 @@ typedef struct vlc_ml_playlist_list_t
     vlc_ml_playlist_t p_items[];
 } vlc_ml_playlist_list_t;
 
-typedef struct vlc_ml_entrypoint_t vlc_ml_entrypoint_t;
-struct vlc_ml_entrypoint_t
+typedef struct vlc_ml_entry_point_t
 {
     char* psz_mrl; /**< This entrypoint's MRL. Will be NULL if b_present is false */
     bool b_present; /**< The presence state for this entrypoint. */
     bool b_banned; /**< Will be true if the user required this entrypoint to be excluded */
-};
+} vlc_ml_entry_point_t;
+
+typedef struct vlc_ml_entry_point_list_t
+{
+    size_t i_nb_items;
+    vlc_ml_entry_point_t p_items[];
+} vlc_ml_entry_point_list_t;
 
 /* Opaque medialibrary pointer, to be used by any non-medialibrary module */
 typedef struct vlc_medialibrary_t vlc_medialibrary_t;
@@ -402,7 +407,7 @@ enum vlc_ml_control
     VLC_ML_REMOVE_FOLDER,           /**< arg1: mrl (const char*)  res: can't fail */
     VLC_ML_BAN_FOLDER,              /**< arg1: mrl (const char*)  res: can't fail */
     VLC_ML_UNBAN_FOLDER,            /**< arg1: mrl (const char*)  res: can't fail */
-    VLC_ML_LIST_FOLDERS,            /**< arg1: entrypoints (vlc_ml_entrypoint_t**); arg2: nb results(size_t*), res: can fail */
+    VLC_ML_LIST_FOLDERS,            /**< arg1: entrypoints (vlc_ml_entry_point_list_t**); res: can fail */
     /**
      * Reload a specific folder, or all.
      * arg1: mrl (const char*), NULL to reload all folders
@@ -700,8 +705,6 @@ VLC_API void vlc_ml_event_unregister_callback( vlc_medialibrary_t* p_ml,
                                                vlc_ml_event_callback_t* p_callback );
 
 
-VLC_API void vlc_ml_entrypoints_release( vlc_ml_entrypoint_t* p_list, size_t i_nb_items );
-
 VLC_API void vlc_ml_show_release( vlc_ml_show_t* p_show );
 VLC_API void vlc_ml_artist_release( vlc_ml_artist_t* p_artist );
 VLC_API void vlc_ml_genre_release( vlc_ml_genre_t* p_genre );
@@ -717,6 +720,7 @@ VLC_API void vlc_ml_album_list_release( vlc_ml_album_list_t* p_list );
 VLC_API void vlc_ml_show_list_release( vlc_ml_show_list_t* p_list );
 VLC_API void vlc_ml_genre_list_release( vlc_ml_genre_list_t* p_list );
 VLC_API void vlc_ml_playlist_list_release( vlc_ml_playlist_list_t* p_list );
+VLC_API void vlc_ml_entry_point_list_release( vlc_ml_entry_point_list_t* p_list );
 
 static inline vlc_ml_query_params_t vlc_ml_query_params_create()
 {
@@ -750,9 +754,9 @@ static inline int vlc_ml_unban_folder( vlc_medialibrary_t* p_ml, const char* psz
 }
 
 static inline int vlc_ml_list_folder( vlc_medialibrary_t* p_ml,
-                                      vlc_ml_entrypoint_t** pp_entrypoints, size_t* p_nb_items )
+                                      vlc_ml_entry_point_list_t** pp_entrypoints )
 {
-    return vlc_ml_control( p_ml, VLC_ML_LIST_FOLDERS, pp_entrypoints, p_nb_items );
+    return vlc_ml_control( p_ml, VLC_ML_LIST_FOLDERS, pp_entrypoints );
 }
 
 static inline int vlc_ml_reload_folder( vlc_medialibrary_t* p_ml, const char* psz_mrl )
@@ -1232,7 +1236,8 @@ static inline size_t vlc_ml_count_playlists( vlc_medialibrary_t* p_ml, const vlc
     vlc_ml_album_list_t*: vlc_ml_album_list_release, \
     vlc_ml_show_list_t*: vlc_ml_show_list_release, \
     vlc_ml_genre_list_t*: vlc_ml_genre_list_release, \
-    vlc_ml_playlist_list_t*: vlc_ml_playlist_list_release \
+    vlc_ml_playlist_list_t*: vlc_ml_playlist_list_release, \
+    vlc_ml_entry_point_list_t*: vlc_ml_entry_point_list_release \
     )( OBJ )
 #else
 static inline void vlc_ml_release( vlc_ml_show_t* show ) { vlc_ml_show_release( show ); }
@@ -1249,6 +1254,7 @@ static inline void vlc_ml_release( vlc_ml_album_list_t* list ) { vlc_ml_album_li
 static inline void vlc_ml_release( vlc_ml_show_list_t* list ) { vlc_ml_show_list_release( list ); }
 static inline void vlc_ml_release( vlc_ml_genre_list_t* list ) { vlc_ml_genre_list_release( list ); }
 static inline void vlc_ml_release( vlc_ml_playlist_list_t* list ) { vlc_ml_playlist_list_release( list ); }
+static inline void vlc_ml_release( vlc_ml_entry_point_list_t* list ) { vlc_ml_entry_point_list_release( list ); }
 #endif
 
 #endif /* VLC_MEDIA_LIBRARY_H */
diff --git a/modules/misc/medialibrary/entities.cpp b/modules/misc/medialibrary/entities.cpp
index 1eed9f8583..0579e38475 100644
--- a/modules/misc/medialibrary/entities.cpp
+++ b/modules/misc/medialibrary/entities.cpp
@@ -37,6 +37,7 @@
 #include <medialibrary/IPlaylist.h>
 #include <medialibrary/IAudioTrack.h>
 #include <medialibrary/IVideoTrack.h>
+#include <medialibrary/IFolder.h>
 
 static auto const strdup_helper = []( std::string const& src, char*& dst )
 {
@@ -353,3 +354,20 @@ bool Convert( const medialibrary::IPlaylist* input, vlc_ml_playlist_t& output )
         return false;
     return true;
 }
+
+bool Convert( const medialibrary::IFolder* input, vlc_ml_entry_point_t& output )
+{
+    if ( input->isPresent() == true )
+    {
+        if ( strdup_helper( input->mrl(), output.psz_mrl ) == false )
+            return false;
+        output.b_present = true;
+    }
+    else
+    {
+        output.psz_mrl = nullptr;
+        output.b_present = false;
+    }
+    output.b_banned = input->isBanned();
+    return true;
+}
diff --git a/modules/misc/medialibrary/medialib.cpp b/modules/misc/medialibrary/medialib.cpp
index e1a4b90676..86652a32ec 100644
--- a/modules/misc/medialibrary/medialib.cpp
+++ b/modules/misc/medialibrary/medialib.cpp
@@ -27,7 +27,6 @@
 #include <vlc_media_library.h>
 #include "medialibrary.h"
 
-#include <medialibrary/IFolder.h>
 #include <medialibrary/IMedia.h>
 #include <medialibrary/IAlbumTrack.h>
 #include <medialibrary/IAlbum.h>
@@ -382,33 +381,9 @@ int MediaLibrary::Control( int query, va_list args )
         case VLC_ML_LIST_FOLDERS:
         {
             auto entryPoints = m_ml->entryPoints()->all();
-            auto nbItem = entryPoints.size();
-            auto list = vlc::wrap_carray( static_cast<vlc_ml_entrypoint_t*>(
-                    calloc( entryPoints.size(), sizeof( vlc_ml_entrypoint_t ) ) ),
-                    [nbItem]( vlc_ml_entrypoint_t* ptr ) {
-                        vlc_ml_entrypoints_release( ptr, nbItem );
-                    });
-            if ( unlikely( list == nullptr ) )
-                return VLC_ENOMEM;
-            for ( auto i = 0u; i < entryPoints.size(); ++i )
-            {
-                const auto ep = entryPoints[i].get();
-                if ( ep->isPresent() == true )
-                {
-                    list[i].psz_mrl = strdup( ep->mrl().c_str() );
-                    if ( unlikely( list[i].psz_mrl == nullptr ) )
-                        return VLC_ENOMEM;
-                    list[i].b_present = true;
-                }
-                else
-                {
-                    list[i].psz_mrl = nullptr;
-                    list[i].b_present = false;
-                }
-                list[i].b_banned = ep->isBanned();
-            }
-            *(va_arg( args, vlc_ml_entrypoint_t**) ) = list.release();
-            *(va_arg( args, size_t*) ) = entryPoints.size();
+            auto res = ml_convert_list<vlc_ml_entry_point_list_t,
+                                         vlc_ml_entry_point_t>( entryPoints );
+            *(va_arg( args, vlc_ml_entry_point_list_t**) ) = res;
             break;
         }
         case VLC_ML_RELOAD_FOLDER:
diff --git a/modules/misc/medialibrary/medialibrary.h b/modules/misc/medialibrary/medialibrary.h
index 6d6ad54018..133ca0f30c 100644
--- a/modules/misc/medialibrary/medialibrary.h
+++ b/modules/misc/medialibrary/medialibrary.h
@@ -164,6 +164,7 @@ bool Convert( const medialibrary::IGenre* input, vlc_ml_genre_t& output );
 bool Convert( const medialibrary::IShow* input, vlc_ml_show_t& output );
 bool Convert( const medialibrary::ILabel* input, vlc_ml_label_t& output );
 bool Convert( const medialibrary::IPlaylist* input, vlc_ml_playlist_t& output );
+bool Convert( const medialibrary::IFolder* input, vlc_ml_entry_point_t& output );
 
 template <typename To, typename ItemType, typename From>
 To* ml_convert_list( const std::vector<std::shared_ptr<From>>& input )
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 19fb6d492e..c77f39d6b7 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -598,7 +598,6 @@ vlc_ml_control
 vlc_ml_list
 vlc_ml_event_register_callback
 vlc_ml_event_unregister_callback
-vlc_ml_entrypoints_release
 vlc_ml_show_release
 vlc_ml_artist_release
 vlc_ml_genre_release
@@ -613,6 +612,7 @@ vlc_ml_album_list_release
 vlc_ml_show_list_release
 vlc_ml_genre_list_release
 vlc_ml_playlist_list_release
+vlc_ml_entry_point_list_release
 vlc_poll_i11e
 vlc_read_i11e
 vlc_readv_i11e
diff --git a/src/misc/medialibrary.c b/src/misc/medialibrary.c
index 4fb9d786db..7503ec5a8d 100644
--- a/src/misc/medialibrary.c
+++ b/src/misc/medialibrary.c
@@ -51,15 +51,6 @@ static vlc_medialibrary_t* ml_priv( vlc_medialibrary_module_t* p_ml )
     return container_of( p_ml, struct vlc_medialibrary_t, m );
 }
 
-void vlc_ml_entrypoints_release( vlc_ml_entrypoint_t* p_list, size_t i_nb_items )
-{
-    for ( size_t i = 0; i < i_nb_items; ++i )
-    {
-        free( p_list[i].psz_mrl );
-    }
-    free( p_list );
-}
-
 static void vlc_ml_event_send( vlc_medialibrary_module_t* p_ml, const vlc_ml_event_t* p_event )
 {
     vlc_medialibrary_t* p_priv = ml_priv( p_ml );
@@ -325,6 +316,15 @@ void vlc_ml_playlist_list_release( vlc_ml_playlist_list_t* p_list )
     free( p_list );
 }
 
+void vlc_ml_entry_point_list_release( vlc_ml_entry_point_list_t* p_list )
+{
+    if ( p_list == NULL )
+        return;
+    for ( size_t i = 0; i < p_list->i_nb_items; ++i )
+        free( p_list->p_items[i].psz_mrl );
+    free( p_list );
+}
+
 void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, int64_t i_id )
 {
     assert( p_ml != NULL );



More information about the vlc-commits mailing list