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 }