[vlc-devel] [PATCH 01/14] medialibrary: rename vlc_ml_entry_point_t to vlc_ml_folder_t

Alaric Senat dev.asenat at posteo.net
Fri Mar 19 11:39:56 UTC 2021


This better reflects the medialibrary internals while also allowing more
flexible medialibrary folder listing as vlc_ml_folder_t is now available
through a more generic name.
---
 include/vlc_media_library.h                   | 34 +++++++++++--------
 .../gui/macosx/library/VLCLibraryDataTypes.h  |  2 +-
 .../gui/macosx/library/VLCLibraryDataTypes.m  |  2 +-
 modules/gui/macosx/library/VLCLibraryModel.m  |  4 +--
 .../gui/qt/medialibrary/mlfoldersmodel.cpp    | 10 +++---
 .../gui/qt/medialibrary/mlfoldersmodel.hpp    |  2 +-
 modules/misc/medialibrary/entities.cpp        |  5 +--
 modules/misc/medialibrary/medialibrary.cpp    |  7 ++--
 modules/misc/medialibrary/medialibrary.h      |  2 +-
 src/libvlccore.sym                            |  3 +-
 src/misc/medialibrary.c                       | 13 +++++--
 11 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index ab8bcf14d8..aa995b1deb 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -302,18 +302,19 @@ typedef struct vlc_ml_playlist_list_t
     vlc_ml_playlist_t p_items[];
 } vlc_ml_playlist_list_t;
 
-typedef struct vlc_ml_entry_point_t
+typedef struct vlc_ml_folder_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;
+    int64_t i_id; /**< This folder's MRL. Will be NULL if b_present is false */
+    char* psz_mrl; /**< This folder's MRL. Will be NULL if b_present is false */
+    bool b_present; /**< The presence state for this folder. */
+    bool b_banned; /**< Will be true if the user required this folder to be excluded */
+} vlc_ml_folder_t;
 
