1/*
2 * Copyright 2013-2016, Axel D��rfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7/*!	This class offers a high level look at an IMAP mailbox.
8*/
9
10
11#include "IMAPMailbox.h"
12
13
14IMAPMailbox::IMAPMailbox(IMAP::Protocol& protocol, const BString& mailboxName)
15	:
16	fProtocol(protocol),
17	fMailboxName(mailboxName)
18{
19}
20
21
22IMAPMailbox::~IMAPMailbox()
23{
24}
25
26
27void
28IMAPMailbox::AddMessageEntry(uint32 index, uint32 uid, uint32 flags,
29	uint32 size)
30{
31	fMessageEntries.insert(
32		std::make_pair(uid, MessageFlagsAndSize(flags, size)));
33
34	fUIDs.reserve(index + 1);
35	fUIDs[index] = uid;
36}
37
38
39void
40IMAPMailbox::RemoveMessageEntry(uint32 index)
41{
42	if (index >= fUIDs.size())
43		return;
44
45	uint32 uid = fUIDs[index];
46	fMessageEntries.erase(uid);
47
48	fUIDs.erase(fUIDs.begin() + index);
49}
50
51
52uint32
53IMAPMailbox::UIDForIndex(uint32 index) const
54{
55	if (index >= fUIDs.size())
56		return 0;
57
58	return fUIDs[index];
59}
60
61
62uint32
63IMAPMailbox::MessageFlags(uint32 uid) const
64{
65	MessageEntryMap::const_iterator found = fMessageEntries.find(uid);
66	if (found == fMessageEntries.end())
67		return 0;
68
69	return found->second.flags;
70}
71
72
73uint32
74IMAPMailbox::MessageSize(uint32 uid) const
75{
76	MessageEntryMap::const_iterator found = fMessageEntries.find(uid);
77	if (found == fMessageEntries.end())
78		return 0;
79
80	return found->second.size;
81}
82
83
84uint32
85IMAPMailbox::MessageAdded(const MessageToken& fromToken, const entry_ref& ref)
86{
87	printf("IMAP: message added %s, uid %" B_PRIu32 "\n", ref.name,
88		fromToken.uid);
89	return fromToken.uid;
90}
91
92
93void
94IMAPMailbox::MessageDeleted(const MessageToken& token)
95{
96	printf("IMAP: message deleted, uid %" B_PRIu32 "\n", token.uid);
97}
98
99
100void
101IMAPMailbox::MessageFlagsChanged(const MessageToken& token,
102	const entry_ref& ref, uint32 oldFlags, uint32 newFlags)
103{
104	printf("IMAP: flags changed %s, uid %" B_PRIu32 ", from %" B_PRIx32 " to %"
105		B_PRIx32 "\n", ref.name, token.uid, oldFlags, newFlags);
106}
107