diff --git a/modules/gui/qt/medialibrary/mlalbummodel.cpp b/modules/gui/qt/medialibrary/mlalbummodel.cpp index b7326d35b9..ef1cd079d2 100644 --- a/modules/gui/qt/medialibrary/mlalbummodel.cpp +++ b/modules/gui/qt/medialibrary/mlalbummodel.cpp @@ -166,3 +166,13 @@ MLAlbumModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) c res.emplace_back( std::make_unique( &album ) ); return res; } + +std::unique_ptr +MLAlbumModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_ALBUM); + ml_unique_ptr album(vlc_ml_get_album(ml, itemId.id)); + if (!album) + return nullptr; + return std::make_unique(album.get()); +} diff --git a/modules/gui/qt/medialibrary/mlalbummodel.hpp b/modules/gui/qt/medialibrary/mlalbummodel.hpp index 2945b750ac..0cbe0af402 100644 --- a/modules/gui/qt/medialibrary/mlalbummodel.hpp +++ b/modules/gui/qt/medialibrary/mlalbummodel.hpp @@ -72,6 +72,7 @@ private: Loader(const MLAlbumModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlalbumtrackmodel.cpp b/modules/gui/qt/medialibrary/mlalbumtrackmodel.cpp index b5f439c5d0..e33e531242 100644 --- a/modules/gui/qt/medialibrary/mlalbumtrackmodel.cpp +++ b/modules/gui/qt/medialibrary/mlalbumtrackmodel.cpp @@ -177,3 +177,14 @@ MLAlbumTrackModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t cou res.emplace_back( std::make_unique( ml, &media ) ); return res; } + +std::unique_ptr +MLAlbumTrackModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(ml, media.get()); +} + diff --git a/modules/gui/qt/medialibrary/mlalbumtrackmodel.hpp b/modules/gui/qt/medialibrary/mlalbumtrackmodel.hpp index f94b15afd5..60f1d077ad 100644 --- a/modules/gui/qt/medialibrary/mlalbumtrackmodel.hpp +++ b/modules/gui/qt/medialibrary/mlalbumtrackmodel.hpp @@ -71,6 +71,7 @@ private: Loader(const MLAlbumTrackModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; #endif // MLTRACKMODEL_HPP diff --git a/modules/gui/qt/medialibrary/mlartistmodel.cpp b/modules/gui/qt/medialibrary/mlartistmodel.cpp index e1373a91c2..228c7cdb48 100644 --- a/modules/gui/qt/medialibrary/mlartistmodel.cpp +++ b/modules/gui/qt/medialibrary/mlartistmodel.cpp @@ -136,3 +136,14 @@ MLArtistModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) res.emplace_back( std::make_unique( &artist ) ); return res; } + +std::unique_ptr +MLArtistModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_ARTIST); + ml_unique_ptr artist(vlc_ml_get_artist(ml, itemId.id)); + if (!artist) + return nullptr; + return std::make_unique(artist.get()); +} + diff --git a/modules/gui/qt/medialibrary/mlartistmodel.hpp b/modules/gui/qt/medialibrary/mlartistmodel.hpp index e13eff3883..60e53b7d99 100644 --- a/modules/gui/qt/medialibrary/mlartistmodel.hpp +++ b/modules/gui/qt/medialibrary/mlartistmodel.hpp @@ -64,6 +64,7 @@ private: Loader(const MLArtistModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlbasemodel.hpp b/modules/gui/qt/medialibrary/mlbasemodel.hpp index ee7675c971..81ed7764f8 100644 --- a/modules/gui/qt/medialibrary/mlbasemodel.hpp +++ b/modules/gui/qt/medialibrary/mlbasemodel.hpp @@ -132,6 +132,8 @@ protected: MLQueryParams getParams(size_t index = 0, size_t count = 0) const; + virtual std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const = 0; + protected: MLItemId m_parent; QString m_searchPattern; diff --git a/modules/gui/qt/medialibrary/mlgenremodel.cpp b/modules/gui/qt/medialibrary/mlgenremodel.cpp index 37a51d2eba..ab541cd52b 100644 --- a/modules/gui/qt/medialibrary/mlgenremodel.cpp +++ b/modules/gui/qt/medialibrary/mlgenremodel.cpp @@ -205,3 +205,13 @@ MLGenreModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) c return res; } + +std::unique_ptr +MLGenreModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_GENRE); + ml_unique_ptr genre(vlc_ml_get_genre(ml, itemId.id)); + if (!genre) + return nullptr; + return std::make_unique(genre.get()); +} diff --git a/modules/gui/qt/medialibrary/mlgenremodel.hpp b/modules/gui/qt/medialibrary/mlgenremodel.hpp index ff11ad9da4..b0673a8e92 100644 --- a/modules/gui/qt/medialibrary/mlgenremodel.hpp +++ b/modules/gui/qt/medialibrary/mlgenremodel.hpp @@ -67,6 +67,7 @@ private: Loader(const MLGenreModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; private: // Variables diff --git a/modules/gui/qt/medialibrary/mlplaylistlistmodel.cpp b/modules/gui/qt/medialibrary/mlplaylistlistmodel.cpp index 57a50484d4..b62997868b 100644 --- a/modules/gui/qt/medialibrary/mlplaylistlistmodel.cpp +++ b/modules/gui/qt/medialibrary/mlplaylistlistmodel.cpp @@ -456,3 +456,13 @@ MLPlaylistListModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t c return result; } + +std::unique_ptr +MLPlaylistListModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_PLAYLIST); + ml_unique_ptr playlist(vlc_ml_get_playlist(ml, itemId.id)); + if (!playlist) + return nullptr; + return std::make_unique(playlist.get()); +} diff --git a/modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp b/modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp index 26766b2938..78c87172ba 100644 --- a/modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp +++ b/modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp @@ -112,6 +112,8 @@ private: size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlplaylistmodel.cpp b/modules/gui/qt/medialibrary/mlplaylistmodel.cpp index ac9d889b1b..801ad0532d 100644 --- a/modules/gui/qt/medialibrary/mlplaylistmodel.cpp +++ b/modules/gui/qt/medialibrary/mlplaylistmodel.cpp @@ -537,3 +537,13 @@ MLPlaylistModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count return result; } + +std::unique_ptr +MLPlaylistModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); +} diff --git a/modules/gui/qt/medialibrary/mlplaylistmodel.hpp b/modules/gui/qt/medialibrary/mlplaylistmodel.hpp index 950cd8004c..bdc5b481c6 100644 --- a/modules/gui/qt/medialibrary/mlplaylistmodel.hpp +++ b/modules/gui/qt/medialibrary/mlplaylistmodel.hpp @@ -108,6 +108,8 @@ private: size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlrecentsmodel.cpp b/modules/gui/qt/medialibrary/mlrecentsmodel.cpp index 715a02d824..56d3bf0903 100644 --- a/modules/gui/qt/medialibrary/mlrecentsmodel.cpp +++ b/modules/gui/qt/medialibrary/mlrecentsmodel.cpp @@ -146,3 +146,13 @@ MLRecentsModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) res.emplace_back( std::make_unique( &media ) ); return res; } + +std::unique_ptr +MLRecentsModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); +} diff --git a/modules/gui/qt/medialibrary/mlrecentsmodel.hpp b/modules/gui/qt/medialibrary/mlrecentsmodel.hpp index 480304633d..b0de08e0a4 100644 --- a/modules/gui/qt/medialibrary/mlrecentsmodel.hpp +++ b/modules/gui/qt/medialibrary/mlrecentsmodel.hpp @@ -89,7 +89,7 @@ private: size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; - + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; private: int m_numberOfItemsToShow; }; diff --git a/modules/gui/qt/medialibrary/mlrecentsvideomodel.cpp b/modules/gui/qt/medialibrary/mlrecentsvideomodel.cpp index 0310ebf79a..852af0997c 100644 --- a/modules/gui/qt/medialibrary/mlrecentsvideomodel.cpp +++ b/modules/gui/qt/medialibrary/mlrecentsvideomodel.cpp @@ -118,3 +118,13 @@ MLRecentsVideoModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t c return res; } + +std::unique_ptr +MLRecentsVideoModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); +} diff --git a/modules/gui/qt/medialibrary/mlrecentsvideomodel.hpp b/modules/gui/qt/medialibrary/mlrecentsvideomodel.hpp index 0a99f4f3f0..256a69d094 100644 --- a/modules/gui/qt/medialibrary/mlrecentsvideomodel.hpp +++ b/modules/gui/qt/medialibrary/mlrecentsvideomodel.hpp @@ -58,6 +58,8 @@ private: size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; private: int m_numberOfItemsToShow; }; diff --git a/modules/gui/qt/medialibrary/mlurlmodel.cpp b/modules/gui/qt/medialibrary/mlurlmodel.cpp index 70272468ee..f362267635 100644 --- a/modules/gui/qt/medialibrary/mlurlmodel.cpp +++ b/modules/gui/qt/medialibrary/mlurlmodel.cpp @@ -161,3 +161,13 @@ MLUrlModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) con res.emplace_back( std::make_unique( &media ) ); return res; } + +std::unique_ptr +MLUrlModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); +} diff --git a/modules/gui/qt/medialibrary/mlurlmodel.hpp b/modules/gui/qt/medialibrary/mlurlmodel.hpp index d93e638c6e..ef1463eb7d 100644 --- a/modules/gui/qt/medialibrary/mlurlmodel.hpp +++ b/modules/gui/qt/medialibrary/mlurlmodel.hpp @@ -77,6 +77,7 @@ private: Loader(const MLUrlModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlvideofoldersmodel.cpp b/modules/gui/qt/medialibrary/mlvideofoldersmodel.cpp index aceffba797..98fc5c4325 100644 --- a/modules/gui/qt/medialibrary/mlvideofoldersmodel.cpp +++ b/modules/gui/qt/medialibrary/mlvideofoldersmodel.cpp @@ -184,3 +184,13 @@ MLVideoFoldersModel::Loader::load(vlc_medialibrary_t * ml, return result; } + +std::unique_ptr +MLVideoFoldersModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_FOLDER); + ml_unique_ptr folder(vlc_ml_get_folder(ml, itemId.id)); + if (!folder) + return nullptr; + return std::make_unique(folder.get()); +} diff --git a/modules/gui/qt/medialibrary/mlvideofoldersmodel.hpp b/modules/gui/qt/medialibrary/mlvideofoldersmodel.hpp index 78e19fb9d3..bbd96bb06c 100644 --- a/modules/gui/qt/medialibrary/mlvideofoldersmodel.hpp +++ b/modules/gui/qt/medialibrary/mlvideofoldersmodel.hpp @@ -72,6 +72,8 @@ private: std::vector> load(vlc_medialibrary_t * ml, size_t index, size_t count) const override; + + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlvideogroupsmodel.cpp b/modules/gui/qt/medialibrary/mlvideogroupsmodel.cpp index fe4c68e91d..4431a3c3f1 100644 --- a/modules/gui/qt/medialibrary/mlvideogroupsmodel.cpp +++ b/modules/gui/qt/medialibrary/mlvideogroupsmodel.cpp @@ -234,3 +234,29 @@ MLVideoGroupsModel::Loader::load(vlc_medialibrary_t* ml, return result; } + + +std::unique_ptr +MLVideoGroupsModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + if (itemId.type == VLC_ML_PARENT_UNKNOWN) + { + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); + } + else if (itemId.type == VLC_ML_PARENT_GROUP) + { + ml_unique_ptr group(vlc_ml_get_group(ml, itemId.id)); + if (!group) + return nullptr; + return std::make_unique(group.get()); + } + else + { + vlc_assert_unreachable(); + return nullptr; + } + +} diff --git a/modules/gui/qt/medialibrary/mlvideogroupsmodel.hpp b/modules/gui/qt/medialibrary/mlvideogroupsmodel.hpp index ee5f666af8..77294e7420 100644 --- a/modules/gui/qt/medialibrary/mlvideogroupsmodel.hpp +++ b/modules/gui/qt/medialibrary/mlvideogroupsmodel.hpp @@ -67,6 +67,8 @@ private: size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; }; diff --git a/modules/gui/qt/medialibrary/mlvideomodel.cpp b/modules/gui/qt/medialibrary/mlvideomodel.cpp index 2396a6c291..28480b83f5 100644 --- a/modules/gui/qt/medialibrary/mlvideomodel.cpp +++ b/modules/gui/qt/medialibrary/mlvideomodel.cpp @@ -217,3 +217,14 @@ MLVideoModel::Loader::load(vlc_medialibrary_t* ml, size_t index, size_t count) c return result; } + +std::unique_ptr +MLVideoModel::Loader::loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const +{ + assert(itemId.type == VLC_ML_PARENT_UNKNOWN); + ml_unique_ptr media(vlc_ml_get_media(ml, itemId.id)); + if (!media) + return nullptr; + return std::make_unique(media.get()); +} + diff --git a/modules/gui/qt/medialibrary/mlvideomodel.hpp b/modules/gui/qt/medialibrary/mlvideomodel.hpp index 51986f5adc..a9f279d265 100644 --- a/modules/gui/qt/medialibrary/mlvideomodel.hpp +++ b/modules/gui/qt/medialibrary/mlvideomodel.hpp @@ -86,6 +86,7 @@ private: Loader(const MLVideoModel &model) : BaseLoader(model) {} size_t count(vlc_medialibrary_t* ml) const override; std::vector> load(vlc_medialibrary_t* ml, size_t index, size_t count) const override; + std::unique_ptr loadItemById(vlc_medialibrary_t* ml, MLItemId itemId) const override; }; };