Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kcalendarcore for openSUSE:Factory 
checked in at 2022-07-11 19:08:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kcalendarcore (Old)
 and      /work/SRC/openSUSE:Factory/.kcalendarcore.new.1523 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kcalendarcore"

Mon Jul 11 19:08:25 2022 rev:34 rq:988116 version:5.96.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kcalendarcore/kcalendarcore.changes      
2022-06-17 21:20:43.586715247 +0200
+++ /work/SRC/openSUSE:Factory/.kcalendarcore.new.1523/kcalendarcore.changes    
2022-07-11 19:09:34.679624489 +0200
@@ -1,0 +2,13 @@
+Sun Jul  3 11:55:47 UTC 2022 - Christophe Giboudeaux <christo...@krop.fr>
+
+- Update to 5.96.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/frameworks/5/5.96.0
+- Changes since 5.95.0:
+  * Don't drop custom properties with non-text value types
+  * Add calendar loading state property
+  * Fix UTC offset timezone loading with latest Qt 5.15.x
+  * Change the xCalFormat classes to use a hierarchical dptr
+
+-------------------------------------------------------------------

Old:
----
  kcalendarcore-5.95.0.tar.xz
  kcalendarcore-5.95.0.tar.xz.sig

New:
----
  kcalendarcore-5.96.0.tar.xz
  kcalendarcore-5.96.0.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kcalendarcore.spec ++++++
--- /var/tmp/diff_new_pack.93XTNg/_old  2022-07-11 19:09:35.079625069 +0200
+++ /var/tmp/diff_new_pack.93XTNg/_new  2022-07-11 19:09:35.091625087 +0200
@@ -16,14 +16,14 @@
 #
 
 
-%define _tar_path 5.95
+%define _tar_path 5.96
 # Full KF5 version (e.g. 5.33.0)
 %{!?_kf5_version: %global _kf5_version %{version}}
 # Last major and minor KF5 version (e.g. 5.33)
 %{!?_kf5_bugfix_version: %define _kf5_bugfix_version %(echo %{_kf5_version} | 
awk -F. '{print $1"."$2}')}
 %bcond_without released
 Name:           kcalendarcore
-Version:        5.95.0
+Version:        5.96.0
 Release:        0
 Summary:        Library to access and handle calendar data
 License:        LGPL-2.0-or-later


++++++ kcalendarcore-5.95.0.tar.xz -> kcalendarcore-5.96.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/CMakeLists.txt 
new/kcalendarcore-5.96.0/CMakeLists.txt
--- old/kcalendarcore-5.95.0/CMakeLists.txt     2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/CMakeLists.txt     2022-07-02 16:29:36.000000000 
+0200
@@ -1,11 +1,11 @@
 cmake_minimum_required(VERSION 3.16)
-set(KF_VERSION "5.95.0") # handled by release scripts
+set(KF_VERSION "5.96.0") # handled by release scripts
 
 project(KCalendarCore VERSION ${KF_VERSION})
 
 # ECM setup
 include(FeatureSummary)
-find_package(ECM 5.95.0  NO_MODULE)
+find_package(ECM 5.96.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL "https://commits.kde.org/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
@@ -22,6 +22,7 @@
 include(ECMGenerateHeaders)
 include(ECMGeneratePriFile)
 include(ECMGeneratePkgConfigFile)
+include(ECMDeprecationSettings)
 
 include(ECMSetupVersion)
 include(ECMQtDeclareLoggingCategory)
@@ -70,9 +71,9 @@
   INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
 )
 
-
-add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050f02)
-
+ecm_set_disabled_deprecation_versions(
+    QT 5.15.2
+)
 
 ########### Targets ###########
 add_subdirectory(src)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/autotests/testicalformat.cpp 
new/kcalendarcore-5.96.0/autotests/testicalformat.cpp
--- old/kcalendarcore-5.95.0/autotests/testicalformat.cpp       2022-06-04 
10:14:45.000000000 +0200
+++ new/kcalendarcore-5.96.0/autotests/testicalformat.cpp       2022-07-02 
16:29:36.000000000 +0200
@@ -512,3 +512,32 @@
     QCOMPARE(duration.asSeconds(), 7200);
     QCOMPARE(format.toString(duration), QLatin1String("PT2H"));
 }
