diff options
author | Dmitry Isaikin <isaikin-dmitry@yandex.ru> | 2016-06-06 04:28:53 +0400 |
---|---|---|
committer | HoĆ V. DINH <dinh.viet.hoa@gmail.com> | 2016-06-05 17:28:53 -0700 |
commit | eeed76e48c830fe742eadd435682f3b1e6036f83 (patch) | |
tree | 36bad63fccde47e6cdecb7033f65a3d75e1bbb71 /src/async | |
parent | 6dbe79ccf3f085da9a195ee3f9a59cb4449f6505 (diff) |
Add possibility of fetching message attachment by chunks and store it to file. (#1438)
Diffstat (limited to 'src/async')
-rw-r--r-- | src/async/imap/MCAsyncIMAP.h | 1 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.cpp | 1 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.h | 1 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.cpp | 19 | ||||
-rw-r--r-- | src/async/imap/MCIMAPAsyncSession.h | 9 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchContentToFileOperation.cpp | 91 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchContentToFileOperation.h | 53 |
7 files changed, 174 insertions, 1 deletions
diff --git a/src/async/imap/MCAsyncIMAP.h b/src/async/imap/MCAsyncIMAP.h index e6d6d367..effa0947 100644 --- a/src/async/imap/MCAsyncIMAP.h +++ b/src/async/imap/MCAsyncIMAP.h @@ -18,6 +18,7 @@ #include <MailCore/MCIMAPMoveMessagesOperation.h> #include <MailCore/MCIMAPFetchMessagesOperation.h> #include <MailCore/MCIMAPFetchContentOperation.h> +#include <MailCore/MCIMAPFetchContentToFileOperation.h> #include <MailCore/MCIMAPFetchParsedContentOperation.h> #include <MailCore/MCIMAPIdleOperation.h> #include <MailCore/MCIMAPFolderInfo.h> diff --git a/src/async/imap/MCIMAPAsyncConnection.cpp b/src/async/imap/MCIMAPAsyncConnection.cpp index ff12c881..4ae633ec 100644 --- a/src/async/imap/MCIMAPAsyncConnection.cpp +++ b/src/async/imap/MCIMAPAsyncConnection.cpp @@ -21,6 +21,7 @@ #include "MCIMAPCopyMessagesOperation.h" #include "MCIMAPFetchMessagesOperation.h" #include "MCIMAPFetchContentOperation.h" +#include "MCIMAPFetchContentToFileOperation.h" #include "MCIMAPFetchParsedContentOperation.h" #include "MCIMAPStoreFlagsOperation.h" #include "MCIMAPStoreLabelsOperation.h" diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h index 40b11b90..c665b26d 100644 --- a/src/async/imap/MCIMAPAsyncConnection.h +++ b/src/async/imap/MCIMAPAsyncConnection.h @@ -15,6 +15,7 @@ namespace mailcore { class IMAPCopyMessagesOperation; class IMAPFetchMessagesOperation; class IMAPFetchContentOperation; + class IMAPFetchContentToFileOperation; class IMAPFetchParsedContentOperation; class IMAPIdleOperation; class IMAPFolderInfoOperation; diff --git a/src/async/imap/MCIMAPAsyncSession.cpp b/src/async/imap/MCIMAPAsyncSession.cpp index 5c599558..58dc0dbb 100644 --- a/src/async/imap/MCIMAPAsyncSession.cpp +++ b/src/async/imap/MCIMAPAsyncSession.cpp @@ -29,6 +29,7 @@ #include "MCIMAPMoveMessagesOperation.h" #include "MCIMAPFetchMessagesOperation.h" #include "MCIMAPFetchContentOperation.h" +#include "MCIMAPFetchContentToFileOperation.h" #include "MCIMAPFetchParsedContentOperation.h" #include "MCIMAPStoreFlagsOperation.h" #include "MCIMAPStoreLabelsOperation.h" @@ -588,6 +589,24 @@ IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByUIDOperati return op; } +IMAPFetchContentToFileOperation * IMAPAsyncSession::fetchMessageAttachmentToFileByUIDOperation( + String * folder, uint32_t uid, String * partID, + Encoding encoding, + String * filename, + bool urgent) +{ + IMAPFetchContentToFileOperation * op = new IMAPFetchContentToFileOperation(); + op->setMainSession(this); + op->setFolder(folder); + op->setUid(uid); + op->setPartID(partID); + op->setEncoding(encoding); + op->setFilename(filename); + op->setUrgent(urgent); + op->autorelease(); + return op; +} + IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageByNumberOperation(String * folder, uint32_t number, bool urgent) { IMAPFetchContentOperation * op = new IMAPFetchContentOperation(); diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index 0230deda..05437207 100644 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -24,6 +24,7 @@ namespace mailcore { class IMAPMoveMessagesOperation; class IMAPFetchMessagesOperation; class IMAPFetchContentOperation; + class IMAPFetchContentToFileOperation; class IMAPFetchParsedContentOperation; class IMAPIdleOperation; class IMAPFolderInfoOperation; @@ -142,7 +143,13 @@ namespace mailcore { virtual IMAPFetchContentOperation * fetchMessageByUIDOperation(String * folder, uint32_t uid, bool urgent = false); virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, Encoding encoding, bool urgent = false); - + + virtual IMAPFetchContentToFileOperation * fetchMessageAttachmentToFileByUIDOperation( + String * folder, uint32_t uid, String * partID, + Encoding encoding, + String * filename, + bool urgent = false); + virtual IMAPFetchContentOperation * fetchMessageByNumberOperation(String * folder, uint32_t number, bool urgent = false); virtual IMAPCustomCommandOperation * customCommand(String *command, bool urgent); virtual IMAPFetchContentOperation * fetchMessageAttachmentByNumberOperation(String * folder, uint32_t number, String * partID, diff --git a/src/async/imap/MCIMAPFetchContentToFileOperation.cpp b/src/async/imap/MCIMAPFetchContentToFileOperation.cpp new file mode 100644 index 00000000..82a1fa23 --- /dev/null +++ b/src/async/imap/MCIMAPFetchContentToFileOperation.cpp @@ -0,0 +1,91 @@ +// +// IMAPFetchContentToFileOperation.cpp +// mailcore2 +// +// Created by Dmitry Isaikin on 2/08/16. +// Copyright (c) 2016 MailCore. All rights reserved. +// + +#include "MCIMAPFetchContentToFileOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPFetchContentToFileOperation::IMAPFetchContentToFileOperation() +{ + mUid = 0; + mPartID = NULL; + mEncoding = Encoding7Bit; + mFilename = NULL; + mLoadingByChunksEnabled = true; + mChunksSize = 2*1024*1024; + mEstimatedSize = 0; +} + +IMAPFetchContentToFileOperation::~IMAPFetchContentToFileOperation() +{ + MC_SAFE_RELEASE(mPartID); + MC_SAFE_RELEASE(mFilename); +} + +void IMAPFetchContentToFileOperation::setUid(uint32_t uid) +{ + mUid = uid; +} + +void IMAPFetchContentToFileOperation::setPartID(String * partID) +{ + MC_SAFE_REPLACE_COPY(String, mPartID, partID); +} + +void IMAPFetchContentToFileOperation::setEncoding(Encoding encoding) +{ + mEncoding = encoding; +} + +void IMAPFetchContentToFileOperation::setFilename(String * filename) +{ + MC_SAFE_REPLACE_COPY(String, mFilename, filename); +} + +void IMAPFetchContentToFileOperation::setLoadingByChunksEnabled(bool loadingByChunksEnabled) +{ + mLoadingByChunksEnabled = loadingByChunksEnabled; +} + +bool IMAPFetchContentToFileOperation::isLoadingByChunksEnabled() +{ + return mLoadingByChunksEnabled; +} + +void IMAPFetchContentToFileOperation::setChunksSize(uint32_t chunksSize) +{ + mChunksSize = chunksSize; +} + +uint32_t IMAPFetchContentToFileOperation::chunksSize() +{ + return mChunksSize; +} + +void IMAPFetchContentToFileOperation::setEstimatedSize(uint32_t estimatedSize) +{ + mEstimatedSize = estimatedSize; +} + +uint32_t IMAPFetchContentToFileOperation::estimatedSize() +{ + return mEstimatedSize; +} + +void IMAPFetchContentToFileOperation::main() +{ + ErrorCode error = ErrorNone; + session()->session()->fetchMessageAttachmentToFileByUID(folder(), mUid, mPartID, + mEstimatedSize, mEncoding, + mFilename, mChunksSize, + this, &error); + setError(error); +} diff --git a/src/async/imap/MCIMAPFetchContentToFileOperation.h b/src/async/imap/MCIMAPFetchContentToFileOperation.h new file mode 100644 index 00000000..35d7026f --- /dev/null +++ b/src/async/imap/MCIMAPFetchContentToFileOperation.h @@ -0,0 +1,53 @@ +// +// IMAPFetchContentToFileOperation.h +// mailcore2 +// +// Created by Dmitry Isaikin on 2/08/16. +// Copyright (c) 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_IMAPFETCHCONTENTTOFILEOPERATION_H + +#define MAILCORE_IMAPFETCHCONTENTTOFILEOPERATION_H + +#include <MailCore/MCIMAPOperation.h> + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchContentToFileOperation : public IMAPOperation { + public: + IMAPFetchContentToFileOperation(); + virtual ~IMAPFetchContentToFileOperation(); + + virtual void setUid(uint32_t uid); + virtual void setPartID(String * partID); + virtual void setEncoding(Encoding encoding); + virtual void setFilename(String * filename); + + virtual void setLoadingByChunksEnabled(bool loadingByChunksEnabled); + virtual bool isLoadingByChunksEnabled(); + virtual void setChunksSize(uint32_t chunksSize); + virtual uint32_t chunksSize(); + virtual void setEstimatedSize(uint32_t estimatedSize); + virtual uint32_t estimatedSize(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mUid; + String * mPartID; + Encoding mEncoding; + String * mFilename; + bool mLoadingByChunksEnabled; + uint32_t mChunksSize; + uint32_t mEstimatedSize; + }; + +} + +#endif + +#endif |