From 56e38fd874546b54ba34b07c71f65532059c5e7b Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 16 Dec 2015 13:14:49 +0100 Subject: Get the maildir resource to work. The subfolder implementation is not according to any standard it seems, but at least it works for now. --- examples/maildirresource/libmaildir/maildir.cpp | 13 ++++++++----- examples/maildirresource/maildirresource.cpp | 12 +++++------- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'examples/maildirresource') diff --git a/examples/maildirresource/libmaildir/maildir.cpp b/examples/maildirresource/libmaildir/maildir.cpp index 37bf6ea..67a2d2d 100644 --- a/examples/maildirresource/libmaildir/maildir.cpp +++ b/examples/maildirresource/libmaildir/maildir.cpp @@ -402,11 +402,14 @@ Maildir Maildir::parent() const return Maildir(); QDir dir(d->path); dir.cdUp(); - if (!dir.dirName().startsWith(QLatin1Char('.')) || !dir.dirName().endsWith(QLatin1String(".directory"))) - return Maildir(); - const QString parentName = dir.dirName().mid(1, dir.dirName().size() - 11); - dir.cdUp(); - dir.cd(parentName); + //FIXME Figure out how this is acutally supposed to work + //There seem to be a bunch of conflicting standards, and nesting folders is apparently not what we're supposed to be doing, + //but it works for the time being. + // if (!dir.dirName().startsWith(QLatin1Char('.')) || !dir.dirName().endsWith(QLatin1String(".directory"))) + // return Maildir(); + // const QString parentName = dir.dirName().mid(1, dir.dirName().size() - 11); + // dir.cdUp(); + // dir.cd(parentName); return Maildir (dir.path()); } diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index f9cc2a4..a19756a 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp @@ -48,7 +48,7 @@ MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSh { addType(ENTITY_TYPE_MAIL, QSharedPointer::create(), QVector() << new DefaultIndexUpdater); - addType(ENTITY_TYPE_MAIL, QSharedPointer::create(), + addType(ENTITY_TYPE_FOLDER, QSharedPointer::create(), QVector() << new DefaultIndexUpdater); auto config = ResourceConfig::getConfiguration(instanceIdentifier); mMaildirPath = config.value("path").toString(); @@ -101,7 +101,6 @@ void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transac Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite); auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); - Index ridMapping("rid.mapping", synchronizationTransaction); for (const auto folder : folderList) { const auto remoteId = folder.toUtf8(); auto akonadiId = resolveRemoteId(bufferType.toUtf8(), remoteId, synchronizationTransaction); @@ -116,7 +115,7 @@ void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transac if (!found) { //A new entity m_fbb.Clear(); - KPIM::Maildir md(folder); + KPIM::Maildir md(folder, folder == mMaildirPath); flatbuffers::FlatBufferBuilder entityFbb; auto name = m_fbb.CreateString(md.name().toStdString()); @@ -124,7 +123,7 @@ void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transac flatbuffers::Offset parent; if (!md.isRoot()) { - auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, md.parent().path(), transaction); + auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, md.parent().path(), synchronizationTransaction); parent = m_fbb.CreateString(akonadiId.toStdString()); } @@ -169,13 +168,12 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti auto listingPath = maildir.pathToCurrent(); auto entryIterator = QSharedPointer::create(listingPath, QDir::Files); - Trace() << "Looking into " << maildir.pathToNew(); + Trace() << "Looking into " << listingPath; QFileInfo entryInfo; Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite); auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); - Index ridMapping("rid.mapping", synchronizationTransaction); while (entryIterator->hasNext()) { QString filePath = entryIterator->next(); @@ -207,7 +205,7 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti auto sender = m_fbb.CreateString(msg->from(true)->asUnicodeString().toStdString()); auto senderName = m_fbb.CreateString(msg->from(true)->asUnicodeString().toStdString()); auto date = m_fbb.CreateString(msg->date(true)->dateTime().toString().toStdString()); - auto folder = m_fbb.CreateString(resolveRemoteId(ENTITY_TYPE_FOLDER, path, transaction).toStdString()); + auto folder = m_fbb.CreateString(resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction).toStdString()); auto mimeMessage = m_fbb.CreateString(filepath.toStdString()); auto builder = Akonadi2::ApplicationDomain::Buffer::MailBuilder(m_fbb); -- cgit v1.2.3