diff --git a/loader/include/Geode/utils/Task.hpp b/loader/include/Geode/utils/Task.hpp index cbc43eff..f82971ec 100644 --- a/loader/include/Geode/utils/Task.hpp +++ b/loader/include/Geode/utils/Task.hpp @@ -4,6 +4,7 @@ #include "MiniFunction.hpp" #include "../loader/Event.hpp" #include "../loader/Loader.hpp" +#include <mutex> namespace geode { /** diff --git a/loader/include/Geode/utils/file.hpp b/loader/include/Geode/utils/file.hpp index 2976c730..2c3e9503 100644 --- a/loader/include/Geode/utils/file.hpp +++ b/loader/include/Geode/utils/file.hpp @@ -3,6 +3,7 @@ #include "Result.hpp" #include "general.hpp" #include "../loader/Event.hpp" +#include "Task.hpp" #include <matjson.hpp> #include <Geode/DefaultInclude.hpp> @@ -257,7 +258,7 @@ namespace geode::utils::file { * @param mode Type of file selection prompt to show * @param options Picker options */ - [[deprecated("Use overload with callback instead, this will be removed in a later version.")]] + [[deprecated("Use pick() instead, this will be removed in a later version.")]] GEODE_DLL Result<ghc::filesystem::path> pickFile(PickMode mode, FilePickOptions const& options); GEODE_DLL void pickFile( @@ -265,13 +266,14 @@ namespace geode::utils::file { utils::MiniFunction<void(ghc::filesystem::path)> callback, utils::MiniFunction<void()> failed = {} ); + GEODE_DLL Task<Result<ghc::filesystem::path>> pick(PickMode mode, FilePickOptions const& options); /** * Prompt the user to pick a bunch of files for opening using the system's file system picker * @deprecated Will not work on Android, use the callback version instead * @param options Picker options */ - [[deprecated("Use overload with callback instead, this will be removed in a later version.")]] + [[deprecated("Use pickMany() instead, this will be removed in a later version.")]] GEODE_DLL Result<std::vector<ghc::filesystem::path>> pickFiles(FilePickOptions const& options); GEODE_DLL void pickFiles( @@ -279,6 +281,7 @@ namespace geode::utils::file { utils::MiniFunction<void(std::vector<ghc::filesystem::path>)> callback, utils::MiniFunction<void()> failed = {} ); + GEODE_DLL Task<Result<std::vector<ghc::filesystem::path>>> pickMany(FilePickOptions const& options); class GEODE_DLL FileWatchEvent : public Event { protected: diff --git a/loader/src/platform/windows/util.cpp b/loader/src/platform/windows/util.cpp index 11b0cddd..d0126716 100644 --- a/loader/src/platform/windows/util.cpp +++ b/loader/src/platform/windows/util.cpp @@ -121,7 +121,7 @@ Result<ghc::filesystem::path> utils::file::pickFile( return Ok(path); } -GEODE_DLL void file::pickFile( +void file::pickFile( PickMode mode, FilePickOptions const& options, MiniFunction<void(ghc::filesystem::path)> callback, MiniFunction<void()> failed @@ -134,16 +134,19 @@ GEODE_DLL void file::pickFile( failed(); } } +Task<Result<ghc::filesystem::path>> file::pick(PickMode mode, FilePickOptions const& options) { + return Task<Result<ghc::filesystem::path>>::immediate(std::move(file::pickFile(mode, options))); +} Result<std::vector<ghc::filesystem::path>> utils::file::pickFiles( file::FilePickOptions const& options ) { std::vector<ghc::filesystem::path> paths; - GEODE_UNWRAP(nfdPick(NFDMode::OpenFolder, options, &paths)); + GEODE_UNWRAP(nfdPick(NFDMode::OpenFiles, options, &paths)); return Ok(paths); } -GEODE_DLL void file::pickFiles( +void file::pickFiles( FilePickOptions const& options, MiniFunction<void(std::vector<ghc::filesystem::path>)> callback, MiniFunction<void()> failed @@ -156,6 +159,9 @@ GEODE_DLL void file::pickFiles( failed(); } } +Task<Result<std::vector<ghc::filesystem::path>>> file::pickMany(FilePickOptions const& options) { + return Task<Result<std::vector<ghc::filesystem::path>>>::immediate(std::move(file::pickFiles(options))); +} void utils::web::openLinkInBrowser(std::string const& url) { ShellExecuteA(0, 0, url.c_str(), 0, 0, SW_SHOW);