]> code.delx.au - offlineimap/blobdiff - offlineimap/repository/Maildir.py
Now create cur,new,tmp in '.' even if existsok is false
[offlineimap] / offlineimap / repository / Maildir.py
index d35b0cc50f4d76e9fca6250df1c39b96d1b0028d..717ffcbf64c9b51798d191bcdbe62a42ac96469f 100644 (file)
 #
 #    You should have received a copy of the GNU General Public License
 #    along with this program; if not, write to the Free Software
 #
 #    You should have received a copy of the GNU General Public License
 #    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
 from Base import BaseRepository
 from offlineimap import folder, imaputil
 from offlineimap.ui import UIBase
 from mailbox import Maildir
 import os
 
 from Base import BaseRepository
 from offlineimap import folder, imaputil
 from offlineimap.ui import UIBase
 from mailbox import Maildir
 import os
+from stat import *
 
 class MaildirRepository(BaseRepository):
     def __init__(self, reposname, account):
 
 class MaildirRepository(BaseRepository):
     def __init__(self, reposname, account):
@@ -32,9 +33,28 @@ class MaildirRepository(BaseRepository):
         self.folders = None
         self.ui = UIBase.getglobalui()
         self.debug("MaildirRepository initialized, sep is " + repr(self.getsep()))
         self.folders = None
         self.ui = UIBase.getglobalui()
         self.debug("MaildirRepository initialized, sep is " + repr(self.getsep()))
+       self.folder_atimes = []
 
 
-    def getrestoreatime(self):
-       return self.getconfboolean('restoreatime', 0)
+        # Create the top-level folder if it doesn't exist
+        if not os.path.isdir(self.root):
+            os.mkdir(self.root, 0700)
+
+    def _append_folder_atimes(self, foldername):
+       p = os.path.join(self.root, foldername)
+       new = os.path.join(p, 'new')
+       cur = os.path.join(p, 'cur')
+       f = p, os.stat(new)[ST_ATIME], os.stat(cur)[ST_ATIME]
+       self.folder_atimes.append(f)
+
+    def restore_folder_atimes(self):
+       if not self.folder_atimes:
+           return
+
+       for f in self.folder_atimes:
+           t = f[1], os.stat(os.path.join(f[0], 'new'))[ST_MTIME]
+           os.utime(os.path.join(f[0], 'new'), t)
+           t = f[2], os.stat(os.path.join(f[0], 'cur'))[ST_MTIME]
+           os.utime(os.path.join(f[0], 'cur'), t)
 
     def getlocalroot(self):
         return os.path.expanduser(self.getconf('localfolders'))
 
     def getlocalroot(self):
         return os.path.expanduser(self.getconf('localfolders'))
@@ -67,7 +87,7 @@ class MaildirRepository(BaseRepository):
         # makedirs will fail because the higher-up dir already exists.
         # So, check to see if this is indeed the case.
 
         # makedirs will fail because the higher-up dir already exists.
         # So, check to see if this is indeed the case.
 
-        if (self.getsep() == '/' or self.getconfboolean('existsok', 0)) \
+        if (self.getsep() == '/' or self.getconfboolean('existsok', 0) or foldername == '.') \
             and os.path.isdir(foldername):
             self.debug("makefolder: %s already is a directory" % foldername)
             # Already exists.  Sanity-check that it's not a Maildir.
             and os.path.isdir(foldername):
             self.debug("makefolder: %s already is a directory" % foldername)
             # Already exists.  Sanity-check that it's not a Maildir.
@@ -89,6 +109,8 @@ class MaildirRepository(BaseRepository):
         self.ui.warn("NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername)
 
     def getfolder(self, foldername):
         self.ui.warn("NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername)
 
     def getfolder(self, foldername):
+       if self.config.has_option('Repository ' + self.name, 'restoreatime') and self.config.getboolean('Repository ' + self.name, 'restoreatime'):
+           self._append_folder_atimes(foldername)
         return folder.Maildir.MaildirFolder(self.root, foldername,
                                             self.getsep(), self, self.accountname)
     
         return folder.Maildir.MaildirFolder(self.root, foldername,
                                             self.getsep(), self, self.accountname)
     
@@ -133,6 +155,8 @@ class MaildirRepository(BaseRepository):
 
                 self.debug("  foldername = %s" % foldername)
 
 
                 self.debug("  foldername = %s" % foldername)
 
+               if self.config.has_option('Repository ' + self.name, 'restoreatime') and self.config.getboolean('Repository ' + self.name, 'restoreatime'):
+                   self._append_folder_atimes(foldername)
                 retval.append(folder.Maildir.MaildirFolder(self.root, foldername,
                                                            self.getsep(), self, self.accountname))
             if self.getsep() == '/' and dirname != '.':
                 retval.append(folder.Maildir.MaildirFolder(self.root, foldername,
                                                            self.getsep(), self, self.accountname))
             if self.getsep() == '/' and dirname != '.':