From 21bc527efb8741652b0aaf33a944e95f48dc82a1 Mon Sep 17 00:00:00 2001 From: Pierre Lamot <pierre@videolabs.io> Date: Mon, 22 Nov 2021 10:13:26 +0100 Subject: [PATCH] qt: fetch medialib media from url on ML thread --- modules/gui/qt/medialibrary/mlurlmodel.cpp | 32 ++++++++++++++++------ 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/modules/gui/qt/medialibrary/mlurlmodel.cpp b/modules/gui/qt/medialibrary/mlurlmodel.cpp index 59fc45a4d6e4..1f3058d3a731 100644 --- a/modules/gui/qt/medialibrary/mlurlmodel.cpp +++ b/modules/gui/qt/medialibrary/mlurlmodel.cpp @@ -55,14 +55,30 @@ QHash<int, QByteArray> MLUrlModel::roleNames() const void MLUrlModel::addAndPlay( const QString &url ) { - ml_unique_ptr<vlc_ml_media_t> s{vlc_ml_get_media_by_mrl( m_ml, qtu( url ))}; - if (!s) - s.reset(vlc_ml_new_stream( m_ml, qtu( url ) )); - if (!s) - return; - MLItemId itemId( s->i_id, VLC_ML_PARENT_UNKNOWN ); - m_mediaLib->addAndPlay(itemId); - emit resetRequested(); + struct Ctx{ + bool succeed = false; + MLItemId itemId; + }; + m_mediaLib->runOnMLThread<Ctx>(this, + //ML thread + [url](vlc_medialibrary_t* ml, Ctx& ctx){ + + ml_unique_ptr<vlc_ml_media_t> s{vlc_ml_get_media_by_mrl( ml, qtu( url ))}; + if (!s) + s.reset(vlc_ml_new_stream( ml, qtu( url ) )); + if (!s) + return; + ctx.succeed = true; + ctx.itemId = MLItemId( s->i_id, VLC_ML_PARENT_UNKNOWN ); + }, + //UI Thread + [this](quint64, Ctx& ctx){ + if (!ctx.succeed) + return; + + m_mediaLib->addAndPlay(ctx.itemId); + emit resetRequested(); + }); } vlc_ml_sorting_criteria_t MLUrlModel::roleToCriteria(int role) const -- GitLab