-typedef struct vlc_ml_entry_point_list_t
+typedef struct vlc_ml_folder_list_t
 {
     size_t i_nb_items;
-    vlc_ml_entry_point_t p_items[];
-} vlc_ml_entry_point_list_t;
+    vlc_ml_folder_t p_items[];
+} vlc_ml_folder_list_t;
 
 typedef struct vlc_ml_bookmark_t
 {
@@ -464,8 +465,8 @@ 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_entry_point_list_t**); res: can fail */
-    VLC_ML_LIST_BANNED_FOLDERS,     /**< arg1: entrypoints (vlc_ml_entry_point_list_t**); res: can fail */
+    VLC_ML_LIST_FOLDERS,            /**< arg1: entrypoints (vlc_ml_folder_list_t**); res: can fail */
+    VLC_ML_LIST_BANNED_FOLDERS,     /**< arg1: entrypoints (vlc_ml_folder_list_t**); res: can fail */
     VLC_ML_IS_INDEXED,              /**< arg1: mrl (const char*) arg2 (out): bool*;       res: can fail */
     /**
      * Reload a specific folder, or all.
@@ -857,6 +858,7 @@ VLC_API void vlc_ml_genre_release( vlc_ml_genre_t* p_genre );
 VLC_API void vlc_ml_media_release( vlc_ml_media_t* p_media );
 VLC_API void vlc_ml_album_release( vlc_ml_album_t* p_album );
 VLC_API void vlc_ml_playlist_release( vlc_ml_playlist_t* p_playlist );
+VLC_API void vlc_ml_folder_release( vlc_ml_folder_t* p_folder );
 
 VLC_API void vlc_ml_label_list_release( vlc_ml_label_list_t* p_list );
 VLC_API void vlc_ml_file_list_release( vlc_ml_file_list_t* p_list );
@@ -866,7 +868,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 );
+VLC_API void vlc_ml_folder_list_release( vlc_ml_folder_list_t* p_list );
 VLC_API void vlc_ml_playback_states_all_release( vlc_ml_playback_states_all* prefs );
 VLC_API void vlc_ml_bookmark_release( vlc_ml_bookmark_t* p_bookmark );
 VLC_API void vlc_ml_bookmark_list_release( vlc_ml_bookmark_list_t* p_list );
@@ -903,13 +905,13 @@ 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_entry_point_list_t** pp_entrypoints )
+                                      vlc_ml_folder_list_t** pp_entrypoints )
 {
     return vlc_ml_control( p_ml, VLC_ML_LIST_FOLDERS, pp_entrypoints );
 }
 
 static inline int vlc_ml_list_banned_folder( vlc_medialibrary_t* p_ml,
-                                             vlc_ml_entry_point_list_t** pp_entrypoints )
+                                             vlc_ml_folder_list_t** pp_entrypoints )
 {
     return vlc_ml_control( p_ml, VLC_ML_LIST_BANNED_FOLDERS, pp_entrypoints );
 }
@@ -1567,6 +1569,7 @@ static inline size_t vlc_ml_count_playlist_media( vlc_medialibrary_t* p_ml, cons
     vlc_ml_album_t*: vlc_ml_album_release, \
     vlc_ml_genre_t*: vlc_ml_genre_release, \
     vlc_ml_media_t*: vlc_ml_media_release, \
+    vlc_ml_folder_t*: vlc_ml_folder_release, \
     vlc_ml_playlist_t*: vlc_ml_playlist_release, \
     vlc_ml_label_list_t*: vlc_ml_label_list_release, \
     vlc_ml_file_list_t*: vlc_ml_file_list_release, \
@@ -1576,7 +1579,7 @@ static inline size_t vlc_ml_count_playlist_media( vlc_medialibrary_t* p_ml, cons
     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_entry_point_list_t*: vlc_ml_entry_point_list_release, \
+    vlc_ml_folder_list_t*: vlc_ml_folder_list_release, \
     vlc_ml_playback_states_all*: vlc_ml_playback_states_all_release, \
     vlc_ml_bookmark_t*: vlc_ml_bookmark_release, \
     vlc_ml_bookmark_list_t*: vlc_ml_bookmark_list_release \
@@ -1587,6 +1590,7 @@ static inline void vlc_ml_release( vlc_ml_artist_t* artist ) { vlc_ml_artist_rel
 static inline void vlc_ml_release( vlc_ml_album_t* album ) { vlc_ml_album_release( album ); }
 static inline void vlc_ml_release( vlc_ml_genre_t* genre ) { vlc_ml_genre_release( genre ); }
 static inline void vlc_ml_release( vlc_ml_media_t* media ) { vlc_ml_media_release( media ); }
+static inline void vlc_ml_release( vlc_ml_folder_t* folder ) { vlc_ml_folder_release( folder ); }
 static inline void vlc_ml_release( vlc_ml_playlist_t* playlist ) { vlc_ml_playlist_release( playlist ); }
 static inline void vlc_ml_release( vlc_ml_label_list_t* list ) { vlc_ml_label_list_release( list ); }
 static inline void vlc_ml_release( vlc_ml_file_list_t* list ) { vlc_ml_file_list_release( list ); }
@@ -1596,7 +1600,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 ); }
+static inline void vlc_ml_release( vlc_ml_folder_list_t* list ) { vlc_ml_folder_list_release( list ); }
 static inline void vlc_ml_release( vlc_ml_playback_states_all* prefs ) { vlc_ml_playback_states_all_release( prefs ); }
 static inline void vlc_ml_release( vlc_ml_bookmark_t* bookmark ) { vlc_ml_bookmark_release( bookmark ); }
 static inline void vlc_ml_release( vlc_ml_bookmark_list_t* list ) { vlc_ml_bookmark_list_release( list ); }
diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.h b/modules/gui/macosx/library/VLCLibraryDataTypes.h
index b61dfde6a6..ad0af0c2ea 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.h
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.h
@@ -207,7 +207,7 @@ extern const long long int VLCMediaLibraryMediaItemDurationDenominator;
 
 @interface VLCMediaLibraryEntryPoint : NSObject
 
-- (instancetype)initWithEntryPoint:(struct vlc_ml_entry_point_t *)p_entryPoint;
+- (instancetype)initWithEntryPoint:(struct vlc_ml_folder_t *)p_entryPoint;
 
 @property (readonly) NSString *MRL;
 @property (readonly) NSString *decodedMRL;
diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.m b/modules/gui/macosx/library/VLCLibraryDataTypes.m
index b9c0520050..0ed3489e2f 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.m
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.m
@@ -763,7 +763,7 @@ NSString *VLCMediaLibraryMediaItemLibraryID = @"VLCMediaLibraryMediaItemLibraryI
 
 @implementation VLCMediaLibraryEntryPoint
 
-- (instancetype)initWithEntryPoint:(struct vlc_ml_entry_point_t *)p_entryPoint
+- (instancetype)initWithEntryPoint:(struct vlc_ml_folder_t *)p_entryPoint
 {
     self = [super init];
     if (self && p_entryPoint != NULL) {
diff --git a/modules/gui/macosx/library/VLCLibraryModel.m b/modules/gui/macosx/library/VLCLibraryModel.m
index d46ec3a6fb..8e797ced85 100644
--- a/modules/gui/macosx/library/VLCLibraryModel.m
+++ b/modules/gui/macosx/library/VLCLibraryModel.m
@@ -364,7 +364,7 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event)
 
 - (NSArray<VLCMediaLibraryEntryPoint *> *)listOfMonitoredFolders
 {
-    vlc_ml_entry_point_list_t *pp_entrypoints;
+    vlc_ml_folder_list_t *pp_entrypoints;
     int ret = vlc_ml_list_folder(_p_mediaLibrary, &pp_entrypoints);
     if (ret != VLC_SUCCESS) {
         msg_Err(getIntf(), "failed to retrieve list of monitored library folders (%i)", ret);
@@ -379,7 +379,7 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event)
         }
     }
 
-    vlc_ml_entry_point_list_release(pp_entrypoints);
+    vlc_ml_folder_list_release(pp_entrypoints);
     return [mutableArray copy];
 }
 
diff --git a/modules/gui/qt/medialibrary/mlfoldersmodel.cpp b/modules/gui/qt/medialibrary/mlfoldersmodel.cpp
index 56fcb2fb64..03d49bf2d3 100644
--- a/modules/gui/qt/medialibrary/mlfoldersmodel.cpp
+++ b/modules/gui/qt/medialibrary/mlfoldersmodel.cpp
@@ -29,7 +29,7 @@ MLFoldersBaseModel::MLFoldersBaseModel( QObject *parent )
     connect( this , &MLFoldersBaseModel::onMLEntryPointModified , this , &MLFoldersBaseModel::update );
 }
 
-MLFoldersBaseModel::EntryPoint::EntryPoint( const vlc_ml_entry_point_t& entryPoint)
+MLFoldersBaseModel::EntryPoint::EntryPoint( const vlc_ml_folder_t& entryPoint)
     : mrl(entryPoint.psz_mrl)
     , banned(entryPoint.b_banned)
 {
@@ -118,11 +118,11 @@ std::vector<MLFoldersBaseModel::EntryPoint> MLFoldersModel::entryPoints() const
 {
     std::vector<MLFoldersBaseModel::EntryPoint> r;
 
-    vlc_ml_entry_point_list_t * entrypoints = nullptr;
+    vlc_ml_folder_list_t * entrypoints = nullptr;
     vlc_ml_list_folder( ml() , &entrypoints );
     for ( unsigned int i=0 ; i<entrypoints->i_nb_items ; i++ )
         r.emplace_back( entrypoints->p_items[i] );
-    vlc_ml_release(entrypoints);
+    vlc_ml_release( entrypoints );
 
     return r;
 }
@@ -159,11 +159,11 @@ std::vector<MLFoldersBaseModel::EntryPoint> MLBannedFoldersModel::entryPoints()
 {
     std::vector<MLFoldersBaseModel::EntryPoint> r;
 
-    vlc_ml_entry_point_list_t * entrypoints = nullptr;
+    vlc_ml_folder_list_t * entrypoints = nullptr;
     vlc_ml_list_banned_folder( ml() , &entrypoints );
     for ( unsigned int i=0 ; i<entrypoints->i_nb_items ; i++ )
         r.emplace_back( entrypoints->p_items[i] );
-    vlc_ml_release(entrypoints);
+    vlc_ml_release( entrypoints );
 
     return r;
 }
diff --git a/modules/gui/qt/medialibrary/mlfoldersmodel.hpp b/modules/gui/qt/medialibrary/mlfoldersmodel.hpp
index 941e379f7c..f472c9a684 100644
--- a/modules/gui/qt/medialibrary/mlfoldersmodel.hpp
+++ b/modules/gui/qt/medialibrary/mlfoldersmodel.hpp
@@ -69,7 +69,7 @@ signals:
 protected:
     struct EntryPoint
     {
-        EntryPoint(const vlc_ml_entry_point_t &entryPoint );
+        EntryPoint(const vlc_ml_folder_t &entryPoint );
         QString mrl;
         bool banned;
     };
diff --git a/modules/misc/medialibrary/entities.cpp b/modules/misc/medialibrary/entities.cpp
index 02c106e4e1..a42d1e0727 100644
--- a/modules/misc/medialibrary/entities.cpp
+++ b/modules/misc/medialibrary/entities.cpp
@@ -416,8 +416,10 @@ bool Convert( const medialibrary::IPlaylist* input, vlc_ml_playlist_t& output )
     return true;
 }
 
-bool Convert( const medialibrary::IFolder* input, vlc_ml_entry_point_t& output )
+bool Convert( const medialibrary::IFolder* input, vlc_ml_folder_t& output )
 {
+    output.i_id = input->id();
+    output.b_banned = input->isBanned();
     try
     {
         if ( strdup_helper( input->mrl(), output.psz_mrl ) == false )
@@ -429,7 +431,6 @@ bool Convert( const medialibrary::IFolder* input, vlc_ml_entry_point_t& output )
         output.psz_mrl = nullptr;
         output.b_present = false;
     }
-    output.b_banned = input->isBanned();
     return true;
 }
 
diff --git a/modules/misc/medialibrary/medialibrary.cpp b/modules/misc/medialibrary/medialibrary.cpp
index fb3d158706..fd1ec59cb7 100644
--- a/modules/misc/medialibrary/medialibrary.cpp
+++ b/modules/misc/medialibrary/medialibrary.cpp
@@ -40,6 +40,7 @@
 #include <medialibrary/IShow.h>
 #include <medialibrary/IPlaylist.h>
 #include <medialibrary/IBookmark.h>
+#include <medialibrary/IFolder.h>
 
 #include <sstream>
 #include <initializer_list>
@@ -553,9 +554,9 @@ int MediaLibrary::Control( int query, va_list args )
             auto entryPoints = ( query == VLC_ML_LIST_FOLDERS )
                     ? m_ml->entryPoints()->all()
                     : m_ml->bannedEntryPoints()->all();
-            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;
+            auto res = ml_convert_list<vlc_ml_folder_list_t,
+                                         vlc_ml_folder_t>( entryPoints );
+            *(va_arg( args, vlc_ml_folder_list_t**) ) = res;
             break;
         }
         case VLC_ML_IS_INDEXED:
diff --git a/modules/misc/medialibrary/medialibrary.h b/modules/misc/medialibrary/medialibrary.h
index 8ba8d5c108..d4287c7965 100644
--- a/modules/misc/medialibrary/medialibrary.h
+++ b/modules/misc/medialibrary/medialibrary.h
@@ -224,7 +224,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 );
+bool Convert( const medialibrary::IFolder* input, vlc_ml_folder_t& output );
 bool Convert( const medialibrary::IBookmark* input, vlc_ml_bookmark_t& output );
 input_item_t* MediaToInputItem( const medialibrary::IMedia* media );
 
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 0c130543e5..1b4f2dfbcc 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -583,6 +583,7 @@ vlc_ml_genre_release
 vlc_ml_media_release
 vlc_ml_album_release
 vlc_ml_playlist_release
+vlc_ml_folder_release
 vlc_ml_label_list_release
 vlc_ml_file_list_release
 vlc_ml_artist_list_release
@@ -591,7 +592,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_ml_folder_list_release
 vlc_ml_bookmark_release
 vlc_ml_bookmark_list_release
 vlc_poll_i11e
diff --git a/src/misc/medialibrary.c b/src/misc/medialibrary.c
index 140f055b5f..ad9c10316e 100644
--- a/src/misc/medialibrary.c
+++ b/src/misc/medialibrary.c
@@ -245,7 +245,6 @@ void vlc_ml_playlist_release( vlc_ml_playlist_t* p_playlist )
     free( p_playlist );
 }
 
-/* Lists release */
 
 void vlc_ml_media_release( vlc_ml_media_t* p_media )
 {
@@ -255,6 +254,16 @@ void vlc_ml_media_release( vlc_ml_media_t* p_media )
     free( p_media );
 }
 
+void vlc_ml_folder_release( vlc_ml_folder_t* p_folder )
+{
+    if ( p_folder == NULL )
+        return;
+    free( p_folder->psz_mrl );
+    free( p_folder );
+}
+
+/* Lists release */
+
 void vlc_ml_label_list_release( vlc_ml_label_list_t* p_list )
 {
     if ( p_list == NULL )
@@ -328,7 +337,7 @@ 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 )
+void vlc_ml_folder_list_release( vlc_ml_folder_list_t* p_list )
 {
     if ( p_list == NULL )
         return;
-- 
2.29.2



More information about the vlc-devel mailing list