diff --git a/repertory/repertory/src/ui/handlers.cpp b/repertory/repertory/src/ui/handlers.cpp index c0ea8473..416ad514 100644 --- a/repertory/repertory/src/ui/handlers.cpp +++ b/repertory/repertory/src/ui/handlers.cpp @@ -144,7 +144,7 @@ void handlers::handle_get_mount(auto &&req, auto &&res) const { auto prov = provider_type_from_string(req.get_param_value("type")); - auto lines = handlers::read_process(prov, req.get_param_value("name"), "-dc"); + auto lines = launch_process(prov, req.get_param_value("name"), "-dc"); if (lines.at(0U) != "0") { throw utils::error::create_exception(function_name, { @@ -238,7 +238,7 @@ void handlers::handle_get_mount_status(auto &&req, auto &&res) const { }); } - auto lines = handlers::read_process(prov, name, "-status"); + auto lines = launch_process(prov, name, "-status"); nlohmann::json result( nlohmann::json::parse(utils::string::join(lines, '\n')).at(status_name)); @@ -260,9 +260,9 @@ void handlers::handle_post_mount(auto &&req, auto &&res) const { auto unmount = utils::string::to_bool(req.get_param_value("unmount")); if (unmount) { - read_process(prov, name, "-unmount"); + launch_process(prov, name, "-unmount"); } else { - read_process(prov, name, fmt::format(R"("{}")", location)); + launch_process(prov, name, fmt::format(R"("{}")", location), true); } res.status = http_error_codes::ok; @@ -275,16 +275,16 @@ void handlers::handle_put_set_value_by_name(auto &&req, auto &&res) { auto value = req.get_param_value("value"); #if defined(_WIN32) - read_process(prov, name, fmt::format(R"(-set {} "{}")", key, value)); + launch_process(prov, name, fmt::format(R"(-set {} "{}")", key, value)); #else //! defined(_WIN32) - read_process(prov, name, fmt::format("-set {} '{}'", key, value)); + launch_process(prov, name, fmt::format("-set {} '{}'", key, value)); #endif // defined(_WIN32) res.status = http_error_codes::ok; } -auto handlers::read_process(provider_type prov, std::string_view name, - std::string_view command) const +auto handlers::launch_process(provider_type prov, std::string_view name, + std::string_view command, bool background) const -> std::vector { REPERTORY_USES_FUNCTION_NAME(); @@ -319,6 +319,10 @@ auto handlers::read_process(provider_type prov, std::string_view name, auto cmd_line = fmt::format(R"({} {} {})", repertory_binary_, str_type, command); + if (background) { + return ""; + } + auto *pipe = popen(cmd_line.c_str(), "r"); if (pipe == nullptr) { throw utils::error::create_exception(function_name,