[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.
*/