[vlc-commits] [Git][videolan/vlc][master] 11 commits: lua: impose public_only to true
Steve Lhomme (@robUx4)
gitlab at videolan.org
Fri Aug 23 11:50:31 UTC 2024
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
fdbc8d12 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: impose public_only to true
- - - - -
3fbe795b by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: fix existing formatting
- - - - -
96af0027 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose remaining metadata
- - - - -
6325523a by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialibrary video-folder
- - - - -
df444974 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialbrary playlist
- - - - -
c070266e by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialibrary tracks
- - - - -
f04d998d by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialibrary bookmarks
- - - - -
a985ff05 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialibrary get_media API
- - - - -
72a5ad48 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose medialibrary history
- - - - -
5cd6ec27 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: expose genre thumbnail from medialibrary
- - - - -
c3837771 by Mohak Gupta at 2024-08-23T11:32:26+00:00
lua: update README for lua APIs
- - - - -
2 changed files:
- modules/lua/libs/medialibrary.c
- share/lua/README.txt
Changes:
=====================================
modules/lua/libs/medialibrary.c
=====================================
@@ -44,6 +44,14 @@ static void vlclua_ml_push_media( lua_State *L, const vlc_ml_media_t *media )
lua_setfield( L, -2, "duration" );
lua_pushboolean( L, media->thumbnails[VLC_ML_THUMBNAIL_SMALL].i_status == VLC_ML_THUMBNAIL_STATUS_AVAILABLE );
lua_setfield( L, -2, "hasThumbnail" );
+ lua_pushinteger( L, media->i_playcount );
+ lua_setfield( L, -2, "playcount" );
+ lua_pushnumber( L, media->f_progress );
+ lua_setfield( L, -2, "progress" );
+ lua_pushboolean( L, media->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
+ lua_pushinteger( L, media->i_last_played_date );
+ lua_setfield( L, -2, "lastPlayedDate" );
switch ( media->i_subtype )
{
case VLC_ML_MEDIA_SUBTYPE_ALBUMTRACK:
@@ -110,11 +118,11 @@ static void vlclua_ml_push_media( lua_State *L, const vlc_ml_media_t *media )
if ( media->i_type != VLC_ML_MEDIA_TYPE_VIDEO )
return;
- const char* quality = NULL;
+ const char *quality = NULL;
uint32_t maxChannels = 0;
for ( size_t i = 0; i < media->p_tracks->i_nb_items; ++i )
{
- vlc_ml_media_track_t* track = &media->p_tracks->p_items[i];
+ vlc_ml_media_track_t *track = &media->p_tracks->p_items[i];
if ( track->i_type == VLC_ML_TRACK_TYPE_VIDEO && quality == NULL )
{
uint32_t width = track->v.i_width > track->v.i_height ?
@@ -150,6 +158,32 @@ static void vlclua_ml_push_media( lua_State *L, const vlc_ml_media_t *media )
lua_setfield( L, -2, "nbChannels" );
}
+static void vlclua_ml_push_folder( lua_State *L, const vlc_ml_folder_t *folder )
+{
+ lua_newtable( L );
+ lua_pushinteger( L, folder->i_id );
+ lua_setfield( L, -2, "id" );
+ lua_pushstring( L, folder->psz_name );
+ lua_setfield( L, -2, "title" );
+ lua_pushstring( L, folder->psz_mrl );
+ lua_setfield( L, -2, "mrl" );
+ lua_pushinteger( L, folder->i_nb_media );
+ lua_setfield( L, -2, "nbMedia" );
+ lua_pushinteger( L, folder->i_nb_video );
+ lua_setfield( L, -2, "nbVideos" );
+ lua_pushinteger( L, folder->i_nb_audio );
+ lua_setfield( L, -2, "nbAudios" );
+ lua_pushinteger( L, folder->i_duration );
+ lua_setfield( L, -2, "duration" );
+ lua_pushboolean( L, folder->b_present );
+ lua_setfield( L, -2, "isPresent" );
+ lua_pushboolean( L, folder->b_banned );
+ lua_setfield( L, -2, "isBanned" );
+ lua_pushboolean( L, folder->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
+
+}
+
static void vlclua_ml_push_show( lua_State *L, const vlc_ml_show_t *show )
{
lua_newtable( L );
@@ -171,7 +205,7 @@ static void vlclua_ml_push_show( lua_State *L, const vlc_ml_show_t *show )
lua_setfield( L, -2, "nbSeason" );
}
-static void vlclua_ml_push_album( lua_State* L, const vlc_ml_album_t *album )
+static void vlclua_ml_push_album( lua_State *L, const vlc_ml_album_t *album )
{
lua_newtable( L );
lua_pushinteger( L, album->i_id );
@@ -190,14 +224,16 @@ static void vlclua_ml_push_album( lua_State* L, const vlc_ml_album_t *album )
lua_setfield( L, -2, "duration" );
lua_pushinteger( L, album->i_year );
lua_setfield( L, -2, "releaseYear" );
+ lua_pushboolean( L, album->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
}
-static void vlclua_ml_push_artist( lua_State* L, const vlc_ml_artist_t* artist )
+static void vlclua_ml_push_artist( lua_State *L, const vlc_ml_artist_t *artist )
{
lua_newtable( L );
lua_pushinteger( L, artist->i_id );
lua_setfield( L, -2, "id" );
- lua_pushstring( L, artist->psz_name);
+ lua_pushstring( L, artist->psz_name );
lua_setfield( L, -2, "name" );
lua_pushboolean( L, artist->thumbnails[VLC_ML_THUMBNAIL_SMALL].i_status == VLC_ML_THUMBNAIL_STATUS_AVAILABLE );
lua_setfield( L, -2, "hasThumbnail" );
@@ -205,9 +241,11 @@ static void vlclua_ml_push_artist( lua_State* L, const vlc_ml_artist_t* artist )
lua_setfield( L, -2, "nbTracks" );
lua_pushinteger( L, artist->i_nb_album );
lua_setfield( L, -2, "nbAlbums" );
+ lua_pushboolean( L, artist->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
}
-static void vlclua_ml_push_genre( lua_State* L, const vlc_ml_genre_t* genre )
+static void vlclua_ml_push_genre( lua_State *L, const vlc_ml_genre_t *genre )
{
lua_newtable( L );
lua_pushinteger( L, genre->i_id );
@@ -216,9 +254,91 @@ static void vlclua_ml_push_genre( lua_State* L, const vlc_ml_genre_t* genre )
lua_setfield( L, -2, "name" );
lua_pushinteger( L, genre->i_nb_tracks );
lua_setfield( L, -2, "nbTracks" );
+ lua_pushboolean( L, genre->thumbnails[VLC_ML_THUMBNAIL_SMALL].i_status == VLC_ML_THUMBNAIL_STATUS_AVAILABLE );
+ lua_setfield( L, -2, "hasThumbnail");
+ lua_pushboolean(L, genre->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
+}
+
+static void vlclua_ml_push_playlist( lua_State *L, const vlc_ml_playlist_t *playlist )
+{
+ lua_newtable( L );
+ lua_pushinteger( L, playlist->i_id );
+ lua_setfield( L, -2, "id" );
+ lua_pushstring( L, playlist->psz_name );
+ lua_setfield( L, -2, "name" );
+ lua_pushstring( L, playlist->psz_mrl );
+ lua_setfield( L, -2, "mrl" );
+ lua_pushstring( L, playlist->psz_artwork_mrl );
+ lua_setfield( L, -2, "artworkMrl" );
+ lua_pushinteger( L, playlist->i_nb_media );
+ lua_setfield( L, -2, "nbMedia" );
+ lua_pushinteger( L, playlist->i_nb_video );
+ lua_setfield( L, -2, "nbVideo" );
+ lua_pushinteger( L, playlist->i_nb_audio );
+ lua_setfield( L, -2, "nbAudio" );
+ lua_pushinteger( L, playlist->i_nb_unknown );
+ lua_setfield( L, -2, "nbUnknown" );
+ lua_pushinteger( L, playlist->i_nb_present_media );
+ lua_setfield( L, -2, "nbPresentMedia" );
+ lua_pushinteger( L, playlist->i_nb_present_video );
+ lua_setfield( L, -2, "nbPresentVideo" );
+ lua_pushinteger( L, playlist->i_nb_present_audio );
+ lua_setfield( L, -2, "nbPresentAudio" );
+ lua_pushinteger( L, playlist->i_nb_present_unknown );
+ lua_setfield( L, -2, "nbPresentUnknown" );
+ lua_pushinteger( L, playlist->i_creation_date );
+ lua_setfield( L, -2, "creationDate" );
+ lua_pushinteger( L, playlist->i_duration );
+ lua_setfield( L, -2, "duration" );
+ lua_pushinteger( L, playlist->i_nb_duration_unknown );
+ lua_setfield( L, -2, "nbDurationUnknown" );
+ lua_pushboolean( L, playlist->b_is_read_only );
+ lua_setfield( L, -2, "isReadOnly" );
+ lua_pushboolean( L, playlist->b_is_favorite );
+ lua_setfield( L, -2, "isFavorite" );
+}
+
+static void vlclua_ml_push_bookmark( lua_State *L, const vlc_ml_bookmark_t *bookmark )
+{
+ lua_newtable( L );
+ lua_pushinteger( L, bookmark->i_media_id );
+ lua_setfield( L, -2, "mediaid" );
+ lua_pushinteger( L, bookmark->i_time );
+ lua_setfield( L, -2, "time" );
+ lua_pushstring( L, bookmark->psz_name );
+ lua_setfield( L, -2, "name" );
+ lua_pushstring( L, bookmark->psz_description );
+ lua_setfield( L, -2, "description" );
+}
+
+static int vlclua_ml_get_media( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ lua_Integer mediaId = luaL_checkinteger( L, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_t *media = vlc_ml_get_media( ml, mediaId );
+ if ( media == NULL )
+ return luaL_error( L, "Failed to get media" );
+ vlclua_ml_push_media( L, media );
+ vlc_ml_release( media );
+ return 1;
+}
+
+static int vlclua_ml_get_media_by_mrl( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ const char *mediaMrl = luaL_checkstring( L, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_t *media = vlc_ml_get_media_by_mrl( ml, mediaMrl );
+ if ( media == NULL )
+ return luaL_error( L, "Failed to get media" );
+ vlclua_ml_push_media( L, media );
+ vlc_ml_release( media );
+ return 1;
}
-static int vlclua_ml_list_media( lua_State* L, vlc_ml_media_list_t* list )
+static int vlclua_ml_list_media( lua_State *L, vlc_ml_media_list_t *list )
{
if ( list == NULL )
return luaL_error( L, "Failed to list media" );
@@ -232,7 +352,21 @@ static int vlclua_ml_list_media( lua_State* L, vlc_ml_media_list_t* list )
return 1;
}
-static int vlclua_ml_list_show( lua_State* L, vlc_ml_show_list_t* list )
+static int vlclua_ml_list_folder( lua_State *L, vlc_ml_folder_list_t *list )
+{
+ if ( list == NULL )
+ return luaL_error( L, "Failed to list folders" );
+ lua_createtable( L, list->i_nb_items, 0 );
+ for ( size_t i = 0; i < list->i_nb_items; ++i )
+ {
+ vlclua_ml_push_folder( L, &list->p_items[i] );
+ lua_rawseti( L, -2, i + 1 );
+ }
+ vlc_ml_release( list );
+ return 1;
+}
+
+static int vlclua_ml_list_show( lua_State *L, vlc_ml_show_list_t *list )
{
if ( list == NULL )
return luaL_error( L, "Failed to list show" );
@@ -246,25 +380,40 @@ static int vlclua_ml_list_show( lua_State* L, vlc_ml_show_list_t* list )
return 1;
}
+static int vlclua_ml_list_bookmark( lua_State *L, vlc_ml_bookmark_list_t *list )
+{
+ if ( list == NULL )
+ return luaL_error( L, "Failed to list bookmarks" );
+ lua_createtable( L, list->i_nb_items, 0 );
+ for ( size_t i = 0; i < list->i_nb_items; ++i )
+ {
+ vlclua_ml_push_bookmark( L, &list->p_items[i] );
+ lua_rawseti( L, -2, i + 1 );
+ }
+ vlc_ml_release( list );
+ return 1;
+}
+
static void vlclua_ml_assign_params( lua_State *L, vlc_ml_query_params_t *params, uint8_t paramIndex )
{
*params = vlc_ml_query_params_create();
- if (!lua_istable(L, paramIndex))
+ if (!lua_istable( L, paramIndex ))
return;
- lua_getfield(L, 1, "public_only" );
- lua_getfield(L, 1, "favorite_only" );
- lua_getfield(L, 1, "limit" );
- lua_getfield(L, 1, "offset" );
- lua_getfield(L, 1, "desc" );
- lua_getfield(L, 1, "sort" );
- lua_getfield(L, 1, "pattern" );
- params->b_public_only = lua_toboolean( L, -7 );
+ lua_getfield( L, 1, "favorite_only" );
+ lua_getfield( L, 1, "limit" );
+ lua_getfield( L, 1, "offset" );
+ lua_getfield( L, 1, "desc" );
+ lua_getfield( L, 1, "sort" );
+ lua_getfield( L, 1, "pattern" );
+
+ //impose public_only to true until something is done about permissions
+ params->b_public_only = true;
params->b_favorite_only = lua_toboolean( L, -6 );
params->i_nbResults = lua_tointeger( L, -5 );
params->i_offset = lua_tointeger( L, -4 );
params->b_desc = lua_toboolean( L, -3 );
- params->i_sort = lua_tointeger(L, -2);
- params->psz_pattern = lua_tostring(L, -1);
+ params->i_sort = lua_tointeger( L, -2);
+ params->psz_pattern = lua_tostring( L, -1);
}
static int vlclua_ml_video( lua_State *L )
@@ -272,18 +421,39 @@ static int vlclua_ml_video( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_media_list_t* list = vlc_ml_list_video_media( ml, ¶ms );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_list_t *list = vlc_ml_list_video_media( ml, ¶ms );
return vlclua_ml_list_media( L, list );
}
+static int vlclua_ml_folder( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_folder_list_t *list = vlc_ml_list_folders( ml, ¶ms );
+ return vlclua_ml_list_folder( L, list );
+}
+
+static int vlclua_ml_folders_by_type( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_ml_media_type_t mediaType = luaL_checkinteger( L, 2 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_folder_list_t *list = vlc_ml_list_folders_by_type( ml, ¶ms, mediaType );
+ return vlclua_ml_list_folder( L, list );
+}
+
static int vlclua_ml_list_shows( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_show_list_t* list = vlc_ml_list_shows( ml, ¶ms );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_show_list_t *list = vlc_ml_list_shows( ml, ¶ms );
return vlclua_ml_list_show( L, list );
}
@@ -292,8 +462,8 @@ static int vlclua_ml_audio( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_media_list_t* list = vlc_ml_list_audio_media( ml, ¶ms );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_list_t *list = vlc_ml_list_audio_media( ml, ¶ms );
return vlclua_ml_list_media( L, list );
}
@@ -316,8 +486,8 @@ static int vlclua_ml_list_all_albums( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_album_list_t* list = vlc_ml_list_albums( ml, ¶ms );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_album_list_t *list = vlc_ml_list_albums( ml, ¶ms );
return vlclua_ml_list_albums( L, list );
}
@@ -326,9 +496,9 @@ static int vlclua_ml_list_artist_albums( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 2 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
lua_Integer artistId = luaL_checkinteger( L, 1 );
- vlc_ml_album_list_t* list = vlc_ml_list_artist_albums( ml, ¶ms, artistId );
+ vlc_ml_album_list_t *list = vlc_ml_list_artist_albums( ml, ¶ms, artistId );
return vlclua_ml_list_albums( L, list );
}
@@ -337,9 +507,9 @@ static int vlclua_ml_list_genre_albums( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 2 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
lua_Integer genreId = luaL_checkinteger( L, 1 );
- vlc_ml_album_list_t* list = vlc_ml_list_genre_albums( ml, ¶ms, genreId );
+ vlc_ml_album_list_t *list = vlc_ml_list_genre_albums( ml, ¶ms, genreId );
return vlclua_ml_list_albums( L, list );
}
@@ -347,8 +517,8 @@ static int vlclua_ml_get_album( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
lua_Integer albumId = luaL_checkinteger( L, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_album_t* album = vlc_ml_get_album( ml, albumId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_album_t *album = vlc_ml_get_album( ml, albumId );
if ( album == NULL )
return luaL_error( L, "Failed to get album" );
vlclua_ml_push_album( L, album );
@@ -356,6 +526,19 @@ static int vlclua_ml_get_album( lua_State *L )
return 1;
}
+static int vlclua_ml_get_folder( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ lua_Integer folderId = luaL_checkinteger( L, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_folder_t *folder = vlc_ml_get_folder( ml, folderId );
+ if ( folder == NULL )
+ return luaL_error( L, "Failed to get folder" );
+ vlclua_ml_push_folder( L, folder );
+ vlc_ml_release( folder );
+ return 1;
+}
+
static int vlclua_ml_list_artists( lua_State *L, vlc_ml_artist_list_t *list )
{
if ( list == NULL )
@@ -375,8 +558,8 @@ static int vlclua_ml_list_all_artists( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_artist_list_t* list = vlc_ml_list_artists( ml, ¶ms, true );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_artist_list_t *list = vlc_ml_list_artists( ml, ¶ms, true );
return vlclua_ml_list_artists( L, list );
}
@@ -385,9 +568,9 @@ static int vlclua_ml_list_genre_artists( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 2 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
lua_Integer genreId = luaL_checkinteger( L, 1 );
- vlc_ml_artist_list_t* list = vlc_ml_list_genre_artists( ml, ¶ms, genreId );
+ vlc_ml_artist_list_t *list = vlc_ml_list_genre_artists( ml, ¶ms, genreId );
return vlclua_ml_list_artists( L, list );
}
@@ -395,8 +578,8 @@ static int vlclua_ml_get_artist( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
lua_Integer artistId = luaL_checkinteger( L, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_artist_t* artist = vlc_ml_get_artist( ml, artistId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_artist_t *artist = vlc_ml_get_artist( ml, artistId );
if ( artist == NULL )
return luaL_error( L, "Failed to get artist" );
vlclua_ml_push_artist( L, artist );
@@ -409,8 +592,8 @@ static int vlclua_ml_list_genres( lua_State *L )
vlc_object_t *p_this = vlclua_get_this( L );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_genre_list_t* list = vlc_ml_list_genres( ml, ¶ms );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_genre_list_t *list = vlc_ml_list_genres( ml, ¶ms );
if ( list == NULL )
return luaL_error( L, "Failed to list genres" );
lua_createtable( L, list->i_nb_items, 0 );
@@ -427,8 +610,8 @@ static int vlclua_ml_get_genre( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
lua_Integer genreId = luaL_checkinteger( L, 1 );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_genre_t* genre = vlc_ml_get_genre( ml, genreId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_genre_t *genre = vlc_ml_get_genre( ml, genreId );
if ( genre == NULL )
return luaL_error( L, "Failed to get genre" );
vlclua_ml_push_genre( L, genre );
@@ -436,14 +619,51 @@ static int vlclua_ml_get_genre( lua_State *L )
return 1;
}
+static int vlclua_ml_list_playlists( lua_State *L, vlc_ml_playlist_list_t *list )
+{
+ if ( list == NULL )
+ return luaL_error( L, "Failed to list playlists" );
+ lua_createtable( L, list->i_nb_items, 0 );
+ for ( size_t i = 0; i < list->i_nb_items; ++i )
+ {
+ vlclua_ml_push_playlist( L, &list->p_items[i] );
+ lua_rawseti( L, -2, i + 1 );
+ }
+ vlc_ml_release( list );
+ return 1;
+}
+
+static int vlclua_ml_list_all_playlists( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_playlist_list_t *list = vlc_ml_list_playlists( ml, ¶ms, true );
+ return vlclua_ml_list_playlists( L, list );
+}
+
+static int vlclua_ml_get_playlist( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ lua_Integer playlistId = luaL_checkinteger( L, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_playlist_t *playlist = vlc_ml_get_playlist( ml, playlistId );
+ if ( playlist == NULL )
+ return luaL_error( L, "Failed to get playlist" );
+ vlclua_ml_push_playlist( L, playlist );
+ vlc_ml_release( playlist );
+ return 1;
+}
+
static int vlclua_ml_get_media_thumbnail( lua_State *L )
{
if( lua_gettop( L ) < 1 ) return vlclua_error( L );
lua_Integer mediaId = luaL_checkinteger( L, 1 );
vlc_object_t *p_this = vlclua_get_this( L );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_media_t* media = vlc_ml_get_media( ml, mediaId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_t *media = vlc_ml_get_media( ml, mediaId );
if ( media == NULL ||
media->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl == NULL )
{
@@ -461,10 +681,10 @@ static int vlclua_ml_get_artist_thumbnail( lua_State *L )
lua_Integer artistId = luaL_checkinteger( L, 1 );
vlc_object_t *p_this = vlclua_get_this( L );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_artist_t* artist = vlc_ml_get_artist( ml, artistId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_artist_t *artist = vlc_ml_get_artist( ml, artistId );
if ( artist == NULL ||
- artist->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl == NULL )
+ artist->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl == NULL )
{
vlc_ml_release( artist );
return 0;
@@ -480,8 +700,8 @@ static int vlclua_ml_get_album_thumbnail( lua_State *L )
lua_Integer albumId = luaL_checkinteger( L, 1 );
vlc_object_t *p_this = vlclua_get_this( L );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
- vlc_ml_album_t* album = vlc_ml_get_album( ml, albumId );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_album_t *album = vlc_ml_get_album( ml, albumId );
if ( album == NULL ||
album->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl == NULL )
{
@@ -493,10 +713,29 @@ static int vlclua_ml_get_album_thumbnail( lua_State *L )
return 1;
}
+static int vlclua_ml_get_genre_thumbnail( lua_State *L )
+{
+ if( lua_gettop( L ) < 1 ) return vlclua_error( L );
+
+ lua_Integer genreId = luaL_checkinteger( L, 1 );
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_genre_t *genre = vlc_ml_get_genre( ml, genreId );
+ if ( genre == NULL ||
+ genre->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl == NULL )
+ {
+ vlc_ml_release( genre );
+ return 0;
+ }
+ lua_pushstring( L, genre->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl );
+ vlc_ml_release( genre );
+ return 1;
+}
+
static int vlclua_ml_list_album_tracks( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
vlc_ml_query_params_t params;
vlclua_ml_assign_params( L, ¶ms, 2 );
lua_Integer albumId = luaL_checkinteger( L, 1 );
@@ -504,16 +743,98 @@ static int vlclua_ml_list_album_tracks( lua_State *L )
return vlclua_ml_list_media( L, list );
}
+static int vlclua_ml_list_artist_tracks( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 2 );
+ lua_Integer artistId = luaL_checkinteger( L, 1 );
+ vlc_ml_media_list_t *list = vlc_ml_list_artist_tracks( ml, ¶ms, artistId );
+ return vlclua_ml_list_media( L, list );
+}
+
+static int vlclua_ml_list_genre_tracks( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 2 );
+ lua_Integer genreId = luaL_checkinteger( L, 1 );
+ vlc_ml_media_list_t *list = vlc_ml_list_genre_tracks( ml, ¶ms, genreId );
+ return vlclua_ml_list_media( L, list );
+}
+
+static int vlclua_ml_list_playlist_tracks( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 2 );
+ lua_Integer playlistId = luaL_checkinteger( L, 1 );
+ vlc_ml_media_list_t *list = vlc_ml_list_playlist_media( ml, ¶ms, playlistId );
+ return vlclua_ml_list_media( L, list );
+}
+
static int vlclua_ml_reload( lua_State *L )
{
vlc_object_t *p_this = vlclua_get_this( L );
- vlc_medialibrary_t* ml = vlc_ml_instance_get( p_this );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
vlc_ml_reload_folder( ml, NULL );
return 0;
}
+static int vlclua_ml_history( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_ml_history_type_t historyType = luaL_checkinteger( L, 2 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_list_t *list = vlc_ml_list_history( ml, ¶ms, historyType );
+ return vlclua_ml_list_media( L, list );
+}
+
+static int vlclua_ml_video_history( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_list_t *list = vlc_ml_list_video_history( ml, ¶ms );
+ return vlclua_ml_list_media( L, list );
+}
+
+static int vlclua_ml_audio_history( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_media_list_t *list = vlc_ml_list_audio_history( ml, ¶ms );
+ return vlclua_ml_list_media( L, list );
+}
+
+static int vlclua_media_bookmarks( lua_State *L )
+{
+ vlc_object_t *p_this = vlclua_get_this( L );
+ vlc_ml_query_params_t params;
+ vlclua_ml_assign_params( L, ¶ms, 1 );
+ int64_t mediaId = luaL_checkinteger( L, 2 );
+ vlc_medialibrary_t *ml = vlc_ml_instance_get( p_this );
+ vlc_ml_bookmark_list_t *list = vlc_ml_list_media_bookmarks( ml, ¶ms, mediaId );
+ return vlclua_ml_list_bookmark( L, list );
+}
+
+
+
static const luaL_Reg vlclua_ml_reg[] = {
{ "video", vlclua_ml_video },
+ { "media", vlclua_ml_get_media },
+ { "media_by_mrl", vlclua_ml_get_media_by_mrl },
+ { "folder", vlclua_ml_folder },
+ { "folders_by_type", vlclua_ml_folders_by_type },
+ { "get_folder", vlclua_ml_get_folder },
{ "show_episodes", vlclua_ml_list_shows },
{ "audio", vlclua_ml_audio },
{ "media_thumbnail", vlclua_ml_get_media_thumbnail },
@@ -523,13 +844,23 @@ static const luaL_Reg vlclua_ml_reg[] = {
{ "artist", vlclua_ml_get_artist },
{ "genres", vlclua_ml_list_genres },
{ "genre", vlclua_ml_get_genre },
+ { "playlists", vlclua_ml_list_all_playlists },
+ { "playlist", vlclua_ml_get_playlist },
{ "album_tracks", vlclua_ml_list_album_tracks },
+ { "artist_tracks", vlclua_ml_list_artist_tracks },
+ { "genre_tracks", vlclua_ml_list_genre_tracks },
+ { "playlist_tracks", vlclua_ml_list_playlist_tracks },
{ "artist_albums", vlclua_ml_list_artist_albums },
{ "genre_albums", vlclua_ml_list_genre_albums },
{ "genre_artists", vlclua_ml_list_genre_artists },
{ "artist_thumbnail", vlclua_ml_get_artist_thumbnail },
{ "album_thumbnail", vlclua_ml_get_album_thumbnail },
+ { "genre_thumbnail", vlclua_ml_get_genre_thumbnail },
{ "reload", vlclua_ml_reload },
+ { "history", vlclua_ml_history },
+ { "video_history",vlclua_ml_video_history },
+ { "audio_history",vlclua_ml_audio_history },
+ { "media_bookmarks", vlclua_media_bookmarks },
{ NULL, NULL }
};
=====================================
share/lua/README.txt
=====================================
@@ -424,6 +424,7 @@ d:set_trackid(): the item's TrackID (OPTIONAL, meta data)
Medialibrary
------------
+The `public_only` query parameter is enforced to be true by default.
query_params = {
"limit": integer,
@@ -432,10 +433,14 @@ query_params = {
"sort": integer,
"pattern": string,
"favorite_only": boolean,
- "public_only": boolean,
}
vlc.ml.video(query_params): Get video media list
+vlc.ml.media(mediaId: integer): Get media with media id parameter
+vlc.ml.media_by_mrl(mediaMrl: string): Get media with media mrl parameter
+vlc.ml.folder(query_params): Get folder list
+vlc.ml.folders_by_type(query_params, mediaType: integer): Get folders by type
+vlc.ml.get_folder(folderId: integer): Get folder with folder id parameter
vlc.ml.show_episodes(query_params): Get the list of show episodes
vlc.ml.audio(query_params): Get audio media list
vlc.ml.media_thumbnail(mediaId: integer): Get media thumbnail with media id parameter
@@ -446,12 +451,22 @@ vlc.ml.artists(query_params): Get artist list
vlc.ml.artist(artistId: integer): Get artist with artist id
vlc.ml.genres(query_params): Get genres list
vlc.ml.genre(genreId: integer): Get genre with genre id parameter
+vlc.ml.playlists(query_params): Get playlist list
+vlc.ml.playlist(playlistId: integer): Get playlist with playlist id
+vlc.ml.artist_tracks(artistId: integer, query_params): Get artist tracks with artist id parameter
+vlc.ml.genre_tracks(genreId: integer, query_params): Get genre tracks with genre id parameter
+vlc.ml.playlist_tracks(playlistId: integer, query_params): Get playlist tracks with playlist id parameter
vlc.ml.artist_albums(artistId: integer, query_params): Get artist albums with artist id parameter
vlc.ml.genre_albums(genreId: integer, query_params): Get albums with genre id parameter
vlc.ml.genre_artists(genreId: integer, query_params): Get artists with genre id parameter
vlc.ml.artist_thumbnail(artistId: integer): Get artist thumbnail with artist id parameter
vlc.ml.album_thumbnail(albumId: integer): Get album thumbnail with album id parameter
+vlc.ml.genre_thumbnail(genreId: integer): Get genre thumbnail with genre id parameter
vlc.ml.reload(): Reload folder
+vlc.ml.history(historyType: integer, query_params): Get history list
+vlc.ml.video_history(query_params): Get video history list
+vlc.ml.audio_history(query_params): Get audio history list
+vlc.ml.media_bookmarks(mediaId: integer, query_params): Get media bookmarks with media id parameter
Stream
------
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/7cba77d1c66b31b6227ebdb04a7a97a9c62863a2...c38377712c9a12a31a9cc75b1c12b1e835a837fb
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/7cba77d1c66b31b6227ebdb04a7a97a9c62863a2...c38377712c9a12a31a9cc75b1c12b1e835a837fb
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list