]> code.delx.au - offlineimap/blobdiff - offlineimap/ui/UIBase.py
UNDO: Synchronize newly created folders both ways
[offlineimap] / offlineimap / ui / UIBase.py
index 26402c25770db6cce520ca434cdc8e7ea4d6ba61..d0e92e6a07716933f6801144235284ba5b6c7a8c 100644 (file)
@@ -59,10 +59,9 @@ class UIBase:
 
     def setlogfd(s, logfd):
         s.logfile = logfd
-        logfd.write("This is %s %s %s\n" % \
+        logfd.write("This is %s %s\n" % \
                     (offlineimap.version.productname,
-                     offlineimap.version.versionstr,
-                     offlineimap.version.revstr))
+                     offlineimap.version.versionstr))
         logfd.write("Python: %s\n" % sys.version)
         logfd.write("Platform: %s\n" % sys.platform)
         logfd.write("Args: %s\n" % sys.argv)
@@ -152,17 +151,17 @@ class UIBase:
 
     ################################################## WARNINGS
     def msgtoreadonly(s, destfolder, uid, content, flags):
-        if not (config.has_option('general', 'ignore-readonly') and config.getboolean("general", "ignore-readonly")):
+        if not (s.config.has_option('general', 'ignore-readonly') and s.config.getboolean("general", "ignore-readonly")):
             s.warn("Attempted to synchronize message %d to folder %s[%s], but that folder is read-only.  The message will not be copied to that folder." % \
                    (uid, s.getnicename(destfolder), destfolder.getname()))
 
     def flagstoreadonly(s, destfolder, uidlist, flags):
-        if not (config.has_option('general', 'ignore-readonly') and config.getboolean("general", "ignore-readonly")):
+        if not (s.config.has_option('general', 'ignore-readonly') and s.config.getboolean("general", "ignore-readonly")):
             s.warn("Attempted to modify flags for messages %s in folder %s[%s], but that folder is read-only.  No flags have been modified for that message." % \
                    (str(uidlist), s.getnicename(destfolder), destfolder.getname()))
 
     def deletereadonly(s, destfolder, uidlist):
-        if not (config.has_option('general', 'ignore-readonly') and config.getboolean("general", "ignore-readonly")):
+        if not (s.config.has_option('general', 'ignore-readonly') and s.config.getboolean("general", "ignore-readonly")):
             s.warn("Attempted to delete messages %s in folder %s[%s], but that folder is read-only.  No messages have been deleted in that folder." % \
                    (str(uidlist), s.getnicename(destfolder), destfolder.getname()))
 
@@ -209,9 +208,15 @@ class UIBase:
                                              s.getnicename(srcrepos),
                                              s.getnicename(destrepos)))
 
-    def validityproblem(s, folder, saved, new):
-        s.warn("UID validity problem for folder %s (saved %d; got %d); skipping it" % \
-               (folder.getname(), saved, new))
+    def skippingfolder(s, folder):
+        """Called when a folder sync operation is started."""
+        if s.verbose >= 0:
+            s._msg("Skipping %s (not changed)" % folder.getname())
+
+    def validityproblem(s, folder):
+        s.warn("UID validity problem for folder %s (repo %s) (saved %d; got %d); skipping it" % \
+               (folder.getname(), folder.getrepository().getname(),
+                folder.getsaveduidvalidity(), folder.getuidvalidity()))
 
     def loadmessagelist(s, repos, folder):
         if s.verbose > 0:
@@ -302,8 +307,13 @@ class UIBase:
     def mainException(s):
         s._msg(s.getMainExceptionString())
 
-    def terminate(s, exitstatus = 0):
+    def terminate(s, exitstatus = 0, errortitle = None, errormsg = None):
         """Called to terminate the application."""
+        if errormsg <> None:
+            if errortitle <> None:
+                sys.stderr.write('ERROR: %s\n\n%s\n'%(errortitle, errormsg))
+            else:
+                sys.stderr.write('%s\n' % errormsg)
         sys.exit(exitstatus)
 
     def threadExited(s, thread):