+
+void ICalFormatTest::testNonTextCustomProperties()
+{
+    const auto input = QLatin1String(
+        "BEGIN:VCALENDAR\n"
+        "VERSION:2.0\n"
+        "BEGIN:VEVENT\n"
+        "X-APPLE-TRAVEL-START;ROUTING=CAR;VALUE=URI;X-ADDRESS=Bingerdenallee 
1\\n\n"
+        " 6921 JN Duiven\\nNederland;X-TITLE=Home:\n"
+        "X-APPLE-TRAVEL-DURATION;VALUE=DURATION:PT45M\n"
+        "X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Olympus 1\\n3524 WB 
Utre\n"
+        " cht\\nThe 
Netherlands;X-APPLE-RADIUS=49.91307222863458;X-TITLE=Olympus 1\n"
+        " :geo:52.063921,5.128511\n"
+        "BEGIN:VALARM\n"
+        "TRIGGER;X-APPLE-RELATED-TRAVEL=-PT30M:-PT1H15M\n"
+        "END:VALARM\n"
+        "END:VEVENT\n"
+        "END:VCALENDAR\n");
+    ICalFormat format;
+    MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
+    QVERIFY(format.fromString(cal, input));
+    const auto events = cal->events();
+    QCOMPARE(events.size(), 1);
+
+    const auto event = events[0];
+    QCOMPARE(event->nonKDECustomProperty("X-APPLE-TRAVEL-DURATION"), 
QLatin1String("PT45M"));
+    QCOMPARE(event->nonKDECustomProperty("X-APPLE-TRAVEL-START"), QString());
+    QCOMPARE(event->nonKDECustomProperty("X-APPLE-STRUCTURED-LOCATION"), 
QLatin1String("geo:52.063921,5.128511"));
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/autotests/testicalformat.h 
new/kcalendarcore-5.96.0/autotests/testicalformat.h
--- old/kcalendarcore-5.95.0/autotests/testicalformat.h 2022-06-04 
10:14:45.000000000 +0200
+++ new/kcalendarcore-5.96.0/autotests/testicalformat.h 2022-07-02 
16:29:36.000000000 +0200
@@ -31,6 +31,7 @@
     void testUidGenerationStability();
     void testUidGenerationUniqueness();
     void testIcalFormat();
+    void testNonTextCustomProperties();
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/CMakeLists.txt 
new/kcalendarcore-5.96.0/src/CMakeLists.txt
--- old/kcalendarcore-5.95.0/src/CMakeLists.txt 2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/CMakeLists.txt 2022-07-02 16:29:36.000000000 
+0200
@@ -101,7 +101,7 @@
     GROUP_BASE_NAME KF
     VERSION ${KF_VERSION}
     DEPRECATED_BASE_VERSION 0
-    DEPRECATION_VERSIONS 5.64 5.89 5.91 5.95
+    DEPRECATION_VERSIONS 5.64 5.89 5.91 5.95 5.96
     EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT}
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calendar.cpp 
new/kcalendarcore-5.96.0/src/calendar.cpp
--- old/kcalendarcore-5.95.0/src/calendar.cpp   2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/calendar.cpp   2022-07-02 16:29:36.000000000 
+0200
@@ -1401,3 +1401,18 @@
         Q_EMIT accessModeChanged();
     }
 }
+
+bool Calendar::isLoading() const
+{
+    return d->mIsLoading;
+}
+
+void Calendar::setIsLoading(bool isLoading)
+{
+    if (d->mIsLoading == isLoading) {
+        return;
+    }
+
+    d->mIsLoading = isLoading;
+    Q_EMIT isLoadingChanged();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calendar.h 
new/kcalendarcore-5.96.0/src/calendar.h
--- old/kcalendarcore-5.95.0/src/calendar.h     2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/calendar.h     2022-07-02 16:29:36.000000000 
+0200
@@ -138,6 +138,7 @@
     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
     Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged)
     Q_PROPERTY(KCalendarCore::AccessMode accessMode READ accessMode WRITE 
setAccessMode NOTIFY accessModeChanged)
+    Q_PROPERTY(bool isLoading READ isLoading NOTIFY isLoadingChanged)
 
 public:
     /**
@@ -338,6 +339,13 @@
     void setAccessMode(const AccessMode mode);
 
     /**
+     * Returns @c true if the calendar is still loading its data and thus
+     * read access will not return complete (or even any) results.
+     * @since 5.96
+     */
+    bool isLoading() const;
+
+    /**
       Clears out the current calendar, freeing all used memory etc.
     */
     virtual void close() = 0;
