Mercurial > minori
comparison src/core/anime_db.cpp @ 9:5c0397762b53
INCOMPLETE: megacommit :)
| author | Paper <mrpapersonic@gmail.com> | 
|---|---|
| date | Sun, 10 Sep 2023 03:59:16 -0400 | 
| parents | |
| children | 4b198a111713 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 8:b1f73678ef61 | 9:5c0397762b53 | 
|---|---|
| 1 #include "core/anime_db.h" | |
| 2 #include "core/anime.h" | |
| 3 | |
| 4 namespace Anime { | |
| 5 | |
| 6 int Database::GetTotalAnimeAmount() { | |
| 7 int total = 0; | |
| 8 for (const auto& [id, anime] : items) { | |
| 9 if (anime.IsInUserList()) | |
| 10 total++; | |
| 11 } | |
| 12 return total; | |
| 13 } | |
| 14 | |
| 15 int Database::GetTotalEpisodeAmount() { | |
| 16 int total = 0; | |
| 17 for (const auto& [id, anime] : items) { | |
| 18 if (anime.IsInUserList()) { | |
| 19 total += anime.GetUserRewatchedTimes() * anime.GetEpisodes(); | |
| 20 total += anime.GetUserProgress(); | |
| 21 } | |
| 22 } | |
| 23 return total; | |
| 24 } | |
| 25 | |
| 26 /* Returns the total watched amount in minutes. */ | |
| 27 int Database::GetTotalWatchedAmount() { | |
| 28 int total = 0; | |
| 29 for (const auto& [id, anime] : items) { | |
| 30 if (anime.IsInUserList()) { | |
| 31 total += anime.GetDuration() * anime.GetUserProgress(); | |
| 32 total += anime.GetEpisodes() * anime.GetDuration() * anime.GetUserRewatchedTimes(); | |
| 33 } | |
| 34 } | |
| 35 return total; | |
| 36 } | |
| 37 | |
| 38 /* Returns the total planned amount in minutes. | |
| 39 Note that we should probably limit progress to the | |
| 40 amount of episodes, as AniList will let you | |
| 41 set episode counts up to 32768. But that should | |
| 42 rather be handled elsewhere. */ | |
| 43 int Database::GetTotalPlannedAmount() { | |
| 44 int total = 0; | |
| 45 for (const auto& [id, anime] : items) { | |
| 46 if (anime.IsInUserList()) | |
| 47 total += anime.GetDuration() * (anime.GetEpisodes() - anime.GetUserProgress()); | |
| 48 } | |
| 49 return total; | |
| 50 } | |
| 51 | |
| 52 /* I'm sure many will appreciate this being called an | |
| 53 "average" instead of a "mean" */ | |
| 54 double Database::GetAverageScore() { | |
| 55 double avg = 0; | |
| 56 int amt = 0; | |
| 57 for (const auto& [id, anime] : items) { | |
| 58 if (anime.IsInUserList() && anime.GetUserScore()) { | |
| 59 avg += anime.GetUserScore(); | |
| 60 amt++; | |
| 61 } | |
| 62 } | |
| 63 return avg / amt; | |
| 64 } | |
| 65 | |
| 66 double Database::GetScoreDeviation() { | |
| 67 double squares_sum = 0, avg = GetAverageScore(); | |
| 68 int amt = 0; | |
| 69 for (const auto& [id, anime] : items) { | |
| 70 if (anime.GetUserScore()) { | |
| 71 squares_sum += std::pow((double)anime.GetUserScore() - avg, 2); | |
| 72 amt++; | |
| 73 } | |
| 74 } | |
| 75 return (amt > 0) ? std::sqrt(squares_sum / amt) : 0; | |
| 76 } | |
| 77 | |
| 78 } // namespace Anime | 
