[vlc-devel] [PATCH 1/3] medialib: add function to get media history by type

Pierre Lamot pierre at videolabs.io
Wed Dec 9 12:52:05 CET 2020


---
 include/vlc_media_library.h            | 22 ++++++++++++++++++++++
 modules/misc/medialibrary/medialib.cpp | 22 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index fbc8ff8676..fde638692d 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -400,6 +400,8 @@ enum vlc_ml_list_queries
     VLC_ML_COUNT_PLAYLISTS,       /**< arg1 (out): size_t*                                          */
     VLC_ML_LIST_HISTORY,          /**< arg1 (out): vlc_ml_media_list_t**                            */
     VLC_ML_COUNT_HISTORY,         /**< arg1 (out): size_t*                                          */
+    VLC_ML_LIST_HISTORY_BY_TYPE,  /**< arg1 vlc_ml_media_type_t: the media type. arg2 (out): vlc_ml_media_list_t** */
+    VLC_ML_COUNT_HISTORY_BY_TYPE, /**< arg1 vlc_ml_media_type_t: the media type. arg2 (out): vlc_ml_media_list_t***/
     VLC_ML_LIST_STREAM_HISTORY,   /**< arg1 (out): vlc_ml_media_list_t**                            */
     VLC_ML_COUNT_STREAM_HISTORY,  /**< arg1 (out): size_t*                                          */
 
@@ -1439,6 +1441,26 @@ static inline size_t vlc_ml_count_history( vlc_medialibrary_t* p_ml, const vlc_m
 }
 
 
+static inline vlc_ml_media_list_t* vlc_ml_list_history_by_type( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, vlc_ml_media_type_t type  )
+{
+    vlc_assert( p_ml != NULL );
+    vlc_ml_media_list_t* res;
+    if ( vlc_ml_list( p_ml, VLC_ML_LIST_HISTORY_BY_TYPE, params, (int)type, &res ) != VLC_SUCCESS )
+        return NULL;
+    return res;
+}
+
+static inline size_t vlc_ml_count_history_by_type( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, vlc_ml_media_type_t type )
+{
+    vlc_assert( p_ml != NULL );
+    size_t count;
+    if ( vlc_ml_list( p_ml, VLC_ML_COUNT_HISTORY_BY_TYPE, params, (int)type, &count ) != VLC_SUCCESS )
+        return 0;
+    return count;
+}
+
+
+
 static inline vlc_ml_media_list_t* vlc_ml_list_stream_history( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
 {
     vlc_assert( p_ml != NULL );
diff --git a/modules/misc/medialibrary/medialib.cpp b/modules/misc/medialibrary/medialib.cpp
index 5f3c2fc493..3cd342f833 100644
--- a/modules/misc/medialibrary/medialib.cpp
+++ b/modules/misc/medialibrary/medialib.cpp
@@ -882,6 +882,28 @@ int MediaLibrary::List( int listQuery, const vlc_ml_query_params_t* params, va_l
                 vlc_assert_unreachable();
             }
         }
+        case VLC_ML_COUNT_HISTORY_BY_TYPE:
+        case VLC_ML_LIST_HISTORY_BY_TYPE:
+        {
+            auto  type = va_arg(args, int);
+            auto query = m_ml->history(static_cast<medialibrary::IMedia::Type>( type ));
+            if ( query == nullptr )
+                return VLC_EGENERIC;
+
+            switch ( listQuery )
+            {
+            case VLC_ML_LIST_HISTORY_BY_TYPE:
+                *va_arg( args, vlc_ml_media_list_t**) =
+                        ml_convert_list<vlc_ml_media_list_t, vlc_ml_media_t>(
+                            query->items( nbItems, offset ) );
+                return VLC_SUCCESS;
+            case VLC_ML_COUNT_HISTORY_BY_TYPE:
+                *va_arg( args, size_t* ) = query->count();
+                return VLC_SUCCESS;
+            default:
+                vlc_assert_unreachable();
+            }
+        }
         case VLC_ML_LIST_STREAM_HISTORY:
         case VLC_ML_COUNT_STREAM_HISTORY:
         {
-- 
2.25.1



More information about the vlc-devel mailing list