[vlc-devel] [PATCH] qt: medialib: reload asynchronously

Romain Vimont rom1v at videolabs.io
Thu Feb 18 16:07:19 UTC 2021


On Qt view initialization completed, a medialibrary "reload" is
requested.

This call, which could take several seconds in practice (especially when
the medialibrary is initialized for the first time), was issued on
the UI thread, freezing the whole interface on starting.

Execute it from the Qt medialibrary thread pool instead.
---
 modules/gui/qt/maininterface/qml/MainDisplay.qml | 1 +
 modules/gui/qt/medialibrary/medialib.cpp         | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/modules/gui/qt/maininterface/qml/MainDisplay.qml b/modules/gui/qt/maininterface/qml/MainDisplay.qml
index 95ffed07c0..1fc3f2fdaa 100644
--- a/modules/gui/qt/maininterface/qml/MainDisplay.qml
+++ b/modules/gui/qt/maininterface/qml/MainDisplay.qml
@@ -47,6 +47,7 @@ Widgets.NavigableFocusScope {
     Component.onCompleted: {
         loadView()
         if (medialib)
+            // asynchronous call
             medialib.reload()
     }
 
diff --git a/modules/gui/qt/medialibrary/medialib.cpp b/modules/gui/qt/medialibrary/medialib.cpp
index fa5feeac8e..bc5878ae0c 100644
--- a/modules/gui/qt/medialibrary/medialib.cpp
+++ b/modules/gui/qt/medialibrary/medialib.cpp
@@ -225,7 +225,9 @@ void MediaLib::insertIntoPlaylist(const size_t index, const QVariantList &itemId
 
 void MediaLib::reload()
 {
-    vlc_ml_reload_folder( vlcMl(), nullptr );
+    m_threadPool.start([ml = m_ml] {
+        vlc_ml_reload_folder(ml, nullptr);
+    });
 }
 
 vlc_medialibrary_t* MediaLib::vlcMl()
-- 
2.30.0



More information about the vlc-devel mailing list