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 };