[vlc-devel] [PATCH 3/8] qt: medialib: define a super-type for list items

Romain Vimont rom1v at videolabs.io
Thu Dec 3 12:12:07 CET 2020


Concrete medialib item types are defined by the template parameter on
MLSlidingWindowModel.

Create a super-type to be able to "untemplatize" MLSlidingWindowModel
(in order to simplify and improve compilation times).

As a side-effect, this also makes explicit the necessity to define a
getId() method (called from MLSlidingWindowModel), a constraint which
could not be explicitly expressed on a template parameter.
---
 modules/gui/qt/medialibrary/mlalbum.cpp        |  9 ++-------
 modules/gui/qt/medialibrary/mlalbum.hpp        |  4 +---
 modules/gui/qt/medialibrary/mlalbumtrack.cpp   |  9 ++-------
 modules/gui/qt/medialibrary/mlalbumtrack.hpp   |  4 +---
 modules/gui/qt/medialibrary/mlartist.cpp       |  9 ++-------
 modules/gui/qt/medialibrary/mlartist.hpp       |  4 +---
 modules/gui/qt/medialibrary/mlgenre.cpp        | 11 +++--------
 modules/gui/qt/medialibrary/mlgenre.hpp        |  4 +---
 modules/gui/qt/medialibrary/mlqmltypes.hpp     | 12 ++++++++++++
 modules/gui/qt/medialibrary/mlrecentsmodel.cpp |  4 ++--
 modules/gui/qt/medialibrary/mlrecentsmodel.hpp |  4 +---
 modules/gui/qt/medialibrary/mlurlmodel.cpp     |  4 ++--
 modules/gui/qt/medialibrary/mlurlmodel.hpp     |  4 +---
 modules/gui/qt/medialibrary/mlvideo.cpp        | 13 ++++---------
 modules/gui/qt/medialibrary/mlvideo.hpp        |  5 +----
 15 files changed, 36 insertions(+), 64 deletions(-)

diff --git a/modules/gui/qt/medialibrary/mlalbum.cpp b/modules/gui/qt/medialibrary/mlalbum.cpp
index 6f3b5f053c..6a80648b33 100644
--- a/modules/gui/qt/medialibrary/mlalbum.cpp
+++ b/modules/gui/qt/medialibrary/mlalbum.cpp
@@ -20,8 +20,8 @@
 
 MLAlbum::MLAlbum(vlc_medialibrary_t* _ml, const vlc_ml_album_t *_data, QObject *_parent)
     : QObject( _parent )
+    , MLItem        ( MLItemId( _data->i_id, VLC_ML_PARENT_ALBUM ) )
     , m_ml          ( _ml )
-    , m_id          ( _data->i_id, VLC_ML_PARENT_ALBUM )
     , m_title       ( QString::fromUtf8( _data->psz_title ) )
     , m_releaseYear ( _data->i_year )
     , m_shortSummary( QString::fromUtf8( _data->psz_summary ) )
