diff --git a/offlineimap/head/debian/copyright b/offlineimap/head/debian/copyright index 2800b95..a6aa6c1 100644 --- a/offlineimap/head/debian/copyright +++ b/offlineimap/head/debian/copyright @@ -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 diff --git a/offlineimap/head/offlineimap.conf b/offlineimap/head/offlineimap.conf index 5b31ed7..7980ef0 100644 --- a/offlineimap/head/offlineimap.conf +++ b/offlineimap/head/offlineimap.conf @@ -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 diff --git a/offlineimap/head/offlineimap/CustomConfig.py b/offlineimap/head/offlineimap/CustomConfig.py index fbfd65f..341ce0e 100644 --- a/offlineimap/head/offlineimap/CustomConfig.py +++ b/offlineimap/head/offlineimap/CustomConfig.py @@ -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): diff --git a/offlineimap/head/offlineimap/accounts.py b/offlineimap/head/offlineimap/accounts.py index 3fdd386..3b84899 100644 --- a/offlineimap/head/offlineimap/accounts.py +++ b/offlineimap/head/offlineimap/accounts.py @@ -130,7 +130,7 @@ class AccountSynchronizationMixin: threadutil.threadsreset(folderthreads) mbnames.write() if not self.hold: - server.close() + self.server.close() finally: pass diff --git a/offlineimap/head/offlineimap/imapserver.py b/offlineimap/head/offlineimap/imapserver.py index 5ab0c1f..828e875 100644 --- a/offlineimap/head/offlineimap/imapserver.py +++ b/offlineimap/head/offlineimap/imapserver.py @@ -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) diff --git a/offlineimap/head/offlineimap/init.py b/offlineimap/head/offlineimap/init.py index bb3d8e9..2ba9bbc 100644 --- a/offlineimap/head/offlineimap/init.py +++ b/offlineimap/head/offlineimap/init.py @@ -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, diff --git a/offlineimap/head/offlineimap/mbnames.py b/offlineimap/head/offlineimap/mbnames.py index 95acfbf..27ce797 100644 --- a/offlineimap/head/offlineimap/mbnames.py +++ b/offlineimap/head/offlineimap/mbnames.py @@ -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"))) diff --git a/offlineimap/head/offlineimap/ui/Curses.py b/offlineimap/head/offlineimap/ui/Curses.py index f005792..befefb2 100644 --- a/offlineimap/head/offlineimap/ui/Curses.py +++ b/offlineimap/head/offlineimap/ui/Curses.py @@ -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 diff --git a/offlineimap/head/offlineimap/ui/Tk.py b/offlineimap/head/offlineimap/ui/Tk.py index 1eb2b79..ba38187 100644 --- a/offlineimap/head/offlineimap/ui/Tk.py +++ b/offlineimap/head/offlineimap/ui/Tk.py @@ -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) diff --git a/offlineimap/head/offlineimap/ui/detector.py b/offlineimap/head/offlineimap/ui/detector.py index 2cda9b8..8116fd1 100644 --- a/offlineimap/head/offlineimap/ui/detector.py +++ b/offlineimap/head/offlineimap/ui/detector.py @@ -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):