[pim/kdepim-runtime] resources/dav/resource: adds createAkonadiCollection method in dav utils

Noham Devillers <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit f94de71ab8ff85d026f6798781c44ab110db0261 by Noham Devillers.
Committed on 22/07/2026 at 09:57.
Pushed by ndevillers into branch 'master'.

adds createAkonadiCollection method in dav utils

M  +79   -0    resources/dav/resource/utils.cpp
M  +5    -0    resources/dav/resource/utils.h

https://invent.kde.org/pim/kdepim-runtime/-/commit/f94de71ab8ff85d026f6798781c44ab110db0261

diff --git a/resources/dav/resource/utils.cpp b/resources/dav/resource/utils.cpp
index bb9b69218..6471d1998 100644
--- a/resources/dav/resource/utils.cpp
+++ b/resources/dav/resource/utils.cpp
@@ -71,6 +71,85 @@ QStringList Utils::tagsToCategories(const Akonadi::Tag::List &tags)
     return categories;
 }
 
+Akonadi::Collection Utils::createAkonadiCollection(const KDAV::DavCollection &davCollection, const Akonadi::Collection &davCollectionRoot)
+{
+    Akonadi::Collection collection;
+    collection.setParentCollection(davCollectionRoot);
+    collection.setRemoteId(davCollection.url().toDisplayString());
+    collection.setName(collection.remoteId());
+
+    if (davCollection.color().isValid()) {
+        auto colorAttr = collection.attribute<Akonadi::CollectionColorAttribute>(Akonadi::Collection::AddIfMissing);
+        colorAttr->setColor(davCollection.color());
+    }
+
+    if (!davCollection.displayName().isEmpty()) {
+        auto attr = collection.attribute<Akonadi::EntityDisplayAttribute>(Akonadi::Collection::AddIfMissing);
+        attr->setDisplayName(davCollection.displayName());
+    }
+
+    QStringList mimeTypes;
+    mimeTypes << Akonadi::Collection::mimeType();
+
+    const KDAV::DavCollection::ContentTypes contentTypes = davCollection.contentTypes();
+    if (contentTypes & KDAV::DavCollection::Calendar) {
+        mimeTypes << QStringLiteral("text/calendar");
+    }
+
+    if (contentTypes & KDAV::DavCollection::Events) {
+        mimeTypes << KCalendarCore::Event::eventMimeType();
+    }
+
+    if (contentTypes & KDAV::DavCollection::Todos) {
+        mimeTypes << KCalendarCore::Todo::todoMimeType();
+    }
+
+    if (contentTypes & KDAV::DavCollection::Contacts) {
+        mimeTypes << KContacts::Addressee::mimeType();
+    }
+
+    if (contentTypes & KDAV::DavCollection::FreeBusy) {
+        mimeTypes << KCalendarCore::FreeBusy::freeBusyMimeType();
+    }
+
+    if (contentTypes & KDAV::DavCollection::Journal) {
+        mimeTypes << KCalendarCore::Journal::journalMimeType();
+    }
+
+    collection.setContentMimeTypes(mimeTypes);
+
+    auto protoAttr = collection.attribute<DavProtocolAttribute>(Akonadi::Collection::AddIfMissing);
+    protoAttr->setDavProtocol(davCollection.url().protocol());
+
+    KDAV::Privileges privileges = davCollection.privileges();
+    Akonadi::Collection::Rights rights;
+
+    if (privileges & KDAV::All || privileges & KDAV::Write) {
+        rights |= Akonadi::Collection::AllRights;
+    }
+
+    if (privileges & KDAV::WriteContent) {
+        rights |= Akonadi::Collection::CanChangeItem;
+    }
+
+    if (privileges & KDAV::Bind) {
+        rights |= Akonadi::Collection::CanCreateItem;
+    }
+
+    if (privileges & KDAV::Unbind) {
+        rights |= Akonadi::Collection::CanDeleteItem;
+    }
+
+    if (privileges == KDAV::Read) {
+        rights |= Akonadi::Collection::ReadOnly;
+    }
+
+    rights.setFlag(Akonadi::Collection::CanCreateCollection, false);
+    collection.setRights(rights);
+
+    return collection;
+}
+
 KDAV::DavCollection Utils::createDavCollection(const Akonadi::Collection &collection, const KDAV::DavUrl &davUrl)
 {
     auto davCollection = KDAV::DavCollection();
diff --git a/resources/dav/resource/utils.h b/resources/dav/resource/utils.h
index e481ec74c..5e85d7a8c 100644
--- a/resources/dav/resource/utils.h
+++ b/resources/dav/resource/utils.h
@@ -34,6 +34,11 @@ namespace Utils
  */
 [[nodiscard]] QString translatedProtocolName(KDAV::Protocol protocol);
 
+/**
+ * Creates a new Akonadi::Collection from the KDAV::Collection @p collection.
+ */
+[[nodiscard]] Akonadi::Collection createAkonadiCollection(const KDAV::DavCollection &davCollection, const Akonadi::Collection &davCollectionRoot);
+
 /**
  * Creates a new KDAV::Collection from the Akonadi::Collection @p collection.
  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.