create-config option
Some checks failed
Build-Test-Publish / build (linux/amd64) (push) Successful in 36s
Build-Test-Publish / build (linux/arm64) (push) Has been cancelled

This commit is contained in:
j
2025-12-28 12:45:51 +13:00
parent 55f55631aa
commit 82c30f1daa
3 changed files with 47 additions and 21 deletions

View File

@@ -18,7 +18,7 @@ namespace dropshell {
int edit_handler(const CommandContext& ctx); int edit_handler(const CommandContext& ctx);
static std::vector<std::string> edit_name_list={"edit"}; static std::vector<std::string> edit_name_list={"edit","create-config"};
// Static registration // Static registration
struct EditCommandRegister { struct EditCommandRegister {
@@ -87,13 +87,27 @@ bool edit_file(const std::string &file_path, bool has_bb64)
} }
} }
int create_config()
{
if (!gConfig().is_config_set())
{
bool ok = gConfig().save_config(); // save defaults.
info << "Default dropshell.json created." << std::endl;
return (ok ? 0 : 1);
}
else
info << "Existing dropshell.json unchanged." << std::endl;
return 0;
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// edit config // edit config
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
int edit_config() int edit_config()
{ {
if (!gConfig().is_config_set()) create_config();
gConfig().save_config(false); // save defaults.
std::string config_file = localfile::dropshell_json(); std::string config_file = localfile::dropshell_json();
if (!edit_file(config_file, false) || !std::filesystem::exists(config_file)) if (!edit_file(config_file, false) || !std::filesystem::exists(config_file))
@@ -105,8 +119,9 @@ int edit_config()
// Don't save_config after loading - it would rewrite the file the user just edited! // Don't save_config after loading - it would rewrite the file the user just edited!
// The config is already saved by the editor, we just validated it by loading it. // The config is already saved by the editor, we just validated it by loading it.
gConfig().create_aux_directories();
std::cout << "Successfully edited config file at " << config_file << std::endl; info << "Successfully edited config file at " << config_file << std::endl;
return 0; return 0;
} }
@@ -232,7 +247,16 @@ int edit_service_config(const std::string &server, const std::string &service)
int edit_handler(const CommandContext& ctx) { int edit_handler(const CommandContext& ctx) {
// edit dropshell config // edit dropshell config
if (ctx.args.size() < 1) if (ctx.args.size() < 1)
{
if (ctx.command=="create-config")
{
int rval = create_config();
gConfig().create_aux_directories();
return rval;
}
else
return edit_config(); return edit_config();
}
// edit server config // edit server config
if (ctx.args.size() < 2) { if (ctx.args.size() < 2) {

View File

@@ -140,7 +140,7 @@ void _append(std::vector<std::string> & a, const std::vector<std::string> & b) {
a.insert(std::end(a), std::begin(b), std::end(b)); a.insert(std::end(a), std::begin(b), std::end(b));
} }
bool config::save_config(bool create_aux_directories) bool config::save_config()
{ {
std::string config_path = localfile::dropshell_json(); std::string config_path = localfile::dropshell_json();
if (config_path.empty()) if (config_path.empty())
@@ -177,18 +177,6 @@ bool config::save_config(bool create_aux_directories)
config_file << mConfig.dump(4); config_file << mConfig.dump(4);
config_file.close(); config_file.close();
if (create_aux_directories) {
std::vector<std::string> paths;
_append(paths, get_local_template_paths());
_append(paths, get_local_server_definition_paths());
for (auto & p : paths)
if (!std::filesystem::exists(p))
{
std::cout << "Creating directory: " << p << std::endl;
std::filesystem::create_directories(p);
}
}
debug << "Config paths: " << std::endl; debug << "Config paths: " << std::endl;
for (auto [key,value] : mConfig.items()) { for (auto [key,value] : mConfig.items()) {
debug << " " << key << ": " << value << std::endl; debug << " " << key << ": " << value << std::endl;
@@ -197,6 +185,19 @@ bool config::save_config(bool create_aux_directories)
return true; return true;
} }
bool config::create_aux_directories()
{
std::vector<std::string> paths;
_append(paths, get_local_template_paths());
_append(paths, get_local_server_definition_paths());
for (auto & p : paths)
if (!std::filesystem::exists(p))
{
info << "Creating directory: " << p << std::endl;
std::filesystem::create_directories(p);
}
}
bool config::is_config_set() const bool config::is_config_set() const
{ {
return mIsConfigSet; return mIsConfigSet;
@@ -343,13 +344,13 @@ void config::set_server_disabled(const std::string &server_name, bool disabled)
// Add to disabled list if not already there // Add to disabled list if not already there
if (it == disabled_servers.end()) { if (it == disabled_servers.end()) {
disabled_servers.push_back(server_name); disabled_servers.push_back(server_name);
save_config(false); // Save immediately save_config(); // Save immediately
} }
} else { } else {
// Remove from disabled list if present // Remove from disabled list if present
if (it != disabled_servers.end()) { if (it != disabled_servers.end()) {
disabled_servers.erase(it); disabled_servers.erase(it);
save_config(false); // Save immediately save_config(); // Save immediately
} }
} }
} }

View File

@@ -27,7 +27,8 @@ class config {
~config(); ~config();
bool load_config(); bool load_config();
bool save_config(bool create_aux_directories); bool save_config();
bool create_aux_directories();
bool is_config_set() const; bool is_config_set() const;
static bool is_agent_installed(); static bool is_agent_installed();