[vlc-devel] [PATCH 06/16] qt: expose model count in network models

Pierre Lamot pierre at videolabs.io
Wed May 27 17:06:47 CEST 2020


---
 modules/gui/qt/network/networkdevicemodel.cpp | 13 +++++++++++--
 modules/gui/qt/network/networkdevicemodel.hpp |  5 ++++-
 modules/gui/qt/network/networkmediamodel.cpp  |  8 ++++++++
 modules/gui/qt/network/networkmediamodel.hpp  |  4 +++-
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/modules/gui/qt/network/networkdevicemodel.cpp b/modules/gui/qt/network/networkdevicemodel.cpp
index ecc18b8d79..0501d2b95b 100644
--- a/modules/gui/qt/network/networkdevicemodel.cpp
+++ b/modules/gui/qt/network/networkdevicemodel.cpp
@@ -89,8 +89,7 @@ int NetworkDeviceModel::rowCount(const QModelIndex& parent) const
 {
     if ( parent.isValid() )
         return 0;
-    assert( m_items.size() < INT32_MAX );
-    return static_cast<int>( m_items.size() );
+    return getCount();
 }
 
 
@@ -115,6 +114,12 @@ void NetworkDeviceModel::setSdSource(SDCatType s)
     emit sdSourceChanged();
 }
 
+int NetworkDeviceModel::getCount() const
+{
+    assert( m_items.size() < INT32_MAX );
+    return static_cast<int>( m_items.size() );
+}
+
 
 bool NetworkDeviceModel::addToPlaylist(int index)
 {
@@ -180,6 +185,7 @@ bool NetworkDeviceModel::initializeMediaSources()
         beginResetModel();
         m_items.clear();
         endResetModel();
+        emit countChanged();
     }
 
     auto provider = vlc_media_source_provider_Get( libvlc );
@@ -264,6 +270,7 @@ void NetworkDeviceModel::onItemRemoved(MediaSourcePtr mediaSource, input_item_no
             beginRemoveRows({}, idx, idx );
             m_items.erase( it );
             endRemoveRows();
+            emit countChanged();
         }
     }, Qt::QueuedConnection);
 }
@@ -278,6 +285,7 @@ void NetworkDeviceModel::refreshDeviceList( MediaSourcePtr mediaSource, input_it
                 return value.mediaSource == mediaSource;
             }), m_items.end());
             endResetModel();
+            emit countChanged();
         });
     }
 
@@ -321,6 +329,7 @@ void NetworkDeviceModel::refreshDeviceList( MediaSourcePtr mediaSource, input_it
             beginInsertRows( {}, pos, pos );
             m_items.insert( it, std::move( item ) );
             endInsertRows();
+            emit countChanged();
         }
     }, Qt::QueuedConnection);
 }
diff --git a/modules/gui/qt/network/networkdevicemodel.hpp b/modules/gui/qt/network/networkdevicemodel.hpp
index e53c6a96d6..8706f7ba0f 100644
--- a/modules/gui/qt/network/networkdevicemodel.hpp
+++ b/modules/gui/qt/network/networkdevicemodel.hpp
@@ -65,7 +65,7 @@ public:
 
     Q_PROPERTY(QmlMainContext* ctx READ getCtx WRITE setCtx NOTIFY ctxChanged)
     Q_PROPERTY(SDCatType sd_source READ getSdSource WRITE setSdSource NOTIFY sdSourceChanged)
-
+    Q_PROPERTY(int count READ getCount NOTIFY countChanged)
 
 public:
     NetworkDeviceModel( QObject* parent = nullptr );
@@ -80,6 +80,8 @@ public:
     inline QmlMainContext* getCtx() { return m_ctx; }
     inline SDCatType getSdSource() { return m_sdSource; }
 
+    int getCount() const;
+
     Q_INVOKABLE bool addToPlaylist( int index );
     Q_INVOKABLE bool addToPlaylist(const QVariantList& itemIdList);
     Q_INVOKABLE bool addAndPlay( int index );
@@ -88,6 +90,7 @@ public:
 signals:
     void ctxChanged();
     void sdSourceChanged();
+    void countChanged();
 
 private:
     using MediaSourcePtr = vlc_shared_data_ptr_type(vlc_media_source_t,
diff --git a/modules/gui/qt/network/networkmediamodel.cpp b/modules/gui/qt/network/networkmediamodel.cpp
index 1bfa2cfefc..fd0a9f76ce 100644
--- a/modules/gui/qt/network/networkmediamodel.cpp
+++ b/modules/gui/qt/network/networkmediamodel.cpp
@@ -110,6 +110,11 @@ int NetworkMediaModel::rowCount(const QModelIndex& parent) const
 {
     if ( parent.isValid() )
         return 0;
+    return getCount();
+}
+
+int NetworkMediaModel::getCount() const
+{
     assert( m_items.size() < INT32_MAX );
     return static_cast<int>( m_items.size() );
 }
@@ -256,6 +261,7 @@ bool NetworkMediaModel::initializeMediaSources()
         beginResetModel();
         m_items.clear();
         endResetModel();
+        emit countChanged();
     }
 
     if (!m_treeItem)
@@ -370,6 +376,7 @@ void NetworkMediaModel::onItemRemoved(MediaSourcePtr, input_item_node_t * node,
             beginRemoveRows({}, idx, idx );
             m_items.erase( it );
             endRemoveRows();
+            emit countChanged();
         }
     }, Qt::QueuedConnection);
 }
@@ -434,6 +441,7 @@ void NetworkMediaModel::refreshMediaList( MediaSourcePtr mediaSource,
         endResetModel();
     else
         endInsertRows();
+    emit countChanged();
 }
 
 bool NetworkMediaModel::canBeIndexed(const QUrl& url , ItemType itemType )
diff --git a/modules/gui/qt/network/networkmediamodel.hpp b/modules/gui/qt/network/networkmediamodel.hpp
index 08c5c64512..13bece16cb 100644
--- a/modules/gui/qt/network/networkmediamodel.hpp
+++ b/modules/gui/qt/network/networkmediamodel.hpp
@@ -96,7 +96,7 @@ public:
     Q_PROPERTY(bool indexed READ isIndexed WRITE setIndexed NOTIFY isIndexedChanged)
     Q_PROPERTY(bool canBeIndexed READ canBeIndexed NOTIFY canBeIndexedChanged)
     Q_PROPERTY(bool parsingPending READ getParsingPending NOTIFY parsingPendingChanged)
-
+    Q_PROPERTY(int count READ getCount NOTIFY countChanged)
 
     explicit NetworkMediaModel(QObject* parent = nullptr);
     NetworkMediaModel( QmlMainContext* ctx, QString parentMrl, QObject* parent = nullptr );
@@ -122,6 +122,7 @@ public:
     inline bool isIndexed() const { return m_indexed; }
     inline bool canBeIndexed() const { return m_canBeIndexed; }
     inline bool getParsingPending() const { return m_parsingPending; }
+    int getCount() const;
 
     Q_INVOKABLE bool addToPlaylist( int index );
     Q_INVOKABLE bool addToPlaylist(const QVariantList& itemIdList);
@@ -135,6 +136,7 @@ signals:
     void isIndexedChanged();
     void canBeIndexedChanged();
     void parsingPendingChanged(bool);
+    void countChanged();
 
     void ctxChanged();
     void treeChanged();
-- 
2.25.1



More information about the vlc-devel mailing list