]> code.delx.au - offlineimap/blob - head/offlineimap/folder/LocalStatus.py
/head: changeset 32
[offlineimap] / head / offlineimap / folder / LocalStatus.py
1 # Local status cache virtual folder
2 # Copyright (C) 2002 John Goerzen
3 # <jgoerzen@complete.org>
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 from Base import BaseFolder
20 import os
21
22 magicline = "IMAPSYNC LocalStatus CACHE DATA - DO NOT MODIFY - FORMAT 1"
23
24 class LocalStatusFolder(BaseFolder):
25 def __init__(self, root, name):
26 self.name = name
27 self.root = root
28 self.sep = '.'
29 self.filename = os.path.join(root, name)
30 self.messagelist = None
31
32 def isnewfolder(self):
33 return not os.path.exists(self.filename)
34
35 def getname(self):
36 return self.name
37
38 def getroot(self):
39 return self.root
40
41 def getsep(self):
42 return self.sep
43
44 def getfullname(self):
45 return self.filename
46
47 def cachemessagelist(self):
48 if self.isnewfolder():
49 self.messagelist = {}
50 return
51 file = open(self.filename, "rt")
52 self.messagelist = {}
53 line = file.readline().strip()
54 assert(line == magicline)
55 for line in file.xreadlines():
56 line = line.strip()
57 uid, flags = line.split(':')
58 uid = long(uid)
59 flags = [x for x in flags]
60 self.messagelist[uid] = {'uid': uid, 'flags': flags}
61 file.close()
62
63 def save(self):
64 file = open(self.filename, "wt")
65 file.write(magicline + "\n")
66 for msg in self.messagelist.values():
67 flags = msg['flags']
68 flags.sort()
69 flags = ''.join(flags)
70 file.write("%s:%s\n" % (msg['uid'], flags))
71 file.close()
72
73 def getmessagelist(self):
74 return self.messagelist
75
76 def savemessage(self, uid, content, flags):
77 if uid < 0:
78 # We cannot assign a uid.
79 return uid
80
81 if uid in self.messagelist: # already have it
82 self.savemessageflags(uid, flags)
83 return uid
84
85 self.messagelist[uid] = {'uid': uid, 'flags': flags}
86 return uid
87
88 def getmessageflags(self, uid):
89 return self.messagelist[uid]['flags']
90
91 def savemessageflags(self, uid, flags):
92 self.messagelist[uid]['flags'] = flags
93
94 def deletemessage(self, uid):
95 if not uid in self.messagelist:
96 return
97 del(self.messagelist[uid])
98