/offlineimap/head: changeset 190
Lots of updates; see changelog
This commit is contained in:
parent
c8442d9a68
commit
eb790cd78c
@ -1,3 +1,15 @@
|
|||||||
|
offlineimap (3.2.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* There is a new "connecting" event that will appear in all but the
|
||||||
|
Quiet UIs. It has a gray color in Blinkenlights. This event indicates
|
||||||
|
the the program is connecting to a remote server.
|
||||||
|
* Blinkenlights UI log window is now scrolled and has a new
|
||||||
|
config file option "bufferlines" to specify the size of the scroll
|
||||||
|
buffer.
|
||||||
|
* Make the Blinkenlights window non-resizable.
|
||||||
|
|
||||||
|
-- John Goerzen <jgoerzen@complete.org> Wed, 24 Jul 2002 17:04:04 -0500
|
||||||
|
|
||||||
offlineimap (3.2.0) unstable; urgency=low
|
offlineimap (3.2.0) unstable; urgency=low
|
||||||
|
|
||||||
* New BLINKENLIGHTS interface! Mesmerising, isn't it?
|
* New BLINKENLIGHTS interface! Mesmerising, isn't it?
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
from offlineimap import imaplib, imaputil, threadutil
|
from offlineimap import imaplib, imaputil, threadutil
|
||||||
from threading import *
|
from threading import *
|
||||||
import thread
|
import thread
|
||||||
|
import __main__
|
||||||
|
|
||||||
class UsefulIMAPMixIn:
|
class UsefulIMAPMixIn:
|
||||||
def getstate(self):
|
def getstate(self):
|
||||||
@ -120,6 +121,8 @@ class IMAPServer:
|
|||||||
|
|
||||||
self.connectionlock.release() # Release until need to modify data
|
self.connectionlock.release() # Release until need to modify data
|
||||||
|
|
||||||
|
__main__.ui.connecting(self.hostname, self.port)
|
||||||
|
|
||||||
# Generate a new connection.
|
# Generate a new connection.
|
||||||
if self.tunnel:
|
if self.tunnel:
|
||||||
imapobj = UsefulIMAP4_Tunnel(self.tunnel)
|
imapobj = UsefulIMAP4_Tunnel(self.tunnel)
|
||||||
|
@ -350,25 +350,38 @@ class LEDThreadFrame:
|
|||||||
class Blinkenlights(VerboseUI):
|
class Blinkenlights(VerboseUI):
|
||||||
def _createTopWindow(self):
|
def _createTopWindow(self):
|
||||||
VerboseUI._createTopWindow(self, 0)
|
VerboseUI._createTopWindow(self, 0)
|
||||||
|
#self.top.resizable(width = 0, height = 0)
|
||||||
self.top.configure(background = 'black', bd = 0)
|
self.top.configure(background = 'black', bd = 0)
|
||||||
c = LEDCanvas(self.top, background = 'black', height = 20, bd = 0,
|
c = LEDCanvas(self.top, background = 'black', height = 20, bd = 0,
|
||||||
highlightthickness = 0)
|
highlightthickness = 0)
|
||||||
c.setLEDCount(0)
|
c.setLEDCount(0)
|
||||||
c.createLEDLock()
|
c.createLEDLock()
|
||||||
self.canvas = c
|
self.canvas = c
|
||||||
c.pack(side = BOTTOM, expand = 1)
|
c.pack(side = BOTTOM, expand = 0, fill = X)
|
||||||
widthmetric = tkFont.Font(family = 'Helvetica', size = 8).measure("0")
|
widthmetric = tkFont.Font(family = 'Helvetica', size = 8).measure("0")
|
||||||
self.loglines = 5
|
self.loglines = 5
|
||||||
if self.config.has_option("ui.Tk.Blinkenlights", "loglines"):
|
if self.config.has_option("ui.Tk.Blinkenlights", "loglines"):
|
||||||
self.loglines = self.config.getint("ui.Tk.Blinkenlights",
|
self.loglines = self.config.getint("ui.Tk.Blinkenlights",
|
||||||
"loglines")
|
"loglines")
|
||||||
self.text = Text(self.top, bg = 'black', font = ("Helvetica", 8),
|
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',
|
||||||
|
font = ("Helvetica", 8),
|
||||||
bd = 0, highlightthickness = 0, setgrid = 0,
|
bd = 0, highlightthickness = 0, setgrid = 0,
|
||||||
state = DISABLED, height = self.loglines, wrap = NONE,
|
state = DISABLED, height = self.loglines, wrap = NONE,
|
||||||
width = int(c.cget('width')) / widthmetric)
|
width = int(c.cget('width')) / widthmetric)
|
||||||
|
self.text.vbar.configure(background = '#000050',
|
||||||
|
activebackground = 'blue',
|
||||||
|
highlightbackground = 'black',
|
||||||
|
troughcolor = "black", bd = 0,
|
||||||
|
elementborderwidth = 2)
|
||||||
|
|
||||||
self.textenabled = 0
|
self.textenabled = 0
|
||||||
self.tags = []
|
self.tags = []
|
||||||
self.textlock = Lock()
|
self.textlock = Lock()
|
||||||
|
self.oldtextheight = 0
|
||||||
|
|
||||||
def gettf(s, newtype=LEDThreadFrame):
|
def gettf(s, newtype=LEDThreadFrame):
|
||||||
return VerboseUI.gettf(s, newtype, s.canvas)
|
return VerboseUI.gettf(s, newtype, s.canvas)
|
||||||
@ -386,6 +399,7 @@ class Blinkenlights(VerboseUI):
|
|||||||
s.menubar = menubar
|
s.menubar = menubar
|
||||||
s.gettf().setcolor('red')
|
s.gettf().setcolor('red')
|
||||||
s._msg(version.banner)
|
s._msg(version.banner)
|
||||||
|
s.text.see(END)
|
||||||
if s.config.has_option("ui.Tk.Blinkenlights", "showlog") and \
|
if s.config.has_option("ui.Tk.Blinkenlights", "showlog") and \
|
||||||
s.config.getboolean("ui.Tk.Blinkenlights", "showlog"):
|
s.config.getboolean("ui.Tk.Blinkenlights", "showlog"):
|
||||||
s._togglelog()
|
s._togglelog()
|
||||||
@ -401,14 +415,27 @@ class Blinkenlights(VerboseUI):
|
|||||||
|
|
||||||
def _togglelog(s):
|
def _togglelog(s):
|
||||||
if s.textenabled:
|
if s.textenabled:
|
||||||
|
s.oldtextheight = s.text.winfo_height()
|
||||||
s.text.pack_forget()
|
s.text.pack_forget()
|
||||||
s.textenabled = 0
|
s.textenabled = 0
|
||||||
s.menubar.delete('Log')
|
s.menubar.delete('Log')
|
||||||
s.menubar.insert_command('Exit', label = 'Show Log',
|
s.menubar.insert_command('Exit', label = 'Show Log',
|
||||||
command = s._togglelog)
|
command = s._togglelog)
|
||||||
|
s.top.update()
|
||||||
|
print s.top.winfo_reqheight(), s.top.winfo_reqwidth()
|
||||||
|
#s.top.configure(height = s.top.winfo_reqheight(),
|
||||||
|
# width = s.top.winfo_reqwidth())
|
||||||
|
s.top.geometry("%dx%d" % (s.top.winfo_reqwidth(),
|
||||||
|
s.top.winfo_reqheight()))
|
||||||
|
s.top.pack_propagate(1)
|
||||||
|
s.text.pack_propagate(1)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
s.text.pack(side = BOTTOM, expand = 1)
|
s.text.pack(side = BOTTOM, expand = 1, fill = BOTH)
|
||||||
s.textenabled = 1
|
s.textenabled = 1
|
||||||
|
s.top.update()
|
||||||
|
s.top.geometry("%dx%d" % (s.top.winfo_reqwidth(),
|
||||||
|
s.top.winfo_height() + s.oldtextheight))
|
||||||
s.menubar.delete('Show Log')
|
s.menubar.delete('Show Log')
|
||||||
|
|
||||||
logmenu = Menu(s.menubar, tearoff = 0,
|
logmenu = Menu(s.menubar, tearoff = 0,
|
||||||
@ -420,11 +447,16 @@ class Blinkenlights(VerboseUI):
|
|||||||
logmenu.add_command(label = "Larger Log", command = s._largerlog)
|
logmenu.add_command(label = "Larger Log", command = s._largerlog)
|
||||||
logmenu.add_command(label = "Smaller Log", command = s._smallerlog)
|
logmenu.add_command(label = "Smaller Log", command = s._smallerlog)
|
||||||
s.menubar.insert_cascade('Exit', label = "Log", menu = logmenu)
|
s.menubar.insert_cascade('Exit', label = "Log", menu = logmenu)
|
||||||
|
s._rescroll()
|
||||||
|
|
||||||
def acct(s, accountname):
|
def acct(s, accountname):
|
||||||
s.gettf().setcolor('purple')
|
s.gettf().setcolor('purple')
|
||||||
VerboseUI.acct(s, accountname)
|
VerboseUI.acct(s, accountname)
|
||||||
|
|
||||||
|
def connecting(s, hostname, port):
|
||||||
|
s.gettf().setcolor('gray')
|
||||||
|
VerboseUI.connecting(s, hostname, port)
|
||||||
|
|
||||||
def syncfolders(s, srcrepos, destrepos):
|
def syncfolders(s, srcrepos, destrepos):
|
||||||
s.gettf().setcolor('blue')
|
s.gettf().setcolor('blue')
|
||||||
VerboseUI.syncfolders(s, srcrepos, destrepos)
|
VerboseUI.syncfolders(s, srcrepos, destrepos)
|
||||||
@ -481,6 +513,11 @@ class Blinkenlights(VerboseUI):
|
|||||||
s._msg("Next sync in %d:%02d" % (sleepsecs / 60, sleepsecs % 60))
|
s._msg("Next sync in %d:%02d" % (sleepsecs / 60, sleepsecs % 60))
|
||||||
UIBase.sleep(s, sleepsecs)
|
UIBase.sleep(s, sleepsecs)
|
||||||
|
|
||||||
|
def _rescroll(s):
|
||||||
|
s.text.see(END)
|
||||||
|
lo, hi = s.text.vbar.get()
|
||||||
|
s.text.vbar.set(1.0 - (hi - lo), 1.0)
|
||||||
|
|
||||||
def _msg(s, msg):
|
def _msg(s, msg):
|
||||||
if "\n" in msg:
|
if "\n" in msg:
|
||||||
for thisline in msg.split("\n"):
|
for thisline in msg.split("\n"):
|
||||||
@ -488,6 +525,10 @@ class Blinkenlights(VerboseUI):
|
|||||||
return
|
return
|
||||||
VerboseUI._msg(s, msg)
|
VerboseUI._msg(s, msg)
|
||||||
color = s.gettf().getcolor()
|
color = s.gettf().getcolor()
|
||||||
|
rescroll = 1
|
||||||
|
#print s.text.vbar.get()[1]
|
||||||
|
if s.text.vbar.get()[1] != 1.0:
|
||||||
|
rescroll = 0
|
||||||
|
|
||||||
s.textlock.acquire()
|
s.textlock.acquire()
|
||||||
try:
|
try:
|
||||||
@ -495,12 +536,15 @@ class Blinkenlights(VerboseUI):
|
|||||||
if not color in s.tags:
|
if not color in s.tags:
|
||||||
s.text.tag_config(color, foreground = color)
|
s.text.tag_config(color, foreground = color)
|
||||||
s.tags.append(color)
|
s.tags.append(color)
|
||||||
s.text.insert(END, msg + "\n", color)
|
s.text.insert(END, "\n" + msg, color)
|
||||||
|
|
||||||
# Trim down. Not quite sure why I have to say 7 instead of 5,
|
# Trim down. Not quite sure why I have to say 7 instead of 5,
|
||||||
# but so it is.
|
# but so it is.
|
||||||
while float(s.text.index(END)) > s.loglines + 2.0:
|
while float(s.text.index(END)) > s.bufferlines + 2.0:
|
||||||
s.text.delete(1.0, 2.0)
|
s.text.delete(1.0, 2.0)
|
||||||
|
|
||||||
|
if rescroll:
|
||||||
|
s._rescroll()
|
||||||
finally:
|
finally:
|
||||||
s.text.config(state = DISABLED)
|
s.text.config(state = DISABLED)
|
||||||
s.textlock.release()
|
s.textlock.release()
|
||||||
|
@ -63,6 +63,18 @@ class UIBase:
|
|||||||
if s.verbose >= 0:
|
if s.verbose >= 0:
|
||||||
s._msg(offlineimap.version.banner)
|
s._msg(offlineimap.version.banner)
|
||||||
|
|
||||||
|
def connecting(s, hostname, port):
|
||||||
|
if s.verbose < 0:
|
||||||
|
return
|
||||||
|
if hostname == None:
|
||||||
|
hostname = ''
|
||||||
|
if port != None:
|
||||||
|
port = ":%d" % port
|
||||||
|
displaystr = ' to %s%s.' % (hostname, port)
|
||||||
|
if hostname == '' and port == None:
|
||||||
|
displaystr = '.'
|
||||||
|
s._msg("Establishing connection" + displaystr)
|
||||||
|
|
||||||
def acct(s, accountname):
|
def acct(s, accountname):
|
||||||
if s.verbose >= 0:
|
if s.verbose >= 0:
|
||||||
s._msg("***** Processing account %s" % accountname)
|
s._msg("***** Processing account %s" % accountname)
|
||||||
|
Loading…
Reference in New Issue
Block a user