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