@@ -58,8 +58,8 @@ MLAlbum::MLAlbum(vlc_medialibrary_t* _ml, const vlc_ml_album_t *_data, QObject *
 //private ctor for cloning
 MLAlbum::MLAlbum(const MLAlbum& _album, QObject *_parent)
     : QObject( _parent )
+    , MLItem        ( _album.getId() )
     , m_ml          ( _album.m_ml )
-    , m_id          ( _album.m_id )
     , m_title       ( _album.m_title )
     , m_releaseYear ( _album.m_releaseYear )
     , m_shortSummary( _album.m_shortSummary )
@@ -70,11 +70,6 @@ MLAlbum::MLAlbum(const MLAlbum& _album, QObject *_parent)
 {
 }
 
-MLItemId MLAlbum::getId() const
-{
-    return m_id;
-}
-
 QString MLAlbum::getTitle() const
 {
     return m_title;
diff --git a/modules/gui/qt/medialibrary/mlalbum.hpp b/modules/gui/qt/medialibrary/mlalbum.hpp
index 525834a91c..3050227796 100644
--- a/modules/gui/qt/medialibrary/mlalbum.hpp
+++ b/modules/gui/qt/medialibrary/mlalbum.hpp
@@ -31,7 +31,7 @@
 #include "mlhelper.hpp"
 #include "mlqmltypes.hpp"
 
-class MLAlbum : public QObject
+class MLAlbum : public QObject, public MLItem
 {
     Q_OBJECT
 
@@ -48,7 +48,6 @@ class MLAlbum : public QObject
 public:
     MLAlbum(vlc_medialibrary_t* _ml, const vlc_ml_album_t *_data, QObject *_parent = nullptr);
 
-    MLItemId getId() const;
     QString getTitle() const;
     unsigned int getReleaseYear() const;
     QString getShortSummary() const;
@@ -70,7 +69,6 @@ private:
 
     vlc_medialibrary_t* m_ml;
 
-    MLItemId m_id;
     QString m_title;
     unsigned int m_releaseYear;
     QString m_shortSummary;
diff --git a/modules/gui/qt/medialibrary/mlalbumtrack.cpp b/modules/gui/qt/medialibrary/mlalbumtrack.cpp
index 4d13479150..1bc1d600cb 100644
--- a/modules/gui/qt/medialibrary/mlalbumtrack.cpp
+++ b/modules/gui/qt/medialibrary/mlalbumtrack.cpp
@@ -22,7 +22,7 @@
 
 MLAlbumTrack::MLAlbumTrack(vlc_medialibrary_t* _ml, const vlc_ml_media_t *_data, QObject *_parent )
     : QObject( _parent )
-    , m_id         ( _data->i_id, VLC_ML_PARENT_UNKNOWN )
+    , MLItem       ( MLItemId( _data->i_id, VLC_ML_PARENT_UNKNOWN ) )
     , m_title      ( QString::fromUtf8( _data->psz_title ) )
     , m_trackNumber( _data->album_track.i_track_nb )
     , m_discNumber( _data->album_track.i_disc_nb )
@@ -84,7 +84,7 @@ MLAlbumTrack::MLAlbumTrack(vlc_medialibrary_t* _ml, const vlc_ml_media_t *_data,
 
 MLAlbumTrack::MLAlbumTrack(const MLAlbumTrack &albumtrack, QObject *_parent)
     : QObject( _parent )
-    , m_id           ( albumtrack.m_id )
+    , MLItem         ( albumtrack.getId() )
     , m_title        ( albumtrack.m_title )
     , m_albumTitle   ( albumtrack.m_albumTitle )
     , m_artist       ( albumtrack.m_artist )
@@ -97,11 +97,6 @@ MLAlbumTrack::MLAlbumTrack(const MLAlbumTrack &albumtrack, QObject *_parent)
 {
 }
 
-MLItemId MLAlbumTrack::getId() const
-{
-    return m_id;
-}
-
 QString MLAlbumTrack::getTitle() const
 {
     return m_title;
diff --git a/modules/gui/qt/medialibrary/mlalbumtrack.hpp b/modules/gui/qt/medialibrary/mlalbumtrack.hpp
index 19b40619a6..70b0e001f3 100644
--- a/modules/gui/qt/medialibrary/mlalbumtrack.hpp
+++ b/modules/gui/qt/medialibrary/mlalbumtrack.hpp
@@ -31,7 +31,7 @@
 #include "mlhelper.hpp"
 #include "mlqmltypes.hpp"
 
-class MLAlbumTrack : public QObject
+class MLAlbumTrack : public QObject, public MLItem
 {
     Q_OBJECT
 
@@ -49,7 +49,6 @@ class MLAlbumTrack : public QObject
 public:
     MLAlbumTrack(vlc_medialibrary_t *_ml, const vlc_ml_media_t *_data, QObject *_parent = nullptr);
 
-    MLItemId getId() const;
     QString getTitle() const;
     QString getAlbumTitle() const;
     QString getArtist() const;
@@ -65,7 +64,6 @@ public:
 private:
     MLAlbumTrack(const MLAlbumTrack& albumtrack, QObject *_parent = nullptr);
 
-    MLItemId m_id;
     QString m_title;
     QString m_albumTitle;
     QString m_artist;
diff --git a/modules/gui/qt/medialibrary/mlartist.cpp b/modules/gui/qt/medialibrary/mlartist.cpp
index e66a323a98..af40f2018e 100644
--- a/modules/gui/qt/medialibrary/mlartist.cpp
+++ b/modules/gui/qt/medialibrary/mlartist.cpp
@@ -21,7 +21,7 @@
 
 MLArtist::MLArtist(const vlc_ml_artist_t* _data, QObject *_parent)
     : QObject(_parent)
-    , m_id      ( _data->i_id, VLC_ML_PARENT_ARTIST )
+    , MLItem    ( MLItemId( _data->i_id, VLC_ML_PARENT_ARTIST ) )
     , m_name    ( QString::fromUtf8( _data->psz_name ) )
     , m_shortBio( QString::fromUtf8( _data->psz_shortbio ) )
     , m_cover   ( QString::fromUtf8( _data->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl ) )
@@ -33,7 +33,7 @@ MLArtist::MLArtist(const vlc_ml_artist_t* _data, QObject *_parent)
 
 MLArtist::MLArtist(const MLArtist &artist, QObject *_parent)
     : QObject(_parent)
-    , m_id      ( artist.m_id )
+    , MLItem    ( artist.getId() )
     , m_name    ( artist.m_name )
     , m_shortBio( artist.m_shortBio )
     , m_cover   ( artist.m_cover )
@@ -43,11 +43,6 @@ MLArtist::MLArtist(const MLArtist &artist, QObject *_parent)
 
 }
 
-MLItemId MLArtist::getId() const
-{
-    return m_id;
-}
-
 QString MLArtist::getName() const
 {
     return m_name;
diff --git a/modules/gui/qt/medialibrary/mlartist.hpp b/modules/gui/qt/medialibrary/mlartist.hpp
index 355196f69a..099b8c208f 100644
--- a/modules/gui/qt/medialibrary/mlartist.hpp
+++ b/modules/gui/qt/medialibrary/mlartist.hpp
@@ -34,7 +34,7 @@
 #include "mlhelper.hpp"
 #include "mlqmltypes.hpp"
 
-class MLArtist : public QObject
+class MLArtist : public QObject, public MLItem
 {
     Q_OBJECT
 
@@ -48,7 +48,6 @@ class MLArtist : public QObject
 public:
     MLArtist(const vlc_ml_artist_t *_data, QObject *_parent = nullptr);
 
-    MLItemId getId() const;
     QString getName() const;
     QString getShortBio() const;
     QString getCover() const;
@@ -64,7 +63,6 @@ public:
 private:
     MLArtist(const MLArtist &artist, QObject *_parent = nullptr);
 
-    MLItemId m_id;
     QString m_name;
     QString m_shortBio;
     QString m_cover;
diff --git a/modules/gui/qt/medialibrary/mlgenre.cpp b/modules/gui/qt/medialibrary/mlgenre.cpp
index 66fe0184a9..316db042a8 100644
--- a/modules/gui/qt/medialibrary/mlgenre.cpp
+++ b/modules/gui/qt/medialibrary/mlgenre.cpp
@@ -211,8 +211,8 @@ private:
 
 MLGenre::MLGenre(vlc_medialibrary_t* ml, const vlc_ml_genre_t *_data, QObject *_parent )
     : QObject(_parent)
+    , MLItem    ( MLItemId( _data->i_id, VLC_ML_PARENT_GENRE ) )
     , m_ml      ( ml )
-    , m_id      ( _data->i_id, VLC_ML_PARENT_GENRE )
     , m_name    ( QString::fromUtf8( _data->psz_name ) )
     , m_nbTracks ( (unsigned int)_data->i_nb_tracks )
 
@@ -223,8 +223,8 @@ MLGenre::MLGenre(vlc_medialibrary_t* ml, const vlc_ml_genre_t *_data, QObject *_
 
 MLGenre::MLGenre(const MLGenre &genre, QObject *_parent)
     : QObject(_parent)
+    , MLItem    ( genre.getId() )
     , m_ml      ( genre.m_ml )
-    , m_id      ( genre.m_id )
     , m_name    ( genre.m_name )
     , m_nbTracks( genre.m_nbTracks )
 {
@@ -242,11 +242,6 @@ MLGenre::~MLGenre()
     }
 }
 
-MLItemId MLGenre::getId() const
-{
-    return m_id;
-}
-
 QString MLGenre::getName() const
 {
     return m_name;
@@ -291,7 +286,7 @@ void MLGenre::generateThumbnail()
         dir.mkdir("qt-genre-covers");
         dir.cd("qt-genre-covers");
 
-        QString filename = QString("genre_thumbnail_%1.jpg").arg(m_id.id);
+        QString filename = QString("genre_thumbnail_%1.jpg").arg(getId().id);
         QString absoluteFilePath =  dir.absoluteFilePath(filename);
         if (dir.exists(filename))
         {
diff --git a/modules/gui/qt/medialibrary/mlgenre.hpp b/modules/gui/qt/medialibrary/mlgenre.hpp
index 8eebe7c1f6..8f47e631cd 100644
--- a/modules/gui/qt/medialibrary/mlgenre.hpp
+++ b/modules/gui/qt/medialibrary/mlgenre.hpp
@@ -33,7 +33,7 @@
 #include "mlhelper.hpp"
 #include "mlqmltypes.hpp"
 
-class MLGenre : public QObject
+class MLGenre : public QObject, public MLItem
 {
     Q_OBJECT
 
@@ -46,7 +46,6 @@ public:
     MLGenre( vlc_medialibrary_t* _ml, const vlc_ml_genre_t *_data, QObject *_parent = nullptr);
     ~MLGenre();
 
-    MLItemId getId() const;
     QString getName() const;
     unsigned int getNbTracks() const;
     QString getCover() const;
@@ -68,7 +67,6 @@ private:
 
     vlc_medialibrary_t* m_ml;
 
-    MLItemId m_id;
     QString m_name;
     QString m_cover;
     QRunnable* m_coverTask = nullptr;
diff --git a/modules/gui/qt/medialibrary/mlqmltypes.hpp b/modules/gui/qt/medialibrary/mlqmltypes.hpp
index 7adcdb7d07..cc4f75e4e0 100644
--- a/modules/gui/qt/medialibrary/mlqmltypes.hpp
+++ b/modules/gui/qt/medialibrary/mlqmltypes.hpp
@@ -62,4 +62,16 @@ public:
 
 Q_DECLARE_METATYPE(MLItemId)
 
+class MLItem
+{
+public:
+    MLItem(MLItemId id) : m_id(id) {}
+    virtual ~MLItem() = default;
+
+    MLItemId getId() const { return m_id; };
+
+private:
+    MLItemId m_id;
+};
+
 #endif // MLQMLTYPES_HPP
diff --git a/modules/gui/qt/medialibrary/mlrecentsmodel.cpp b/modules/gui/qt/medialibrary/mlrecentsmodel.cpp
index 7d4b5cc7e2..25029467b0 100644
--- a/modules/gui/qt/medialibrary/mlrecentsmodel.cpp
+++ b/modules/gui/qt/medialibrary/mlrecentsmodel.cpp
@@ -20,14 +20,14 @@
 #include <QDateTime>
 
 MLRecentMedia::MLRecentMedia( const vlc_ml_media_t *media )
-    : m_id (media->i_id, VLC_ML_PARENT_UNKNOWN)
+    : MLItem( MLItemId( media->i_id, VLC_ML_PARENT_UNKNOWN ) )
     , m_url ( media->p_files->i_nb_items > 0 ? media->p_files->p_items[0].psz_mrl : "" )
     , m_lastPlayedDate(QDateTime::fromTime_t( media->i_last_played_date ))
 {
 }
 
 MLRecentMedia::MLRecentMedia( const MLRecentMedia& media )
-    : m_id(media.m_id)
+    : MLItem(media.getId())
     , m_url(media.m_url)
     , m_lastPlayedDate(media.m_lastPlayedDate)
 {
diff --git a/modules/gui/qt/medialibrary/mlrecentsmodel.hpp b/modules/gui/qt/medialibrary/mlrecentsmodel.hpp
index d551c7700a..2c586f6b60 100644
--- a/modules/gui/qt/medialibrary/mlrecentsmodel.hpp
+++ b/modules/gui/qt/medialibrary/mlrecentsmodel.hpp
@@ -32,7 +32,7 @@
 #include <QObject>
 #include <QDateTime>
 
-class MLRecentMedia {
+class MLRecentMedia : public MLItem {
 public:
     MLRecentMedia( const vlc_ml_media_t *_data );
 
@@ -40,12 +40,10 @@ public:
 
     inline QUrl getUrl() const { return m_url; }
     inline QDateTime getLastPlayedDate() const { return m_lastPlayedDate; }
-    inline MLItemId getId() const { return m_id; }
 
     MLRecentMedia *clone() const;
 
 private:
-    MLItemId m_id;
     QUrl m_url;
     QDateTime m_lastPlayedDate;
 };
diff --git a/modules/gui/qt/medialibrary/mlurlmodel.cpp b/modules/gui/qt/medialibrary/mlurlmodel.cpp
index dc199ed657..268f96b967 100644
--- a/modules/gui/qt/medialibrary/mlurlmodel.cpp
+++ b/modules/gui/qt/medialibrary/mlurlmodel.cpp
@@ -97,7 +97,7 @@ void MLUrlModel::onVlcMlEvent(const MLEvent &event)
 }
 
 MLUrl::MLUrl(const vlc_ml_media_t *_data)
-    : m_id( _data->i_id, VLC_ML_PARENT_UNKNOWN )
+    : MLItem( MLItemId( _data->i_id, VLC_ML_PARENT_UNKNOWN ) )
     , m_url( _data->p_files->i_nb_items > 0 ? _data->p_files->p_items[0].psz_mrl : "" )
     , m_lastPlayedDate(
           QDateTime::fromTime_t( _data->i_last_played_date ).toString( QLocale::system().dateFormat( QLocale::ShortFormat ) )
@@ -106,7 +106,7 @@ MLUrl::MLUrl(const vlc_ml_media_t *_data)
 }
 
 MLUrl::MLUrl(const MLUrl &url)
-    : m_id( url.m_id )
+    : MLItem( url.getId() )
     , m_url( url.m_url )
     , m_lastPlayedDate( url.m_lastPlayedDate )
 {
diff --git a/modules/gui/qt/medialibrary/mlurlmodel.hpp b/modules/gui/qt/medialibrary/mlurlmodel.hpp
index ac9e3202ae..4a28aa0f3a 100644
--- a/modules/gui/qt/medialibrary/mlurlmodel.hpp
+++ b/modules/gui/qt/medialibrary/mlurlmodel.hpp
@@ -30,7 +30,7 @@
 #include "mlhelper.hpp"
 #include "mlqmltypes.hpp"
 
-class MLUrl {
+class MLUrl : public MLItem {
 public:
     MLUrl( const vlc_ml_media_t *_data );
 
@@ -38,12 +38,10 @@ public:
 
     QString getUrl() const;
     QString getLastPlayedDate() const;
-    MLItemId getId() const { return m_id; }
 
     MLUrl *clone() const;
 
 private:
-    MLItemId m_id;
     QString m_url;
     QString m_lastPlayedDate;
 };
diff --git a/modules/gui/qt/medialibrary/mlvideo.cpp b/modules/gui/qt/medialibrary/mlvideo.cpp
index a13bafd907..cefb9504d6 100644
--- a/modules/gui/qt/medialibrary/mlvideo.cpp
+++ b/modules/gui/qt/medialibrary/mlvideo.cpp
@@ -76,8 +76,8 @@ unsigned int AudioDescription::getSampleRate() const
 
 MLVideo::MLVideo(vlc_medialibrary_t* ml, const vlc_ml_media_t* data, QObject* parent)
     : QObject( parent )
+    , MLItem( MLItemId( data->i_id, VLC_ML_PARENT_UNKNOWN ) )
     , m_ml( ml )
-    , m_id( data->i_id, VLC_ML_PARENT_UNKNOWN )
     , m_title( QString::fromUtf8( data->psz_title ) )
     , m_thumbnail( QString::fromUtf8( data->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl ) )
     , m_progress( data->f_progress )
@@ -143,8 +143,8 @@ MLVideo::MLVideo(vlc_medialibrary_t* ml, const vlc_ml_media_t* data, QObject* pa
 
 MLVideo::MLVideo(const MLVideo& video, QObject* parent)
     : QObject( parent )
+    , MLItem( video.getId() )
     , m_ml( video.m_ml )
-    , m_id( video.m_id )
     , m_title( video.m_title )
     , m_thumbnail( video.m_thumbnail )
     , m_duration( video.m_duration )
@@ -165,7 +165,7 @@ void MLVideo::onMlEvent( const vlc_ml_event_t* event )
     if ( event->i_type != VLC_ML_EVENT_MEDIA_THUMBNAIL_GENERATED ||
          event->media_thumbnail_generated.i_size != VLC_ML_THUMBNAIL_SMALL )
         return;
-    if ( event->media_thumbnail_generated.p_media->i_id != m_id.id )
+    if ( event->media_thumbnail_generated.p_media->i_id != getId().id )
         return;
     if ( event->media_thumbnail_generated.b_success == false )
     {
@@ -180,11 +180,6 @@ void MLVideo::onMlEvent( const vlc_ml_event_t* event )
     emit onThumbnailChanged( m_thumbnail );
 }
 
-MLItemId MLVideo::getId() const
-{
-    return m_id;
-}
-
 QString MLVideo::getTitle() const
 {
     return m_title;
@@ -196,7 +191,7 @@ QString MLVideo::getThumbnail()
          m_thumbnailStatus == VLC_ML_THUMBNAIL_STATUS_FAILURE )
     {
         m_ml_event_handle.reset( vlc_ml_event_register_callback( m_ml, onMlEvent, this ) );
-        vlc_ml_media_generate_thumbnail( m_ml, m_id.id, VLC_ML_THUMBNAIL_SMALL,
+        vlc_ml_media_generate_thumbnail( m_ml, getId().id, VLC_ML_THUMBNAIL_SMALL,
                                          512, 320, .15 );
     }
 
diff --git a/modules/gui/qt/medialibrary/mlvideo.hpp b/modules/gui/qt/medialibrary/mlvideo.hpp
index 545ffe7614..8041881280 100644
--- a/modules/gui/qt/medialibrary/mlvideo.hpp
+++ b/modules/gui/qt/medialibrary/mlvideo.hpp
@@ -79,7 +79,7 @@ private:
     unsigned int m_sampleRate;
 };
 
-class MLVideo : public QObject
+class MLVideo : public QObject, public MLItem
 {
     Q_OBJECT
 
@@ -101,7 +101,6 @@ class MLVideo : public QObject
 public:
     MLVideo(vlc_medialibrary_t *ml, const vlc_ml_media_t *data, QObject *parent = nullptr);
 
-    MLItemId getId() const;
     QString getTitle() const;
     QString getThumbnail();
     QString getDuration() const;
@@ -127,9 +126,7 @@ private:
     static void onMlEvent( void* data, const vlc_ml_event_t* event );
     void onMlEvent( const vlc_ml_event_t* event );
 
-
     vlc_medialibrary_t* m_ml;
-    MLItemId m_id;
     QString m_title;
     QString m_thumbnail;
     int64_t m_duration;
-- 
2.29.2



More information about the vlc-devel mailing list