From 50fb5f9da6abfcb2f42b7eeeb0ae4295fec366bf Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 29 Jun 2025 19:46:55 +1200 Subject: [PATCH] feat: Update 2 files --- getpkg/src/GetbinClient.cpp | 36 ++++++++++++++++++++++++------------ getpkg/src/main.cpp | 2 +- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/getpkg/src/GetbinClient.cpp b/getpkg/src/GetbinClient.cpp index 38fac1b..2129a1f 100644 --- a/getpkg/src/GetbinClient.cpp +++ b/getpkg/src/GetbinClient.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include using json = nlohmann::json; @@ -207,7 +208,7 @@ bool GetbinClient::deleteObject(const std::string& hash, const std::string& toke bool GetbinClient::listPackages(std::vector& outPackages) { try { - std::string url = "https://" + SERVER_HOST + "/packages"; + std::string url = "https://" + SERVER_HOST + "/dir"; auto response = cpr::Get(cpr::Url{url}, cpr::Header{{"User-Agent", getUserAgent()}}, @@ -217,20 +218,31 @@ bool GetbinClient::listPackages(std::vector& outPackages) { if (response.status_code == 200) { try { auto resp_json = json::parse(response.text); - if (resp_json.is_array()) { + if (resp_json.contains("entries") && resp_json["entries"].is_array()) { outPackages.clear(); - for (const auto& item : resp_json) { - if (item.is_string()) { - outPackages.push_back(item.get()); + std::set uniqueTools; + + for (const auto& entry : resp_json["entries"]) { + if (entry.contains("labeltags") && entry["labeltags"].is_array()) { + for (const auto& labeltag : entry["labeltags"]) { + if (labeltag.is_string()) { + std::string tag = labeltag.get(); + // Extract tool name from "tool:arch" format + size_t colonPos = tag.find(":"); + if (colonPos != std::string::npos) { + std::string toolName = tag.substr(0, colonPos); + if (!toolName.empty()) { + uniqueTools.insert(toolName); + } + } + } + } } } - return true; - } else if (resp_json.contains("packages") && resp_json["packages"].is_array()) { - outPackages.clear(); - for (const auto& item : resp_json["packages"]) { - if (item.is_string()) { - outPackages.push_back(item.get()); - } + + // Convert set to vector + for (const auto& tool : uniqueTools) { + outPackages.push_back(tool); } return true; } diff --git a/getpkg/src/main.cpp b/getpkg/src/main.cpp index d4b23f2..4815d39 100644 --- a/getpkg/src/main.cpp +++ b/getpkg/src/main.cpp @@ -824,7 +824,7 @@ int list_packages(int argc, char* argv[]) { for (const auto& packageName : availablePackages) { std::string status = "Available"; std::string localVersion = "-"; - std::string remoteStatus = "✓"; + std::string remoteStatus = "-"; auto it = installedPackages.find(packageName); if (it != installedPackages.end()) {