]> code.delx.au - offlineimap/blobdiff - offlineimap/ui/UIBase.py
Checkpointing
[offlineimap] / offlineimap / ui / UIBase.py
index 92811c1dd483b22290294ea76a56b1edfbfa3df6..d40fdb3d0efe2efff24e51547fe4c28b5c7c81a5 100644 (file)
@@ -24,21 +24,11 @@ debugtypes = {'imap': 'IMAP protocol debugging',
               'maildir': 'Maildir repository debugging',
               'thread': 'Threading debugging'}
 
-globalui = None
-def setglobalui(newui):
-    global globalui
-    globalui = newui
-def getglobalui():
-    global globalui
-    return globalui
-
 class UIBase:
     def __init__(s, config, verbose = 0):
         s.verbose = verbose
         s.config = config
         s.debuglist = []
-        s.debugmessages = {}
-        s.debugmsglen = 50
         s.threadaccounts = {}
         s.logfile = None
     
@@ -76,19 +66,19 @@ class UIBase:
         else:
             s._msg("WARNING: " + msg)
 
-    def registerthread(s, account):
+    def registerthread(s, threadname, accountname): #FIX IN CODE
         """Provides a hint to UIs about which account this particular
         thread is processing."""
-        if s.threadaccounts.has_key(threading.currentThread()):
+        if s.threadaccounts.has_key(threadname):
             raise ValueError, "Thread %s already registered (old %s, new %s)" %\
-                  (threading.currentThread().getName(),
+                  (threadname
                    s.getthreadaccount(s), account)
-        s.threadaccounts[threading.currentThread()] = account
+        s.threadaccounts[threadname] = account
 
-    def unregisterthread(s, thr):
+    def unregisterthread(s, threadname): #FIX IN CODE
         """Recognizes a thread has exited."""
-        if s.threadaccounts.has_key(thr):
-            del s.threadaccounts[thr]
+        if s.threadaccounts.has_key(threadname):
+            del s.threadaccounts[threadname]
 
     def getthreadaccount(s, thr = None):
         if not thr:
@@ -97,16 +87,7 @@ class UIBase:
             return s.threadaccounts[thr]
         return '*Control'
 
-    def debug(s, debugtype, msg):
-        thisthread = threading.currentThread()
-        if s.debugmessages.has_key(thisthread):
-            s.debugmessages[thisthread].append("%s: %s" % (debugtype, msg))
-        else:
-            s.debugmessages[thisthread] = ["%s: %s" % (debugtype, msg)]
-
-        while len(s.debugmessages[thisthread]) > s.debugmsglen:
-            s.debugmessages[thisthread] = s.debugmessages[thisthread][1:]
-
+    def print_debug(s, debugtype, msg):
         if debugtype in s.debuglist:
             if not s._log("DEBUG[%s]: %s" % (debugtype, msg)):
                 s._display("DEBUG[%s]: %s" % (debugtype, msg))
@@ -124,17 +105,9 @@ class UIBase:
         global debugtypes
         s._msg("Now debugging for %s: %s" % (debugtype, debugtypes[debugtype]))
 
-    def invaliddebug(s, debugtype):
-        s.warn("Invalid debug type: %s" % debugtype)
-
     def locked(s):
         raise Exception, "Another OfflineIMAP is running with the same metadatadir; exiting."
 
-    def getnicename(s, object):
-        prelimname = str(object.__class__).split('.')[-1]
-        # Strip off extra stuff.
-        return re.sub('(Folder|Repository)', '', prelimname)
-
     def isusable(s):
         """Returns true if this UI object is usable in the current
         environment.  For instance, an X GUI would return true if it's
@@ -143,19 +116,19 @@ class UIBase:
 
     ################################################## INPUT
 
-    def getpass(s, accountname, config, errmsg = None):
+    def getpass(s, accountname, errmsg = None): # FIX IN CODE
         raise NotImplementedError
 
     def folderlist(s, list):
         return ', '.join(["%s[%s]" % (s.getnicename(x), x.getname()) for x in list])
 
     ################################################## WARNINGS
-    def msgtoreadonly(s, destfolder, uid, content, flags):
+    def msgtoreadonly(s, destfoldernicename, destfoldername, uid): #FIX IN CODE # FIX IN CODE
         if not (config.has_option('general', 'ignore-readonly') and 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()))
+                   (uid, destfoldernicename, destfoldername))
 
-    def flagstoreadonly(s, destfolder, uidlist, flags):
+    def flagstoreadonly(s, destfolder, uidlist): #FIX IN CODE
         if not (config.has_option('general', 'ignore-readonly') and 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()))
@@ -208,9 +181,10 @@ 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 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:
@@ -301,8 +275,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):