Mercurial > minori
annotate src/core/date.cc @ 229:adc20fa321c1
theme: force Fusion style on platforms other than Win32 or OS X
I was reluctant to do this, but most of the other styles just
look like pure shite regardless of whether I force a stylesheet
on them or not. KDE's style is actually hilariously bad paired
with my stylesheet, so I've decided to also make the stylesheet
Windows-specific as well, because that's really the only platform
where it makes sense in the first place.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 10 Jan 2024 21:23:57 -0500 |
parents | bc1ae1810855 |
children | 862d0d8619f6 |
rev | line source |
---|---|
9 | 1 #include "core/date.h" |
2 #include "core/json.h" | |
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
3 |
9 | 4 #include <QDate> |
51 | 5 #include <QDebug> |
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
6 |
63 | 7 #include <algorithm> |
9 | 8 |
9 /* An implementation of AniList's "fuzzy date" */ | |
10 | |
11 Date::Date() { | |
12 } | |
13 | |
51 | 14 Date::Date(unsigned int y) { |
11 | 15 SetYear(y); |
9 | 16 } |
17 | |
51 | 18 Date::Date(unsigned int y, unsigned int m, unsigned int d) { |
11 | 19 SetYear(y); |
20 SetMonth(m); | |
21 SetDay(d); | |
9 | 22 } |
23 | |
51 | 24 Date::Date(const QDate& date) { |
25 SetYear(date.year()); | |
26 SetMonth(date.month()); | |
27 SetDay(date.day()); | |
28 } | |
29 | |
174
f88eda79c60a
anime/db: add some more json functionality, still doesn't compile :/
Paper <mrpapersonic@gmail.com>
parents:
81
diff
changeset
|
30 Date::Date(const nlohmann::json& json) { |
175 | 31 /* NOTE: this constructor is made for use with |
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
32 AniList FuzzyDate-style JSON. In the future, some other |
175 | 33 methods may be parsed and whatnot if necessary. */ |
198
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
34 |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
35 if (json.contains("/year"_json_pointer) && json.at("/year"_json_pointer).is_number()) |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
36 SetYear(json.at("/year"_json_pointer).get<unsigned int>()); |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
37 if (json.contains("/month"_json_pointer) && json.at("/month"_json_pointer).is_number()) |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
38 SetMonth(json.at("/month"_json_pointer).get<unsigned int>()); |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
39 if (json.contains("/day"_json_pointer) && json.at("/day"_json_pointer).is_number()) |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
40 SetDay(json.at("/day"_json_pointer).get<unsigned int>()); |
174
f88eda79c60a
anime/db: add some more json functionality, still doesn't compile :/
Paper <mrpapersonic@gmail.com>
parents:
81
diff
changeset
|
41 } |
f88eda79c60a
anime/db: add some more json functionality, still doesn't compile :/
Paper <mrpapersonic@gmail.com>
parents:
81
diff
changeset
|
42 |
9 | 43 void Date::VoidYear() { |
196
f0ff06a45c42
date: use std::optional for values
Paper <mrpapersonic@gmail.com>
parents:
187
diff
changeset
|
44 year.reset(); |
9 | 45 } |
46 | |
47 void Date::VoidMonth() { | |
196
f0ff06a45c42
date: use std::optional for values
Paper <mrpapersonic@gmail.com>
parents:
187
diff
changeset
|
48 month.reset(); |
9 | 49 } |
50 | |
51 void Date::VoidDay() { | |
196
f0ff06a45c42
date: use std::optional for values
Paper <mrpapersonic@gmail.com>
parents:
187
diff
changeset
|
52 day.reset(); |
9 | 53 } |
54 | |
51 | 55 void Date::SetYear(unsigned int y) { |
197 | 56 year.emplace(y); |
9 | 57 } |
58 | |
51 | 59 void Date::SetMonth(unsigned int m) { |
197 | 60 month.emplace(std::clamp(m, 1U, 12U)); |
9 | 61 } |
62 | |
51 | 63 void Date::SetDay(unsigned int d) { |
197 | 64 day.emplace(std::clamp(d, 1U, 31U)); |
9 | 65 } |
66 | |
197 | 67 std::optional<unsigned int> Date::GetYear() const { |
68 return year; | |
9 | 69 } |
70 | |
197 | 71 std::optional<unsigned int> Date::GetMonth() const { |
72 return month; | |
9 | 73 } |
74 | |
197 | 75 std::optional<unsigned int> Date::GetDay() const { |
76 return day; | |
9 | 77 } |
78 | |
47
d8eb763e6661
information.cpp: add widgets to the list tab, and add an
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
79 bool Date::IsValid() const { |
196
f0ff06a45c42
date: use std::optional for values
Paper <mrpapersonic@gmail.com>
parents:
187
diff
changeset
|
80 return year.has_value() && month.has_value() && day.has_value(); |
47
d8eb763e6661
information.cpp: add widgets to the list tab, and add an
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
81 } |
d8eb763e6661
information.cpp: add widgets to the list tab, and add an
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
82 |
9 | 83 QDate Date::GetAsQDate() const { |
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
84 /* QDate doesn't support "missing" values (for good reason), |
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
85 * so we do our best and return what we can. |
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
86 */ |
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
175
diff
changeset
|
87 |
196
f0ff06a45c42
date: use std::optional for values
Paper <mrpapersonic@gmail.com>
parents:
187
diff
changeset
|
88 return QDate(year.value_or(2000), month.value_or(1), day.value_or(1)); |
9 | 89 } |
90 | |
91 nlohmann::json Date::GetAsAniListJson() const { | |
198
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
92 return { |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
93 {"year", year}, |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
94 {"month", month}, |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
95 {"day", day} |
bc1ae1810855
dep/animia: switch from using classes to global functions
Paper <mrpapersonic@gmail.com>
parents:
197
diff
changeset
|
96 }; |
9 | 97 } |