aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/CMakeLists.txt23
-rw-r--r--cli/main.cpp31
2 files changed, 47 insertions, 7 deletions
diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt
index 11f92ce..11dd7a0 100644
--- a/cli/CMakeLists.txt
+++ b/cli/CMakeLists.txt
@@ -1,4 +1,25 @@
+FetchContent_Declare(ftxui
+ GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
+ GIT_TAG v5.0.0
+ GIT_PROGRESS TRUE
+ GIT_SHALLOW TRUE
+ EXCLUDE_FROM_ALL
+)
+FetchContent_MakeAvailable(ftxui)
+
+FetchContent_Declare(toml11
+ GIT_REPOSITORY https://github.com/ToruNiina/toml11.git
+ GIT_TAG v4.4.0
+ GIT_PROGRESS TRUE
+)
+FetchContent_MakeAvailable(toml11)
+
add_executable(katja-cli main.cpp)
target_include_directories(katja-cli PRIVATE ${Boost_INCLUDE_DIR})
-target_link_libraries(katja-cli LINK_PUBLIC katja)
+target_link_libraries(katja-cli
+ LINK_PUBLIC katja
+ LINK_PRIVATE ftxui::screen
+ LINK_PRIVATE ftxui::dom
+ LINK_PRIVATE toml11::toml11
+)
set_target_properties(katja-cli PROPERTIES RUNTIME_OUTPUT_NAME katja)
diff --git a/cli/main.cpp b/cli/main.cpp
index c257dbd..788f620 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -1,24 +1,43 @@
#include <filesystem>
#include <iostream>
+#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"
int main(int argc, const char **argv)
{
- std::multimap<std::string, katja::database_package> installed_database = katja::read_installed_database();
+ auto configuration = toml::parse("config/katja.toml");
- if (argc > 1)
+ for (const auto& [repository_name, repository_value] : configuration.as_table())
{
- std::filesystem::path slackbuild_repository{ argv[1] };
+ 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)
{
- std::cout << package_identifier.to_string() << std::endl;
+ auto line = ftxui::text(package_identifier.to_string()) | color(ftxui::Color::SkyBlue2);
+ lines.push_back(line);
}
- std::cout << "SlackBuilds found: " << updates.size() << std::endl;
+ 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;
}
- return 0;
+ return EXIT_SUCCESS;
}