aboutsummaryrefslogtreecommitdiff
path: root/cli/main.cpp
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-03-28 17:21:46 +0100
committerEugen Wissner <belka@caraus.de>2025-03-28 17:21:46 +0100
commit86ea47342b4a87c25c3daac1fe87d784990d65d6 (patch)
tree1420f87669c571352f47e11919c6f9eedca63fe7 /cli/main.cpp
parent7906bd3ecbd7fa3855c9ee346911feada20438d3 (diff)
downloadkazbek-86ea47342b4a87c25c3daac1fe87d784990d65d6.tar.gz
katja: Make an interactive loop
Diffstat (limited to 'cli/main.cpp')
-rw-r--r--cli/main.cpp43
1 files changed, 21 insertions, 22 deletions
diff --git a/cli/main.cpp b/cli/main.cpp
index 788f620..21906d4 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -1,43 +1,42 @@
#include <filesystem>
-#include <iostream>
+#include <ftxui/component/component.hpp>
+#include <ftxui/component/screen_interactive.hpp>
#include <ftxui/dom/elements.hpp>
-#include <ftxui/screen/screen.hpp>
-#include <ftxui/screen/string.hpp>
#include <toml.hpp>
#include "katja/sbo.hpp"
#include "katja/database.hpp"
+#include "component.hpp"
int main(int argc, const char **argv)
{
auto configuration = toml::parse("config/katja.toml");
+ std::multimap<std::string, katja::database_package> installed_database = katja::read_installed_database();
for (const auto& [repository_name, repository_value] : configuration.as_table())
{
- std::multimap<std::string, katja::database_package> installed_database = katja::read_installed_database();
-
std::filesystem::path slackbuild_repository{ repository_value.at("path").as_string() };
katja::sbo_repository repository{ slackbuild_repository };
auto updates = repository.get_updates(installed_database);
- std::vector<std::shared_ptr<ftxui::Node>> lines;
-
- for (const auto& package_identifier : updates)
- {
- auto line = ftxui::text(package_identifier.to_string()) | color(ftxui::Color::SkyBlue2);
- lines.push_back(line);
- }
- ftxui::Element summary = ftxui::text(" Updates (" + std::to_string(lines.size()) + ")");
- auto document = ftxui::window(summary, ftxui::vbox(lines));
-
- // Limit the size of the document to 80 char.
- document = document | size(ftxui::WIDTH, ftxui::LESS_THAN, 80);
- auto screen = ftxui::Screen::Create(ftxui::Dimension::Full(), ftxui::Dimension::Fit(document));
-
- ftxui::Render(screen, document);
-
- std::cout << screen.ToString() << '\0' << std::endl;
+ auto screen = ftxui::ScreenInteractive::Fullscreen();
+ std::vector<std::string> menu_entries = {
+ "Updates",
+ "Search",
+ "Quit"
+ };
+ int menu_selected = 0;
+ ftxui::MenuOption menu_option = ftxui::MenuOption::Horizontal();
+ menu_option.on_enter = screen.ExitLoopClosure();
+ ftxui::Component menu = ftxui::Menu(&menu_entries, &menu_selected, menu_option);
+
+ auto custom_component = std::make_shared<katja::UpdatesPage>(std::move(updates));
+ ftxui::Component renderer = ftxui::Container::Vertical({
+ menu,
+ custom_component
+ });
+ screen.Loop(renderer);
}
return EXIT_SUCCESS;
}