view include/core/anime_db.h @ 327:b5d6c27c308f

anime: refactor Anime::SeriesSeason to Season class ToLocalString has also been altered to take in both season and year because lots of locales actually treat formatting seasons differently! most notably is Russian which adds a suffix at the end to notate seasons(??)
author Paper <paper@paper.us.eu.org>
date Thu, 13 Jun 2024 01:49:18 -0400
parents 10096c5489e3
children
line wrap: on
line source

#ifndef MINORI_CORE_ANIME_DB_H_
#define MINORI_CORE_ANIME_DB_H_

#include "core/anime.h"
#include "json/json_fwd.hpp"
#include <string>
#include <unordered_map>

namespace Anime {

class Database {
public:
	std::unordered_map<int, Anime> items;
	size_t GetTotalAnimeAmount() const;
	size_t GetTotalEpisodeAmount() const;
	size_t GetTotalWatchedAmount() const;
	size_t GetTotalPlannedAmount() const;
	double GetAverageScore() const;
	double GetScoreDeviation() const;
	size_t GetListsAnimeAmount(ListStatus status) const;
	int LookupAnimeTitle(const std::string& title) const;

	bool GetDatabaseAsJSON(nlohmann::json& json) const;
	bool SaveDatabaseToDisk() const;

	bool ParseDatabaseJSON(const nlohmann::json& json);
	bool LoadDatabaseFromDisk();

	/* These are here to make sure that our service IDs don't collide
	 * and make the whole thing go boom. */
	int GetUnusedId() const;
	int LookupServiceId(Service service, const std::string& id_to_find) const;
	int LookupServiceIdOrUnused(Service service, const std::string& id_to_find) const;

	/* when syncing we don't want to keep deleted anime */
	void RemoveAllUserData();

	std::vector<int> GetAllAnimeForSeason(Season season);
};

extern Database db;

} // namespace Anime

#endif // MINORI_CORE_ANIME_DB_H_