Mercurial > minori
view include/core/anime.h @ 337:a7d4e5107531
dep/animone: REFACTOR ALL THE THINGS
1: animone now has its own syntax divergent from anisthesia,
making different platforms actually have their own sections
2: process names in animone are now called `comm' (this will
probably break things). this is what its called in bsd/linux
so I'm just going to use it everywhere
3: the X11 code now checks for the existence of a UTF-8 window title
and passes it if available
4: ANYTHING THATS NOT LINUX IS 100% UNTESTED AND CAN AND WILL BREAK!
I still actually need to test the bsd code. to be honest I'm probably
going to move all of the bsds into separate files because they're
all essentially different operating systems at this point
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 19 Jun 2024 12:51:15 -0400 |
parents | b5d6c27c308f |
children |
line wrap: on
line source
#ifndef MINORI_CORE_ANIME_H_ #define MINORI_CORE_ANIME_H_ #include "core/anime_season.h" #include "core/date.h" #include <array> #include <map> #include <vector> #include <optional> namespace Anime { enum class ListStatus { NotInList = 0, Current, Completed, Paused, Dropped, Planning }; constexpr std::array<ListStatus, 5> ListStatuses{ ListStatus::Current, ListStatus::Completed, ListStatus::Paused, ListStatus::Dropped, ListStatus::Planning }; enum class SeriesStatus { Unknown = 0, Finished, Releasing, NotYetReleased, Cancelled, Hiatus }; constexpr std::array<SeriesStatus, 6> SeriesStatuses{ SeriesStatus::Unknown, SeriesStatus::Finished, SeriesStatus::Releasing, SeriesStatus::NotYetReleased, SeriesStatus::Cancelled, SeriesStatus::Hiatus }; enum class SeriesFormat { Unknown = 0, Tv, TvShort, Movie, Special, Ova, Ona, Music }; constexpr std::array<SeriesFormat, 8> SeriesFormats{ SeriesFormat::Unknown, SeriesFormat::Tv, SeriesFormat::TvShort, SeriesFormat::Movie, SeriesFormat::Special, SeriesFormat::Ova, SeriesFormat::Ona, SeriesFormat::Music }; enum class TitleLanguage { Romaji, Native, English }; constexpr std::array<TitleLanguage, 3> TitleLanguages{TitleLanguage::Romaji, TitleLanguage::Native, TitleLanguage::English}; enum class Service { None, AniList, MyAnimeList, Kitsu }; /* this doesn't include MAL and Kitsu because they aren't really * "valid" services yet. */ constexpr std::array<Service, 3> Services{ Service::AniList, Service::MyAnimeList, Service::Kitsu }; enum class ScoreFormat { Point100, // 0-100 Point10Decimal, // 0.0-10.0 Point10, // 0-10 Point5, // 0-5, should be represented in stars Point3 // 1-3, should be represented in smileys }; constexpr std::array<ScoreFormat, 5> ScoreFormats{ScoreFormat::Point100, ScoreFormat::Point10Decimal, ScoreFormat::Point10, ScoreFormat::Point5, ScoreFormat::Point3}; struct ListInformation { std::string id; int progress = 0; int score = 0; // this will ALWAYS be in POINT_100 format internally ListStatus status = ListStatus::NotInList; Date started; Date completed; bool is_private = false; unsigned int rewatched_times = 0; bool rewatching = false; uint64_t updated = 0; std::string notes; }; struct SeriesInformation { int id; std::map<Service, std::string> ids; std::map<TitleLanguage, std::string> titles; std::vector<std::string> synonyms; int episodes = 0; SeriesStatus status = SeriesStatus::Unknown; Date started; Date completed; std::vector<std::string> genres; std::vector<std::string> producers; SeriesFormat format = SeriesFormat::Unknown; double audience_score = 0; std::string synopsis; int duration = 0; std::string poster_url; }; class Anime { public: /* User list data */ std::string GetUserId() const; ListStatus GetUserStatus() const; int GetUserProgress() const; int GetUserScore() const; std::string GetUserPresentableScore() const; Date GetUserDateStarted() const; Date GetUserDateCompleted() const; bool GetUserIsPrivate() const; unsigned int GetUserRewatchedTimes() const; bool GetUserIsRewatching() const; uint64_t GetUserTimeUpdated() const; std::string GetUserNotes() const; void SetUserId(const std::string& id); void SetUserStatus(ListStatus status); void SetUserScore(int score); void SetUserProgress(int progress); void SetUserDateStarted(const Date& started); void SetUserDateCompleted(const Date& completed); void SetUserIsPrivate(bool is_private); void SetUserRewatchedTimes(int rewatched); void SetUserIsRewatching(bool rewatching); void SetUserTimeUpdated(uint64_t updated); void SetUserNotes(const std::string& notes); /* Series data */ int GetId() const; std::optional<std::string> GetServiceId(Service service) const; std::optional<std::string> GetTitle(TitleLanguage language) const; std::vector<std::string> GetTitleSynonyms() const; int GetEpisodes() const; SeriesStatus GetAiringStatus() const; Date GetStartedDate() const; Date GetCompletedDate() const; std::vector<std::string> GetGenres() const; std::vector<std::string> GetProducers() const; SeriesFormat GetFormat() const; Season GetSeason() const; double GetAudienceScore() const; std::string GetSynopsis() const; int GetDuration() const; std::string GetPosterUrl() const; std::optional<std::string> GetServiceUrl(Service service) const; void SetId(int id); void SetServiceId(Service service, const std::string& id); void SetTitle(TitleLanguage language, const std::string& title); void SetTitleSynonyms(const std::vector<std::string>& synonyms); void AddTitleSynonym(const std::string& synonym); void SetEpisodes(int episodes); void SetAiringStatus(SeriesStatus status); void SetStartedDate(const Date& date); void SetCompletedDate(const Date& date); void SetGenres(const std::vector<std::string>& genres); void SetProducers(const std::vector<std::string>& producers); void SetFormat(SeriesFormat format); void SetAudienceScore(double audience_score); void SetSynopsis(std::string synopsis); void SetDuration(int duration); void SetPosterUrl(std::string poster); std::string GetUserPreferredTitle() const; /* User stuff */ void AddToUserList(); bool IsInUserList() const; void RemoveFromUserList(); private: SeriesInformation info_; std::optional<struct ListInformation> list_info_ = std::nullopt; }; } // namespace Anime #endif // MINORI_CORE_ANIME_H_