File indexing completed on 2024-06-23 05:45:43

0001 /*
0002     SPDX-FileCopyrightText: 2020 HanY <hanyoung@protonmail.com>
0003     SPDX-License-Identifier: LGPL-2.1-or-later
0004 */
0005 
0006 #pragma once
0007 #include <Plasma/Applet>
0008 #include <QLocale>
0009 
0010 class QProcess;
0011 class QTimer;
0012 class QDBusInterface;
0013 class KClock_KWeather_3x3 : public Plasma::Applet
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(QString time READ time NOTIFY timeChanged)
0017     Q_PROPERTY(QString date READ date NOTIFY dateChanged)
0018     Q_PROPERTY(QString alarmTime READ alarmTime NOTIFY propertyChanged)
0019     Q_PROPERTY(bool hasAlarm READ hasAlarm NOTIFY propertyChanged)
0020     Q_PROPERTY(QString cityName READ cityName NOTIFY locationChanged)
0021     Q_PROPERTY(QString description READ description NOTIFY dataUpdated)
0022     Q_PROPERTY(QString weatherIcon READ weatherIcon NOTIFY dataUpdated)
0023     Q_PROPERTY(QString tempNow READ tempNow NOTIFY dataUpdated)
0024     Q_PROPERTY(QString maxTemp READ maxTemp NOTIFY dataUpdated)
0025     Q_PROPERTY(QString minTemp READ minTemp NOTIFY dataUpdated)
0026 public:
0027     KClock_KWeather_3x3(QObject *parent, const QVariantList &args);
0028     ~KClock_KWeather_3x3();
0029     QString time();
0030     QString date();
0031     QString alarmTime()
0032     {
0033         return m_string;
0034     };
0035     bool hasAlarm()
0036     {
0037         return m_hasAlarm;
0038     };
0039     QString cityName()
0040     {
0041         return m_cityName;
0042     };
0043     QString description()
0044     {
0045         return m_description;
0046     };
0047     QString weatherIcon()
0048     {
0049         return m_weatherIcon;
0050     }
0051     QString tempNow()
0052     {
0053         return m_tempNow;
0054     };
0055     QString maxTemp()
0056     {
0057         QString arg = QString::number(m_maxTemp);
0058         if (this->m_isCelsius)
0059             arg += "°C";
0060         else
0061             arg += "°";
0062         return arg;
0063     };
0064     QString minTemp()
0065     {
0066         QString arg = QString::number(m_minTemp);
0067         if (this->m_isCelsius)
0068             arg += "°C";
0069         else
0070             arg += "°";
0071         return arg;
0072     };
0073     Q_INVOKABLE void openKClock();
0074 signals:
0075     void propertyChanged();
0076     void timeChanged();
0077     void dataUpdated();
0078     void locationChanged();
0079     void dateChanged();
0080 private slots:
0081     void updateAlarm(qulonglong time);
0082     void initialTimeUpdate(); // align time to minute mark
0083     void updateTime();
0084 
0085 private:
0086     void parse(QJsonDocument);
0087 
0088     QDBusInterface *m_KWeatherInterface, *m_KClockInterface;
0089 
0090     QString m_cityName;
0091     QString m_weatherIcon;
0092     QString m_description;
0093     QString m_tempNow;
0094     QString m_location;
0095     int m_maxTemp, m_minTemp;
0096     bool m_isCelsius;
0097 
0098     int m_minutesCounter; // count how many minutes have passed to track day change
0099 
0100     QLocale m_local = QLocale::system();
0101     bool m_hasAlarm = false;
0102     QString m_string;
0103     QTimer *m_timer;
0104     QProcess *m_process;
0105 };