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 <Handler.h> 14 #include <String.h> 15 16 17 struct MessageToken { 18 BString mailboxName; 19 uint32 uidValidity; 20 uint32 uid; 21 }; 22 23 24 class FolderListener { 25 public: 26 virtual uint32 MessageAdded(const MessageToken& fromToken, 27 const entry_ref& ref); 28 virtual void MessageDeleted(const MessageToken& token); 29 30 virtual void MessageFlagsChanged(const MessageToken& token, 31 const entry_ref& ref, uint32 oldFlags, 32 uint32 newFlags); 33 }; 34 35 36 class IMAPFolder : public BHandler { 37 public: 38 IMAPFolder(const entry_ref& ref, 39 FolderListener& listener); 40 virtual ~IMAPFolder(); 41 42 void SetFolderID(const char* mailboxName, uint32 id); 43 44 void StoreMessage(uint32 uid, ...); 45 void DeleteMessage(uint32 uid); 46 void SetMessageFlags(uint32 uid, uint32 flags); 47 48 virtual void MessageReceived(BMessage* message); 49 50 private: 51 void _InitializeFolderState(); 52 const MessageToken _Token(uint32 uid) const; 53 uint32 _ReadUniqueID(BNode& node); 54 uint32 _ReadFlags(BNode& node); 55 56 private: 57 typedef std::map<uint32, uint32> UIDToFlagsMap; 58 typedef std::map<uint32, entry_ref> UIDToRefMap; 59 60 const entry_ref fRef; 61 BString fMailboxName; 62 uint32 fUIDValidity; 63 FolderListener& fListener; 64 UIDToRefMap fRefMap; 65 UIDToFlagsMap fUIDMap; 66 }; 67 68 69 #endif // IMAP_FOLDER_H 70