@@ -1482,6 +1490,15 @@
     bool deletionTracking() const;
 
     /**
+     * Sets the loading state of this calendar.
+     * This is false by default and only needs to be called for calendars
+     * that implement asynchronous loading.
+     * @since 5.96
+     * @see isLoading()
+     */
+    void setIsLoading(bool isLoading);
+
+    /**
       @copydoc
       IncidenceBase::virtual_hook()
     */
@@ -1529,6 +1546,13 @@
      */
     void ownerChanged();
 
+    /**
+     * Emitted when the loading state changed.
+     * @since 5.96
+     * @see isLoading()
+     */
+    void isLoadingChanged();
+
 private:
     friend class ICalFormat;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calendar_p.h 
new/kcalendarcore-5.96.0/src/calendar_p.h
--- old/kcalendarcore-5.95.0/src/calendar_p.h   2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/calendar_p.h   2022-07-02 16:29:36.000000000 
+0200
@@ -75,6 +75,7 @@
     QMap<QString, Incidence::List> mIncidenceRelations;
     bool batchAddingInProgress = false;
     bool mDeletionTracking = false;
+    bool mIsLoading = false;
     QString mId;
     QString mName;
     QIcon mIcon;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calformat.cpp 
new/kcalendarcore-5.96.0/src/calformat.cpp
--- old/kcalendarcore-5.95.0/src/calformat.cpp  2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/calformat.cpp  2022-07-02 16:29:36.000000000 
+0200
@@ -17,89 +17,74 @@
 */
 
 #include "calformat.h"
+#include "calformat_p.h"
 #include "exceptions.h"
 
 #include <QUuid>
 
 using namespace KCalendarCore;
 
