lali/src/LocalListRepository.cpp
2024-04-09 18:46:06 +02:00

130 lines
3.6 KiB
C++

#include <QObject>
#include <QString>
#include <QDebug>
#include <iostream>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QVariant>
#include <qqml.h>
#include "LocalListRepository.h"
QList<AnimeList> LocalListRepository::getAll() {
if (cachedLists.empty()) {
cachedLists = loadLists();
}
return cachedLists;
}
void LocalListRepository::save(QList<AnimeList> lists) {
cachedLists = lists;
QJsonArray listsJson;
for (const AnimeList& list : lists) {
QJsonArray animesJson;
for (const auto& anime : list.animes) {
QJsonObject animeJson;
animeJson["title"] = anime.getTitle();
animeJson["description"] = anime.GetDescription();
animeJson["coverImageUrl"] = anime.getCoverImageUrl();
animeJson["episodes"] = anime.GetEpisodes();
animeJson["status"] = anime.GetStatus();
QJsonArray genresJson;
for (const QString& genreName : anime.GetGenres()) {
genresJson.append(genreName);
}
QJsonObject startDate;
startDate["year"] = anime.GetStartYear();
startDate["month"] = anime.GetStartMonth();
startDate["day"] = anime.GetStartDay();
QJsonObject endDate;
endDate["year"] = anime.GetEndYear();
endDate["month"] = anime.GetEndMonth();
endDate["day"] = anime.GetEndDay();
animeJson["genres"] = genresJson;
animeJson["startDate"] = startDate;
animeJson["endDate"] = endDate;
animesJson.append(animeJson);
}
QJsonObject listJson;
listJson["name"] = list.name;
listJson["animes"] = animesJson;
listsJson.append(listJson);
}
QJsonObject saveJson;
saveJson.insert("lists", listsJson);
QFile saveFile(dataPath + "/save.json");
if (!saveFile.open(QIODevice::WriteOnly)) {
qWarning("Couldn't save the lists");
return ;
}
saveFile.write(QJsonDocument(saveJson).toJson());
saveFile.close();
}
QList<AnimeList> LocalListRepository::loadLists() {
QFile loadFile(dataPath + "/save.json");
if (!loadFile.open(QIODevice::ReadOnly)) {
qWarning() << "Couldn't find existing save at " << dataPath + "/save.json";
}
QByteArray loadData = loadFile.readAll();
QJsonObject json = QJsonDocument::fromJson(loadData).object();
loadFile.close();
QList<AnimeList> lists;
auto listsJson = json["lists"].toArray();
for (auto listJson : listsJson) {
AnimeList list(listJson.toObject()["name"].toString());
auto animesJson = listJson.toObject()["animes"].toArray();
for (int i = 0; i < animesJson.count(); ++i) {
Anime anime ;
anime.SetTitle(animesJson[i].toObject()["title"].toString());
anime.SetDescription(animesJson[i].toObject()["description"].toString());
anime.SetCoverImageByUrl(animesJson[i].toObject()["coverImageUrl"].toString());
anime.SetStatus(animesJson[i].toObject()["status"].toString());
anime.SetEpisodes(animesJson[i].toObject()["episodes"].toInt());
auto genresJson = animesJson[i].toObject()["genres"].toArray();
for (auto genreJson : genresJson) {
anime.AddGenre(genreJson.toString());
}
anime.SetStartYear(animesJson[i].toObject()["startDate"].toObject()["year"].toInt());
anime.SetStartMonth(animesJson[i].toObject()["startDate"].toObject()["month"].toInt());
anime.SetStartDay(animesJson[i].toObject()["startDate"].toObject()["day"].toInt());
anime.SetEndYear(animesJson[i].toObject()["endDate"].toObject()["year"].toInt());
anime.SetEndMonth(animesJson[i].toObject()["endDate"].toObject()["month"].toInt());
anime.SetEndDay(animesJson[i].toObject()["endDate"].toObject()["day"].toInt());
list.add(anime);
}
lists.push_back(list);
}
if (lists.isEmpty())
lists.push_back(AnimeList("Watched"));
return lists;
}