diff --git a/resources/kolab/kolabhelpers.h b/resources/kolab/kolabhelpers.h --- a/resources/kolab/kolabhelpers.h +++ b/resources/kolab/kolabhelpers.h @@ -24,6 +24,10 @@ #include //libkolab #include //libkolab +#define KOLAB_COLOR_ANNOTATION "/vendor/kolab/color" + +class QColor; + class KolabHelpers { public: static bool checkForErrors(const Akonadi::Item &affectedItem); @@ -33,6 +37,7 @@ static Kolab::FolderType folderTypeFromString(const QByteArray &folderTypeName); static QByteArray getFolderTypeAnnotation( const QMap &annotations); static void setFolderTypeAnnotation( QMap &annotations, const QByteArray &value); + static QColor getFolderColor(const QMap &annotations); static Kolab::ObjectType getKolabTypeFromMimeType(const QString &type); static QByteArray kolabTypeForMimeType( const QStringList &contentMimeTypes ); static QStringList getContentMimeTypes(Kolab::FolderType type); diff --git a/resources/kolab/kolabhelpers.cpp b/resources/kolab/kolabhelpers.cpp --- a/resources/kolab/kolabhelpers.cpp +++ b/resources/kolab/kolabhelpers.cpp @@ -29,6 +29,7 @@ #include #include "tracer.h" + bool KolabHelpers::checkForErrors(const Akonadi::Item &item) { if (!Kolab::ErrorHandler::instance().errorOccured()) { @@ -427,6 +428,17 @@ return annotations.value(KOLAB_FOLDER_TYPE_ANNOTATION); } +QColor KolabHelpers::getFolderColor(const QMap< QByteArray, QByteArray > &annotations) +{ + if (annotations.contains("/shared" KOLAB_COLOR_ANNOTATION) && !annotations.value("/shared" KOLAB_COLOR_ANNOTATION).isEmpty()) { + return QColor(QLatin1String("#") + annotations.value("/shared" KOLAB_COLOR_ANNOTATION)); + } else if (annotations.contains("/private" KOLAB_COLOR_ANNOTATION) && !annotations.value("/private" KOLAB_COLOR_ANNOTATION).isEmpty()) { + return QColor(QLatin1String("#") + annotations.value("/private" KOLAB_COLOR_ANNOTATION)); + } + return QColor(); +} + + void KolabHelpers::setFolderTypeAnnotation(QMap< QByteArray, QByteArray >& annotations, const QByteArray& value) { annotations["/shared" KOLAB_FOLDER_TYPE_ANNOTATION] = value; diff --git a/resources/kolab/kolabresource.cpp b/resources/kolab/kolabresource.cpp --- a/resources/kolab/kolabresource.cpp +++ b/resources/kolab/kolabresource.cpp @@ -51,7 +51,7 @@ KGlobal::locale()->insertCatalog(QLatin1String("akonadi_imap_resource")); //Ensure we have up-to date metadata before attempting to sync folder setScheduleAttributeSyncBeforeItemSync(true); - setKeepLocalCollectionChanges(QSet() << "ENTITYDISPLAY" << Akonadi::BlockAlarmsAttribute().type()); + setKeepLocalCollectionChanges(QSet() << Akonadi::BlockAlarmsAttribute().type()); } KolabResource::~KolabResource() diff --git a/resources/kolab/kolabretrievecollectionstask.cpp b/resources/kolab/kolabretrievecollectionstask.cpp --- a/resources/kolab/kolabretrievecollectionstask.cpp +++ b/resources/kolab/kolabretrievecollectionstask.cpp @@ -196,6 +196,8 @@ { mRequestedMetadata << "/shared/vendor/kolab/folder-type"; mRequestedMetadata << "/private/vendor/kolab/folder-type"; + mRequestedMetadata << "/shared" KOLAB_COLOR_ANNOTATION + << "/private" KOLAB_COLOR_ANNOTATION; } KolabRetrieveCollectionsTask::~KolabRetrieveCollectionsTask() @@ -480,6 +482,7 @@ const Kolab::FolderType folderType = KolabHelpers::folderTypeFromString(type); // kDebug() << mailbox << metadata << type << folderType << KolabHelpers::getContentMimeTypes(folderType); collection.setContentMimeTypes(KolabHelpers::getContentMimeTypes(folderType)); + collection.attribute(Akonadi::Collection::AddIfMissing)->setBackgroundColor(KolabHelpers::getFolderColor(metadata)); QSet keepLocalChanges = collection.keepLocalChanges(); keepLocalChanges.remove(cContentMimeTypes); collection.setKeepLocalChanges(keepLocalChanges);