vlc | branch: master | Benjamin Arnaud <benjamin.arn...@videolabs.io> | Thu Mar 11 10:16:50 2021 +0100| [539f902507759765a485f8c48c3fe53c63e7b3ac] | committer: Pierre Lamot
qt/mlbasemodel: Add the 'getItemsForIndexes' function And update the implementation Signed-off-by: Pierre Lamot <pie...@videolabs.io> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=539f902507759765a485f8c48c3fe53c63e7b3ac --- modules/gui/qt/medialibrary/mlbasemodel.cpp | 64 +++++++++++++++++++++++++++-- modules/gui/qt/medialibrary/mlbasemodel.hpp | 29 +++++++++---- 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/modules/gui/qt/medialibrary/mlbasemodel.cpp b/modules/gui/qt/medialibrary/mlbasemodel.cpp index 68eb28dac9..91527c7828 100644 --- a/modules/gui/qt/medialibrary/mlbasemodel.cpp +++ b/modules/gui/qt/medialibrary/mlbasemodel.cpp @@ -17,10 +17,15 @@ *****************************************************************************/ #include <cassert> -#include "mlbasemodel.hpp" #include "medialib.hpp" #include <vlc_cxx_helpers.hpp> + #include "util/listcache.hpp" +#include "util/qmlinputitem.hpp" + +// MediaLibrary includes +#include "mlbasemodel.hpp" +#include "mlhelper.hpp" static constexpr ssize_t COUNT_UNINITIALIZED = ListCache<std::unique_ptr<MLItem>>::COUNT_UNINITIALIZED; @@ -265,8 +270,7 @@ QVariant MLBaseModel::getIdForIndex(QVariant index) const return QVariant::fromValue(obj->getId()); } - -QVariantList MLBaseModel::getIdsForIndexes(QModelIndexList indexes) const +QVariantList MLBaseModel::getIdsForIndexes(const QModelIndexList & indexes) const { QVariantList idList; idList.reserve(indexes.length()); @@ -279,7 +283,7 @@ QVariantList MLBaseModel::getIdsForIndexes(QModelIndexList indexes) const return idList; } -QVariantList MLBaseModel::getIdsForIndexes(QVariantList indexes) const +QVariantList MLBaseModel::getIdsForIndexes(const QVariantList & indexes) const { QVariantList idList; @@ -300,6 +304,58 @@ QVariantList MLBaseModel::getIdsForIndexes(QVariantList indexes) const return idList; } +//------------------------------------------------------------------------------------------------- + +/* Q_INVOKABLE virtual */ +QVariantList MLBaseModel::getItemsForIndexes(const QModelIndexList & indexes) const +{ + assert(m_ml); + + QVariantList items; + + vlc_ml_query_params_t query; + + memset(&query, 0, sizeof(vlc_ml_query_params_t)); + + for (const QModelIndex & index : indexes) + { + MLItem * item = this->item(index.row()); + + if (item == nullptr) + continue; + + const MLItemId & itemId = item->getId(); + + // NOTE: When we have a parent it's a collection of media(s). + if (itemId.type == VLC_ML_PARENT_UNKNOWN) + { + QmlInputItem input(vlc_ml_get_input_item(m_ml, itemId.id), false); + + items.append(QVariant::fromValue(input)); + } + else + { + ml_unique_ptr<vlc_ml_media_list_t> list; + + list.reset(vlc_ml_list_media_of(m_ml, &query, itemId.type, itemId.id)); + + if (list == nullptr) + continue; + + for (const vlc_ml_media_t & media : ml_range_iterate<vlc_ml_media_t>(list)) + { + QmlInputItem input(vlc_ml_get_input_item(m_ml, media.i_id), false); + + items.append(QVariant::fromValue(input)); + } + } + } + + return items; +} + +//------------------------------------------------------------------------------------------------- + unsigned MLBaseModel::getCount() const { if (!m_mediaLib) diff --git a/modules/gui/qt/medialibrary/mlbasemodel.hpp b/modules/gui/qt/medialibrary/mlbasemodel.hpp index d1057ac6b1..349a75a3fc 100644 --- a/modules/gui/qt/medialibrary/mlbasemodel.hpp +++ b/modules/gui/qt/medialibrary/mlbasemodel.hpp @@ -45,23 +45,34 @@ class MLBaseModel : public QAbstractListModel { Q_OBJECT + Q_PROPERTY(MLItemId parentId READ parentId WRITE setParentId NOTIFY parentIdChanged + RESET unsetParentId) + + Q_PROPERTY(MediaLib * ml READ ml WRITE setMl) + + Q_PROPERTY(QString searchPattern READ searchPattern WRITE setSearchPattern) + + Q_PROPERTY(Qt::SortOrder sortOrder READ getSortOrder WRITE setSortOder NOTIFY sortOrderChanged) + + Q_PROPERTY(QString sortCriteria READ getSortCriteria WRITE setSortCriteria + NOTIFY sortCriteriaChanged RESET unsetSortCriteria) + + Q_PROPERTY(unsigned int count READ getCount NOTIFY countChanged) + public: explicit MLBaseModel(QObject *parent = nullptr); + virtual ~MLBaseModel(); +public: // Interface Q_INVOKABLE void sortByColumn(QByteArray name, Qt::SortOrder order); - Q_PROPERTY( MLItemId parentId READ parentId WRITE setParentId NOTIFY parentIdChanged RESET unsetParentId ) - Q_PROPERTY( MediaLib* ml READ ml WRITE setMl ) - Q_PROPERTY( QString searchPattern READ searchPattern WRITE setSearchPattern ) + Q_INVOKABLE virtual QVariant getIdForIndex(QVariant index) const; - Q_PROPERTY( Qt::SortOrder sortOrder READ getSortOrder WRITE setSortOder NOTIFY sortOrderChanged ) - Q_PROPERTY( QString sortCriteria READ getSortCriteria WRITE setSortCriteria NOTIFY sortCriteriaChanged RESET unsetSortCriteria ) - Q_PROPERTY( unsigned int count READ getCount NOTIFY countChanged ) + Q_INVOKABLE virtual QVariantList getIdsForIndexes(const QVariantList & indexes) const; + Q_INVOKABLE virtual QVariantList getIdsForIndexes(const QModelIndexList & indexes) const; - Q_INVOKABLE virtual QVariant getIdForIndex( QVariant index) const; - Q_INVOKABLE virtual QVariantList getIdsForIndexes( QVariantList indexes ) const; - Q_INVOKABLE virtual QVariantList getIdsForIndexes( QModelIndexList indexes ) const; + Q_INVOKABLE virtual QVariantList getItemsForIndexes(const QModelIndexList & indexes) const; Q_INVOKABLE QMap<QString, QVariant> getDataAt(int index); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits