Mercurial > minori
annotate src/core/anime_season.cc @ 383:27c462bc7815
make the "Now Playing" page actually work
| author | Paper <paper@tflc.us> |
|---|---|
| date | Thu, 06 Nov 2025 07:10:58 -0500 |
| parents | 47c9f8502269 |
| children |
| rev | line source |
|---|---|
| 281 | 1 #include "core/anime_season.h" |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
2 #include "core/session.h" |
| 281 | 3 |
| 4 namespace Anime { | |
| 5 | |
| 369 | 6 static bool WinterStartsInDecember() |
| 7 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
8 switch (session.config.service) { |
| 369 | 9 case Service::MyAnimeList: return false; |
| 10 default: return true; | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
11 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
12 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
13 |
| 369 | 14 static Season::Name GetSeasonForMonth(Date::Month month) |
| 15 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
16 if (WinterStartsInDecember()) { |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
17 switch (month) { |
| 369 | 18 case Date::Month::Dec: |
| 19 case Date::Month::Jan: | |
| 20 case Date::Month::Feb: return Season::Name::Winter; | |
| 21 case Date::Month::Mar: | |
| 22 case Date::Month::Apr: | |
| 23 case Date::Month::May: return Season::Name::Spring; | |
| 24 case Date::Month::Jun: | |
| 25 case Date::Month::Jul: | |
| 26 case Date::Month::Aug: return Season::Name::Summer; | |
| 27 case Date::Month::Sep: | |
| 28 case Date::Month::Oct: | |
| 29 case Date::Month::Nov: return Season::Name::Autumn; | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
30 default: return Season::Name::Unknown; |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
31 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
32 } else { |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
33 switch (month) { |
| 369 | 34 case Date::Month::Jan: |
| 35 case Date::Month::Feb: | |
| 36 case Date::Month::Mar: return Season::Name::Winter; | |
| 37 case Date::Month::Apr: | |
| 38 case Date::Month::May: | |
| 39 case Date::Month::Jun: return Season::Name::Spring; | |
| 40 case Date::Month::Jul: | |
| 41 case Date::Month::Aug: | |
| 42 case Date::Month::Sep: return Season::Name::Summer; | |
| 43 case Date::Month::Oct: | |
| 44 case Date::Month::Nov: | |
| 45 case Date::Month::Dec: return Season::Name::Autumn; | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
46 default: return Season::Name::Unknown; |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
47 } |
| 281 | 48 } |
| 49 } | |
| 50 | |
| 369 | 51 Season::Season(Season::Name s, Date::Year y) |
| 52 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
53 season = s; |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
54 year = y; |
| 281 | 55 } |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
56 |
| 369 | 57 Season::Season(const Date &date) |
| 58 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
59 std::optional<Date::Month> month = date.GetMonth(); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
60 if (month) |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
61 season = GetSeasonForMonth(month.value()); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
62 |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
63 std::optional<Date::Year> y = date.GetYear(); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
64 if (y) |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
65 year = y.value(); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
66 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
67 |
| 369 | 68 bool Season::operator==(const Season &o) const |
| 69 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
70 return (season == o.season && year == o.year); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
71 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
72 |
| 369 | 73 bool Season::operator!=(const Season &o) const |
| 74 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
75 return !(*this == o); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
76 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
77 |
| 369 | 78 bool Season::operator<(const Season &o) const |
| 79 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
80 return std::tie(season, year) < std::tie(o.season, o.year); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
81 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
82 |
| 369 | 83 bool Season::operator>(const Season &o) const |
| 84 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
85 return (o < *this); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
86 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
87 |
| 369 | 88 bool Season::operator<=(const Season &o) const |
| 89 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
90 return !(o > *this); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
91 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
92 |
| 369 | 93 bool Season::operator>=(const Season &o) const |
| 94 { | |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
95 return !(*this < o); |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
96 } |
|
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
97 |
| 369 | 98 Season &Season::operator++() |
| 99 { | |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
100 switch (season) { |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
101 case Season::Name::Winter: season = Season::Name::Spring; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
102 case Season::Name::Spring: season = Season::Name::Summer; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
103 case Season::Name::Summer: season = Season::Name::Autumn; break; |
| 369 | 104 case Season::Name::Autumn: |
| 105 season = Season::Name::Winter; | |
| 106 year++; | |
| 107 break; | |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
108 default: season = Season::Name::Unknown; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
109 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
110 |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
111 return *this; |
|
327
b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
Paper <paper@paper.us.eu.org>
parents:
326
diff
changeset
|
112 } |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
113 |
| 369 | 114 Season &Season::operator--() |
| 115 { | |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
116 switch (season) { |
| 369 | 117 case Season::Name::Winter: |
| 118 season = Season::Name::Autumn; | |
| 119 year--; | |
| 120 break; | |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
121 case Season::Name::Spring: season = Season::Name::Winter; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
122 case Season::Name::Summer: season = Season::Name::Spring; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
123 case Season::Name::Autumn: season = Season::Name::Summer; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
124 default: season = Season::Name::Unknown; break; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
125 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
126 |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
127 return *this; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
128 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
327
diff
changeset
|
129 |
| 369 | 130 } // namespace Anime |
