handle nullptr errors

This commit is contained in:
Scott E. Graves 2025-02-19 16:59:05 -06:00
parent 2b72d3150c
commit 6e9d509442
2 changed files with 60 additions and 26 deletions

View File

@ -30,6 +30,7 @@
#include "utils/string.hpp" #include "utils/string.hpp"
#include "utils/unix.hpp" #include "utils/unix.hpp"
#include "utils/windows.hpp" #include "utils/windows.hpp"
#include <optional>
using namespace std::literals::chrono_literals; using namespace std::literals::chrono_literals;
@ -61,9 +62,17 @@ auto get_download(std::uint64_t record_id, const server_cfg &server)
auto response = auto response =
cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {}); cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {});
if (not response) {
utils::error::handle_error(
function_name,
fmt::format("get download request failed|{}|{}|no response",
server.id, server.url, response->status));
return std::nullopt;
}
if (response->status != httplib::StatusCode::OK_200) { if (response->status != httplib::StatusCode::OK_200) {
utils::error::handle_error( utils::error::handle_error(
function_name, fmt::format("check server request failed|{}|{}|{}", function_name, fmt::format("get download request failed|{}|{}|{}",
server.id, server.url, response->status)); server.id, server.url, response->status));
return std::nullopt; return std::nullopt;
} }
@ -101,9 +110,17 @@ auto list_queue(const server_cfg &server) -> int {
auto response = auto response =
cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {}); cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {});
if (not response) {
utils::error::handle_error(
function_name,
fmt::format("list queue request failed|{}|{}|no response", server.id,
server.url, response->status));
return 3;
}
if (response->status != httplib::StatusCode::OK_200) { if (response->status != httplib::StatusCode::OK_200) {
utils::error::handle_error( utils::error::handle_error(
function_name, fmt::format("check server request failed|{}|{}|{}", function_name, fmt::format("list queue request failed|{}|{}|{}",
server.id, server.url, response->status)); server.id, server.url, response->status));
return 3; return 3;
} }
@ -164,46 +181,55 @@ void remove_stalled(std::string_view download_id, std::string_view title,
fmt::format("/api/{}/queue/{}?blocklist=true&skipRedownload=false", fmt::format("/api/{}/queue/{}?blocklist=true&skipRedownload=false",
server.api_version, server.api_version,
utils::string::split(download_id, '/', false).at(1U))); utils::string::split(download_id, '/', false).at(1U)));
if (not response) {
utils::error::handle_error(
function_name,
fmt::format("remove stalled request failed|{}|{}|no response",
server.id, server.url, response->status));
return;
}
if (response->status != httplib::StatusCode::OK_200) { if (response->status != httplib::StatusCode::OK_200) {
utils::error::handle_error( utils::error::handle_error(
function_name, fmt::format("failed to delete download|{}|{}|{}", function_name, fmt::format("remove stalled request failed|{}|{}|{}",
server.id, server.url, response->status)); server.id, server.url, response->status));
return; return;
} }
std::optional<nlohmann::json> data;
if (utils::string::contains("radarr", server.id)) { if (utils::string::contains("radarr", server.id)) {
nlohmann::json data({ data = nlohmann::json({
{"name", "MoviesSearch"}, {"name", "MoviesSearch"},
{"movieIds", {movie_id}}, {"movieIds", {movie_id}},
}); });
} else if (utils::string::contains("sonarr", server.id)) {
response = cli.Post(fmt::format("/api/{}/command", server.api_version), data = nlohmann::json({
data.dump(), "application/json"); {"name", "EpisodeSearch"},
if (response->status != httplib::StatusCode::Created_201) { {"episodeIds", {episode_id}},
utils::error::handle_error(function_name, });
fmt::format("failed to search|{}|{}|{}|{}|{}",
server.id, server.url, title,
movie_id, response->status));
}
return;
} }
if (not utils::string::contains("sonarr", server.id)) { if (not data.has_value()) {
return; return;
} }
nlohmann::json data({
{"name", "EpisodeSearch"},
{"episodeIds", {episode_id}},
});
response = cli.Post(fmt::format("/api/{}/command", server.api_version), response = cli.Post(fmt::format("/api/{}/command", server.api_version),
data.dump(), "application/json"); data->dump(), "application/json");
if (response->status != httplib::StatusCode::Created_201) { if (not response) {
utils::error::handle_error(function_name, utils::error::handle_error(
fmt::format("failed to search|{}|{}|{}|{}|{}", function_name, fmt::format("failed to search|{}|{}|{}|{}|no response",
server.id, server.url, title, server.id, server.url, title, movie_id));
episode_id, response->status)); return;
} }
if (response->status == httplib::StatusCode::Created_201) {
return;
}
utils::error::handle_error(function_name,
fmt::format("failed to search|{}|{}|{}|{}|{}",
server.id, server.url, title, movie_id,
response->status));
} }
} // namespace monitarr } // namespace monitarr

View File

@ -49,6 +49,14 @@ static void check_server(const server_cfg &server, data_db &state_db) {
auto response = auto response =
cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {}); cli.Get(fmt::format("/api/{}/queue", server.api_version), params, {});
if (not response) {
utils::error::handle_error(
function_name,
fmt::format("check server request failed|{}|{}|no response",
server.id, server.url, response->status));
break;
}
if (response->status != httplib::StatusCode::OK_200) { if (response->status != httplib::StatusCode::OK_200) {
utils::error::handle_error( utils::error::handle_error(
function_name, fmt::format("check server request failed|{}|{}|{}", function_name, fmt::format("check server request failed|{}|{}|{}",