From 37ca295f417eeb2a2914d6470401c0b54952e698 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 20 Feb 2025 18:26:44 -0600 Subject: [PATCH] throw error on invalid id name --- .gitignore | 1 + monitarr/libmonitarr/src/actions.cpp | 43 ++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 486ec65..921d39a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ scripts/cleanup.sh support/Dockerfile version.cpp version.rc +monitarr.json diff --git a/monitarr/libmonitarr/src/actions.cpp b/monitarr/libmonitarr/src/actions.cpp index b5d399d..90b9cc6 100644 --- a/monitarr/libmonitarr/src/actions.cpp +++ b/monitarr/libmonitarr/src/actions.cpp @@ -164,15 +164,40 @@ auto load_config(std::string &cfg_file) -> app_config { cfg.save(cfg_file); } - auto iter = std::ranges::adjacent_find( - cfg.server_list, - [](auto &&srv1, auto &&srv2) -> bool { return srv1.id == srv2.id; }); - if (iter != cfg.server_list.end()) { - throw utils::error::create_exception(function_name, - { - "duplicate server found", - iter->id, - }); + if (cfg.server_list.empty()) { + return cfg; + } + + { + auto iter = std::ranges::adjacent_find( + cfg.server_list, + [](auto &&srv1, auto &&srv2) -> bool { return srv1.id == srv2.id; }); + if (iter != cfg.server_list.end()) { + throw utils::error::create_exception(function_name, + { + "duplicate server found", + iter->id, + }); + } + } + + { + constexpr const auto id_names{ + std::array{"lidarr", "radarr", "sonarr"}, + }; + + auto iter = std::ranges::find_first_of( + cfg.server_list, id_names, [](auto &&data, auto &&name) -> bool { + return utils::string::contains(data.id, name); + }); + if (iter == cfg.server_list.end()) { + throw utils::error::create_exception( + function_name, + { + "server id must contain one of the following values", + fmt::format("{}", id_names), + }); + } } return cfg;