Commit 2ae42bae authored by Hugo Beauzée-Luyssen's avatar 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
parent dcb0c695
......@@ -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 */
......@@ -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;
}
......@@ -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:
......
......@@ -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 )
......
......@@ -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
......
......@@ -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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment