xref: /haiku/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPFolder.h (revision 3ab3f57ad2a7e7bd4314b5791fde5dc0b99066f4)
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