]> code.delx.au - offlineimap/commitdiff
/offlineimap/head: changeset 325
authorjgoerzen <jgoerzen>
Tue, 7 Jan 2003 03:15:22 +0000 (04:15 +0100)
committerjgoerzen <jgoerzen>
Tue, 7 Jan 2003 03:15:22 +0000 (04:15 +0100)
Touched up the isactive tests. Added defaults for many more options.

offlineimap/head/debian/copyright
offlineimap/head/offlineimap.conf
offlineimap/head/offlineimap/CustomConfig.py
offlineimap/head/offlineimap/accounts.py
offlineimap/head/offlineimap/imapserver.py
offlineimap/head/offlineimap/init.py
offlineimap/head/offlineimap/mbnames.py
offlineimap/head/offlineimap/ui/Curses.py
offlineimap/head/offlineimap/ui/Tk.py
offlineimap/head/offlineimap/ui/detector.py

index 2800b95e33b0c9a1d4e88d15184797488fc9d7d9..a6aa6c1a37f0e9f65d27f822ab14dfa44c874c28 100644 (file)
@@ -4,7 +4,7 @@ on Fri, 21 Jun 2002 14:54:56 -0500.
 The original source can always be found at:
         ftp://ftp.debian.org/dists/unstable/main/source/
 
-Copyright (C) 2002  John Goerzen
+Copyright (C) 2002, 2003  John Goerzen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index 5b31ed780a8cd69c927962b27f6ed45e5e4b061b..7980ef083d12adaa02a5fbfe3cc0e55755202f3a 100644 (file)
@@ -38,7 +38,7 @@ accounts = Test
 # Offlineimap can synchronize more the one account at a time.  If you
 # want to enable this feature, set the below value to something
 # greater than 1.  To force it to synchronize only one account at a
-# time, leave it at 1.
+# time, set it to 1.
 #
 
 maxsyncaccounts = 1
index fbfd65fc2025b3a35fb47e6b0c625ef0a00f06cd..341ce0e2d609a691cca3297af68a6699036c9671 100644 (file)
@@ -28,6 +28,19 @@ class CustomConfigParser(ConfigParser):
         else:
             return default
     
+    def getdefaultint(self, section, option, default, *args, **kwargs):
+        if self.has_option(section, option):
+            return apply(self.getint, [section, option] + list(args), kwargs)
+        else:
+            return default
+
+    def getdefaultboolean(self, section, option, default, *args, **kwargs):
+        if self.has_option(section, option):
+            return apply(self.getboolean, [section, option] + list(args),
+                         kwargs)
+        else:
+            return default
+
     def getmetadatadir(self):
         metadatadir = os.path.expanduser(self.getdefault("general", "metadata", "~/.offlineimap"))
         if not os.path.exists(metadatadir):
index 3fdd386edd12c93f61519cdad6cbc24da0b7ede0..3b84899513e7034cbabdc093a2ac4f2caef07d9b 100644 (file)
@@ -130,7 +130,7 @@ class AccountSynchronizationMixin:
             threadutil.threadsreset(folderthreads)
             mbnames.write()
             if not self.hold:
-                server.close()
+                self.server.close()
         finally:
             pass
     
index 5ab0c1fb37fe1065a3043377800aa7c692571ca8..828e875ce26b605a37a321a181af5adc91c82b35 100644 (file)
@@ -266,7 +266,7 @@ class ConfigedIMAPServer(IMAPServer):
         port = None
         if config.has_option(accountname, "remoteport"):
             port = config.getint(accountname, "remoteport")
-        ssl = config.getboolean(accountname, "ssl")
+        ssl = config.getdefaultboolean(accountname, "ssl", 0)
         usetunnel = config.has_option(accountname, "preauthtunnel")
         reference = '""'
         if config.has_option(accountname, "reference"):
@@ -292,5 +292,5 @@ class ConfigedIMAPServer(IMAPServer):
                     passfile.close()
             IMAPServer.__init__(self, config, accountname,
                                 user, password, host, port, ssl,
-                                config.getint(accountname, "maxconnections"),
+                                config.getdefaultint(accountname, "maxconnections", 1),
                                 reference = reference)
index bb3d8e926d800530ae4c93c802efb0399f0bbe2d..2ba9bbc9ccde08ca45abff8b238cf52e96332c01 100644 (file)
@@ -86,7 +86,7 @@ def startup(versionno):
         threadutil.initInstanceLimit("ACCOUNTLIMIT", 1)
     else:
         threadutil.initInstanceLimit("ACCOUNTLIMIT",
-                                     config.getint("general", "maxsyncaccounts"))
+                                     config.getdefaultint("general", "maxsyncaccounts", 1))
 
     for account in accounts:
         for instancename in ["FOLDER_" + account, "MSGCOPY_" + account]:
