comparison src/core/anime_db.cc @ 81:9b2b41f83a5e

boring: mass rename to cc because this is a very unix-y project, it makes more sense to use the 'cc' extension
author Paper <mrpapersonic@gmail.com>
date Mon, 23 Oct 2023 12:07:27 -0400
parents src/core/anime_db.cpp@fe719c109dbc
children d02fdf1d6708
comparison
equal deleted inserted replaced
80:825506f0e221 81:9b2b41f83a5e
1 #include "core/anime_db.h"
2 #include "core/anime.h"
3 #include "core/strings.h"
4 #include <QDebug>
5
6 namespace Anime {
7
8 int Database::GetTotalAnimeAmount() {
9 int total = 0;
10 for (const auto& a : items) {
11 if (a.second.IsInUserList())
12 total++;
13 }
14 return total;
15 }
16
17 int Database::GetListsAnimeAmount(ListStatus status) {
18 if (status == ListStatus::NOT_IN_LIST)
19 return 0;
20 int total = 0;
21 for (const auto& a : items) {
22 if (a.second.IsInUserList() && a.second.GetUserStatus() == status)
23 total++;
24 }
25 return total;
26 }
27
28 int Database::GetTotalEpisodeAmount() {
29 int total = 0;
30 for (const auto& a : items) {
31 if (a.second.IsInUserList()) {
32 total += a.second.GetUserRewatchedTimes() * a.second.GetEpisodes();
33 total += a.second.GetUserProgress();
34 }
35 }
36 return total;
37 }
38
39 /* Returns the total watched amount in minutes. */
40 int Database::GetTotalWatchedAmount() {
41 int total = 0;
42 for (const auto& a : items) {
43 if (a.second.IsInUserList()) {
44 total += a.second.GetDuration() * a.second.GetUserProgress();
45 total += a.second.GetEpisodes() * a.second.GetDuration() * a.second.GetUserRewatchedTimes();
46 }
47 }
48 return total;
49 }
50
51 /* Returns the total planned amount in minutes.
52 Note that we should probably limit progress to the
53 amount of episodes, as AniList will let you
54 set episode counts up to 32768. But that should
55 rather be handled elsewhere. */
56 int Database::GetTotalPlannedAmount() {
57 int total = 0;
58 for (const auto& a : items) {
59 if (a.second.IsInUserList())
60 total += a.second.GetDuration() * (a.second.GetEpisodes() - a.second.GetUserProgress());
61 }
62 return total;
63 }
64
65 /* I'm sure many will appreciate this being called an
66 "average" instead of a "mean" */
67 double Database::GetAverageScore() {
68 double avg = 0;
69 int amt = 0;
70 for (const auto& a : items) {
71 if (a.second.IsInUserList() && a.second.GetUserScore()) {
72 avg += a.second.GetUserScore();
73 amt++;
74 }
75 }
76 return avg / amt;
77 }
78
79 double Database::GetScoreDeviation() {
80 double squares_sum = 0, avg = GetAverageScore();
81 int amt = 0;
82 for (const auto& a : items) {
83 if (a.second.IsInUserList() && a.second.GetUserScore()) {
84 squares_sum += std::pow(static_cast<double>(a.second.GetUserScore()) - avg, 2);
85 amt++;
86 }
87 }
88 return (amt > 0) ? std::sqrt(squares_sum / amt) : 0;
89 }
90
91 int Database::GetAnimeFromTitle(std::string title) {
92 if (title.empty())
93 return 0;
94 for (const auto& a : items) {
95 if (a.second.GetUserPreferredTitle().find(title) != std::string::npos)
96 return a.second.GetId();
97 for (const auto& t : a.second.GetTitleSynonyms()) {
98 if (t.find(title) != std::string::npos) {
99 return a.second.GetId();
100 }
101 }
102 }
103 return 0;
104 }
105
106 Database db;
107
108 } // namespace Anime