Add support for local lists

This commit is contained in:
Vyn 2024-11-20 11:48:49 +01:00
parent 7861b5b5b1
commit 4fec086508
4 changed files with 36 additions and 2 deletions

View file

@ -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)

View file

@ -4,6 +4,7 @@
#include <vector>
#include <optional>
#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<ui::State>().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<ui::State>().on_add_local_list([&](ui::AddLocalListParams params) {
addLocalList(std::string(params.name));
});
ui->global<ui::State>().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);

View file

@ -56,7 +56,7 @@ export component AppWindow inherits Window {
in-out property <string> 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;
}

View file

@ -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();
}