aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-04-09 11:27:42 +0200
committerEugen Wissner <belka@caraus.de>2025-04-09 11:27:42 +0200
commit68f64f20dd2f827f6076ec02d3eaa8961fd12022 (patch)
treed857be0cf3a4f5c70b8154cdf7ff49527379fad9 /cli
parentde94f3d35557b4590e0c11de303d9d9c51217d5f (diff)
downloadkazbek-68f64f20dd2f827f6076ec02d3eaa8961fd12022.tar.gz
katja: Load updatable list on demand
Diffstat (limited to 'cli')
-rw-r--r--cli/component.cpp35
-rw-r--r--cli/component.hpp10
-rw-r--r--cli/main.cpp11
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);