ui main fixes
Some checks failed
Blockstorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory/pipeline/head There was a failure building this commit

This commit is contained in:
2025-09-15 12:48:41 -05:00
parent a54f928455
commit c82ec168a1
2 changed files with 6 additions and 150 deletions

View File

@@ -23,7 +23,7 @@
#define REPERTORY_INCLUDE_UI_MAIN_HPP_
namespace repertory::ui {
[[nodiscard]] auto ui_main(const std::vector<const char *> &args) -> int
[[nodiscard]] auto ui_main(const std::vector<const char *> &args) -> int;
} // namespace repertory::ui
#endif // REPERTORY_INCLUDE_UI_MAIN_HPP_

View File

@@ -21,12 +21,15 @@
*/
#include "ui/ui_main.hpp"
#include "cli/actions.hpp"
#include "initialize.hpp"
#include "types/repertory.hpp"
#include "ui/mgmt_app_config.hpp"
#include "ui/ui_server.hpp"
#include "utils/cli_utils.hpp"
#include "utils/error_utils.hpp"
#include "utils/file.hpp"
#include "utils/path.hpp"
namespace repertory::ui {
[[nodiscard]] auto ui_main(const std::vector<const char *> &args) -> int {
@@ -89,6 +92,7 @@ namespace repertory::ui {
#if defined(_WIN32)
server server(&config);
run_ui(&server);
return 0;
#else // !defined(_WIN32)
repertory::project_cleanup();
@@ -108,152 +112,4 @@ namespace repertory::ui {
});
#endif // defined(_WIN32)
}
} // namespace repertory
using namespace repertory;
auto main(int argc, char **argv) -> int {
#if defined(PROJECT_ENABLE_BACKWARD_CPP)
static backward::SignalHandling sh;
#endif // defined(PROJECT_ENABLE_BACKWARD_CPP)
if (not repertory::project_initialize()) {
repertory::project_cleanup();
return -1;
}
std::vector<const char *> args;
{
auto args_span = std::span(argv, static_cast<std::size_t>(argc));
std::ranges::copy(args_span, std::back_inserter(args));
}
int ret{0};
if (argc == 1) {
#if defined(__APPLE__)
args.push_back("-ui");
#else // !defined(__APPLE__)
args.push_back("-h");
#endif // defined(__APPLE__)
}
if (utils::cli::has_option(args, utils::cli::options::help_option)) {
cli::actions::help<repertory_drive>(args);
} else if (utils::cli::has_option(args,
utils::cli::options::version_option)) {
cli::actions::version<repertory_drive>(args);
} else if (utils::cli::has_option(args, utils::cli::options::ui_option)) {
ret = ui_main(args);
} else {
auto prov = utils::cli::get_provider_type_from_args(args);
std::string data_directory;
auto res = utils::cli::parse_string_option(
args, utils::cli::options::data_directory_option, data_directory);
std::string password;
res = (res == exit_code::success)
? utils::cli::parse_string_option(
args, utils::cli::options::password_option, password)
: res;
std::string user;
res = (res == exit_code::success)
? utils::cli::parse_string_option(
args, utils::cli::options::user_option, user)
: res;
std::string remote_host;
std::uint16_t remote_port{};
std::string unique_id;
if (res == exit_code::success) {
if (prov == provider_type::remote) {
std::string data;
res = utils::cli::parse_string_option(
args, utils::cli::options::remote_mount_option, data);
if (res == exit_code::success) {
const auto parts = utils::string::split(data, ':', false);
if (parts.size() != 2) {
std::cerr << "Invalid syntax for host/port '-rm "
"host:port,--remote_mount host:port'"
<< std::endl;
res = exit_code::invalid_syntax;
} else {
unique_id = parts.at(0U) + ':' + parts.at(1U);
remote_host = parts.at(0U);
try {
remote_port = utils::string::to_uint16(parts.at(1U));
data_directory =
data_directory.empty()
? utils::path::combine(
app_config::default_data_directory(prov),
{
utils::string::replace_copy(unique_id, ':',
'_'),
})
: utils::path::absolute(data_directory);
} catch (const std::exception &e) {
std::cerr << (e.what() == nullptr ? "Unable to parse port"
: e.what())
<< std::endl;
res = exit_code::invalid_syntax;
}
}
}
} else {
std::string data;
res = utils::cli::parse_string_option(
args, utils::cli::options::name_option, data);
if (res == exit_code::success) {
unique_id = utils::string::trim(data);
if (unique_id.empty()) {
std::cerr << "Configuration name for '"
<< app_config::get_provider_display_name(prov)
<< "' was not provided" << std::endl;
res = exit_code::invalid_syntax;
}
}
if (res == exit_code::success) {
data_directory =
data_directory.empty()
? utils::path::combine(
app_config::default_data_directory(prov), {unique_id})
: utils::path::absolute(data_directory);
}
}
}
int mount_result{};
if (res == exit_code::success) {
res = exit_code::option_not_found;
for (std::size_t idx = 0U;
(res == exit_code::option_not_found) &&
(idx < utils::cli::options::option_list.size());
idx++) {
try {
res = cli::actions::perform_action(
utils::cli::options::option_list[idx], args, data_directory, prov,
unique_id, user, password);
} catch (const std::exception &ex) {
res = exit_code::exception;
} catch (...) {
res = exit_code::exception;
}
}
if (res == exit_code::option_not_found) {
res = cli::actions::mount(args, data_directory, mount_result, prov,
remote_host, remote_port, unique_id);
}
}
ret = ((res == exit_code::mount_result) ? mount_result
: static_cast<std::int32_t>(res));
}
repertory::project_cleanup();
return ret;
}
}
} // namespace repertory::ui