/offlineimap/head: changeset 325
Touched up the isactive tests. Added defaults for many more options.
This commit is contained in:
parent
1cc5cfda0a
commit
16b3ce90ca
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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,
|
||||||
|
@ -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")))
|
||||||
|
@ -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
|
||||||
|
@ -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,11 +150,16 @@ 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
|
||||||
@ -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)
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user