MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / recache_release_list

Method recache_release_list

plugin_manager/gitlab_source.cpp:51–129  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51Error GitLabSource::recache_release_list(const String &plugin_name) {
52 {
53 MutexLock lock(cache_mutex);
54 if (release_cache.has(plugin_name)) {
55 auto &cache = release_cache[plugin_name];
56 if (!is_cache_expired(cache.retrieved_time)) {
57 return OK;
58 }
59 }
60 }
61
62 String repo_url = get_repo_url(plugin_name);
63 if (repo_url.is_empty() || !repo_url.contains("gitlab.com")) {
64 return ERR_INVALID_PARAMETER;
65 }
66
67 double now = OS::get_singleton()->get_unix_time();
68 // Extract org and repo from URL
69 String org = repo_url.get_slice("/", 3);
70 String repo = repo_url.get_slice("/", 4);
71
72 Vector<Dictionary> releases;
73 String request_url = gitlab_release_api_url.replace("{0}", org).replace("{1}", repo);
74
75 Vector<uint8_t> response;
76 Error err = gdre::wget_sync(request_url, response, 20);
77 if (err) {
78 return err;
79 }
80
81 String response_str;
82 response_str.append_utf8((const char *)response.ptr(), response.size());
83 Array response_obj = JSON::parse_string(response_str);
84 if (response_obj.is_empty()) {
85 return ERR_PARSE_ERROR;
86 }
87
88 for (int i = 0; i < response_obj.size(); i++) {
89 Dictionary release = response_obj[i];
90 releases.push_back(release);
91 }
92
93 GHReleaseCache cache;
94 cache.retrieved_time = now;
95
96 for (int i = 0; i < releases.size(); i++) {
97 Dictionary release = releases[i];
98 String tag_name = release.get("tag_name", "");
99 int64_t release_id = tag_name.hash(); // GitLab doesn't provide release IDs, so we hash the tag name
100 release["id"] = release_id;
101
102 Dictionary assets_obj = release.get("assets", Dictionary());
103 Array assets_arr = assets_obj.get("links", Array());
104 HashMap<int64_t, Dictionary> asset_map;
105
106 for (int j = 0; j < assets_arr.size(); j++) {
107 Dictionary asset = assets_arr[j];
108 // Convert GitLab asset format to match GitHub's

Callers

nothing calls this directly

Calls 5

push_backMethod · 0.80
containsMethod · 0.45
sizeMethod · 0.45
getMethod · 0.45
hashMethod · 0.45

Tested by

no test coverage detected