[Nym3-commit] r85 - trunk

nym3-devel@lists.noreply.org nym3-devel@lists.noreply.org
Thu, 05 Aug 2004 12:49:19 +0200


Author: laurent
Date: 2004-08-05 12:49:18 +0200 (Thu, 05 Aug 2004)
New Revision: 85

Modified:
   trunk/User.py
Log:
User can delete a msg now.


Modified: trunk/User.py
===================================================================
--- trunk/User.py	2004-08-05 08:57:44 UTC (rev 84)
+++ trunk/User.py	2004-08-05 10:49:18 UTC (rev 85)
@@ -36,21 +36,15 @@
 	self._lock()
 	try:
 	    f = open(self.datafile, 'r')
-            if(create == 1):
+            if (create == 1):
                 f.close()
                 raise AlreadySuchUser
 	    self.data = pickle.load(f)
 	    f.close()
 	except IOError:
-            #TODO check this
-            #we do not need to save the data here, we can do it
-            #when the object is destroyed
 	    if create == 0: raise NoSuchUser()
-	    #f = open(self.datafile, 'w')
 	    self.data = Config.default_settings
 	    self.data['username'] = username
-	    #pickle.dump(self.data, f)
-	    #f.close()
     
     def __del__(self):
         if (not self._abort):
@@ -272,8 +266,9 @@
 	syn = Mail.synopsize(msg)
 	# Store the mail.
 	self.load_mbox()
+	self.load_index()
 	mid = Mail.genMid()
-	while self.mbox.has_key(mid): mid = Mail.genMid()
+	while self.index.has_key(mid): mid = Mail.genMid()
 	self.mbox[mid] = msg # TODO : this is where we're supposed to crypt.
 
 	# store the synopsis
@@ -281,9 +276,30 @@
 	self.syn.append(([mid], 'clear', syn))
 
 	# create an index entry for the synopsis
+	self.index[mid] = {'time' : int(time.time()),
+			   'status' : 'nothing-sent' }
+
+    def delete_msg(self, mid):
+	"""Delete a stored message. Delete the synopsis if possible"""
 	self.load_index()
-	self.index[mid] = {'time' : int(time.time()), 'sent' : 'nothing' }
 
+	if not self.index.has_key(mid): return
+	self.load_mbox()
+	del self.mbox[mid]
+	self.index[mid]['status'] = 'deleted'
+	self.load_synbox()
+
+	for sl, enc, blurb in self.syn:
+	    if mid in sl:
+		candelete = True
+		for omid in sl:
+		    if not self.index[omid]['status'] == 'deleted':
+			candelete = False
+		if candelete:
+		    self.syn.remove((sl, enc, blurb))
+		    for omid in sl: del self.index[omid]
+		else: return
+
     def setKeys(self,kid,kenc):
 	self.data['idKey'] = kid
 	self.data['encKey'] = kenc