Mercurial > minori
view src/core/date.cc @ 197:c4ca035c565d
*: misc. patches
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Fri, 08 Dec 2023 11:19:54 -0500 |
parents | f0ff06a45c42 |
children | bc1ae1810855 |
line wrap: on
line source
#include "core/date.h" #include "core/json.h" #include <QDate> #include <QDebug> #include <algorithm> /* An implementation of AniList's "fuzzy date" */ Date::Date() { } Date::Date(unsigned int y) { SetYear(y); } Date::Date(unsigned int y, unsigned int m, unsigned int d) { SetYear(y); SetMonth(m); SetDay(d); } Date::Date(const QDate& date) { SetYear(date.year()); SetMonth(date.month()); SetDay(date.day()); } Date::Date(const nlohmann::json& json) { /* NOTE: this constructor is made for use with AniList FuzzyDate-style JSON. In the future, some other methods may be parsed and whatnot if necessary. */ if (json.contains("year") && json.at("year").is_number()) SetYear(json.at("year").get<unsigned int>()); if (json.contains("month") && json.at("month").is_number()) SetMonth(json.at("month").get<unsigned int>()); if (json.contains("day") && json.at("day").is_number()) SetDay(json.at("day").get<unsigned int>()); } void Date::VoidYear() { year.reset(); } void Date::VoidMonth() { month.reset(); } void Date::VoidDay() { day.reset(); } void Date::SetYear(unsigned int y) { year.emplace(y); } void Date::SetMonth(unsigned int m) { month.emplace(std::clamp(m, 1U, 12U)); } void Date::SetDay(unsigned int d) { day.emplace(std::clamp(d, 1U, 31U)); } std::optional<unsigned int> Date::GetYear() const { return year; } std::optional<unsigned int> Date::GetMonth() const { return month; } std::optional<unsigned int> Date::GetDay() const { return day; } bool Date::IsValid() const { return year.has_value() && month.has_value() && day.has_value(); } QDate Date::GetAsQDate() const { /* QDate doesn't support "missing" values (for good reason), * so we do our best and return what we can. */ return QDate(year.value_or(2000), month.value_or(1), day.value_or(1)); } nlohmann::json Date::GetAsAniListJson() const { nlohmann::json result = {}; if (year.has_value()) result["year"] = year.value(); else result["year"] = nullptr; if (month.has_value()) result["month"] = month.value(); else result["month"] = nullptr; if (day.has_value()) result["day"] = day.value(); else result["day"] = nullptr; return result; }