diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2024-05-02 15:07:28 +0200 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2024-05-06 05:38:05 +0000 |
commit | d76082da598667a7555e737340ea12153f277b3c (patch) | |
tree | 32a8754ae7714f62bf68827b10fb4a85def8b1f2 /src/plugins/lua | |
parent | e2612705b157b4b4515fa30d48601769d7d8efe5 (diff) |
Lua: Make FilePath:searchInPath async
Change-Id: Ida94856c26bab38d95753fb4d5475d57e3315212
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/lua')
-rw-r--r-- | src/plugins/lua/bindings/utils.cpp | 67 | ||||
-rw-r--r-- | src/plugins/lua/meta/utils.lua | 2 |
2 files changed, 41 insertions, 28 deletions
diff --git a/src/plugins/lua/bindings/utils.cpp b/src/plugins/lua/bindings/utils.cpp index 970eef3440c..d8f860cc68a 100644 --- a/src/plugins/lua/bindings/utils.cpp +++ b/src/plugins/lua/bindings/utils.cpp @@ -34,40 +34,52 @@ void addUtilsModule() timer->start(); }); - auto dirEntries_cb = [&futureSync]( - const FilePath &p, - const sol::table &options, - const sol::function &cb) { - const QStringList nameFilters = options.get_or<QStringList>("nameFilters", {}); - QDir::Filters fileFilters - = (QDir::Filters) options.get_or<int>("fileFilters", QDir::NoFilter); - QDirIterator::IteratorFlags flags - = (QDirIterator::IteratorFlags) - options.get_or<int>("flags", QDirIterator::NoIteratorFlags); - - FileFilter filter(nameFilters, fileFilters, flags); - - QFuture<FilePath> future = Utils::asyncRun([p, filter](QPromise<FilePath> &promise) { - p.iterateDirectory( - [&promise](const FilePath &item) { - if (promise.isCanceled()) - return IterationPolicy::Stop; - - promise.addResult(item); - return IterationPolicy::Continue; - }, - filter); - }); + auto dirEntries_cb = + [&futureSync](const FilePath &p, const sol::table &options, const sol::function &cb) { + const QStringList nameFilters = options.get_or<QStringList>("nameFilters", {}); + QDir::Filters fileFilters + = (QDir::Filters) options.get_or<int>("fileFilters", QDir::NoFilter); + QDirIterator::IteratorFlags flags + = (QDirIterator::IteratorFlags) + options.get_or<int>("flags", QDirIterator::NoIteratorFlags); + + FileFilter filter(nameFilters, fileFilters, flags); + + QFuture<FilePath> future = Utils::asyncRun( + [p, filter](QPromise<FilePath> &promise) { + p.iterateDirectory( + [&promise](const FilePath &item) { + if (promise.isCanceled()) + return IterationPolicy::Stop; + + promise.addResult(item); + return IterationPolicy::Continue; + }, + filter); + }); + + futureSync.addFuture<FilePath>(future); + + Utils::onFinished<FilePath>( + future, &LuaEngine::instance(), [cb](const QFuture<FilePath> &future) { + cb(future.results()); + }); + }; + + auto searchInPath_cb = [&futureSync](const FilePath &p, const sol::function &cb) { + QFuture<FilePath> future = Utils::asyncRun( + [p](QPromise<FilePath> &promise) { promise.addResult(p.searchInPath()); }); futureSync.addFuture<FilePath>(future); Utils::onFinished<FilePath>( future, &LuaEngine::instance(), [cb](const QFuture<FilePath> &future) { - cb(future.results()); + cb(future.result()); }); }; utils.set_function("__dirEntries_cb__", dirEntries_cb); + utils.set_function("__searchInPath_cb__", searchInPath_cb); sol::function wrap = async["wrap"].get<sol::function>(); @@ -96,8 +108,6 @@ void addUtilsModule() &FilePath::toUserOutput, "fromUserInput", &FilePath::fromUserInput, - "searchInPath", - [](const FilePath &self) { return self.searchInPath(); }, "exists", &FilePath::exists, "resolveSymlinks", @@ -124,6 +134,9 @@ void addUtilsModule() utils["FilePath"]["dirEntries_cb"] = utils["__dirEntries_cb__"]; utils["FilePath"]["dirEntries"] = wrap(utils["__dirEntries_cb__"]); + utils["FilePath"]["searchInPath_cb"] = utils["__searchInPath_cb__"]; + utils["FilePath"]["searchInPath"] = wrap(utils["__searchInPath_cb__"]); + return utils; }); } diff --git a/src/plugins/lua/meta/utils.lua b/src/plugins/lua/meta/utils.lua index 01d291c5789..083b87adc10 100644 --- a/src/plugins/lua/meta/utils.lua +++ b/src/plugins/lua/meta/utils.lua @@ -20,7 +20,7 @@ utils.FilePath = {} function utils.FilePath.fromUserInput(path) end ---@return FilePath The new absolute path ----Searches for the path inside the PATH environment variable +---Searches for the path inside the PATH environment variable. Call `a.wait` on the returned value to get the result. function utils.FilePath:searchInPath() end ---@class (exact) DirEntriesOptions |