/offlineimap/head: changeset 325

Touched up the isactive tests. Added defaults for many more options.
This commit is contained in:
jgoerzen 2003-01-07 04:15:22 +01:00
parent 1cc5cfda0a
commit 16b3ce90ca
10 changed files with 68 additions and 23 deletions

View File

@ -4,7 +4,7 @@ on Fri, 21 Jun 2002 14:54:56 -0500.
The original source can always be found at: The original source can always be found at:
ftp://ftp.debian.org/dists/unstable/main/source/ 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 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 it under the terms of the GNU General Public License as published by

View File

@ -38,7 +38,7 @@ accounts = Test
# Offlineimap can synchronize more the one account at a time. If you # Offlineimap can synchronize more the one account at a time. If you
# want to enable this feature, set the below value to something # want to enable this feature, set the below value to something
# greater than 1. To force it to synchronize only one account at a # 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 maxsyncaccounts = 1

View File

@ -28,6 +28,19 @@ class CustomConfigParser(ConfigParser):
else: else:
return default 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): def getmetadatadir(self):
metadatadir = os.path.expanduser(self.getdefault("general", "metadata", "~/.offlineimap")) metadatadir = os.path.expanduser(self.getdefault("general", "metadata", "~/.offlineimap"))
if not os.path.exists(metadatadir): if not os.path.exists(metadatadir):

View File

@ -130,7 +130,7 @@ class AccountSynchronizationMixin:
threadutil.threadsreset(folderthreads) threadutil.threadsreset(folderthreads)
mbnames.write() mbnames.write()
if not self.hold: if not self.hold:
server.close() self.server.close()
finally: finally:
pass pass

View File

@ -266,7 +266,7 @@ class ConfigedIMAPServer(IMAPServer):
port = None port = None
if config.has_option(accountname, "remoteport"): if config.has_option(accountname, "remoteport"):
port = config.getint(accountname, "remoteport") port = config.getint(accountname, "remoteport")
ssl = config.getboolean(accountname, "ssl") ssl = config.getdefaultboolean(accountname, "ssl", 0)
usetunnel = config.has_option(accountname, "preauthtunnel") usetunnel = config.has_option(accountname, "preauthtunnel")
reference = '""' reference = '""'
if config.has_option(accountname, "reference"): if config.has_option(accountname, "reference"):
@ -292,5 +292,5 @@ class ConfigedIMAPServer(IMAPServer):
passfile.close() passfile.close()
IMAPServer.__init__(self, config, accountname, IMAPServer.__init__(self, config, accountname,
user, password, host, port, ssl, user, password, host, port, ssl,
config.getint(accountname, "maxconnections"), config.getdefaultint(accountname, "maxconnections", 1),
reference = reference) reference = reference)

View File

