File indexing completed on 2024-05-05 16:05:35
0001 /* 0002 This file is part of the kcalcore library. 0003 0004 SPDX-FileCopyrightText: 2005-2007 David Jarvie <djarvie@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 #ifndef KCALCORE_ICALTIMEZONES_P_H 0009 #define KCALCORE_ICALTIMEZONES_P_H 0010 0011 #include "incidencebase.h" 0012 #include "kcalendarcore_export.h" 0013 0014 #include <QHash> 0015 #include <QTimeZone> 0016 #include <QVector> 0017 0018 #ifndef ICALCOMPONENT_H 0019 typedef struct icalcomponent_impl icalcomponent; 0020 #endif 0021 #ifndef ICALTIMEZONE_DEFINED 0022 #define ICALTIMEZONE_DEFINED 0023 typedef struct _icaltimezone icaltimezone; 0024 #endif 0025 0026 namespace KCalendarCore 0027 { 0028 class ICalTimeZonePhase; 0029 0030 class ICalTimeZonePhase 0031 { 0032 public: 0033 void dump(); 0034 0035 QSet<QByteArray> abbrevs; // abbreviations of the phase 0036 int utcOffset = 0; // UTC offset of the phase 0037 QVector<QDateTime> transitions; // times on which transition into this phase occurs 0038 }; 0039 0040 class ICalTimeZone 0041 { 0042 public: 0043 void dump(); 0044 0045 QByteArray id; // original TZID 0046 QTimeZone qZone; // QTimeZone mapped from TZID 0047 ICalTimeZonePhase standard; // standard time 0048 ICalTimeZonePhase daylight; // DST time 0049 }; 0050 0051 class KCALENDARCORE_EXPORT ICalTimeZoneCache 0052 { 0053 public: 0054 explicit ICalTimeZoneCache(); 0055 0056 void insert(const QByteArray &id, const ICalTimeZone &tz); 0057 0058 QTimeZone tzForTime(const QDateTime &dt, const QByteArray &tzid) const; 0059 0060 private: 0061 QHash<QByteArray, ICalTimeZone> mCache; 0062 }; 0063 0064 using TimeZoneEarliestDate = QHash<QTimeZone, QDateTime>; 0065 0066 class KCALENDARCORE_EXPORT ICalTimeZoneParser 0067 { 0068 public: 0069 explicit ICalTimeZoneParser(ICalTimeZoneCache *cache); 0070 0071 void parse(icalcomponent *calendar); 0072 0073 static void updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliestDate); 0074 0075 static icaltimezone *icaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); 0076 static QByteArray vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); 0077 0078 private: 0079 static icalcomponent *icalcomponentFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); 0080 0081 ICalTimeZone parseTimeZone(icalcomponent *zone); 0082 bool parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase); 0083 QTimeZone resolveICalTimeZone(const ICalTimeZone &icalZone); 0084 0085 ICalTimeZoneCache *mCache; 0086 }; 0087 0088 } // namespace KCalendarCore 0089 0090 inline uint qHash(const QTimeZone &tz) 0091 { 0092 return qHash(tz.id()); 0093 } 0094 0095 #endif