@@ -94,7 +94,7 @@ def startup(versionno):
                 threadutil.initInstanceLimit(instancename, 1)
             else:
                 threadutil.initInstanceLimit(instancename,
-                                             config.getint(account, "maxconnections"))
+                                             config.getdefaultint(account, "maxconnections", 1))
 
     threadutil.initexitnotify()
     t = ExitNotifyThread(target=syncmaster.syncitall,
index 95acfbfa0da12af2f74ddd7b10f194296d9420e2..27ce7979bb819ec77b8e4cfa668865d5bceebcf5 100644 (file)
@@ -50,7 +50,7 @@ def genmbnames():
     mblock.acquire()
     try:
         localeval = config.getlocaleval()
-        if not config.getboolean("mbnames", "enabled"):
+        if not config.getdefaultboolean("mbnames", "enabled", 0):
             return
         file = open(os.path.expanduser(config.get("mbnames", "filename")), "wt")
         file.write(localeval.eval(config.get("mbnames", "header")))
index f005792eb060e5c5551d94384cc463e327a4e48d..befefb28d493b34487de79dc65d6d81c9d492418 100644 (file)
@@ -19,7 +19,7 @@
 from Blinkenlights import BlinkenBase
 from UIBase import UIBase
 from threading import *
-import thread, time
+import thread, time, sys, os
 from offlineimap import version, threadutil
 from offlineimap.threadutil import MultiLock
 
@@ -309,6 +309,32 @@ class Blinkenlights(BlinkenBase, UIBase):
         s._msg(version.banner)
         s.inputhandler.set_bgchar(s.keypress)
 
+    def isusable(s):
+        # Not a terminal?  Can't use curses.
+        if not sys.stdout.isatty() and sys.stdin.isatty():
+            return 0
+
+        # No TERM specified?  Can't use curses.
+        try:
+            if not len(os.environ['TERM']):
+                return 0
+        except: return 0
+
+        # ncurses doesn't want to start?  Can't use curses.
+        # This test is nasty because initscr() actually EXITS on error.
+        # grr.
+
+        pid = os.fork()
+        if pid:
+            # parent
+            return not os.WEXITSTATUS(os.waitpid(pid, 0)[1])
+        else:
+            # child
+            curses.initscr()
+            curses.endwin()
+            # If we didn't die by here, indicate success.
+            sys.exit(0)
+
     def keypress(s, key):
         if key > 255:
             return
index 1eb2b79b85fcf7472977da57c2c50befd75c30c0..ba381875a29cf7536bd533886f84ed32c111f53a 100644 (file)
@@ -29,6 +29,8 @@ from Queue import Queue
 from UIBase import UIBase
 from offlineimap.ui.Blinkenlights import BlinkenBase
 
+usabletest = None
+
 class PasswordDialog:
     def __init__(self, accountname, config, master=None, errmsg = None):
         self.top = Toplevel(master)
@@ -148,12 +150,17 @@ class ThreadFrame(Frame):
 
 class VerboseUI(UIBase):
     def isusable(s):
+        global usabletest
+        if usabletest != None:
+            return usabletest
+
         try:
             Tk().destroy()
-            return 1
+            usabletest = 1
         except TclError:
-            return 0
-
+            usabletest = 0
+        return usabletest
+    
     def _createTopWindow(self, doidlevac = 1):
         self.notdeleted = 1
         self.created = threading.Event()
@@ -414,20 +421,19 @@ class Blinkenlights(BlinkenBase, VerboseUI):
         if config.has_option('ui.Tk.Blinkenlights', 'fontsize'):
             s.fontsize = config.getint('ui.Tk.Blinkenlights', 'fontsize')
 
+    def isusable(s):
+        return VerboseUI.isusable(s)
+
     def _createTopWindow(self):
         VerboseUI._createTopWindow(self, 0)
         #self.top.resizable(width = 0, height = 0)
         self.top.configure(background = 'black', bd = 0)
 
         widthmetric = tkFont.Font(family = self.fontfamily, size = self.fontsize).measure("0")
-        self.loglines = 5
-        if self.config.has_option("ui.Tk.Blinkenlights", "loglines"):
-            self.loglines = self.config.getint("ui.Tk.Blinkenlights",
-                                               "loglines")
-        self.bufferlines = 500
-        if self.config.has_option("ui.Tk.Blinkenlights", "bufferlines"):
-            self.bufferlines = self.config.getint("ui.Tk.Blinkenlights",
-                                                  "bufferlines")
+        self.loglines = self.config.getdefaultint("ui.Tk.Blinkenlights",
+                                                  "loglines", 5)
+        self.bufferlines = self.config.getdefaultint("ui.Tk.Blinkenlights",
+                                                     "bufferlines", 500)
         self.text = ScrolledText(self.top, bg = 'black', #scrollbar = 'y',
                                  font = (self.fontfamily, self.fontsize),
                                  bd = 0, highlightthickness = 0, setgrid = 0,
@@ -457,8 +463,7 @@ class Blinkenlights(BlinkenBase, VerboseUI):
         s.top.config(menu = menubar)
         s.menubar = menubar
         s.text.see(END)
-        if s.config.has_option("ui.Tk.Blinkenlights", "showlog") and \
-           s.config.getboolean("ui.Tk.Blinkenlights", "showlog"):
+        if s.config.getdefaultboolean("ui.Tk.Blinkenlights", "showlog", 1):
             s._togglelog()
         s.gettf().setcolor('red')
         s.top.resizable(width = 0, height = 0)
index 2cda9b8b99b3354f3d2587691fc5abe42728ae9b..8116fd12a720d796491666b7cff807f554df9b6c 100644 (file)
@@ -20,7 +20,8 @@ import offlineimap.ui
 import sys
 
 def findUI(config, chosenUI=None):
-    uistrlist = ['Tk.Blinkenlights', 'Tk.VerboseUI', 'TTY.TTYUI',
+    uistrlist = ['Tk.Blinkenlights', 'Tk.VerboseUI',
+                 'Curses.Blinkenlights', 'TTY.TTYUI',
                  'Noninteractive.Basic', 'Noninteractive.Quiet']
     namespace={}
     for ui in dir(offlineimap.ui):