@ -86,7 +86,7 @@ def startup(versionno):
threadutil.initInstanceLimit("ACCOUNTLIMIT", 1) threadutil.initInstanceLimit("ACCOUNTLIMIT", 1)
else: else:
threadutil.initInstanceLimit("ACCOUNTLIMIT", threadutil.initInstanceLimit("ACCOUNTLIMIT",
config.getint("general", "maxsyncaccounts")) config.getdefaultint("general", "maxsyncaccounts", 1))
for account in accounts: for account in accounts:
for instancename in ["FOLDER_" + account, "MSGCOPY_" + account]: for instancename in ["FOLDER_" + account, "MSGCOPY_" + account]:
@ -94,7 +94,7 @@ def startup(versionno):
threadutil.initInstanceLimit(instancename, 1) threadutil.initInstanceLimit(instancename, 1)
else: else:
threadutil.initInstanceLimit(instancename, threadutil.initInstanceLimit(instancename,
config.getint(account, "maxconnections")) config.getdefaultint(account, "maxconnections", 1))
threadutil.initexitnotify() threadutil.initexitnotify()
t = ExitNotifyThread(target=syncmaster.syncitall, t = ExitNotifyThread(target=syncmaster.syncitall,

View File

@ -50,7 +50,7 @@ def genmbnames():
mblock.acquire() mblock.acquire()
try: try:
localeval = config.getlocaleval() localeval = config.getlocaleval()
if not config.getboolean("mbnames", "enabled"): if not config.getdefaultboolean("mbnames", "enabled", 0):
return return
file = open(os.path.expanduser(config.get("mbnames", "filename")), "wt") file = open(os.path.expanduser(config.get("mbnames", "filename")), "wt")
file.write(localeval.eval(config.get("mbnames", "header"))) file.write(localeval.eval(config.get("mbnames", "header")))

View File

@ -19,7 +19,7 @@
from Blinkenlights import BlinkenBase from Blinkenlights import BlinkenBase
from UIBase import UIBase from UIBase import UIBase
from threading import * from threading import *
import thread, time import thread, time, sys, os
from offlineimap import version, threadutil from offlineimap import version, threadutil
from offlineimap.threadutil import MultiLock from offlineimap.threadutil import MultiLock
@ -309,6 +309,32 @@ class Blinkenlights(BlinkenBase, UIBase):
s._msg(version.banner) s._msg(version.banner)
s.inputhandler.set_bgchar(s.keypress) 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): def keypress(s, key):
if key > 255: if key > 255:
return return

View File

@ -29,6 +29,8 @@ from Queue import Queue
from UIBase import UIBase from UIBase import UIBase
from offlineimap.ui.Blinkenlights import BlinkenBase from offlineimap.ui.Blinkenlights import BlinkenBase
usabletest = None
class PasswordDialog: class PasswordDialog:
def __init__(self, accountname, config, master=None, errmsg = None): def __init__(self, accountname, config, master=None, errmsg = None):
self.top = Toplevel(master) self.top = Toplevel(master)
@ -148,12 +150,17 @@ class ThreadFrame(Frame):
class VerboseUI(UIBase): class VerboseUI(UIBase):
def isusable(s): def isusable(s):
global usabletest
if usabletest != None:
return usabletest
try: try:
Tk().destroy() Tk().destroy()
return 1 usabletest = 1
except TclError: except TclError:
return 0 usabletest = 0
return usabletest
def _createTopWindow(self, doidlevac = 1): def _createTopWindow(self, doidlevac = 1):
self.notdeleted = 1 self.notdeleted = 1
self.created = threading.Event() self.created = threading.Event()
@ -414,20 +421,19 @@ class Blinkenlights(BlinkenBase, VerboseUI):
if config.has_option('ui.Tk.Blinkenlights', 'fontsize'): if config.has_option('ui.Tk.Blinkenlights', 'fontsize'):
s.fontsize = config.getint('ui.Tk.Blinkenlights', 'fontsize') s.fontsize = config.getint('ui.Tk.Blinkenlights', 'fontsize')
def isusable(s):
return VerboseUI.isusable(s)
def _createTopWindow(self): def _createTopWindow(self):
VerboseUI._createTopWindow(self, 0) VerboseUI._createTopWindow(self, 0)
#self.top.resizable(width = 0, height = 0) #self.top.resizable(width = 0, height = 0)
self.top.configure(background = 'black', bd = 0) self.top.configure(background = 'black', bd = 0)
widthmetric = tkFont.Font(family = self.fontfamily, size = self.fontsize).measure("0") widthmetric = tkFont.Font(family = self.fontfamily, size = self.fontsize).measure("0")
self.loglines = 5 self.loglines = self.config.getdefaultint("ui.Tk.Blinkenlights",
if self.config.has_option("ui.Tk.Blinkenlights", "loglines"): "loglines", 5)
self.loglines = self.config.getint("ui.Tk.Blinkenlights", self.bufferlines = self.config.getdefaultint("ui.Tk.Blinkenlights",
"loglines") "bufferlines", 500)
self.bufferlines = 500
if self.config.has_option("ui.Tk.Blinkenlights", "bufferlines"):
self.bufferlines = self.config.getint("ui.Tk.Blinkenlights",
"bufferlines")
self.text = ScrolledText(self.top, bg = 'black', #scrollbar = 'y', self.text = ScrolledText(self.top, bg = 'black', #scrollbar = 'y',
font = (self.fontfamily, self.fontsize), font = (self.fontfamily, self.fontsize),
bd = 0, highlightthickness = 0, setgrid = 0, bd = 0, highlightthickness = 0, setgrid = 0,
@ -457,8 +463,7 @@ class Blinkenlights(BlinkenBase, VerboseUI):
s.top.config(menu = menubar) s.top.config(menu = menubar)
s.menubar = menubar s.menubar = menubar
s.text.see(END) s.text.see(END)
if s.config.has_option("ui.Tk.Blinkenlights", "showlog") and \ if s.config.getdefaultboolean("ui.Tk.Blinkenlights", "showlog", 1):
s.config.getboolean("ui.Tk.Blinkenlights", "showlog"):
s._togglelog() s._togglelog()
s.gettf().setcolor('red') s.gettf().setcolor('red')
s.top.resizable(width = 0, height = 0) s.top.resizable(width = 0, height = 0)

View File

@ -20,7 +20,8 @@ import offlineimap.ui
import sys import sys
def findUI(config, chosenUI=None): 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'] 'Noninteractive.Basic', 'Noninteractive.Quiet']
namespace={} namespace={}
for ui in dir(offlineimap.ui): for ui in dir(offlineimap.ui):