diff options
| author | Eugen Wissner <belka@caraus.de> | 2025-04-09 11:27:42 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2025-04-09 11:27:42 +0200 |
| commit | 68f64f20dd2f827f6076ec02d3eaa8961fd12022 (patch) | |
| tree | d857be0cf3a4f5c70b8154cdf7ff49527379fad9 /cli | |
| parent | de94f3d35557b4590e0c11de303d9d9c51217d5f (diff) | |
| download | kazbek-68f64f20dd2f827f6076ec02d3eaa8961fd12022.tar.gz | |
katja: Load updatable list on demand
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/component.cpp | 35 | ||||
| -rw-r--r-- | cli/component.hpp | 10 | ||||
| -rw-r--r-- | cli/main.cpp | 11 |
3 files changed, 45 insertions, 11 deletions
diff --git a/cli/component.cpp b/cli/component.cpp index e588959..db29052 100644 --- a/cli/component.cpp +++ b/cli/component.cpp @@ -32,18 +32,30 @@ namespace katja bool ScreenContainer::OnEvent(ftxui::Event event) { - if (event.character() == "q" && this->on_enter) + if (event == ftxui::Event::CtrlQ && this->on_enter) { on_enter(); return true; } int previously = this->menu_selected; - bool result = menu->OnEvent(event); + bool result{ false }; + if (event == ftxui::Event::CtrlP) + { + result = menu->OnEvent(ftxui::Event::ArrowLeft); + } + else if (event == ftxui::Event::CtrlN) + { + result = menu->OnEvent(ftxui::Event::ArrowRight); + } if (previously != this->menu_selected) { this->menu_pages.at(this->menu_selected)->Load(); } + if (!result) + { + result = this->menu_pages.at(this->menu_selected)->OnEvent(event); + } return result; } @@ -61,13 +73,14 @@ namespace katja { } - UpdatesPage::UpdatesPage(std::vector<package_identifier>&& updatable) - : updatable(std::move(updatable)) + UpdatesPage::UpdatesPage(std::shared_ptr<struct repository> repository, package_database database) + : repository(repository), database(database) { } void UpdatesPage::Load() { + this->updatable = repository->get_updates(this->database); } ftxui::Element UpdatesPage::OnRender() @@ -87,4 +100,18 @@ namespace katja void SearchPage::Load() { } + + ftxui::Element SearchPage::OnRender() + { + return ftxui::vbox({ + ftxui::hbox({ + this->search_input->Render() + }) + }); + } + + bool SearchPage::OnEvent(ftxui::Event event) + { + return this->search_input->OnEvent(event); + } } diff --git a/cli/component.hpp b/cli/component.hpp index dff9a0f..226e7f7 100644 --- a/cli/component.hpp +++ b/cli/component.hpp @@ -5,6 +5,7 @@ #include <ftxui/component/component.hpp> #include "katja/repository.hpp" +#include "katja/database.hpp" namespace katja { @@ -45,9 +46,11 @@ namespace katja class UpdatesPage final : public PageBase { std::vector<package_identifier> updatable; + std::shared_ptr<struct repository> repository; + package_database database; public: - explicit UpdatesPage(std::vector<package_identifier>&& updatable); + UpdatesPage(std::shared_ptr<struct repository> repository, package_database database); void Load() override; ftxui::Element OnRender() override; @@ -55,7 +58,12 @@ namespace katja class SearchPage final : public PageBase { + std::string needle; + ftxui::Component search_input = ftxui::Input(&this->needle, "Search"); + public: void Load() override; + ftxui::Element OnRender() override; + bool OnEvent(ftxui::Event event) override; }; } diff --git a/cli/main.cpp b/cli/main.cpp index 5172cd4..f145905 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -11,20 +11,19 @@ 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(); + katja::package_database installed_database = katja::read_installed_database(); for (const auto& [repository_name, repository_value] : configuration.as_table()) { std::filesystem::path slackbuild_repository{ repository_value.at("path").as_string() }; - katja::sbo_repository repository{ slackbuild_repository }; - auto updates = repository.get_updates(installed_database); + auto repository = std::make_shared<katja::sbo_repository>(slackbuild_repository); auto screen = ftxui::ScreenInteractive::Fullscreen(); auto container = Screen(std::vector<std::pair<std::string, katja::Page>>{ - { "Home", std::make_shared<katja::WelcomePage>() }, - { "Updates", std::make_shared<katja::UpdatesPage>(std::move(updates)) }, - { "Search", std::make_shared<katja::SearchPage>() } + { "Home", ftxui::Make<katja::WelcomePage>() }, + { "Updates", ftxui::Make<katja::UpdatesPage>(repository, std::move(installed_database)) }, + { "Search", ftxui::Make<katja::SearchPage>() } }, screen.ExitLoopClosure()); screen.Loop(container); |
