From ca354ec4e2b9bc35b7d97c41bec68cccf6a6c8c9 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 5 May 2016 10:37:28 +0200 Subject: Create actual messages in maildir --- examples/maildirresource/libmaildir/maildir.cpp | 34 +++++++++++++++++++++++++ examples/maildirresource/libmaildir/maildir.h | 1 + 2 files changed, 35 insertions(+) (limited to 'examples/maildirresource/libmaildir') diff --git a/examples/maildirresource/libmaildir/maildir.cpp b/examples/maildirresource/libmaildir/maildir.cpp index 8d6de3e..670d4ca 100644 --- a/examples/maildirresource/libmaildir/maildir.cpp +++ b/examples/maildirresource/libmaildir/maildir.cpp @@ -706,6 +706,40 @@ QString Maildir::addEntry(const QByteArray& data) return uniqueKey; } +QString Maildir::addEntryFromPath(const QString& path) +{ + QString uniqueKey; + QString key; + QString finalKey; + QString curKey; + + // QUuid doesn't return globally unique identifiers, therefor we query until we + // get one that doesn't exists yet + do { + uniqueKey = createUniqueFileName() + d->hostName; + key = d->path + QLatin1String("/tmp/") + uniqueKey; + finalKey = d->path + QLatin1String("/new/") + uniqueKey; + curKey = d->path + QLatin1String("/cur/") + uniqueKey; + } while (QFile::exists(key) || QFile::exists(finalKey) || QFile::exists(curKey)); + + QFile f(path); + if (!f.open(QIODevice::ReadWrite)) { + qWarning() << f.errorString(); + qWarning() << "Cannot open mail file: " << key; + return QString(); + } + + if (!f.rename(finalKey)) { + qWarning() << "Maildir: Failed to add entry: " << finalKey << "! Error: " << f.errorString(); + // d->lastError = i18n("Failed to create mail file %1. The error was: %2" , finalKey, f.errorString()); + return QString(); + } + // KeyCache *keyCache = KeyCache::self(); + // keyCache->removeKey(d->path, key); //remove all keys, be it "cur" or "new" first + // keyCache->addNewKey(d->path, key); //and add a key for "new", as the mail was moved there + return uniqueKey; +} + bool Maildir::removeEntry(const QString& key) { QString realKey(d->findRealKey(key)); diff --git a/examples/maildirresource/libmaildir/maildir.h b/examples/maildirresource/libmaildir/maildir.h index 31778ac..8c622c7 100644 --- a/examples/maildirresource/libmaildir/maildir.h +++ b/examples/maildirresource/libmaildir/maildir.h @@ -207,6 +207,7 @@ public: * Adds the given @p data to the maildir. Returns the key of the entry. */ QString addEntry( const QByteArray& data ); + QString addEntryFromPath(const QString& path); /** * Removes the entry with the given @p key. Returns success or failure. -- cgit v1.2.3