[vlc-devel] [PATCH 5/7] qt: expose parsing completion in network model
Pierre Lamot
pierre at videolabs.io
Mon Oct 21 18:08:57 CEST 2019
---
.../components/mediacenter/mlnetworkdevicemodel.hpp | 1 +
.../qt/components/mediacenter/mlnetworkmediamodel.cpp | 11 +++++++++++
.../qt/components/mediacenter/mlnetworkmediamodel.hpp | 5 +++++
.../mediacenter/mlnetworksourcelistener.cpp | 9 ++++++++-
.../mediacenter/mlnetworksourcelistener.hpp | 5 +++++
5 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/modules/gui/qt/components/mediacenter/mlnetworkdevicemodel.hpp b/modules/gui/qt/components/mediacenter/mlnetworkdevicemodel.hpp
index df142402c7..7867da57bf 100644
--- a/modules/gui/qt/components/mediacenter/mlnetworkdevicemodel.hpp
+++ b/modules/gui/qt/components/mediacenter/mlnetworkdevicemodel.hpp
@@ -112,6 +112,7 @@ private:
void onItemCleared( MediaSourcePtr mediaSource, input_item_node_t* node ) override;
void onItemAdded( MediaSourcePtr mediaSource, input_item_node_t* parent, input_item_node_t *const children[], size_t count ) override;
void onItemRemoved( MediaSourcePtr mediaSource, input_item_node_t *const children[], size_t count ) override;
+ inline void onItemPreparseEnded( MediaSourcePtr, input_item_node_t *, enum input_item_preparse_status ) override {}
void refreshDeviceList(MediaSourcePtr mediaSource, input_item_node_t* const children[], size_t count , bool clear);
diff --git a/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.cpp b/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.cpp
index f1a15d020f..e8f8609187 100644
--- a/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.cpp
+++ b/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.cpp
@@ -259,6 +259,9 @@ bool MLNetworkMediaModel::initializeMediaSources()
vlc_media_tree_Preparse( tree, libvlc, m_treeItem.media.get() );
+ m_parsingPending = true;
+ emit parsingPendingChanged(m_parsingPending);
+
m_listener = std::move( l );
return true;
@@ -319,6 +322,14 @@ void MLNetworkMediaModel::onItemRemoved( MediaSourcePtr,
}
}
+void MLNetworkMediaModel::onItemPreparseEnded(MediaSourcePtr mediaSource, input_item_node_t* node, enum input_item_preparse_status status)
+{
+ QMetaObject::invokeMethod(this, [this]() {
+ m_parsingPending = false;
+ emit parsingPendingChanged(false);
+ });
+}
+
void MLNetworkMediaModel::refreshMediaList( MediaSourcePtr mediaSource,
input_item_node_t* const children[], size_t count,
bool clear )
diff --git a/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.hpp b/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.hpp
index c21f44577e..a1a323b8e2 100644
--- a/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.hpp
+++ b/modules/gui/qt/components/mediacenter/mlnetworkmediamodel.hpp
@@ -93,6 +93,7 @@ public:
Q_PROPERTY(ItemType type READ getType NOTIFY typeChanged)
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)
explicit MLNetworkMediaModel(QObject* parent = nullptr);
@@ -117,6 +118,7 @@ public:
inline ItemType getType() const { return m_type; }
inline bool isIndexed() const { return m_indexed; }
inline bool canBeIndexed() const { return m_canBeIndexed; }
+ inline bool getParsingPending() const { return m_parsingPending; }
Q_INVOKABLE bool addToPlaylist( int index );
Q_INVOKABLE bool addToPlaylist(const QVariantList& itemIdList);
@@ -129,6 +131,7 @@ signals:
void typeChanged();
void isIndexedChanged();
void canBeIndexedChanged();
+ void parsingPendingChanged(bool);
void ctxChanged();
void treeChanged();
@@ -154,6 +157,7 @@ private:
void onItemCleared( MediaSourcePtr mediaSource, input_item_node_t* node ) override;
void onItemAdded( MediaSourcePtr mediaSource, input_item_node_t* parent, input_item_node_t *const children[], size_t count ) override;
void onItemRemoved( MediaSourcePtr mediaSource, input_item_node_t *const children[], size_t count ) override;
+ void onItemPreparseEnded( MediaSourcePtr mediaSource, input_item_node_t* node, enum input_item_preparse_status status ) override;
void refreshMediaList(MediaSourcePtr s, input_item_node_t* const children[], size_t count , bool clear);
@@ -166,6 +170,7 @@ private:
ItemType m_type = ItemType::TYPE_UNKNOWN;
bool m_indexed = false;
bool m_canBeIndexed = false;
+ bool m_parsingPending = false;
std::vector<Item> m_items;
diff --git a/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.cpp b/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.cpp
index c7fcbb618d..7cedf90afa 100644
--- a/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.cpp
+++ b/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.cpp
@@ -14,7 +14,8 @@ MLNetworkSourceListener::MLNetworkSourceListener(MediaSourcePtr s, SourceListene
static const vlc_media_tree_callbacks cbs {
&MLNetworkSourceListener::onItemCleared,
&MLNetworkSourceListener::onItemAdded,
- &MLNetworkSourceListener::onItemRemoved
+ &MLNetworkSourceListener::onItemRemoved,
+ &MLNetworkSourceListener::onItemPreparseEnded
};
auto l = vlc_media_tree_AddListener( s->tree, &cbs, this, true );
if ( l == nullptr )
@@ -49,3 +50,9 @@ void MLNetworkSourceListener::onItemRemoved( vlc_media_tree_t *, input_item_node
auto* self = static_cast<MLNetworkSourceListener*>( userdata );
self->cb->onItemRemoved( self->source, children, count );
}
+
+void MLNetworkSourceListener::onItemPreparseEnded(vlc_media_tree_t *, input_item_node_t * node, enum input_item_preparse_status status, void *userdata)
+{
+ auto* self = static_cast<MLNetworkSourceListener*>( userdata );
+ self->cb->onItemPreparseEnded( self->source, node, status );
+}
diff --git a/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.hpp b/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.hpp
index 210b91d76a..ca56d832b8 100644
--- a/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.hpp
+++ b/modules/gui/qt/components/mediacenter/mlnetworksourcelistener.hpp
@@ -50,6 +50,7 @@ public:
virtual void onItemCleared( MediaSourcePtr mediaSource, input_item_node_t* node ) = 0;
virtual void onItemAdded( MediaSourcePtr mediaSource, input_item_node_t* parent, input_item_node_t *const children[], size_t count ) = 0;
virtual void onItemRemoved( MediaSourcePtr mediaSource, input_item_node_t *const children[], size_t count ) = 0;
+ virtual void onItemPreparseEnded( MediaSourcePtr mediaSource, input_item_node_t* node, enum input_item_preparse_status status ) = 0;
};
public:
@@ -71,6 +72,10 @@ public:
input_item_node_t *const children[], size_t count,
void *userdata );
+ static void onItemPreparseEnded( vlc_media_tree_t *tree, input_item_node_t *node,
+ enum input_item_preparse_status status,
+ void *userdata );
+
MediaSourcePtr source;
ListenerPtr listener = nullptr;
SourceListenerCb *cb = nullptr;
--
2.17.1
More information about the vlc-devel
mailing list