]> code.delx.au - offlineimap/blobdiff - offlineimap/ui/UIBase.py
Merge branch 'netrc-integration'
[offlineimap] / offlineimap / ui / UIBase.py
index 70dc720fdccba0a78af26be0f0ec4b4dfd221f38..d0e92e6a07716933f6801144235284ba5b6c7a8c 100644 (file)
@@ -14,7 +14,7 @@
 #
 #    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
 
 import offlineimap.version
 import re, time, sys, traceback, threading, thread
@@ -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):