-/**
-  Private class that helps to provide binary compatibility between releases.
-  @internal
-*/
-//@cond PRIVATE
-class Q_DECL_HIDDEN KCalendarCore::CalFormat::Private
-{
-public:
-    Private()
-    {
-    }
-    ~Private()
-    {
-        delete mException;
-    }
-    static QString mApplication; // Name of application, for creating unique 
ID strings
-    static QString mProductId; // PRODID string to write to calendar files
-    QString mLoadedProductId; // PRODID string loaded from calendar file
-    Exception *mException = nullptr;
-};
-
-QString CalFormat::Private::mApplication = QStringLiteral("libkcal");
-QString CalFormat::Private::mProductId = QStringLiteral("-//K Desktop 
Environment//NONSGML libkcal 4.3//EN");
-//@endcond
+CalFormatPrivate::~CalFormatPrivate() = default;
+
+QString CalFormatPrivate::mApplication = QStringLiteral("libkcal");
+QString CalFormatPrivate::mProductId = QStringLiteral("-//K Desktop 
Environment//NONSGML libkcal 4.3//EN");
 
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
 CalFormat::CalFormat()
-    : d(new KCalendarCore::CalFormat::Private)
+    : d_ptr(new KCalendarCore::CalFormatPrivate)
+{
+}
+#endif
+
+CalFormat::CalFormat(CalFormatPrivate *dd)
+    : d_ptr(dd)
 {
 }
 
 CalFormat::~CalFormat()
 {
     clearException();
-    delete d;
 }
 
 void CalFormat::clearException()
 {
-    delete d->mException;
-    d->mException = nullptr;
+    d_ptr->mException.reset();
 }
 
 void CalFormat::setException(Exception *exception)
 {
-    delete d->mException;
-    d->mException = exception;
+    d_ptr->mException.reset(exception);
 }
 
 Exception *CalFormat::exception() const
 {
-    return d->mException;
+    return d_ptr->mException.get();
 }
 
 void CalFormat::setApplication(const QString &application, const QString 
&productID)
 {
-    Private::mApplication = application;
-    Private::mProductId = productID;
+    CalFormatPrivate::mApplication = application;
+    CalFormatPrivate::mProductId = productID;
 }
 
 const QString &CalFormat::application()
 {
-    return Private::mApplication;
+    return CalFormatPrivate::mApplication;
 }
 
 const QString &CalFormat::productId()
 {
-    return Private::mProductId;
+    return CalFormatPrivate::mProductId;
 }
 
 QString CalFormat::loadedProductId()
 {
-    return d->mLoadedProductId;
+    return d_ptr->mLoadedProductId;
 }
 
 void CalFormat::setLoadedProductId(const QString &id)
 {
-    d->mLoadedProductId = id;
+    d_ptr->mLoadedProductId = id;
 }
 
 QString CalFormat::createUniqueId()
@@ -107,9 +92,11 @@
     return QUuid::createUuid().toString().mid(1, 36);
 }
 
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
 void CalFormat::virtual_hook(int id, void *data)
 {
     Q_UNUSED(id);
     Q_UNUSED(data);
     Q_ASSERT(false);
 }
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calformat.h 
new/kcalendarcore-5.96.0/src/calformat.h
--- old/kcalendarcore-5.95.0/src/calformat.h    2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/calformat.h    2022-07-02 16:29:36.000000000 
+0200
@@ -21,8 +21,11 @@
 
 #include <QString>
 
+#include <memory>
+
 namespace KCalendarCore
 {
+class CalFormatPrivate;
 class Exception;
 
 /**
@@ -35,10 +38,14 @@
 class KCALENDARCORE_EXPORT CalFormat
 {
 public:
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
     /**
       Constructs a new Calendar Format object.
+      @deprecated since 5.96, unused with the move to hierarchical dptrs.
     */
+    KCALENDARCORE_DEPRECATED_VERSION(5, 96, "unused, see API docs")
     CalFormat();
+#endif
 
     /**
       Destructor.
@@ -165,17 +172,26 @@
     */
     void setLoadedProductId(const QString &id);
 
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
     /**
       @copydoc
       IncidenceBase::virtual_hook()
+      @deprecated since 5.96 unused, hierarchical dptrs provide the same ABI 
compatible extension vector
+      as this class is not intended to be inherited externally.
     */
+    KCALENDARCORE_DEPRECATED_VERSION(5, 96, "unused, see API docs")
     virtual void virtual_hook(int id, void *data);
+#endif
+
+    //@cond PRIVATE
+    CalFormat(CalFormatPrivate *dd);
+    std::unique_ptr<CalFormatPrivate> d_ptr;
+    //@endcond
 
 private:
     //@cond PRIVATE
     Q_DISABLE_COPY(CalFormat)
-    class Private;
-    Private *const d;
+    Q_DECLARE_PRIVATE(CalFormat)
     //@endcond
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/calformat_p.h 
new/kcalendarcore-5.96.0/src/calformat_p.h
--- old/kcalendarcore-5.95.0/src/calformat_p.h  1970-01-01 01:00:00.000000000 
+0100
+++ new/kcalendarcore-5.96.0/src/calformat_p.h  2022-07-02 16:29:36.000000000 
+0200
@@ -0,0 +1,25 @@
+/*
+  SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumac...@kde.org>
+  SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KCALCORE_CALFORMAT_P_H
+#define KCALCORE_CALFORMAT_P_H
+
+#include "exceptions.h"
+
+namespace KCalendarCore
+{
+class CalFormatPrivate
+{
+public:
+    virtual ~CalFormatPrivate();
+
+    static QString mApplication; // Name of application, for creating unique 
ID strings
+    static QString mProductId; // PRODID string to write to calendar files
+    QString mLoadedProductId; // PRODID string loaded from calendar file
+    std::unique_ptr<Exception> mException;
+};
+}
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/icalformat.cpp 
new/kcalendarcore-5.96.0/src/icalformat.cpp
--- old/kcalendarcore-5.95.0/src/icalformat.cpp 2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/icalformat.cpp 2022-07-02 16:29:36.000000000 
+0200
@@ -17,6 +17,7 @@
 */
 #include "icalformat.h"
 #include "calendar_p.h"
+#include "calformat_p.h"
 #include "icalformat_p.h"
 #include "icaltimezones_p.h"
 #include "kcalendarcore_debug.h"
@@ -37,10 +38,10 @@
 using namespace KCalendarCore;
 
 //@cond PRIVATE
-class Q_DECL_HIDDEN KCalendarCore::ICalFormat::Private
+class KCalendarCore::ICalFormatPrivate : public KCalendarCore::CalFormatPrivate
 {
 public:
-    Private(ICalFormat *parent)
+    ICalFormatPrivate(ICalFormat *parent)
         : mImpl(parent)
         , mTimeZone(QTimeZone::utc())
     {
@@ -51,14 +52,13 @@
 //@endcond
 
 ICalFormat::ICalFormat()
-    : d(new Private(this))
+    : CalFormat(new ICalFormatPrivate(this))
 {
 }
 
 ICalFormat::~ICalFormat()
 {
     icalmemory_free_ring();
-    delete d;
 }
 
 bool ICalFormat::load(const Calendar::Ptr &calendar, const QString &fileName)
@@ -144,6 +144,8 @@
 
 Incidence::Ptr ICalFormat::readIncidence(const QByteArray &string)
 {
+    Q_D(ICalFormat);
+
     // Let's defend const correctness until the very gates of hell^Wlibical
     icalcomponent *calendar = icalcomponent_new_from_string(const_cast<char 
*>(string.constData()));
     if (!calendar) {
@@ -179,6 +181,8 @@
 
 bool ICalFormat::fromRawString(const Calendar::Ptr &cal, const QByteArray 
&string, bool deleted, const QString &notebook)
 {
+    Q_D(ICalFormat);
+
     // Get first VCALENDAR component.
     // TODO: Handle more than one VCALENDAR or non-VCALENDAR top components
     icalcomponent *calendar;
@@ -233,6 +237,8 @@
 
 Incidence::Ptr ICalFormat::fromString(const QString &string)
 {
+    Q_D(ICalFormat);
+
     MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone));
     fromString(cal, string);
 
@@ -242,6 +248,8 @@
 
 QString ICalFormat::toString(const Calendar::Ptr &cal, const QString 
&notebook, bool deleted)
 {
+    Q_D(ICalFormat);
+
     icalcomponent *calendar = d->mImpl.createCalendarComponent(cal);
     icalcomponent *component;
 
@@ -321,6 +329,8 @@
 
 QString ICalFormat::toICalString(const Incidence::Ptr &incidence)
 {
+    Q_D(ICalFormat);
+
     MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone));
     cal->addIncidence(Incidence::Ptr(incidence->clone()));
     return toString(cal.staticCast<Calendar>());
@@ -333,6 +343,7 @@
 
 QByteArray ICalFormat::toRawString(const Incidence::Ptr &incidence)
 {
+    Q_D(ICalFormat);
     TimeZoneList tzUsedList;
 
     icalcomponent *component = d->mImpl.writeIncidence(incidence, iTIPRequest, 
&tzUsedList);
@@ -364,6 +375,7 @@
 
 QString ICalFormat::toString(RecurrenceRule *recurrence)
 {
+    Q_D(ICalFormat);
     icalproperty *property = 
icalproperty_new_rrule(d->mImpl.writeRecurrenceRule(recurrence));
     QString text = QString::fromUtf8(icalproperty_as_ical_string(property));
     icalproperty_free(property);
@@ -372,6 +384,7 @@
 
 QString KCalendarCore::ICalFormat::toString(const KCalendarCore::Duration 
&duration) const
 {
+    Q_D(const ICalFormat);
     const auto icalDuration = d->mImpl.writeICalDuration(duration);
     // contrary to the libical API docs, the returned string is actually freed 
by icalmemory_free_ring,
     // freeing it here explicitly causes a double deletion failure
@@ -380,6 +393,7 @@
 
 bool ICalFormat::fromString(RecurrenceRule *recurrence, const QString &rrule)
 {
+    Q_D(ICalFormat);
     if (!recurrence) {
         return false;
     }
@@ -400,6 +414,7 @@
 
 Duration ICalFormat::durationFromString(const QString &duration) const
 {
+    Q_D(const ICalFormat);
     icalerror_clear_errno();
     const auto icalDuration = 
icaldurationtype_from_string(duration.toUtf8().constData());
     if (icalerrno != ICAL_NO_ERROR) {
@@ -411,6 +426,7 @@
 
 QString ICalFormat::createScheduleMessage(const IncidenceBase::Ptr &incidence, 
iTIPMethod method)
 {
+    Q_D(ICalFormat);
     icalcomponent *message = nullptr;
 
     if (incidence->type() == Incidence::TypeEvent || incidence->type() == 
Incidence::TypeTodo) {
@@ -456,6 +472,7 @@
 
 FreeBusy::Ptr ICalFormat::parseFreeBusy(const QString &str)
 {
+    Q_D(ICalFormat);
     clearException();
 
     icalcomponent *message = icalparser_parse_string(str.toUtf8().constData());
@@ -489,6 +506,7 @@
 
 ScheduleMessage::Ptr ICalFormat::parseScheduleMessage(const Calendar::Ptr 
&cal, const QString &messageText)
 {
+    Q_D(ICalFormat);
     setTimeZone(cal->timeZone());
     clearException();
 
@@ -645,22 +663,27 @@
 
 void ICalFormat::setTimeZone(const QTimeZone &timeZone)
 {
+    Q_D(ICalFormat);
     d->mTimeZone = timeZone;
 }
 
 QTimeZone ICalFormat::timeZone() const
 {
+    Q_D(const ICalFormat);
     return d->mTimeZone;
 }
 
 QByteArray ICalFormat::timeZoneId() const
 {
+    Q_D(const ICalFormat);
     return d->mTimeZone.id();
 }
 
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
 void ICalFormat::virtual_hook(int id, void *data)
 {
     Q_UNUSED(id);
     Q_UNUSED(data);
     Q_ASSERT(false);
 }
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/icalformat.h 
new/kcalendarcore-5.96.0/src/icalformat.h
--- old/kcalendarcore-5.95.0/src/icalformat.h   2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/icalformat.h   2022-07-02 16:29:36.000000000 
+0200
@@ -24,6 +24,7 @@
 namespace KCalendarCore
 {
 class FreeBusy;
+class ICalFormatPrivate;
 class Incidence;
 class IncidenceBase;
 class RecurrenceRule;
@@ -221,17 +222,21 @@
     Q_REQUIRED_RESULT QByteArray timeZoneId() const;
 
 protected:
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
     /**
       @copydoc
       IncidenceBase::virtual_hook()
     */
     void virtual_hook(int id, void *data) override;
+#endif
 
 private:
     //@cond PRIVATE
     Q_DISABLE_COPY(ICalFormat)
-    class Private;
-    Private *const d;
+    Q_DECLARE_PRIVATE(ICalFormat)
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
+    void *unused; // former dptr, just kept for ABI compatibility
+#endif
     //@endcond
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/icalformat_p.cpp 
new/kcalendarcore-5.96.0/src/icalformat_p.cpp
--- old/kcalendarcore-5.95.0/src/icalformat_p.cpp       2022-06-04 
10:14:45.000000000 +0200
+++ new/kcalendarcore-5.96.0/src/icalformat_p.cpp       2022-07-02 
16:29:36.000000000 +0200
@@ -1938,8 +1938,7 @@
                 // Calling icalvalue_get_text( value ) on a datetime value 
crashes.
                 nvalue = QString::fromUtf8(icalvalue_get_text(value));
             } else {
-                p = icalcomponent_get_next_property(parent, ICAL_X_PROPERTY);
-                continue;
+                nvalue = 
QString::fromUtf8(icalproperty_get_value_as_string(p));
             }
         }
         const char *name = icalproperty_get_x_name(p);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/icaltimezones.cpp 
new/kcalendarcore-5.96.0/src/icaltimezones.cpp
--- old/kcalendarcore-5.95.0/src/icaltimezones.cpp      2022-06-04 
10:14:45.000000000 +0200
+++ new/kcalendarcore-5.96.0/src/icaltimezones.cpp      2022-07-02 
16:29:36.000000000 +0200
@@ -486,7 +486,7 @@
 
         // If the VTIMEZONE is a known IANA time zone don't bother parsing the 
rest
         // of the VTIMEZONE, get QTimeZone directly from Qt
-        if (QTimeZone::isTimeZoneIdAvailable(icalTz.id)) {
+        if (QTimeZone::isTimeZoneIdAvailable(icalTz.id) || 
icalTz.id.startsWith("UTC")) {
             icalTz.qZone = QTimeZone(icalTz.id);
             return icalTz;
         } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/vcalformat.cpp 
new/kcalendarcore-5.96.0/src/vcalformat.cpp
--- old/kcalendarcore-5.95.0/src/vcalformat.cpp 2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/vcalformat.cpp 2022-07-02 16:29:36.000000000 
+0200
@@ -23,6 +23,7 @@
 */
 #include "vcalformat.h"
 #include "calendar.h"
+#include "calformat_p.h"
 #include "exceptions.h"
 
 #include "kcalendarcore_debug.h"
@@ -61,7 +62,7 @@
     c.remove(c.indexOf(x));
 }
 
-class Q_DECL_HIDDEN KCalendarCore::VCalFormat::Private
+class KCalendarCore::VCalFormatPrivate : public CalFormatPrivate
 {
 public:
     Calendar::Ptr mCalendar;
@@ -72,13 +73,12 @@
 //@endcond
 
 VCalFormat::VCalFormat()
-    : d(new KCalendarCore::VCalFormat::Private)
+    : CalFormat(new KCalendarCore::VCalFormatPrivate)
 {
 }
 
 VCalFormat::~VCalFormat()
 {
-    delete d;
 }
 
 static void mimeErrorHandler(char *e)
@@ -88,6 +88,7 @@
 
 bool VCalFormat::load(const Calendar::Ptr &calendar, const QString &fileName)
 {
+    Q_D(VCalFormat);
     d->mCalendar = calendar;
 
     clearException();
@@ -132,6 +133,7 @@
 
 bool VCalFormat::fromRawString(const Calendar::Ptr &calendar, const QByteArray 
&string, bool deleted, const QString &notebook)
 {
+    Q_D(VCalFormat);
     d->mCalendar = calendar;
 
     if (!string.size()) {
@@ -170,6 +172,7 @@
 
 Todo::Ptr VCalFormat::VTodoToEvent(VObject *vtodo)
 {
+    Q_D(VCalFormat);
     VObject *vo = nullptr;
     VObjectIterator voi;
     char *s = nullptr;
@@ -636,6 +639,7 @@
 
 Event::Ptr VCalFormat::VEventToEvent(VObject *vevent)
 {
+    Q_D(VCalFormat);
     VObject *vo = nullptr;
     VObjectIterator voi;
     char *s = nullptr;
@@ -1210,6 +1214,7 @@
 
 QString VCalFormat::qDateTimeToISO(const QDateTime &dt, bool zulu)
 {
+    Q_D(VCalFormat);
     if (!dt.isValid()) {
         return QString();
     }
@@ -1235,6 +1240,7 @@
 
 QDateTime VCalFormat::ISOToQDateTime(const QString &dtStr)
 {
+    Q_D(VCalFormat);
 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
     auto noAllocString = QStringView{dtStr};
 #else
@@ -1352,6 +1358,7 @@
 // that is used internally in the VCalFormat.
 void VCalFormat::populate(VObject *vcal, bool deleted, const QString &notebook)
 {
+    Q_D(VCalFormat);
     Q_UNUSED(notebook);
     // this function will populate the caldict dictionary and other event
     // lists. It turns vevents into Events and then inserts them.
@@ -1699,6 +1706,7 @@
 
 void VCalFormat::writeCustomProperties(VObject *o, const Incidence::Ptr &i)
 {
+    Q_D(VCalFormat);
     const QMap<QByteArray, QString> custom = i->customProperties();
     for (auto cIt = custom.cbegin(); cIt != custom.cend(); ++cIt) {
         const QByteArray property = cIt.key();
@@ -1710,9 +1718,11 @@
     }
 }
 
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
 void VCalFormat::virtual_hook(int id, void *data)
 {
     Q_UNUSED(id);
     Q_UNUSED(data);
     Q_ASSERT(false);
 }
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcalendarcore-5.95.0/src/vcalformat.h 
new/kcalendarcore-5.96.0/src/vcalformat.h
--- old/kcalendarcore-5.95.0/src/vcalformat.h   2022-06-04 10:14:45.000000000 
+0200
+++ new/kcalendarcore-5.96.0/src/vcalformat.h   2022-07-02 16:29:36.000000000 
+0200
@@ -47,6 +47,7 @@
 {
 class Event;
 class Todo;
+class VCalFormatPrivate;
 
 /**
   @brief
@@ -196,17 +197,21 @@
     void writeCustomProperties(VObject *o, const Incidence::Ptr &i);
 
 protected:
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
     /**
       @copydoc
       IncidenceBase::virtual_hook()
     */
     void virtual_hook(int id, void *data) override;
+#endif
 
 private:
     //@cond PRIVATE
     Q_DISABLE_COPY(VCalFormat)
-    class Private;
-    Private *const d;
+    Q_DECLARE_PRIVATE(VCalFormat)
+#if KCALENDARCORE_BUILD_DEPRECATED_SINCE(5, 96)
+    void *unused; // former dptr, just kept for ABI compatibility
+#endif
     //@endcond
 };
 

Reply via email to