From 4fec08650869373c3ef7dc1d84ea17a45c977c7f Mon Sep 17 00:00:00 2001 From: Vyn Date: Wed, 20 Nov 2024 11:48:49 +0100 Subject: [PATCH] Add support for local lists --- CMakeLists.txt | 2 +- src/AppWindow.h | 25 +++++++++++++++++++++++++ ui/app-window.slint | 6 +++++- ui/state.slint | 5 +++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e30b6a..a2e8aba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ target_link_libraries(lali PRIVATE Slint::Slint) slint_target_sources( lali ui/app-window.slint NAMESPACE ui - LIBRARY_PATHS selenite=${CMAKE_CURRENT_SOURCE_DIR}/external/selenite/index.slint + LIBRARY_PATHS selenite=${CMAKE_CURRENT_SOURCE_DIR}/external/selenite/components/index.slint ) add_subdirectory(external/rei-json) diff --git a/src/AppWindow.h b/src/AppWindow.h index a303d75..0258457 100644 --- a/src/AppWindow.h +++ b/src/AppWindow.h @@ -4,6 +4,7 @@ #include #include #include "app-window.h" +#include "rei-json/Array.h" #include "rei-json/json.h" #include "slint_string.h" #include "slint.h" @@ -131,6 +132,10 @@ public: ui->global().on_add_anilist_list([&](ui::AddAnilistListParams params) { addAnilistList(std::string(params.name), std::string(params.anilist_user_name), std::string(params.anilist_list_name)); }); + + ui->global().on_add_local_list([&](ui::AddLocalListParams params) { + addLocalList(std::string(params.name)); + }); ui->global().on_sync_list([&](slint::SharedString name) { //std::println("{}",res->body); @@ -221,6 +226,7 @@ public: } listJson.set("name", listName); listJson.set("source", "anilist"); + listJson.set("type", "animes"); listJson.set("anilistUserName", anilistUserName); listJson.set("anilistListName", anilistListName); @@ -240,6 +246,25 @@ public: save(); } + void addLocalList(const std::string& listName) { + + rei::json::JsonObject saveJson{}; + saveJson.set("version", 1); + + rei::json::JsonObject listJson{}; + listJson.set("name", listName); + listJson.set("source", "local"); + listJson.set("type", "animes"); + listJson.addArray("animes", rei::json::JsonArray{}); + + json.getArray("lists").pushObject(listJson); + listsSlint->push_back(ui::List{ + .name = slint::SharedString(listName), + .selected = false + }); + save(); + } + slint::Image getAnimeImage(int animeId, std::string imageUrl) { //std::println("Get image for anime {}", animeId); std::string imagePath = "./imgs/" + std::to_string(animeId); diff --git a/ui/app-window.slint b/ui/app-window.slint index 4be8b45..626584a 100644 --- a/ui/app-window.slint +++ b/ui/app-window.slint @@ -56,7 +56,7 @@ export component AppWindow inherits Window { in-out property anilist-list-name; list-type := ComboBox { - model: ["Anilist"]; + model: ["Anilist", "Local"]; } VTextInput { label: "List name"; @@ -79,6 +79,10 @@ export component AppWindow inherits Window { anilist-user-name: parent.anilist-user-name, anilist-list-name: parent.anilist-list-name }); + } else if list-type.current-value == "Local" { + State.add-local-list({ + name: parent.name, + }); } show-add-list-form = false; } diff --git a/ui/state.slint b/ui/state.slint index cbaec0d..99327e7 100644 --- a/ui/state.slint +++ b/ui/state.slint @@ -22,6 +22,10 @@ export struct AddAnilistListParams { anilist-list-name: string } +export struct AddLocalListParams { + name: string, +} + export global State { in-out property <[List]> lists; @@ -30,6 +34,7 @@ export global State { callback select-list(int); callback sync-list(string); callback add-anilist-list(AddAnilistListParams); + callback add-local-list(AddLocalListParams); callback config-changed(); }