/* * Copyright 2012, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ #ifndef IMAP_FOLDER_H #define IMAP_FOLDER_H #include #include #include #include #include #include struct MessageToken { BString mailboxName; uint32 uidValidity; uint32 uid; }; class FolderListener { public: virtual uint32 MessageAdded(const MessageToken& fromToken, const entry_ref& ref) = 0; virtual void MessageDeleted(const MessageToken& token) = 0; virtual void MessageFlagsChanged(const MessageToken& token, const entry_ref& ref, uint32 oldFlags, uint32 newFlags) = 0; }; class IMAPFolder : public BHandler { public: IMAPFolder(const entry_ref& ref, FolderListener& listener); virtual ~IMAPFolder(); void SetFolderID(const char* mailboxName, uint32 id); void StoreMessage(uint32 uid, ...); void DeleteMessage(uint32 uid); void SetMessageFlags(uint32 uid, uint32 flags); virtual void MessageReceived(BMessage* message); private: void _InitializeFolderState(); const MessageToken _Token(uint32 uid) const; uint32 _ReadUniqueID(BNode& node); uint32 _ReadFlags(BNode& node); private: typedef std::map UIDToFlagsMap; typedef std::map UIDToRefMap; const entry_ref fRef; BString fMailboxName; uint32 fUIDValidity; FolderListener& fListener; UIDToRefMap fRefMap; UIDToFlagsMap fUIDMap; }; #endif // IMAP_FOLDER_H