2 mailbox_state.py - The module contains the MailboxState class.
4 Copyright (c) 2012 Intra2net AG
5 Author: Plamen Dimitrov
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
19 """This class is responsible for containing and updating a mailbox data."""
22 # string with quotation marks for the mailbox name
24 # string for the mailbox uidvalidity
26 # string for user owning the mailbox
28 # list of bytes for last cached mail uids
30 # boolean flag for committing state changes
32 # integer for found date conflicts
34 # integer for found messages with missing received headers
35 no_received_field = None
36 # unique key for a mailbox
39 def __init__(self, name, uidvalidity, owner):
41 self.uidvalidity = uidvalidity
45 self.needs_save = False
47 self.date_conflicts = 0
48 self.no_received_field = 0
50 #special key to ensure better mailbox uniqueness
51 self.key = self.name.strip('"') + self.uidvalidity
55 def __getstate__(self):
56 """Prepares the MailboxState instance for pickling."""
57 changed_dict = self.__dict__.copy()
58 # remove the following attributes for pickling
59 del changed_dict['needs_save']
60 del changed_dict['date_conflicts']
61 del changed_dict['no_received_field']
64 def __setstate__(self, dict):
65 """Prepares the MailboxState instance for unpickling."""
66 self.name = dict["name"]
67 self.uidvalidity = dict["uidvalidity"]
68 self.owner = dict["owner"]
70 self.uids = dict["uids"]
71 self.needs_save = False
73 self.date_conflicts = 0
74 self.no_received_field = 0
76 self.key = dict["key"]
81 """Makes the class printable."""
84 def synchronize(self, list_ids):
85 """Adds new messages to the cache and returns a list of them.
86 Confirm the changes to a mailbox to finally save it."""
88 if(len(self.uids)==0):
96 # update this mailbox potential uids
100 def confirm_change(self):
101 """Confirm the chages to the cached mailbox."""
102 self.needs_save = True