Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kf6-kcalendarcore for
openSUSE:Factory checked in at 2026-05-11 16:50:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kcalendarcore (Old)
and /work/SRC/openSUSE:Factory/.kf6-kcalendarcore.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-kcalendarcore"
Mon May 11 16:50:53 2026 rev:27 rq:1352065 version:6.26.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kcalendarcore/kf6-kcalendarcore.changes
2026-04-11 22:27:26.318998208 +0200
+++
/work/SRC/openSUSE:Factory/.kf6-kcalendarcore.new.1966/kf6-kcalendarcore.changes
2026-05-11 16:55:28.268178353 +0200
@@ -1,0 +2,28 @@
+Sat May 2 07:52:30 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.26.0
+ * New feature release
+ * For more details please see:
+ * https://kde.org/announcements/frameworks/6/6.26.0
+- Changes since 6.25.0:
+ * Documentation fixes
+ * Update dependency version to 6.26.0
+ * Expose calendar color role in CalendarListModel
+ * Read/write calendar name from iCal
+ * Add support for the calendar color property
+ * Avoid failing the build on warnings in generated code
+ * Add Python bindings for KCalendarCore
+ * Remove undefined MAX_DATE symbol
+ * .gitlab-ci.yml - add clazy builds to merge requests
+ * clazy use-static-qregularexpression fix
+ * cppcheck unreadVariable fix
+ * clazy fully-qualified-moc-types fix
+ * clazy range-loop-detach fixes
+ * clazy range-loop-reference fix
+ * cppcheck variableScope fixes
+ * clazy detaching-temporary fixes
+ * cppcheck constVariablePointer fixes
+ * CI - cppcheck suppressions and define ICAL_CHECK_VERSION
+ * Update version to 6.26.0
+
+-------------------------------------------------------------------
Old:
----
kcalendarcore-6.25.0.tar.xz
kcalendarcore-6.25.0.tar.xz.sig
New:
----
kcalendarcore-6.26.0.tar.xz
kcalendarcore-6.26.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kf6-kcalendarcore.spec ++++++
--- /var/tmp/diff_new_pack.50T2ci/_old 2026-05-11 16:55:30.600274478 +0200
+++ /var/tmp/diff_new_pack.50T2ci/_new 2026-05-11 16:55:30.628275632 +0200
@@ -16,15 +16,28 @@
#
-%define qt6_version 6.8.0
+%define qt6_version 6.9.0
%define sonum 6
%define rname kcalendarcore
-# Full KF6 version (e.g. 6.25.0)
+
+%bcond_without kde_python_bindings
+%if %{with kde_python_bindings}
+%if 0%{suse_version} > 1500
+%define pythons %{primary_python}
+%else
+%{?sle15_python_module_pythons}
+%endif
+%define mypython %pythons
+%define __mypython %{expand:%%__%{mypython}}
+%define mypython_sitearch %{expand:%%%{mypython}_sitearch}
+%endif
+
+# Full KF6 version (e.g. 6.26.0)
%{!?_kf6_version: %global _kf6_version %{version}}
%bcond_without released
Name: kf6-kcalendarcore
-Version: 6.25.0
+Version: 6.26.0
Release: 0
Summary: Library to access and handle calendar data
License: LGPL-2.0-or-later
@@ -42,6 +55,16 @@
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
+# SECTION bindings
+%if %{with kde_python_bindings}
+BuildRequires: %{mypython}-build
+BuildRequires: %{mypython}-devel >= 3.9
+BuildRequires: %{mypython}-setuptools
+BuildRequires: %{mypython}-wheel
+BuildRequires: cmake(Shiboken6)
+BuildRequires: cmake(PySide6)
+%endif
+# /SECTION
%description
KCalendarCore is a library to provide access to and handling of calendar data.
@@ -77,6 +100,14 @@
scheduling standard iTIP. This package contains the headers necessary to
develop applications making use of KCalendarCore.
+%if %{with kde_python_bindings}
+%package -n python3-kf6-kcalendarcore
+Summary: Python bindings for kf6-kcalendarcore
+
+%description -n python3-kf6-kcalendarcore
+This package provides Python bindings for kf6-kcalendarcore.
+%endif
+
%prep
%autosetup -p1 -n %{rname}-%{version}
@@ -85,7 +116,11 @@
%define _lto_cflags %{nil}
%endif
-%cmake_kf6
+%cmake_kf6 \
+%if %{with kde_python_bindings}
+ -DPython_EXECUTABLE:STRING=%{__mypython}
+%endif
+%{nil}
%kf6_build
@@ -111,4 +146,14 @@
%{_kf6_includedir}/KCalendarCore/
%{_kf6_libdir}/libKF6CalendarCore.so
%{_kf6_pkgconfigdir}/KF6CalendarCore.pc
+%if %{with kde_python_bindings}
+%dir %{_includedir}/PySide6/
+%{_includedir}/PySide6/KCalendarCore/
+%endif
+
+%if %{with kde_python_bindings}
+%files -n python3-kf6-kcalendarcore
+%{mypython_sitearch}/*.so
+%{_kf6_sharedir}/PySide6/typesystems/typesystem_kcalendarcore.xml
+%endif
++++++ kcalendarcore-6.25.0.tar.xz -> kcalendarcore-6.26.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/.gitlab-ci.yml
new/kcalendarcore-6.26.0/.gitlab-ci.yml
--- old/kcalendarcore-6.25.0/.gitlab-ci.yml 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/.gitlab-ci.yml 2026-05-01 14:20:54.000000000
+0200
@@ -12,3 +12,24 @@
- /gitlab-templates/windows-qt6.yml
- /gitlab-templates/alpine-qt6.yml
- /gitlab-templates/pre-commit.yml
+
+build_clazy:
+ extends:
+ - .ci_linux_base
+ - .suse_tumbleweed_qt6stable
+ rules:
+ # only run on merge requests
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+ variables:
+ # remove/comment the CXXFLAGS if you don't want the build to fail on clazy
issues
+ CXXFLAGS: -Wno-deprecated-declarations
+ CC: clang
+ CXX: clazy
+ script:
+ - git config --global --add safe.directory $CI_PROJECT_DIR
+ - python3 -u ci-utilities/run-ci-build.py --project $CI_PROJECT_NAME
--branch $CI_COMMIT_REF_NAME --platform Linux/Qt6/Shared
--only-setup-environment
+ - mkdir -p /tmp/$CI_PROJECT_NAME-clazy-build
+ - cd /tmp/$CI_PROJECT_NAME-clazy-build
+ - cmake -DENABLE_PCH=OFF -DKF_SKIP_PO_PROCESSING=True -G Ninja
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/_install -DKF6DocTools_FOUND=false
$CI_PROJECT_DIR
+ - ninja -k 0
+ artifacts: null
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/.kde-ci.yml
new/kcalendarcore-6.26.0/.kde-ci.yml
--- old/kcalendarcore-6.25.0/.kde-ci.yml 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/.kde-ci.yml 2026-05-01 14:20:54.000000000
+0200
@@ -6,3 +6,4 @@
Options:
test-before-installing: True
require-passing-tests-on: ['@all']
+ cppcheck-arguments: '--enable=warning,performance,portability,style
--suppress-xml=cppcheck-suppressions.xml -DICAL_CHECK_VERSION(X,Y,Z)='
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/CMakeLists.txt
new/kcalendarcore-6.26.0/CMakeLists.txt
--- old/kcalendarcore-6.25.0/CMakeLists.txt 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/CMakeLists.txt 2026-05-01 14:20:54.000000000
+0200
@@ -1,11 +1,11 @@
cmake_minimum_required(VERSION 3.29)
-set(KF_VERSION "6.25.0") # handled by release scripts
+set(KF_VERSION "6.26.0") # handled by release scripts
project(KCalendarCore VERSION ${KF_VERSION})
# ECM setup
include(FeatureSummary)
-find_package(ECM 6.25.0 NO_MODULE)
+find_package(ECM 6.26.0 NO_MODULE)
set_package_properties(
ECM
PROPERTIES
@@ -82,6 +82,32 @@
REQUIRED
)
+option(BUILD_PYTHON_BINDINGS "Build Python bindings" ON)
+
+# Only Linux and FreeBSD CI has the relevant packages
+if(ANDROID OR APPLE OR WIN32 OR HAIKU OR NOT BUILD_SHARED_LIBS)
+ set(BUILD_PYTHON_BINDINGS OFF)
+endif()
+
+if(BUILD_PYTHON_BINDINGS)
+ find_package(
+ Python3
+ 3.9
+ REQUIRED
+ COMPONENTS
+ Interpreter
+ Development
+ )
+ find_package(Shiboken6 REQUIRED)
+ find_package(PySide6 REQUIRED)
+endif()
+
+add_feature_info(
+ PYTHON_BINDINGS
+ ${BUILD_PYTHON_BINDINGS}
+ "Python bindings"
+)
+
########### CMake Config Files ###########
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6CalendarCore")
@@ -98,6 +124,11 @@
########### Targets ###########
add_subdirectory(src)
+if(BUILD_PYTHON_BINDINGS)
+ include(ECMGeneratePythonBindings)
+ add_subdirectory(python)
+endif()
+
if(BUILD_TESTING)
find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Test)
add_subdirectory(autotests)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kcalendarcore-6.25.0/autotests/testcalendarobserver.cpp
new/kcalendarcore-6.26.0/autotests/testcalendarobserver.cpp
--- old/kcalendarcore-6.25.0/autotests/testcalendarobserver.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/autotests/testcalendarobserver.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -36,7 +36,7 @@
void incidenceAdded(const KCalendarCore::Incidence::Ptr &incidence);
void incidenceChanged(const KCalendarCore::Incidence::Ptr &incidence);
void incidenceAboutToBeDeleted(const KCalendarCore::Incidence::Ptr
&incidence);
- void incidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence,
const Calendar *calendar);
+ void incidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence,
const KCalendarCore::Calendar *calendar);
protected:
void calendarIncidenceAdded(const KCalendarCore::Incidence::Ptr
&incidence) override
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/autotests/testicalformat.cpp
new/kcalendarcore-6.26.0/autotests/testicalformat.cpp
--- old/kcalendarcore-6.25.0/autotests/testicalformat.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/autotests/testicalformat.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -18,6 +18,7 @@
QTEST_MAIN(ICalFormatTest)
+using namespace Qt::Literals;
using namespace KCalendarCore;
void ICalFormatTest::testDeserializeSerialize()
@@ -196,7 +197,7 @@
Incidence::Ptr event2 = format.fromString(serializedCalendar);
QVERIFY(event2->attendeeCount() == 1);
- Attendee attendee2 = event2->attendees()[0];
+ Attendee attendee2 = event2->attendees().at(0);
QVERIFY(attendee2.cuType() == attendee.cuType());
QVERIFY(attendee2.name() == attendee.name());
QVERIFY(attendee2.email() == attendee.email());
@@ -216,7 +217,7 @@
+ format.toString(event.staticCast<Incidence>()) +
QLatin1String("\nEND:VCALENDAR");
Incidence::Ptr event2 = format.fromString(serialized);
- Alarm::Ptr alarm2 = event2->alarms()[0];
+ Alarm::Ptr alarm2 = event2->alarms().at(0);
QCOMPARE(*alarm, *alarm2);
}
@@ -545,4 +546,34 @@
QCOMPARE(recurrence->endDate(), QDate(2024, 4, 1));
}
+void ICalFormatTest::testCalendarProperties()
+{
+ const auto input = R"(
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Hugo Calendar Templates//Event Template//EN
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+UID:5562947a-9f8d-4a38-9ed5-1536cb3a21f0
+LAST-MODIFIED:20260414T171115Z
+URL:https://kde.org/community/calendar/
+REFRESH-INTERVAL;VALUE=DURATION:P1W
+SOURCE;VALUE=URI:https://kde.org/community/calendar/calendar.ics
+COLOR:crimson
+NAME;LANGUAGE=en-US:KDE Community Calendar
+DESCRIPTION;LANGUAGE=en-US:All the community events where you can find the KDE
Community.
+X-WR-CALNAME:KDE Community Calendar
+X-WR-CALDESC:All the community events where you can find the KDE Community.
+END:VCALENDAR)";
+ ICalFormat format;
+ MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
+ QVERIFY(format.fromString(cal, QLatin1StringView(input)));
+ QCOMPARE(cal->name(), "KDE Community Calendar"_L1);
+ QCOMPARE(cal->color(), "crimson"_L1);
+ cal->setColor(u"blue"_s);
+ cal->setName(u"Test Calendar Name"_s);
+ QVERIFY(format.toString(cal).contains("COLOR:blue"_L1));
+ QVERIFY(format.toString(cal).contains("NAME:Test Calendar Name"_L1));
+}
+
#include "moc_testicalformat.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/autotests/testicalformat.h
new/kcalendarcore-6.26.0/autotests/testicalformat.h
--- old/kcalendarcore-6.25.0/autotests/testicalformat.h 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/autotests/testicalformat.h 2026-05-01
14:20:54.000000000 +0200
@@ -33,6 +33,7 @@
void testNonTextCustomProperties();
void testAllDaySchedulingMessage();
void testAllDayRecurringUntil();
+ void testCalendarProperties();
};
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/cppcheck-suppressions.xml
new/kcalendarcore-6.26.0/cppcheck-suppressions.xml
--- old/kcalendarcore-6.25.0/cppcheck-suppressions.xml 1970-01-01
01:00:00.000000000 +0100
+++ new/kcalendarcore-6.26.0/cppcheck-suppressions.xml 2026-05-01
14:20:54.000000000 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<suppressions>
+ <suppress>
+ <id>useStlAlgorithm</id>
+ </suppress>
+ <suppress>
+ <id>shadowFunction</id>
+ </suppress>
+ <suppress>
+ <id>functionStatic</id>
+ </suppress>
+</suppressions>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/python/CMakeLists.txt
new/kcalendarcore-6.26.0/python/CMakeLists.txt
--- old/kcalendarcore-6.25.0/python/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/kcalendarcore-6.26.0/python/CMakeLists.txt 2026-05-01
14:20:54.000000000 +0200
@@ -0,0 +1,79 @@
+# SPDX-FileCopyrightText: 2026 Kevin Ottens <[email protected]>
+# SPDX-License-Identifier: BSD-2-Clause
+
+set(bindings_library "KCalendarCore")
+
+set(wrapped_header ${CMAKE_CURRENT_SOURCE_DIR}/bindings.h)
+set(typesystem_file ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_kcalendarcore.xml)
+
+set(generated_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_module_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_alarm_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_attachment_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_attendee_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calendarlistmodel_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calendarpluginloader_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calendarplugin_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calendar_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calfilter_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calformat_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_calstorage_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_conference_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_customproperties_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_duration_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_events_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_event_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_exception_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_filestorage_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_freebusycache_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_freebusyperiod_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_freebusy_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_icalformat_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_incidencebase_incidenceobserver_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_incidencebase_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_incidences_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_incidence_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_journals_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_journal_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_memorycalendar_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_occurrenceiterator_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_period_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_person_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_recurrence_recurrenceobserver_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_recurrencerule_ruleobserver_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_recurrencerule_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_recurrence_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_schedulemessage_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_todos_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_todo_wrapper.cpp
+
${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_vcalformat_wrapper.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/KCalendarCore/kcalendarcore_visitor_wrapper.cpp
+)
+
+ecm_generate_python_bindings(
+ PACKAGE_NAME ${bindings_library}
+ VERSION ${KF_VERSION}
+ WRAPPED_HEADER ${wrapped_header}
+ TYPESYSTEM ${typesystem_file}
+ EXPORT_TYPESYSTEM
+ GENERATED_SOURCES ${generated_sources}
+ DEPENDENCIES KF6::CalendarCore
+ QT_VERSION ${REQUIRED_QT_VERSION}
+ HOMEPAGE_URL "https://invent.kde.org/frameworks/kcalendarcore"
+ ISSUES_URL
"https://bugs.kde.org/describecomponents.cgi?product=frameworks-kcalendarcore"
+ AUTHOR "The KDE Community"
+ README ../README.md
+)
+
+target_link_libraries(${bindings_library} PRIVATE KF6CalendarCore)
+
+execute_process(
+ COMMAND
+ ${Python_EXECUTABLE} -Esc
+ "import sysconfig; print(sysconfig.get_path('platlib',
vars={'platbase': '${CMAKE_INSTALL_PREFIX}', 'base':
'${CMAKE_INSTALL_PREFIX}'}))"
+ OUTPUT_VARIABLE sysconfig_output
+)
+string(STRIP ${sysconfig_output} PYTHON_INSTALL_DIR)
+
+install(TARGETS ${bindings_library} LIBRARY DESTINATION
"${PYTHON_INSTALL_DIR}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/python/bindings.h
new/kcalendarcore-6.26.0/python/bindings.h
--- old/kcalendarcore-6.25.0/python/bindings.h 1970-01-01 01:00:00.000000000
+0100
+++ new/kcalendarcore-6.26.0/python/bindings.h 2026-05-01 14:20:54.000000000
+0200
@@ -0,0 +1,41 @@
+// SPDX-FileCopyrightText: 2026 Kevin Ottens <[email protected]>
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR
LicenseRef-KDE-Accepted-LGPL
+
+#pragma once
+
+#include <QBitArray>
+
+#include <KCalendarCore/Alarm>
+#include <KCalendarCore/Attachment>
+#include <KCalendarCore/Attendee>
+#include <KCalendarCore/CalFilter>
+#include <KCalendarCore/CalFormat>
+#include <KCalendarCore/CalStorage>
+#include <KCalendarCore/Calendar>
+#include <KCalendarCore/CalendarListModel>
+#include <KCalendarCore/CalendarPlugin>
+#include <KCalendarCore/CalendarPluginLoader>
+#include <KCalendarCore/Conference>
+#include <KCalendarCore/CustomProperties>
+#include <KCalendarCore/Duration>
+#include <KCalendarCore/Event>
+#include <KCalendarCore/Exceptions>
+#include <KCalendarCore/FileStorage>
+#include <KCalendarCore/FreeBusy>
+#include <KCalendarCore/FreeBusyCache>
+#include <KCalendarCore/FreeBusyPeriod>
+#include <KCalendarCore/ICalFormat>
+#include <KCalendarCore/Incidence>
+#include <KCalendarCore/IncidenceBase>
+#include <KCalendarCore/Journal>
+#include <KCalendarCore/MemoryCalendar>
+#include <KCalendarCore/OccurrenceIterator>
+#include <KCalendarCore/Period>
+#include <KCalendarCore/Person>
+#include <KCalendarCore/Recurrence>
+#include <KCalendarCore/RecurrenceRule>
+#include <KCalendarCore/ScheduleMessage>
+#include <KCalendarCore/Sorting>
+#include <KCalendarCore/Todo>
+#include <KCalendarCore/VCalFormat>
+#include <KCalendarCore/Visitor>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kcalendarcore-6.25.0/python/typesystem_kcalendarcore.xml
new/kcalendarcore-6.26.0/python/typesystem_kcalendarcore.xml
--- old/kcalendarcore-6.25.0/python/typesystem_kcalendarcore.xml
1970-01-01 01:00:00.000000000 +0100
+++ new/kcalendarcore-6.26.0/python/typesystem_kcalendarcore.xml
2026-05-01 14:20:54.000000000 +0200
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<typesystem package="KCalendarCore">
+<!--
+SPDX-FileCopyrightText: 2026 Kevin Ottens <[email protected]>
+SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR
LicenseRef-KDE-Accepted-LGPL
+-->
+ <load-typesystem name="typesystem_core.xml" generate="no"/>
+ <load-typesystem name="typesystem_gui.xml" generate="no"/>
+
+ <namespace-type name="KCalendarCore">
+ <enum-type name="AccessMode"/>
+ <enum-type name="EventSortField"/>
+ <enum-type name="iTIPMethod"/>
+ <enum-type name="JournalSortField"/>
+ <enum-type name="SortDirection"/>
+ <enum-type name="TodoSortField"/>
+
+ <object-type name="Alarm">
+ <enum-type name="Type"/>
+ </object-type>
+ <value-type name="Attachment"/>
+ <value-type name="Attendee">
+ <enum-type name="CuType"/>
+ <enum-type name="PartStat"/>
+ <enum-type name="Role"/>
+ </value-type>
+ <object-type name="Calendar" disable-wrapper="yes"/>
+ <object-type name="CalendarListModel">
+ <enum-type name="Role"/>
+ </object-type>
+ <object-type name="CalendarPlugin" force-abstract="yes"
disable-wrapper="yes"/>
+ <object-type name="CalendarPluginLoader"/>
+ <object-type name="CalFilter">
+ <enum-type name="Criteria"/>
+ </object-type>
+ <object-type name="CalFormat"/>
+ <object-type name="CalStorage"/>
+ <value-type name="Conference"/>
+ <object-type name="CustomProperties"/>
+ <value-type name="Duration">
+ <enum-type name="Type"/>
+ </value-type>
+ <object-type name="Event">
+ <enum-type name="Transparency"/>
+ </object-type>
+ <object-type name="Exception">
+ <enum-type name="ErrorCode"/>
+ </object-type>
+ <object-type name="FileStorage"/>
+ <object-type name="FreeBusy"/>
+ <object-type name="FreeBusyCache" force-abstract="yes"
disable-wrapper="yes"/>
+ <object-type name="FreeBusyPeriod">
+ <enum-type name="FreeBusyType"/>
+ </object-type>
+ <object-type name="ICalFormat"/>
+ <object-type name="IncidenceBase">
+ <enum-type name="DateTimeRole"/>
+ <enum-type name="Field"/>
+ <enum-type name="IncidenceType"/>
+ <enum-type name="VirtualHook"/>
+ <object-type name="IncidenceObserver"/>
+ <modify-function signature="assign(const
KCalendarCore::IncidenceBase &)" remove="all"/>
+ </object-type>
+ <object-type name="Incidence">
+ <enum-type name="RelType"/>
+ <enum-type name="Secrecy"/>
+ <enum-type name="Status"/>
+ </object-type>
+ <object-type name="Journal"/>
+ <object-type name="MemoryCalendar"/>
+ <object-type name="OccurrenceIterator"/>
+ <value-type name="Period"/>
+ <object-type name="Person"/>
+ <object-type name="Recurrence">
+ <object-type name="RecurrenceObserver"/>
+ </object-type>
+ <value-type name="RecurrenceRule">
+ <object-type name="RuleObserver"/>
+ <enum-type name="PeriodType"/>
+ <modify-function signature="endDt(bool*) const">
+ <modify-argument index="1">
+ <remove-argument />
+ </modify-argument>
+ </modify-function>
+ </value-type>
+ <object-type name="ScheduleMessage">
+ <enum-type name="Status"/>
+ </object-type>
+ <object-type name="Todo"/>
+ <object-type name="VCalFormat"/>
+ <object-type name="Visitor"/>
+
+ <namespace-type name="Events"/>
+ <namespace-type name="Todos"/>
+ <namespace-type name="Journals"/>
+ <namespace-type name="Incidences"/>
+
+ </namespace-type>
+
+</typesystem>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/calendar.cpp
new/kcalendarcore-6.26.0/src/calendar.cpp
--- old/kcalendarcore-6.25.0/src/calendar.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/calendar.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -231,11 +231,10 @@
{
const Incidence::List rawInc = rawIncidences();
QStringList uniqueCategories;
- QStringList thisCats;
// @TODO: For now just iterate over all incidences. In the future,
// the list of categories should be built when reading the file.
for (const Incidence::Ptr &inc : rawInc) {
- thisCats = inc->categories();
+ QStringList thisCats = inc->categories();
for (const auto &cat : std::as_const(thisCats)) {
if (!uniqueCategories.contains(cat)) {
uniqueCategories.append(cat);
@@ -983,6 +982,20 @@
Q_EMIT iconChanged();
}
+QString Calendar::color() const
+{
+ return d->mColor;
+}
+
+void Calendar::setColor(const QString &color)
+{
+ if (d->mColor == color) {
+ return;
+ }
+ d->mColor = color;
+ Q_EMIT colorChanged();
+}
+
AccessMode Calendar::accessMode() const
{
return d->mAccessMode;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/calendar.h
new/kcalendarcore-6.26.0/src/calendar.h
--- old/kcalendarcore-6.25.0/src/calendar.h 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/calendar.h 2026-05-01 14:20:54.000000000
+0200
@@ -258,6 +258,21 @@
Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged)
/*!
+ * \qmlproperty string calendar::color
+ * \since 6.26
+ *
+ * This calendar's color.
+ */
+
+ /*!
+ * \property KCalendarCore::Calendar::color
+ * \since 6.26
+ *
+ * This calendar's color.
+ */
+ Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
+
+ /*!
* \qmlproperty KCalendarCore::AccessMode calendar::accessMode
*/
@@ -465,6 +480,20 @@
void setIcon(const QIcon &icon);
/*!
+ * Returns this calendar's color.
+ * \sa RFC 7986 ยง5.9
+ * \since 6.26
+ */
+ [[nodiscard]] QString color() const;
+
+ /*!
+ * Sets this calendar's \a color.
+ * \since 6.26
+ * \sa color()
+ */
+ void setColor(const QString &color);
+
+ /*!
* Returns this calendar's AccessMode, i.e. whether it is writable or
read-only.
* Defaults to ReadWrite.
* \since 5.85
@@ -1392,6 +1421,13 @@
void iconChanged();
/*!
+ * Emitted when the icon color changes.
+ * \since 6.26
+ * \sa color()
+ */
+ void colorChanged();
+
+ /*!
* Emitted when the AccessMode changes.
* \since 5.85
* \sa accessMode()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/calendar_p.h
new/kcalendarcore-6.26.0/src/calendar_p.h
--- old/kcalendarcore-6.25.0/src/calendar_p.h 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/calendar_p.h 2026-05-01 14:20:54.000000000
+0200
@@ -66,6 +66,7 @@
QString mId;
QString mName;
QIcon mIcon;
+ QString mColor;
AccessMode mAccessMode = ReadWrite;
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/calendarlistmodel.cpp
new/kcalendarcore-6.26.0/src/calendarlistmodel.cpp
--- old/kcalendarcore-6.25.0/src/calendarlistmodel.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/src/calendarlistmodel.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -55,13 +55,15 @@
case NameRole:
return cal->name();
case IconRole:
- return cal->icon();
+ return cal->icon().isNull() ? QVariant() : cal->icon();
case CalendarRole:
return QVariant::fromValue(cal.get());
case AccessModeRole:
return cal->accessMode();
case IdRole:
return cal->id();
+ case ColorRole:
+ return cal->color();
}
return {};
@@ -75,6 +77,7 @@
n.insert(CalendarRole, "calendar");
n.insert(AccessModeRole, "accessMode");
n.insert(IdRole, "id");
+ n.insert(ColorRole, "color");
return n;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/calendarlistmodel.h
new/kcalendarcore-6.26.0/src/calendarlistmodel.h
--- old/kcalendarcore-6.25.0/src/calendarlistmodel.h 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/src/calendarlistmodel.h 2026-05-01
14:20:54.000000000 +0200
@@ -45,6 +45,8 @@
The access mode of the calendar (see KCalendarCore::AccessMode).
\value IdRole
The internal calendar id.
+ \value[since 6.26] ColorRole
+ The calendar color.
*/
enum Role {
NameRole = Qt::DisplayRole,
@@ -52,6 +54,7 @@
CalendarRole = Qt::UserRole,
AccessModeRole,
IdRole,
+ ColorRole,
};
[[nodiscard]] int rowCount(const QModelIndex &parent = {}) const override;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/compat.cpp
new/kcalendarcore-6.26.0/src/compat.cpp
--- old/kcalendarcore-6.25.0/src/compat.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/compat.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -34,13 +34,14 @@
{
Compat *compat = nullptr;
+ static QRegularExpression regexp(QStringLiteral("[ /]"));
int korg = productId.indexOf(QLatin1String("KOrganizer"));
int outl9 = productId.indexOf(QLatin1String("Outlook 9.0"));
if (korg >= 0) {
int versionStart = productId.indexOf(QLatin1Char(' '), korg);
if (versionStart >= 0) {
- int versionStop =
productId.indexOf(QRegularExpression(QStringLiteral("[ /]")), versionStart + 1);
+ int versionStop = productId.indexOf(regexp, versionStart + 1);
if (versionStop >= 0) {
QString version = productId.mid(versionStart + 1, versionStop
- versionStart - 1);
@@ -86,6 +87,7 @@
void Compat::fixEmptySummary(const Incidence::Ptr &incidence)
{
+ static QRegularExpression regexp(QStringLiteral("\n.*"));
// some stupid vCal exporters ignore the standard and use Description
// instead of Summary for the default field. Correct for this: Copy the
// first line of the description to the summary (if summary is just one
@@ -93,7 +95,7 @@
if (incidence->summary().isEmpty() &&
!(incidence->description().isEmpty())) {
QString oldDescription = incidence->description().trimmed();
QString newSummary(oldDescription);
- newSummary.remove(QRegularExpression(QStringLiteral("\n.*")));
+ newSummary.remove(regexp);
incidence->setSummary(newSummary);
if (oldDescription == newSummary) {
incidence->setDescription(QLatin1String(""));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/icalformat_p.cpp
new/kcalendarcore-6.26.0/src/icalformat_p.cpp
--- old/kcalendarcore-6.25.0/src/icalformat_p.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/src/icalformat_p.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -343,9 +343,9 @@
writeIncidence(vjournal, journal.staticCast<Incidence>(), tzUsedList);
// start time
- icalproperty *prop = nullptr;
QDateTime dt = journal->dtStart();
if (dt.isValid()) {
+ icalproperty *prop = nullptr;
icaltimetype start;
if (journal->allDay()) {
start = writeICalDate(dt.date());
@@ -813,7 +813,7 @@
r.freq = toIcalEnum(recur->recurrenceType());
#endif
- int index = 0;
+ int index;
QList<int> bys;
// Now write out the BY* parts:
@@ -2614,6 +2614,18 @@
icalproperty_set_x_name(p, IMPLEMENTATION_VERSION_XPROPERTY);
icalcomponent_add_property(calendar, p);
+ // calendar name
+ if (cal && !cal->name().isEmpty()) {
+ auto p = icalproperty_new_name(cal->name().toUtf8().constData());
+ icalcomponent_add_property(calendar, p);
+ }
+
+ // calendar color
+ if (cal && !cal->color().isEmpty()) {
+ auto p = icalproperty_new_color(cal->color().toUtf8().constData());
+ icalcomponent_add_property(calendar, p);
+ }
+
// Add time zone
// NOTE: Commented out since relevant timezones are added by the caller.
// Previously we got some timezones listed twice in the ical file.
@@ -2735,6 +2747,16 @@
}
}
+ // calendar name
+ if (p = icalcomponent_get_first_property(calendar, ICAL_NAME_PROPERTY); p)
{
+ cal->setName(QString::fromUtf8(icalproperty_get_value_as_string(p)));
+ }
+
+ // calendar color
+ if (p = icalcomponent_get_first_property(calendar, ICAL_COLOR_PROPERTY);
p) {
+ cal->setColor(QString::fromUtf8(icalproperty_get_value_as_string(p)));
+ }
+
// Populate the calendar's time zone collection with all VTIMEZONE
components
ICalTimeZoneCache timeZoneCache;
ICalTimeZoneParser parser(&timeZoneCache);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/memorycalendar.cpp
new/kcalendarcore-6.26.0/src/memorycalendar.cpp
--- old/kcalendarcore-6.25.0/src/memorycalendar.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/src/memorycalendar.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -230,7 +230,7 @@
instances.append(it.value());
}
}
- for (Incidence::Ptr instance : instances) {
+ for (Incidence::Ptr &instance : instances) {
deleteIncidence(instance);
}
@@ -391,7 +391,7 @@
QDateTime nd(end, QTime(23, 59, 59, 999), ts);
// Get todos
- for (const auto &incidence : d->mIncidences[Incidence::TypeTodo]) {
+ for (const auto &incidence :
std::as_const(d->mIncidences[Incidence::TypeTodo])) {
const auto todo = incidence.staticCast<Todo>();
QDateTime rStart = todo->hasDueDate() ? todo->dtDue() :
todo->hasStartDate() ? todo->dtStart() : QDateTime();
@@ -518,7 +518,7 @@
// When dstart changes, move recurrence ids of exception accordingly.
if (inc->recurs() && inc->dtStart() != d->mDtStartBeingUpdated) {
const Duration delta(d->mDtStartBeingUpdated, inc->dtStart());
- for (Incidence::Ptr exception : instances(inc)) {
+ for (Incidence::Ptr &exception : instances(inc)) {
exception->setRecurrenceId(delta.end(exception->recurrenceId()));
}
}
@@ -552,7 +552,7 @@
// Iterate over all events. Look for recurring events that occur on this
date
const auto ts = timeZone.isValid() ? timeZone : this->timeZone();
- for (const auto &event : d->mIncidences[Incidence::TypeEvent]) {
+ for (const auto &event :
std::as_const(d->mIncidences[Incidence::TypeEvent])) {
const auto ev = event.staticCast<Event>();
if (ev->recurs()) {
if (ev->isMultiDay()) {
@@ -588,7 +588,7 @@
QDateTime nd(end, QTime(23, 59, 59, 999), ts);
// Get non-recurring events
- for (const auto &e : d->mIncidences[Incidence::TypeEvent]) {
+ for (const auto &e : std::as_const(d->mIncidences[Incidence::TypeEvent])) {
const auto event = e.staticCast<Event>();
QDateTime rStart = event->dtStart();
if (nd.isValid() && nd < rStart) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/person.cpp
new/kcalendarcore-6.26.0/src/person.cpp
--- old/kcalendarcore-6.25.0/src/person.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/person.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -91,7 +91,7 @@
}
// Taken from KContacts::Addressee::fullEmail
QString fullName = name;
- const QRegularExpression needQuotes(QStringLiteral("[^
0-9A-Za-z\\x{0080}-\\x{FFFF}]"));
+ static QRegularExpression needQuotes(QStringLiteral("[^
0-9A-Za-z\\x{0080}-\\x{FFFF}]"));
bool weNeedToQuote = name.indexOf(needQuotes) != -1;
if (weNeedToQuote) {
if (fullName[0] != QLatin1Char('"')) {
@@ -172,12 +172,10 @@
const int len = aStr.length();
const char cQuotes = '"';
- bool bInComment = false;
+ bool bInComment;
bool bInQuotesOutsideOfEmail = false;
int i = 0;
int iAd = 0;
- int iMailStart = 0;
- int iMailEnd = 0;
QChar c;
unsigned int commentstack = 0;
@@ -223,6 +221,8 @@
}
} else {
+ int iMailStart = 0;
+ int iMailEnd = 0;
// Loop backwards until we find the start of the string
// or a ',' that is outside of a comment
// and outside of quoted text before the leading '<'.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/recurrence.cpp
new/kcalendarcore-6.26.0/src/recurrence.cpp
--- old/kcalendarcore-6.25.0/src/recurrence.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/recurrence.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -466,7 +466,7 @@
int Recurrence::duration() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->duration() : 0;
}
@@ -530,7 +530,7 @@
rr->shiftTimes(oldTz, newTz);
}
- for (auto exR : d->mExRules) {
+ for (auto &exR : d->mExRules) {
exR->shiftTimes(oldTz, newTz);
}
}
@@ -599,7 +599,7 @@
int Recurrence::frequency() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->frequency() : 0;
}
@@ -622,7 +622,7 @@
int Recurrence::weekStart() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->weekStart() : 1;
}
@@ -631,7 +631,7 @@
{
QBitArray days(7);
days.fill(0);
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
if (rrule) {
const QList<RecurrenceRule::WDayPos> &bydays = rrule->byDays();
for (int i = 0; i < bydays.size(); ++i) {
@@ -648,7 +648,7 @@
// Emulate the old behavior
QList<int> Recurrence::monthDays() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
if (rrule) {
return rrule->byMonthDays();
} else {
@@ -659,7 +659,7 @@
// Emulate the old behavior
QList<RecurrenceRule::WDayPos> Recurrence::monthPositions() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->byDays() : QList<RecurrenceRule::WDayPos>();
}
@@ -667,7 +667,7 @@
QList<int> Recurrence::yearDays() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->byYearDays() : QList<int>();
}
@@ -678,7 +678,7 @@
QList<int> Recurrence::yearMonths() const
{
- RecurrenceRule *rrule = defaultRRuleConst();
+ const RecurrenceRule *rrule = defaultRRuleConst();
return rrule ? rrule->byMonths() : QList<int>();
}
@@ -796,7 +796,7 @@
return;
}
- RecurrenceRule *rrule = defaultRRule(false);
+ const RecurrenceRule *rrule = defaultRRule(false);
if (!rrule) {
return;
}
@@ -835,7 +835,7 @@
return;
}
- RecurrenceRule *rrule = defaultRRule(true);
+ const RecurrenceRule *rrule = defaultRRule(true);
if (!rrule) {
return;
}
@@ -880,7 +880,7 @@
// Daynumber within year
void Recurrence::addYearlyDay(int day)
{
- RecurrenceRule *rrule = defaultRRule(false); // It must already exist!
+ const RecurrenceRule *rrule = defaultRRule(false); // It must already
exist!
if (!rrule) {
return;
}
@@ -940,7 +940,7 @@
return;
}
- RecurrenceRule *rrule = defaultRRule(false);
+ const RecurrenceRule *rrule = defaultRRule(false);
if (!rrule) {
return;
}
@@ -1509,11 +1509,11 @@
serializeQDateTimeAsKDateTime(out, r->d->mStartDateTime);
out << r->d->mCachedType << r->d->mAllDay << r->d->mRecurReadOnly <<
r->d->mExDates << (qint32)r->d->mExRules.count() <<
(qint32)r->d->mRRules.count();
- for (RecurrenceRule *rule : std::as_const(r->d->mExRules)) {
+ for (const RecurrenceRule *rule : std::as_const(r->d->mExRules)) {
out << rule;
}
- for (RecurrenceRule *rule : std::as_const(r->d->mRRules)) {
+ for (const RecurrenceRule *rule : std::as_const(r->d->mRRules)) {
out << rule;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/recurrence.h
new/kcalendarcore-6.26.0/src/recurrence.h
--- old/kcalendarcore-6.25.0/src/recurrence.h 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/recurrence.h 2026-05-01 14:20:54.000000000
+0200
@@ -668,9 +668,6 @@
*/
Q_REQUIRED_RESULT QList<RecurrenceRule::WDayPos> yearPositions() const;
- /*! Upper date limit for recurrences */
- static const QDate MAX_DATE;
-
/*!
Debug output.
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/recurrencerule.cpp
new/kcalendarcore-6.26.0/src/recurrencerule.cpp
--- old/kcalendarcore-6.25.0/src/recurrencerule.cpp 2026-04-03
19:07:27.000000000 +0200
+++ new/kcalendarcore-6.26.0/src/recurrencerule.cpp 2026-05-01
14:20:54.000000000 +0200
@@ -1751,8 +1751,8 @@
}
QDateTime st = start < d->mDateStart ? d->mDateStart : start;
- bool done = false;
if (d->mDuration > 0) {
+ bool done = false;
if (!d->mCached) {
d->buildCache();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/todo.cpp
new/kcalendarcore-6.26.0/src/todo.cpp
--- old/kcalendarcore-6.25.0/src/todo.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/todo.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -495,7 +495,7 @@
bool TodoPrivate::recurTodo(Todo *todo)
{
if (todo && todo->recurs()) {
- Recurrence *r = todo->recurrence();
+ const Recurrence *r = todo->recurrence();
const QDateTime recurrenceEndDateTime = r->endDateTime();
QDateTime nextOccurrenceDateTime = todo->dtStart().isValid() ?
r->getNextDateTime(todo->dtStart()) :
r->getNextDateTime(QDateTime::currentDateTime());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/vcalformat.cpp
new/kcalendarcore-6.26.0/src/vcalformat.cpp
--- old/kcalendarcore-6.25.0/src/vcalformat.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/vcalformat.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -373,14 +373,13 @@
case Recurrence::rWeekly: {
QBitArray qba(7);
- QString dayStr;
if (index == last) {
// e.g. W1 #0
qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1);
} else {
// e.g. W1 SU #0
while (index < last) {
- dayStr = tmpStr.mid(index, 3);
+ QString dayStr = tmpStr.mid(index, 3);
int dayNum = numFromDay(dayStr);
if (dayNum >= 0) {
qba.setBit(dayNum);
@@ -810,14 +809,13 @@
case Recurrence::rWeekly: {
QBitArray qba(7);
- QString dayStr;
if (index == last) {
// e.g. W1 #0
qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1);
} else {
// e.g. W1 SU #0
while (index < last) {
- dayStr = tmpStr.mid(index, 3);
+ QString dayStr = tmpStr.mid(index, 3);
int dayNum = numFromDay(dayStr);
if (dayNum >= 0) {
qba.setBit(dayNum);
@@ -1372,15 +1370,14 @@
// like vcal-tzoffset-daylightoffsets, or better yet,
// vcal-hash<the former>
- QStringList tzList;
- QString tz;
int utcOffset;
if (parseTZOffsetISO8601(ts, utcOffset)) {
// qCDebug(KCALCORE_LOG) << "got standard offset" << ts <<
utcOffset;
// standard from tz
// starting date for now 01011900
QDateTime dt = QDateTime(QDateTime(QDate(1900, 1, 1), QTime(0, 0,
0)));
- tz =
QStringLiteral("STD;%1;false;%2").arg(QString::number(utcOffset),
dt.toString());
+ QString tz =
QStringLiteral("STD;%1;false;%2").arg(QString::number(utcOffset),
dt.toString());
+ QStringList tzList;
tzList.append(tz);
// go through all the daylight tags
@@ -1634,7 +1631,6 @@
void VCalFormat::readCustomProperties(VObject *o, const Incidence::Ptr &i)
{
VObjectIterator iter;
- char *s;
initPropIterator(&iter, o);
while (moreIteration(&iter)) {
@@ -1644,7 +1640,8 @@
if ((curname[0] == 'X' && curname[1] == '-') && strcmp(curname,
ICOrganizerProp) != 0) {
// TODO - for the time being, we ignore the parameters part
// and just do the value handling here
- i->setNonKDECustomProperty(curname, QString::fromUtf8(s =
fakeCString(vObjectUStringZValue(cur))));
+ char *s = fakeCString(vObjectUStringZValue(cur));
+ i->setNonKDECustomProperty(curname, QString::fromUtf8(s));
deleteStr(s);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kcalendarcore-6.25.0/src/xcalformat.cpp
new/kcalendarcore-6.26.0/src/xcalformat.cpp
--- old/kcalendarcore-6.25.0/src/xcalformat.cpp 2026-04-03 19:07:27.000000000
+0200
+++ new/kcalendarcore-6.26.0/src/xcalformat.cpp 2026-05-01 14:20:54.000000000
+0200
@@ -132,7 +132,8 @@
}
if (reader.name().compare("iCalendar"_L1, Qt::CaseInsensitive) == 0) {
- for (const auto &a : reader.namespaceDeclarations()) {
+ const auto declarations = reader.namespaceDeclarations();
+ for (const auto &a : declarations) {
if (a.namespaceUri() ==
"urn:ietf:params:xml:ns:icalendar-2.0"_L1) {
m_format = Rfc6321;
} else if (a.namespaceUri() ==
"urn:ietf:params:xml:ns:xcal"_L1) {