refactor
Some checks failed
Blockstorage/repertory/pipeline/head There was a failure building this commit

This commit is contained in:
2025-09-15 14:46:10 -05:00
parent 8f2968d695
commit e57f950f82
2 changed files with 82 additions and 73 deletions

View File

@@ -77,6 +77,8 @@ private:
mutable std::mutex test_mtx_; mutable std::mutex test_mtx_;
private: private:
void auto_start_mounts();
[[nodiscard]] auto data_directory_exists(provider_type prov, [[nodiscard]] auto data_directory_exists(provider_type prov,
std::string_view name) const -> bool; std::string_view name) const -> bool;
@@ -134,6 +136,8 @@ private:
void notify_and_unlock(unique_mutex_lock &nonce_lock); void notify_and_unlock(unique_mutex_lock &nonce_lock);
void open_ui() const;
void removed_expired_nonces(); void removed_expired_nonces();
void set_key_value(provider_type prov, std::string_view name, void set_key_value(provider_type prov, std::string_view name,

View File

@@ -278,6 +278,57 @@ ui_server::~ui_server() {
E_CONSUMER_RELEASE(); E_CONSUMER_RELEASE();
} }
void ui_server::auto_start_mounts() const {
std::thread([this]() {
for (const auto &[prov, names] : config_->get_auto_start_list()) {
for (const auto &name : names) {
try {
auto location = config_->get_mount_location(prov, name);
if (location.empty()) {
utils::error::raise_error(function_name,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
"location is empty",
}));
} else if (not mount(prov, name, location)) {
utils::error::raise_error(function_name,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
"mount failed",
}));
}
} catch (const std::exception &e) {
utils::error::raise_error(function_name, e,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
}));
} catch (...) {
utils::error::raise_error(function_name, "unknown error",
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
}));
}
}
}
}).join();
}
auto ui_server::data_directory_exists(provider_type prov, auto ui_server::data_directory_exists(provider_type prov,
std::string_view name) const -> bool { std::string_view name) const -> bool {
auto data_dir = utils::path::combine(app_config::get_root_data_directory(), auto data_dir = utils::path::combine(app_config::get_root_data_directory(),
@@ -800,6 +851,29 @@ void ui_server::notify_and_unlock(unique_mutex_lock &nonce_lock) {
nonce_lock.unlock(); nonce_lock.unlock();
} }
void ui_server::open_ui() const {
if (config_->get_launch_only()) {
return;
}
#if defined(_WIN32)
system(fmt::format(
R"(start "Repertory Management Portal" "http://127.0.0.1:{}/ui")",
config_->get_api_port())
.c_str());
#elif defined(__linux__)
system(fmt::format(R"(xdg-open "http://127.0.0.1:{}/ui")",
config_->get_api_port())
.c_str());
#elif defined(__APPLE__)
system(
fmt::format(R"(open "http://127.0.0.1:{}/ui")", config_->get_api_port())
.c_str());
#else
build fails here
#endif
}
void ui_server::removed_expired_nonces() { void ui_server::removed_expired_nonces() {
unique_mutex_lock nonce_lock(nonce_mtx_); unique_mutex_lock nonce_lock(nonce_mtx_);
notify_and_unlock(nonce_lock); notify_and_unlock(nonce_lock);
@@ -860,33 +934,11 @@ void ui_server::start() {
nonce_thread_ = nonce_thread_ =
std::make_unique<std::thread>([this]() { removed_expired_nonces(); }); std::make_unique<std::thread>([this]() { removed_expired_nonces(); });
const auto launch_ui = [this]() {
if (not config_->get_launch_only()) {
#if defined(_WIN32)
system(
fmt::format(
R"(start "Repertory Management Portal" "http://127.0.0.1:{}/ui")",
config_->get_api_port())
.c_str());
#elif defined(__linux__)
system(fmt::format(R"(xdg-open "http://127.0.0.1:{}/ui")",
config_->get_api_port())
.c_str());
#elif defined(__APPLE__)
system(fmt::format(R"(open "http://127.0.0.1:{}/ui")",
config_->get_api_port())
.c_str());
#else
build fails here
#endif
}
};
lock_data ui_lock(provider_type::unknown, "ui"); lock_data ui_lock(provider_type::unknown, "ui");
auto res = ui_lock.grab_lock(1U); auto res = ui_lock.grab_lock(1U);
if (res != lock_result::success) { if (res != lock_result::success) {
notify_and_unlock(nonce_lock); notify_and_unlock(nonce_lock);
launch_ui(); open_ui();
return; return;
} }
@@ -927,58 +979,11 @@ void ui_server::start() {
return; return;
} }
auto_start_mounts();
open_ui();
notify_and_unlock(nonce_lock); notify_and_unlock(nonce_lock);
std::thread([this]() {
for (const auto &[prov, names] : config_->get_auto_start_list()) {
for (const auto &name : names) {
try {
auto location = config_->get_mount_location(prov, name);
if (location.empty()) {
utils::error::raise_error(function_name,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
"location is empty",
}));
} else if (not mount(prov, name, location)) {
utils::error::raise_error(function_name,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
"mount failed",
}));
}
} catch (const std::exception &e) {
utils::error::raise_error(function_name, e,
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
}));
} catch (...) {
utils::error::raise_error(function_name, "unknown error",
utils::error::create_error_message({
"failed to auto-mount",
"provider",
provider_type_to_string(prov),
"name",
name,
}));
}
}
}
}).join();
launch_ui();
server_.listen_after_bind(); server_.listen_after_bind();
} }