From bae14b032ee29510ed64f897920475db416305be Mon Sep 17 00:00:00 2001 From: markmental Date: Mon, 24 Nov 2025 10:57:38 -0500 Subject: [PATCH] Simplified image deletion --- main.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index e5b0c29..a4e1020 100644 --- a/main.cpp +++ b/main.cpp @@ -31,6 +31,8 @@ private: static void runCommand(const string& cmd); vector> getContainerList() const; string selectContainer(const string& prompt); + /* NEW helper – retrieves all images */ + vector> getImageList() const; }; // ---------------- Core Utility ---------------- @@ -39,6 +41,24 @@ void DockerManager::runCommand(const string& cmd) { system(cmd.c_str()); } +vector> DockerManager::getImageList() const { + vector> images; + array buffer{}; + string result; + FILE* pipe = popen("docker images --format '{{.ID}} {{.Repository}}:{{.Tag}}'", "r"); + if (!pipe) return images; + while (fgets(buffer.data(), buffer.size(), pipe) != nullptr) { + result = buffer.data(); + stringstream ss(result); + string id, repoTag; + ss >> id >> repoTag; + if (!id.empty() && !repoTag.empty()) + images.emplace_back(id, repoTag); + } + pclose(pipe); + return images; +} + vector> DockerManager::getContainerList() const { vector> containers; array buffer{}; @@ -134,10 +154,31 @@ void DockerManager::startDetached() { } void DockerManager::deleteImage() { - string image; - cout << "Enter image name or ID to delete: "; - cin >> image; - runCommand("docker rmi " + image); + auto images = getImageList(); + if (images.empty()) { + cout << "No Docker images found.\n"; + return; + } + + cout << "\nAvailable Images:\n"; + int idx = 1; + for (const auto& img : images) { + cout << idx++ << ". " << img.second << " (" << img.first.substr(0, 12) << ")\n"; + } + + int choice; + cout << "Select image to delete (1-" << images.size() << "): "; + cin >> choice; + + if (choice < 1 || choice > static_cast(images.size())) { + cout << "Invalid selection.\n"; + return; + } + + const string& id = images[choice - 1].first; + cout << "Deleting image: " << images[choice - 1].second + << " (ID: " << id << ") ...\n"; + runCommand("docker rmi " + id); } void DockerManager::stopContainer() {