Configurable thread status character for ui.Curses.Blinkenlights
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
# IMAP folder support
|
||||
# Copyright (C) 2002-2007 John Goerzen
|
||||
# Copyright (C) 2002-2004 John Goerzen
|
||||
# <jgoerzen@complete.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@ -17,8 +17,7 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
from Base import BaseFolder
|
||||
import imaplib
|
||||
from offlineimap import imaputil, imaplibutil
|
||||
from offlineimap import imaputil, imaplib
|
||||
from offlineimap.ui import UIBase
|
||||
from offlineimap.version import versionstr
|
||||
import rfc822, time, string, random, binascii, re
|
||||
@ -99,7 +98,7 @@ class IMAPFolder(BaseFolder):
|
||||
else:
|
||||
uid = long(options['UID'])
|
||||
flags = imaputil.flagsimap2maildir(options['FLAGS'])
|
||||
rtime = imaplibutil.Internaldate2epoch(messagestr)
|
||||
rtime = imaplib.Internaldate2epoch(messagestr)
|
||||
self.messagelist[uid] = {'uid': uid, 'flags': flags, 'time': rtime}
|
||||
|
||||
def getmessagelist(self):
|
||||
@ -271,7 +270,7 @@ class IMAPFolder(BaseFolder):
|
||||
return
|
||||
result = imapobj.uid('store', '%d' % uid, 'FLAGS',
|
||||
imaputil.flagsmaildir2imap(flags))
|
||||
assert result[0] == 'OK', 'Error with store: ' + '. '.join(r[1])
|
||||
assert result[0] == 'OK', 'Error with store: ' + r[1]
|
||||
finally:
|
||||
self.imapserver.releaseconnection(imapobj)
|
||||
result = result[1][0]
|
||||
@ -317,7 +316,7 @@ class IMAPFolder(BaseFolder):
|
||||
imaputil.listjoin(uidlist),
|
||||
operation + 'FLAGS',
|
||||
imaputil.flagsmaildir2imap(flags))
|
||||
assert r[0] == 'OK', 'Error with store: ' + '. '.join(r[1])
|
||||
assert r[0] == 'OK', 'Error with store: ' + r[1]
|
||||
r = r[1]
|
||||
finally:
|
||||
self.imapserver.releaseconnection(imapobj)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Local status cache virtual folder
|
||||
# Copyright (C) 2002 - 2007 John Goerzen
|
||||
# Copyright (C) 2002 - 2003 John Goerzen
|
||||
# <jgoerzen@complete.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@ -90,18 +90,8 @@ class LocalStatusFolder(BaseFolder):
|
||||
flags.sort()
|
||||
flags = ''.join(flags)
|
||||
file.write("%s:%s\n" % (msg['uid'], flags))
|
||||
file.flush()
|
||||
os.fsync(file.fileno())
|
||||
file.close()
|
||||
os.rename(self.filename + ".tmp", self.filename)
|
||||
|
||||
try:
|
||||
fd = os.open(os.path.dirname(self.filename), os.O_RDONLY)
|
||||
os.fsync(fd)
|
||||
os.close(fd)
|
||||
except:
|
||||
pass
|
||||
|
||||
finally:
|
||||
self.savelock.release()
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Maildir folder support
|
||||
# Copyright (C) 2002 - 2007 John Goerzen
|
||||
# Copyright (C) 2002 - 2006 John Goerzen
|
||||
# <jgoerzen@complete.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@ -130,8 +130,6 @@ class MaildirFolder(BaseFolder):
|
||||
return st.st_mtime
|
||||
|
||||
def savemessage(self, uid, content, flags, rtime):
|
||||
# This function only ever saves to tmp/,
|
||||
# but it calls savemessageflags() to actually save to cur/ or new/.
|
||||
ui = UIBase.getglobalui()
|
||||
ui.debug('maildir', 'savemessage: called to write with flags %s and content %s' % \
|
||||
(repr(flags), repr(content)))
|
||||
@ -142,9 +140,12 @@ class MaildirFolder(BaseFolder):
|
||||
# We already have it.
|
||||
self.savemessageflags(uid, flags)
|
||||
return uid
|
||||
|
||||
# Otherwise, save the message in tmp/ and then call savemessageflags()
|
||||
# to give it a permanent home.
|
||||
if 'S' in flags:
|
||||
# If a message has been seen, it goes into the cur
|
||||
# directory. CR debian#152482, [complete.org #4]
|
||||
newdir = os.path.join(self.getfullname(), 'cur')
|
||||
else:
|
||||
newdir = os.path.join(self.getfullname(), 'new')
|
||||
tmpdir = os.path.join(self.getfullname(), 'tmp')
|
||||
messagename = None
|
||||
attempts = 0
|
||||
@ -168,31 +169,16 @@ class MaildirFolder(BaseFolder):
|
||||
ui.debug('maildir', 'savemessage: using temporary name %s' % tmpmessagename)
|
||||
file = open(os.path.join(tmpdir, tmpmessagename), "wt")
|
||||
file.write(content)
|
||||
|
||||
# Make sure the data hits the disk
|
||||
file.flush()
|
||||
os.fsync(file.fileno())
|
||||
|
||||
file.close()
|
||||
if rtime != None:
|
||||
os.utime(os.path.join(tmpdir,tmpmessagename), (rtime,rtime))
|
||||
ui.debug('maildir', 'savemessage: moving from %s to %s' % \
|
||||
(tmpmessagename, messagename))
|
||||
if tmpmessagename != messagename: # then rename it
|
||||
os.link(os.path.join(tmpdir, tmpmessagename),
|
||||
os.path.join(tmpdir, messagename))
|
||||
os.unlink(os.path.join(tmpdir, tmpmessagename))
|
||||
|
||||
try:
|
||||
# fsync the directory (safer semantics in Linux)
|
||||
fd = os.open(tmpdir, os.O_RDONLY)
|
||||
os.fsync(fd)
|
||||
os.close(fd)
|
||||
except:
|
||||
pass
|
||||
|
||||
os.link(os.path.join(tmpdir, tmpmessagename),
|
||||
os.path.join(newdir, messagename))
|
||||
os.unlink(os.path.join(tmpdir, tmpmessagename))
|
||||
self.messagelist[uid] = {'uid': uid, 'flags': [],
|
||||
'filename': os.path.join(tmpdir, messagename)}
|
||||
'filename': os.path.join(newdir, messagename)}
|
||||
self.savemessageflags(uid, flags)
|
||||
ui.debug('maildir', 'savemessage: returning uid %d' % uid)
|
||||
return uid
|
||||
@ -203,7 +189,6 @@ class MaildirFolder(BaseFolder):
|
||||
def savemessageflags(self, uid, flags):
|
||||
oldfilename = self.messagelist[uid]['filename']
|
||||
newpath, newname = os.path.split(oldfilename)
|
||||
tmpdir = os.path.join(self.getfullname(), 'tmp')
|
||||
if 'S' in flags:
|
||||
# If a message has been seen, it goes into the cur
|
||||
# directory. CR debian#152482, [complete.org #4]
|
||||
@ -226,10 +211,6 @@ class MaildirFolder(BaseFolder):
|
||||
self.messagelist[uid]['flags'] = flags
|
||||
self.messagelist[uid]['filename'] = newfilename
|
||||
|
||||
# By now, the message had better not be in tmp/ land!
|
||||
final_dir, final_name = os.path.split(self.messagelist[uid]['filename'])
|
||||
assert final_dir != tmpdir
|
||||
|
||||
def deletemessage(self, uid):
|
||||
if not uid in self.messagelist:
|
||||
return
|
||||
|
Reference in New Issue
Block a user