]> code.delx.au - offlineimap/blobdiff - offlineimap/folder/Maildir.py
Configurable thread status character for ui.Curses.Blinkenlights
[offlineimap] / offlineimap / folder / Maildir.py
index 643f57ac1053457d8ab4c193fff94f318db061ce..74019cb658331a8338fac0e73559b5068ec15d16 100644 (file)
@@ -1,5 +1,5 @@
 # Maildir folder support
-# Copyright (C) 2002 - 2007 John Goerzen
+# Copyright (C) 2002 - 2006 John Goerzen
 # <jgoerzen@complete.org>
 #
 #    This program is free software; you can redistribute it and/or modify
@@ -130,8 +130,6 @@ class MaildirFolder(BaseFolder):
         return st.st_mtime
 
     def savemessage(self, uid, content, flags, rtime):
-        # This function only ever saves to tmp/,
-        # but it calls savemessageflags() to actually save to cur/ or new/.
         ui = UIBase.getglobalui()
         ui.debug('maildir', 'savemessage: called to write with flags %s and content %s' % \
                  (repr(flags), repr(content)))
@@ -142,9 +140,12 @@ class MaildirFolder(BaseFolder):
             # We already have it.
             self.savemessageflags(uid, flags)
             return uid
-
-        # Otherwise, save the message in tmp/ and then call savemessageflags()
-        # to give it a permanent home.
+        if 'S' in flags:
+            # If a message has been seen, it goes into the cur
+            # directory.  CR debian#152482, [complete.org #4]
+            newdir = os.path.join(self.getfullname(), 'cur')
+        else:
+            newdir = os.path.join(self.getfullname(), 'new')
         tmpdir = os.path.join(self.getfullname(), 'tmp')
         messagename = None
         attempts = 0
@@ -168,31 +169,16 @@ class MaildirFolder(BaseFolder):
         ui.debug('maildir', 'savemessage: using temporary name %s' % tmpmessagename)
         file = open(os.path.join(tmpdir, tmpmessagename), "wt")
         file.write(content)
-
-        # Make sure the data hits the disk
-        file.flush()
-        os.fsync(file.fileno())
-
         file.close()
         if rtime != None:
             os.utime(os.path.join(tmpdir,tmpmessagename), (rtime,rtime))
         ui.debug('maildir', 'savemessage: moving from %s to %s' % \
                  (tmpmessagename, messagename))
-        if tmpmessagename != messagename: # then rename it
-            os.link(os.path.join(tmpdir, tmpmessagename),
-                    os.path.join(tmpdir, messagename))
-            os.unlink(os.path.join(tmpdir, tmpmessagename))
-
-        try:
-            # fsync the directory (safer semantics in Linux)
-            fd = os.open(tmpdir, os.O_RDONLY)
-            os.fsync(fd)
-            os.close(fd)
-        except:
-            pass
-
+        os.link(os.path.join(tmpdir, tmpmessagename),
+                os.path.join(newdir, messagename))
+        os.unlink(os.path.join(tmpdir, tmpmessagename))
         self.messagelist[uid] = {'uid': uid, 'flags': [],
-                                 'filename': os.path.join(tmpdir, messagename)}
+                                 'filename': os.path.join(newdir, messagename)}
         self.savemessageflags(uid, flags)
         ui.debug('maildir', 'savemessage: returning uid %d' % uid)
         return uid
@@ -203,7 +189,6 @@ class MaildirFolder(BaseFolder):
     def savemessageflags(self, uid, flags):
         oldfilename = self.messagelist[uid]['filename']
         newpath, newname = os.path.split(oldfilename)
-        tmpdir = os.path.join(self.getfullname(), 'tmp')
         if 'S' in flags:
             # If a message has been seen, it goes into the cur
             # directory.  CR debian#152482, [complete.org #4]
@@ -226,10 +211,6 @@ class MaildirFolder(BaseFolder):
             self.messagelist[uid]['flags'] = flags
             self.messagelist[uid]['filename'] = newfilename
 
-        # By now, the message had better not be in tmp/ land!
-        final_dir, final_name = os.path.split(self.messagelist[uid]['filename'])
-        assert final_dir != tmpdir
-
     def deletemessage(self, uid):
         if not uid in self.messagelist:
             return