aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/lua
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2024-05-02 15:07:28 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2024-05-06 05:38:05 +0000
commitd76082da598667a7555e737340ea12153f277b3c (patch)
tree32a8754ae7714f62bf68827b10fb4a85def8b1f2 /src/plugins/lua
parente2612705b157b4b4515fa30d48601769d7d8efe5 (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.cpp67
-rw-r--r--src/plugins/lua/meta/utils.lua2
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