From 683dc6ee2dc67d1ba82834a724a27e2a4bca67ca Mon Sep 17 00:00:00 2001 From: Pierre Lamot Date: Thu, 13 Feb 2020 17:45:10 +0100 Subject: [PATCH] qt: notify dataChanged when a thumbnail is updated from the medialibrary Signed-off-by: Jean-Baptiste Kempf --- modules/gui/qt/medialibrary/mlalbum.cpp | 2 +- modules/gui/qt/medialibrary/mlalbum.hpp | 4 ++-- modules/gui/qt/medialibrary/mlalbummodel.cpp | 9 +++++++-- modules/gui/qt/medialibrary/mlalbummodel.hpp | 1 + modules/gui/qt/medialibrary/mlartistmodel.cpp | 7 ++++++- modules/gui/qt/medialibrary/mlartistmodel.hpp | 1 + modules/gui/qt/medialibrary/mlbasemodel.hpp | 25 +++++++++++++++++++++++++ modules/gui/qt/medialibrary/mlgenremodel.cpp | 7 ++++++- modules/gui/qt/medialibrary/mlgenremodel.hpp | 1 + modules/gui/qt/medialibrary/mlvideomodel.cpp | 8 +++++++- modules/gui/qt/medialibrary/mlvideomodel.hpp | 1 + 11 files changed, 58 insertions(+), 8 deletions(-) diff --git a/modules/gui/qt/medialibrary/mlalbum.cpp b/modules/gui/qt/medialibrary/mlalbum.cpp index 88df4f034a..2c4a1e9bb8 100644 --- a/modules/gui/qt/medialibrary/mlalbum.cpp +++ b/modules/gui/qt/medialibrary/mlalbum.cpp @@ -62,7 +62,7 @@ MLAlbum::MLAlbum(const MLAlbum& _album, QObject *_parent) { } -MLParentId MLAlbum::getParentId() const +MLParentId MLAlbum::getId() const { return m_id; } diff --git a/modules/gui/qt/medialibrary/mlalbum.hpp b/modules/gui/qt/medialibrary/mlalbum.hpp index be14d0a990..b907e441b0 100644 --- a/modules/gui/qt/medialibrary/mlalbum.hpp +++ b/modules/gui/qt/medialibrary/mlalbum.hpp @@ -35,7 +35,7 @@ class MLAlbum : public QObject { Q_OBJECT - Q_PROPERTY(MLParentId id READ getParentId CONSTANT) + Q_PROPERTY(MLParentId id READ getId CONSTANT) Q_PROPERTY(QString title READ getTitle CONSTANT) Q_PROPERTY(unsigned int releaseyear READ getReleaseYear CONSTANT) Q_PROPERTY(QString shortsummary READ getShortSummary CONSTANT) @@ -47,7 +47,7 @@ class MLAlbum : public QObject public: MLAlbum(vlc_medialibrary_t* _ml, const vlc_ml_album_t *_data, QObject *_parent = nullptr); - MLParentId getParentId() const; + MLParentId getId() const; QString getTitle() const; unsigned int getReleaseYear() const; QString getShortSummary() const; diff --git a/modules/gui/qt/medialibrary/mlalbummodel.cpp b/modules/gui/qt/medialibrary/mlalbummodel.cpp index b5ee3f251e..0d4b438284 100644 --- a/modules/gui/qt/medialibrary/mlalbummodel.cpp +++ b/modules/gui/qt/medialibrary/mlalbummodel.cpp @@ -44,7 +44,7 @@ QVariant MLAlbumModel::data(const QModelIndex &index, int role) const switch (role) { case ALBUM_ID : - return QVariant::fromValue( ml_item->getParentId() ); + return QVariant::fromValue( ml_item->getId() ); case ALBUM_TITLE : return QVariant::fromValue( ml_item->getTitle() ); case ALBUM_RELEASE_YEAR : @@ -125,7 +125,12 @@ void MLAlbumModel::onVlcMlEvent(const vlc_ml_event_t* event) default: break; } - MLBaseModel::onVlcMlEvent( event ); + MLSlidingWindowModel::onVlcMlEvent( event ); +} + +void MLAlbumModel::thumbnailUpdated(int idx) +{ + emit dataChanged(index(idx), index(idx), {ALBUM_COVER}); } vlc_ml_sorting_criteria_t MLAlbumModel::roleToCriteria(int role) const diff --git a/modules/gui/qt/medialibrary/mlalbummodel.hpp b/modules/gui/qt/medialibrary/mlalbummodel.hpp index b0befe5b77..6b5dcfc145 100644 --- a/modules/gui/qt/medialibrary/mlalbummodel.hpp +++ b/modules/gui/qt/medialibrary/mlalbummodel.hpp @@ -60,6 +60,7 @@ private: vlc_ml_sorting_criteria_t nameToCriteria(QByteArray name) const override; QByteArray criteriaToName(vlc_ml_sorting_criteria_t criteria) const override; virtual void onVlcMlEvent( const vlc_ml_event_t* event ) override; + void thumbnailUpdated(int idx) override; static QHash M_names_to_criteria; }; diff --git a/modules/gui/qt/medialibrary/mlartistmodel.cpp b/modules/gui/qt/medialibrary/mlartistmodel.cpp index 3994bd9197..c453b83701 100644 --- a/modules/gui/qt/medialibrary/mlartistmodel.cpp +++ b/modules/gui/qt/medialibrary/mlartistmodel.cpp @@ -137,5 +137,10 @@ void MLArtistModel::onVlcMlEvent(const vlc_ml_event_t* event) m_need_reset = true; break; } - MLBaseModel::onVlcMlEvent(event); + MLSlidingWindowModel::onVlcMlEvent(event); +} + +void MLArtistModel::thumbnailUpdated(int idx) +{ + emit dataChanged(index(idx), index(idx), {ARTIST_COVER}); } diff --git a/modules/gui/qt/medialibrary/mlartistmodel.hpp b/modules/gui/qt/medialibrary/mlartistmodel.hpp index e3e0a2433d..66ca9b35ce 100644 --- a/modules/gui/qt/medialibrary/mlartistmodel.hpp +++ b/modules/gui/qt/medialibrary/mlartistmodel.hpp @@ -45,6 +45,7 @@ private: vlc_ml_sorting_criteria_t nameToCriteria(QByteArray name) const override; QByteArray criteriaToName(vlc_ml_sorting_criteria_t criteria) const override; virtual void onVlcMlEvent(const vlc_ml_event_t* event) override; + void thumbnailUpdated(int idx) override; static QHash M_names_to_criteria; }; diff --git a/modules/gui/qt/medialibrary/mlbasemodel.hpp b/modules/gui/qt/medialibrary/mlbasemodel.hpp index bdacb415b6..ff0157e92a 100644 --- a/modules/gui/qt/medialibrary/mlbasemodel.hpp +++ b/modules/gui/qt/medialibrary/mlbasemodel.hpp @@ -193,9 +193,34 @@ protected: return m_item_list[idx - m_query_param.i_offset].get(); } + virtual void onVlcMlEvent(const vlc_ml_event_t* event) override + { + switch (event->i_type) + { + case VLC_ML_EVENT_MEDIA_THUMBNAIL_GENERATED: + { + if (event->media_thumbnail_generated.b_success) { + int idx = static_cast(m_query_param.i_offset); + for ( const auto& it : m_item_list ) { + if (it->getId().id == event->media_thumbnail_generated.p_media->i_id) { + thumbnailUpdated(idx); + break; + } + idx += 1; + } + } + break; + } + default: + break; + } + MLBaseModel::onVlcMlEvent( event ); + } + private: virtual size_t countTotalElements() const = 0; virtual std::vector> fetch() = 0; + virtual void thumbnailUpdated( int ) {} protected: mutable std::vector> m_item_list; diff --git a/modules/gui/qt/medialibrary/mlgenremodel.cpp b/modules/gui/qt/medialibrary/mlgenremodel.cpp index 433a8e7cde..a3f9a2dec6 100644 --- a/modules/gui/qt/medialibrary/mlgenremodel.cpp +++ b/modules/gui/qt/medialibrary/mlgenremodel.cpp @@ -111,7 +111,12 @@ void MLGenreModel::onVlcMlEvent(const vlc_ml_event_t* event) m_need_reset = true; break; } - MLBaseModel::onVlcMlEvent(event); + MLSlidingWindowModel::onVlcMlEvent(event); +} + +void MLGenreModel::thumbnailUpdated(int idx) +{ + emit dataChanged(index(idx), index(idx), {GENRE_COVER}); } vlc_ml_sorting_criteria_t MLGenreModel::roleToCriteria(int role) const diff --git a/modules/gui/qt/medialibrary/mlgenremodel.hpp b/modules/gui/qt/medialibrary/mlgenremodel.hpp index c83ee01688..2b171e5b42 100644 --- a/modules/gui/qt/medialibrary/mlgenremodel.hpp +++ b/modules/gui/qt/medialibrary/mlgenremodel.hpp @@ -43,6 +43,7 @@ private: std::vector> fetch() override; size_t countTotalElements() const override; void onVlcMlEvent(const vlc_ml_event_t* event) override; + void thumbnailUpdated(int idx) override; vlc_ml_sorting_criteria_t roleToCriteria(int role) const override; vlc_ml_sorting_criteria_t nameToCriteria(QByteArray name) const override; diff --git a/modules/gui/qt/medialibrary/mlvideomodel.cpp b/modules/gui/qt/medialibrary/mlvideomodel.cpp index 365cd4d3cf..3338970730 100644 --- a/modules/gui/qt/medialibrary/mlvideomodel.cpp +++ b/modules/gui/qt/medialibrary/mlvideomodel.cpp @@ -162,8 +162,14 @@ void MLVideoModel::onVlcMlEvent(const vlc_ml_event_t* event) default: break; } - MLBaseModel::onVlcMlEvent( event ); + MLSlidingWindowModel::onVlcMlEvent( event ); } + +void MLVideoModel::thumbnailUpdated(int idx) +{ + emit dataChanged(index(idx), index(idx), {VIDEO_THUMBNAIL}); +} + QString MLVideoModel::getFirstSymbol( const QString& str ) { QString ret("#"); diff --git a/modules/gui/qt/medialibrary/mlvideomodel.hpp b/modules/gui/qt/medialibrary/mlvideomodel.hpp index 2e55a5f94e..ecde78171c 100644 --- a/modules/gui/qt/medialibrary/mlvideomodel.hpp +++ b/modules/gui/qt/medialibrary/mlvideomodel.hpp @@ -48,6 +48,7 @@ private: vlc_ml_sorting_criteria_t roleToCriteria(int role) const override; vlc_ml_sorting_criteria_t nameToCriteria(QByteArray name) const override; virtual void onVlcMlEvent( const vlc_ml_event_t* event ) override; + virtual void thumbnailUpdated( int ) override; static QHash M_names_to_criteria; static QString getFirstSymbol( const QString& str ); -- 2.11.4.GIT