Update source/src/templates.cpp
All checks were successful
Build-Test-Publish / build (linux/amd64) (push) Successful in 40s
Build-Test-Publish / build (linux/arm64) (push) Successful in 1m12s

This commit is contained in:
Your Name
2025-08-24 21:48:43 +12:00
parent ebc59c40b2
commit 0735683162

View File

@@ -125,6 +125,14 @@
bool template_source_registry::has_template(const std::string& template_name) bool template_source_registry::has_template(const std::string& template_name)
{ {
// First check if we have it cached
std::filesystem::path cache_dir = get_cache_dir();
std::filesystem::path template_cache_dir = cache_dir / template_name;
if (std::filesystem::exists(template_cache_dir)) {
// We have it cached, so return true
return true;
}
// Check if template exists in registry // Check if template exists in registry
std::string check_url = mRegistry.url + "/exists/" + template_name + ":latest"; std::string check_url = mRegistry.url + "/exists/" + template_name + ":latest";
@@ -143,10 +151,14 @@
file >> json_response; file >> json_response;
file.close(); file.close();
} }
} catch (...) { } catch (const std::exception& e) {
// Failed to parse JSON warning << "Failed to parse JSON response from " << check_url << ": " << e.what() << std::endl;
} }
std::filesystem::remove(temp_file); std::filesystem::remove(temp_file);
} else {
// curl failed - might be network issue or server down
// Check cache as fallback
return std::filesystem::exists(template_cache_dir);
} }
} else { } else {
json_response = get_json_from_url(check_url); json_response = get_json_from_url(check_url);
@@ -156,16 +168,12 @@
return json_response["exists"].get<bool>(); return json_response["exists"].get<bool>();
} }
return false; // If registry check failed but we have cache, use cache
return std::filesystem::exists(template_cache_dir);
} }
template_info template_source_registry::get_template_info(const std::string& template_name) template_info template_source_registry::get_template_info(const std::string& template_name)
{ {
// Check if template exists in registry
if (!has_template(template_name)) {
return template_info();
}
// Get cache directory // Get cache directory
std::filesystem::path cache_dir = get_cache_dir(); std::filesystem::path cache_dir = get_cache_dir();
std::filesystem::path template_cache_dir = cache_dir / template_name; std::filesystem::path template_cache_dir = cache_dir / template_name;
@@ -176,6 +184,14 @@
std::filesystem::create_directories(cache_dir); std::filesystem::create_directories(cache_dir);
} }
// If we have a cached version and can't reach the registry, use the cache
bool have_cache = std::filesystem::exists(template_cache_dir) && std::filesystem::exists(template_json_file);
// Check if template exists (in cache or registry)
if (!has_template(template_name)) {
return template_info();
}
// Get metadata from registry to check version // Get metadata from registry to check version
std::string meta_url = mRegistry.url + "/meta/" + template_name + ":latest"; std::string meta_url = mRegistry.url + "/meta/" + template_name + ":latest";
@@ -204,6 +220,15 @@
} }
if (registry_metadata.is_null()) { if (registry_metadata.is_null()) {
// If we can't get metadata from registry but have cache, use cache
if (have_cache) {
info << "Registry unavailable, using cached template: " << template_name << std::endl;
return template_info(
template_name,
"Registry: " + mRegistry.name + " (cached)",
template_cache_dir
);
}
warning << "Failed to get metadata for template: " << template_name << std::endl; warning << "Failed to get metadata for template: " << template_name << std::endl;
return template_info(); return template_info();
} }