File indexing completed on 2024-05-05 16:49:23

0001 /*
0002  * SPDX-FileCopyrightText: 2020-2021 Han Young <hanyoung@protonmail.com>
0003  * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 #include "sunrise.h"
0008 namespace KWeatherCore
0009 {
0010 class Sunrise::SunrisePrivate
0011 {
0012 public:
0013     QPair<QDateTime, double> highMoon;
0014     QPair<QDateTime, double> solarMidnight;
0015     QPair<QDateTime, double> solarNoon;
0016     QPair<QDateTime, double> lowMoon;
0017     QDateTime sunRise = QDateTime::currentDateTime();
0018     QDateTime sunSet = QDateTime::currentDateTime();
0019     QDateTime moonRise = QDateTime::currentDateTime();
0020     QDateTime moonSet = QDateTime::currentDateTime();
0021     double moonPhase;
0022 };
0023 Sunrise::Sunrise()
0024     : d(std::make_unique<SunrisePrivate>())
0025 {
0026 }
0027 Sunrise::Sunrise(const Sunrise &other)
0028     : d(std::make_unique<SunrisePrivate>())
0029 {
0030     *d = *other.d;
0031 }
0032 Sunrise::Sunrise(Sunrise &&other) = default;
0033 Sunrise::~Sunrise() = default;
0034 Sunrise &Sunrise::operator=(const Sunrise &other)
0035 {
0036     *d = *other.d;
0037     return *this;
0038 }
0039 Sunrise &Sunrise::operator=(Sunrise &&other) = default;
0040 Sunrise Sunrise::fromJson(QJsonObject obj)
0041 {
0042     Sunrise s;
0043     s.setSunSet(QDateTime::fromString(obj[QStringLiteral("sunset")].toString(),
0044                                       Qt::ISODate));
0045     s.setSunRise(QDateTime::fromString(
0046         obj[QStringLiteral("sunrise")].toString(), Qt::ISODate));
0047     s.setLowMoon(QPair<QDateTime, double>(
0048         QDateTime::fromString(obj[QStringLiteral("lowmoon")].toString(),
0049                               Qt::ISODate),
0050         obj[QStringLiteral("lowmoonEle")].toDouble()));
0051     s.setHighMoon(QPair<QDateTime, double>(
0052         QDateTime::fromString(obj[QStringLiteral("highmoon")].toString(),
0053                               Qt::ISODate),
0054         obj[QStringLiteral("highmoonEle")].toDouble()));
0055     s.setSolarMidnight(QPair<QDateTime, double>(
0056         QDateTime::fromString(obj[QStringLiteral("solarmidnight")].toString(),
0057                               Qt::ISODate),
0058         obj[QStringLiteral("solarmidnightEle")].toDouble()));
0059     s.setSolarNoon(QPair<QDateTime, double>(
0060         QDateTime::fromString(obj[QStringLiteral("solarnoon")].toString(),
0061                               Qt::ISODate),
0062         obj[QStringLiteral("solarnoonEle")].toDouble()));
0063     s.setMoonPhase(obj[QStringLiteral("moonphase")].toDouble());
0064     s.setMoonSet(QDateTime::fromString(
0065         obj[QStringLiteral("moonset")].toString(), Qt::ISODate));
0066     s.setMoonRise(QDateTime::fromString(
0067         obj[QStringLiteral("moonrise")].toString(), Qt::ISODate));
0068     return s;
0069 }
0070 QJsonObject Sunrise::toJson() const
0071 {
0072     QJsonObject obj;
0073     obj[QStringLiteral("sunrise")] = sunRise().toString(Qt::ISODate);
0074     obj[QStringLiteral("sunset")] = sunSet().toString(Qt::ISODate);
0075     obj[QStringLiteral("moonrise")] = moonRise().toString(Qt::ISODate);
0076     obj[QStringLiteral("moonset")] = moonSet().toString(Qt::ISODate);
0077     obj[QStringLiteral("lowmoon")] = lowMoonTime().toString(Qt::ISODate);
0078     obj[QStringLiteral("solarmidnight")] =
0079         solarMidnightTime().toString(Qt::ISODate);
0080     obj[QStringLiteral("solarnoon")] = solarNoonTime().toString(Qt::ISODate);
0081     obj[QStringLiteral("highmoon")] = highMoonTime().toString(Qt::ISODate);
0082     obj[QStringLiteral("lowmoonEle")] = lowMoon();
0083     obj[QStringLiteral("highmoonEle")] = highMoon();
0084     obj[QStringLiteral("solarmidnightEle")] = solarMidnight();
0085     obj[QStringLiteral("solarNoonEle")] = solarNoon();
0086     obj[QStringLiteral("moonphase")] = moonPhase();
0087     return obj;
0088 }
0089 
0090 QDateTime Sunrise::highMoonTime() const
0091 {
0092     return d->highMoon.first;
0093 }
0094 double Sunrise::highMoon() const
0095 {
0096     return d->highMoon.second;
0097 }
0098 QDateTime Sunrise::lowMoonTime() const
0099 {
0100     return d->lowMoon.first;
0101 }
0102 double Sunrise::lowMoon() const
0103 {
0104     return d->lowMoon.second;
0105 }
0106 QDateTime Sunrise::solarMidnightTime() const
0107 {
0108     return d->solarMidnight.first;
0109 }
0110 QDateTime Sunrise::solarNoonTime() const
0111 {
0112     return d->solarNoon.first;
0113 }
0114 double Sunrise::solarMidnight() const
0115 {
0116     return d->solarMidnight.second;
0117 }
0118 double Sunrise::solarNoon() const
0119 {
0120     return d->solarNoon.second;
0121 }
0122 const QDateTime &Sunrise::sunRise() const
0123 {
0124     return d->sunRise;
0125 }
0126 const QDateTime &Sunrise::sunSet() const
0127 {
0128     return d->sunSet;
0129 }
0130 const QDateTime &Sunrise::moonRise() const
0131 {
0132     return d->moonRise;
0133 }
0134 const QDateTime &Sunrise::moonSet() const
0135 {
0136     return d->moonSet;
0137 }
0138 double Sunrise::moonPhase() const
0139 {
0140     return d->moonPhase;
0141 }
0142 void Sunrise::setHighMoon(const QPair<QDateTime, double> &highMoon)
0143 {
0144     d->highMoon = highMoon;
0145 }
0146 void Sunrise::setSolarMidnight(const QPair<QDateTime, double> &solarMidnight)
0147 {
0148     d->solarMidnight = solarMidnight;
0149 }
0150 void Sunrise::setSolarNoon(const QPair<QDateTime, double> &solarNoon)
0151 {
0152     d->solarNoon = solarNoon;
0153 }
0154 void Sunrise::setLowMoon(const QPair<QDateTime, double> &lowMoon)
0155 {
0156     d->lowMoon = lowMoon;
0157 }
0158 void Sunrise::setSunRise(const QDateTime &sunRise)
0159 {
0160     d->sunRise = sunRise;
0161 }
0162 void Sunrise::setSunSet(const QDateTime &sunSet)
0163 {
0164     d->sunSet = sunSet;
0165 }
0166 void Sunrise::setMoonRise(const QDateTime &moonRise)
0167 {
0168     d->moonRise = moonRise;
0169 }
0170 void Sunrise::setMoonSet(const QDateTime &moonSet)
0171 {
0172     d->moonSet = moonSet;
0173 }
0174 void Sunrise::setMoonPhase(double moonPhase)
0175 {
0176     d->moonPhase = moonPhase;
0177 }
0178 }