9
|
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 |