1 /* 2 * Copyright 2012, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef IMAP_FOLDER_H 6 #define IMAP_FOLDER_H 7 8 9 #include <map> 10 #include <sys/stat.h> 11 12 #include <Entry.h> 13 #include <Node.h> 14 #include <Handler.h> 15 #include <String.h> 16 17 18 struct MessageToken { 19 BString mailboxName; 20 uint32 uidValidity; 21 uint32 uid; 22 }; 23 24 25 class FolderListener { 26 public: 27 virtual uint32 MessageAdded(const MessageToken& fromToken, 28 const entry_ref& ref) = 0; 29 virtual void MessageDeleted(const MessageToken& token) = 0; 30 31 virtual void MessageFlagsChanged(const MessageToken& token, 32 const entry_ref& ref, uint32 oldFlags, 33 uint32 newFlags) = 0; 34 }; 35 36 37 class IMAPFolder : public BHandler { 38 public: 39 IMAPFolder(const entry_ref& ref, 40 FolderListener& listener); 41 virtual ~IMAPFolder(); 42 43 void SetFolderID(const char* mailboxName, uint32 id); 44 45 void StoreMessage(uint32 uid, ...); 46 void DeleteMessage(uint32 uid); 47 void SetMessageFlags(uint32 uid, uint32 flags); 48 49 virtual void MessageReceived(BMessage* message); 50 51 private: 52 void _InitializeFolderState(); 53 const MessageToken _Token(uint32 uid) const; 54 uint32 _ReadUniqueID(BNode& node); 55 uint32 _ReadFlags(BNode& node); 56 57 private: 58 typedef std::map<uint32, uint32> UIDToFlagsMap; 59 typedef std::map<uint32, entry_ref> UIDToRefMap; 60 61 const entry_ref fRef; 62 BString fMailboxName; 63 uint32 fUIDValidity; 64 FolderListener& fListener; 65 UIDToRefMap fRefMap; 66 UIDToFlagsMap fUIDMap; 67 }; 68 69 70 #endif // IMAP_FOLDER_H 71