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.
20 """This class is responsible for containing and updating a mailbox data."""
23 # string with quotation marks for the mailbox name
25 # string for the mailbox uidvalidity
27 # string for user owning the mailbox
29 # list of bytes for last cached mail uids
31 # boolean flag for committing state changes
33 # integer for found date conflicts
35 # integer for found messages with missing received headers
36 no_received_field = None
37 # unique key for a mailbox
40 def __init__(self, name, uidvalidity, owner):
42 self.uidvalidity = uidvalidity
46 self.needs_save = False
48 self.date_conflicts = 0
49 self.no_received_field = 0
51 #special key to ensure better mailbox uniqueness
52 self.key = self.name.strip('"') + self.uidvalidity
56 def __getstate__(self):
57 """Prepares the MailboxState instance for pickling."""
58 changed_dict = self.__dict__.copy()
59 # remove the following attributes for pickling
60 del changed_dict['needs_save']
61 del changed_dict['date_conflicts']
62 del changed_dict['no_received_field']
65 def __setstate__(self, dict):
66 """Prepares the MailboxState instance for unpickling."""
67 self.name = dict["name"]
68 self.uidvalidity = dict["uidvalidity"]
69 self.owner = dict["owner"]
71 self.uids = dict["uids"]
72 self.needs_save = False
74 self.date_conflicts = 0
75 self.no_received_field = 0
77 self.key = dict["key"]
82 """Makes the class printable."""
85 def synchronize(self, list_ids):
86 """Adds new messages to the cache and returns a list of them.
87 Confirm the changes to a mailbox to finally save it."""
89 if(len(self.uids)==0):
97 # update this mailbox potential uids
101 def confirm_change(self):
102 """Confirm the chages to the cached mailbox."""
103 self.needs_save = True