Mercurial > minori
comparison src/core/anime.cc @ 185:62e336597bb7
anime list: add support for different score formats
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Tue, 05 Dec 2023 13:45:23 -0500 |
| parents | 01d259b9c89f |
| children | 6ef31dbb90ca |
comparison
equal
deleted
inserted
replaced
| 184:09492158bcc5 | 185:62e336597bb7 |
|---|---|
| 38 } | 38 } |
| 39 | 39 |
| 40 int Anime::GetUserScore() const { | 40 int Anime::GetUserScore() const { |
| 41 assert(list_info_.get()); | 41 assert(list_info_.get()); |
| 42 return list_info_->score; | 42 return list_info_->score; |
| 43 } | |
| 44 | |
| 45 std::string Anime::GetUserPresentableScore() const { | |
| 46 assert(list_info_.get()); | |
| 47 const int score = list_info_->score; | |
| 48 if (score == 0) | |
| 49 return ""; | |
| 50 | |
| 51 switch (session.config.anime_list.score_format) { | |
| 52 case ScoreFormat::POINT_10_DECIMAL: { | |
| 53 std::ostringstream out; | |
| 54 out.precision(1); | |
| 55 out << std::fixed << (static_cast<double>(score) / 10); | |
| 56 return std::move(out).str(); | |
| 57 } | |
| 58 case ScoreFormat::POINT_10: | |
| 59 return std::to_string(score / 10); | |
| 60 case ScoreFormat::POINT_5: { | |
| 61 std::string stars = ""; | |
| 62 | |
| 63 for (int i = 0; i < 100; i += 20) | |
| 64 stars.append((i <= score) ? "★" : "☆"); | |
| 65 | |
| 66 return stars; | |
| 67 } | |
| 68 case ScoreFormat::POINT_3: { | |
| 69 if (score >= 100) | |
| 70 return ":)"; | |
| 71 else if (score >= 66) | |
| 72 return ":|"; | |
| 73 else if (score >= 33) | |
| 74 return ":("; | |
| 75 else | |
| 76 return ""; | |
| 77 } | |
| 78 default: | |
| 79 case ScoreFormat::POINT_100: | |
| 80 return std::to_string(score); | |
| 81 } | |
| 43 } | 82 } |
| 44 | 83 |
| 45 Date Anime::GetUserDateStarted() const { | 84 Date Anime::GetUserDateStarted() const { |
| 46 assert(list_info_.get()); | 85 assert(list_info_.get()); |
| 47 return list_info_->started; | 86 return list_info_->started; |
