Merge changelog
This commit is contained in:
commit
8f9f59dd4d
4
COPYING
4
COPYING
@ -2,7 +2,7 @@
|
|||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
@ -13,7 +13,7 @@ Copyright (C) 2002 - 2005 John Goerzen
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
ONLY imaplib.py is Copyright (c) 2001 Python Software Foundation;
|
ONLY imaplib.py is Copyright (c) 2001 Python Software Foundation;
|
||||||
All Rights Reserved
|
All Rights Reserved
|
||||||
|
2
Makefile
2
Makefile
@ -13,7 +13,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
VERSION=4.0.13
|
VERSION=4.0.13
|
||||||
TARGZ=offlineimap_$(VERSION).tar.gz
|
TARGZ=offlineimap_$(VERSION).tar.gz
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import init
|
from offlineimap import init
|
||||||
init.startup('4.0.13')
|
init.startup('4.0.13')
|
||||||
|
28
debian/changelog
vendored
28
debian/changelog
vendored
@ -1,8 +1,29 @@
|
|||||||
|
offlineimap (4.0.15) unstable; urgency=low
|
||||||
|
|
||||||
|
* Applied patch from Aaron Schrab to sync INTERNALDATEs.
|
||||||
|
|
||||||
|
-- John Goerzen <jgoerzen@complete.org> Mon, 21 Aug 2006 05:17:48 -0500
|
||||||
|
|
||||||
offlineimap (4.0.14) unstable; urgency=low
|
offlineimap (4.0.14) unstable; urgency=low
|
||||||
|
|
||||||
* Small fix to example config file. Closes: #342450.
|
* ACK NMU 4.0.13-0.1. Thanks, Pierre. Closes: #380880.
|
||||||
|
* Update 33 more instances of the old FSF address.
|
||||||
|
* Fix off-by-one in example config file. Closes: #342450.
|
||||||
|
|
||||||
-- John Goerzen <jgoerzen@complete.org> Tue, 30 May 2006 19:06:01 -0500
|
-- John Goerzen <jgoerzen@complete.org> Fri, 11 Aug 2006 18:06:27 -0500
|
||||||
|
|
||||||
|
offlineimap (4.0.13-0.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Non-maintainer upload.
|
||||||
|
* Update package to the last python policy (Closes: #380880):
|
||||||
|
+ only build for python current (use python-dev).
|
||||||
|
+ use dh_pysupport.
|
||||||
|
* Bump Standards-Version to 3.7.2.
|
||||||
|
* Bump DH_COMPAT to 4.
|
||||||
|
* Move debhelper into Build-Depends.
|
||||||
|
* Fix old FSF address.
|
||||||
|
|
||||||
|
-- Pierre Habouzit <madcoder@debian.org> Fri, 11 Aug 2006 19:05:06 +0200
|
||||||
|
|
||||||
offlineimap (4.0.13) unstable; urgency=low
|
offlineimap (4.0.13) unstable; urgency=low
|
||||||
|
|
||||||
@ -785,6 +806,3 @@ offlineimap (1.0.0) unstable; urgency=low
|
|||||||
|
|
||||||
-- John Goerzen <jgoerzen@complete.org> Fri, 21 Jun 2002 18:54:56 -0500
|
-- John Goerzen <jgoerzen@complete.org> Fri, 21 Jun 2002 18:54:56 -0500
|
||||||
|
|
||||||
Local variables:
|
|
||||||
mode: debian-changelog
|
|
||||||
End:
|
|
||||||
|
9
debian/control
vendored
9
debian/control
vendored
@ -2,14 +2,15 @@ Source: offlineimap
|
|||||||
Section: mail
|
Section: mail
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: John Goerzen <jgoerzen@complete.org>
|
Maintainer: John Goerzen <jgoerzen@complete.org>
|
||||||
Build-Depends-Indep: debhelper (>> 4.2.0), python2.3, python2.3-dev (>= 2.2.2), groff, docbook-utils, python (>= 2.3), python-dev (>= 2.3)
|
Build-Depends: debhelper (>> 4.2.0)
|
||||||
|
Build-Depends-Indep: python-dev, groff, docbook-utils, python-support (>= 0.4.0)
|
||||||
Build-Conflicts-Indep: docbook-ebnf
|
Build-Conflicts-Indep: docbook-ebnf
|
||||||
Standards-Version: 3.5.2
|
Standards-Version: 3.7.2
|
||||||
|
|
||||||
Package: offlineimap
|
Package: offlineimap
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Depends: python2.3
|
Depends: ${python:Depends}
|
||||||
Suggests: python2.3-tk
|
Suggests: python-tk
|
||||||
Description: IMAP/Maildir synchronization and reader support
|
Description: IMAP/Maildir synchronization and reader support
|
||||||
OfflineIMAP is a tool to simplify your e-mail reading. With
|
OfflineIMAP is a tool to simplify your e-mail reading. With
|
||||||
OfflineIMAP, you can:
|
OfflineIMAP, you can:
|
||||||
|
5
debian/copyright
vendored
5
debian/copyright
vendored
@ -18,6 +18,7 @@ Copyright (C) 2002 - 2005 John Goerzen
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License with
|
You should have received a copy of the GNU General Public License with
|
||||||
the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL-2;
|
the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL-2;
|
||||||
if not, write to the Free Software Foundation, Inc., 59 Temple Place,
|
if not, write to the Free Software Foundation, Inc., 51 Franklin St,
|
||||||
Suite 330, Boston, MA 02111-1307 USA
|
Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
|
||||||
|
6
debian/rules
vendored
6
debian/rules
vendored
@ -7,9 +7,9 @@
|
|||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
# This is the debhelper compatibility version to use.
|
# This is the debhelper compatibility version to use.
|
||||||
export DH_COMPAT=3
|
export DH_COMPAT=4
|
||||||
|
|
||||||
PYTHON=python2.3
|
PYTHON=python
|
||||||
PACKAGE=offlineimap
|
PACKAGE=offlineimap
|
||||||
|
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ binary-indep: build install
|
|||||||
dh_compress
|
dh_compress
|
||||||
dh_fixperms
|
dh_fixperms
|
||||||
# dh_perl
|
# dh_perl
|
||||||
dh_python
|
dh_pysupport
|
||||||
# dh_makeshlibs
|
# dh_makeshlibs
|
||||||
dh_installdeb
|
dh_installdeb
|
||||||
dh_shlibdeps
|
dh_shlibdeps
|
||||||
|
@ -206,7 +206,7 @@ ssl = yes
|
|||||||
# Specify the remote user name.
|
# Specify the remote user name.
|
||||||
remoteuser = username
|
remoteuser = username
|
||||||
|
|
||||||
# There are three ways to specify the password for the remote IMAP
|
# There are four ways to specify the password for the remote IMAP
|
||||||
# server:
|
# server:
|
||||||
#
|
#
|
||||||
# 1. No password at all specified in the config file. You will
|
# 1. No password at all specified in the config file. You will
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from ConfigParser import ConfigParser
|
from ConfigParser import ConfigParser
|
||||||
from offlineimap.localeval import LocalEval
|
from offlineimap.localeval import LocalEval
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import threadutil, mbnames, CustomConfig
|
from offlineimap import threadutil, mbnames, CustomConfig
|
||||||
import offlineimap.repository.Base, offlineimap.repository.LocalStatus
|
import offlineimap.repository.Base, offlineimap.repository.LocalStatus
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from threading import *
|
from threading import *
|
||||||
from offlineimap import threadutil
|
from offlineimap import threadutil
|
||||||
@ -133,7 +133,7 @@ class BaseFolder:
|
|||||||
"""Returns the content of the specified message."""
|
"""Returns the content of the specified message."""
|
||||||
raise NotImplementedException
|
raise NotImplementedException
|
||||||
|
|
||||||
def savemessage(self, uid, content, flags):
|
def savemessage(self, uid, content, flags, rtime):
|
||||||
"""Writes a new message, with the specified uid.
|
"""Writes a new message, with the specified uid.
|
||||||
If the uid is < 0, the backend should assign a new uid and return it.
|
If the uid is < 0, the backend should assign a new uid and return it.
|
||||||
|
|
||||||
@ -152,6 +152,10 @@ class BaseFolder:
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedException
|
raise NotImplementedException
|
||||||
|
|
||||||
|
def getmessagetime(self, uid):
|
||||||
|
"""Return the received time for the specified message."""
|
||||||
|
raise NotImplementedException
|
||||||
|
|
||||||
def getmessageflags(self, uid):
|
def getmessageflags(self, uid):
|
||||||
"""Returns the flags for the specified message."""
|
"""Returns the flags for the specified message."""
|
||||||
raise NotImplementedException
|
raise NotImplementedException
|
||||||
@ -203,8 +207,9 @@ class BaseFolder:
|
|||||||
successuid = None
|
successuid = None
|
||||||
message = self.getmessage(uid)
|
message = self.getmessage(uid)
|
||||||
flags = self.getmessageflags(uid)
|
flags = self.getmessageflags(uid)
|
||||||
|
rtime = self.getmessagetime(uid)
|
||||||
for tryappend in applyto:
|
for tryappend in applyto:
|
||||||
successuid = tryappend.savemessage(uid, message, flags)
|
successuid = tryappend.savemessage(uid, message, flags, rtime)
|
||||||
if successuid >= 0:
|
if successuid >= 0:
|
||||||
successobject = tryappend
|
successobject = tryappend
|
||||||
break
|
break
|
||||||
@ -214,10 +219,10 @@ class BaseFolder:
|
|||||||
# Copy the message to the other remote servers.
|
# Copy the message to the other remote servers.
|
||||||
for appendserver in \
|
for appendserver in \
|
||||||
[x for x in applyto if x != successobject]:
|
[x for x in applyto if x != successobject]:
|
||||||
appendserver.savemessage(successuid, message, flags)
|
appendserver.savemessage(successuid, message, flags, rtime)
|
||||||
# Copy to its new name on the local server and delete
|
# Copy to its new name on the local server and delete
|
||||||
# the one without a UID.
|
# the one without a UID.
|
||||||
self.savemessage(successuid, message, flags)
|
self.savemessage(successuid, message, flags, rtime)
|
||||||
self.deletemessage(uid) # It'll be re-downloaded.
|
self.deletemessage(uid) # It'll be re-downloaded.
|
||||||
else:
|
else:
|
||||||
# Did not find any server to take this message. Ignore.
|
# Did not find any server to take this message. Ignore.
|
||||||
@ -272,11 +277,12 @@ class BaseFolder:
|
|||||||
message = self.getmessage(uid)
|
message = self.getmessage(uid)
|
||||||
break
|
break
|
||||||
flags = self.getmessageflags(uid)
|
flags = self.getmessageflags(uid)
|
||||||
|
rtime = self.getmessagetime(uid)
|
||||||
for object in applyto:
|
for object in applyto:
|
||||||
newuid = object.savemessage(uid, message, flags)
|
newuid = object.savemessage(uid, message, flags, rtime)
|
||||||
if newuid > 0 and newuid != uid:
|
if newuid > 0 and newuid != uid:
|
||||||
# Change the local uid.
|
# Change the local uid.
|
||||||
self.savemessage(newuid, message, flags)
|
self.savemessage(newuid, message, flags, rtime)
|
||||||
self.deletemessage(uid)
|
self.deletemessage(uid)
|
||||||
uid = newuid
|
uid = newuid
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseFolder
|
from Base import BaseFolder
|
||||||
from offlineimap import imaputil, imaplib
|
from offlineimap import imaputil, imaplib
|
||||||
@ -84,7 +84,7 @@ class IMAPFolder(BaseFolder):
|
|||||||
# Now, get the flags and UIDs for these.
|
# Now, get the flags and UIDs for these.
|
||||||
# We could conceivably get rid of maxmsgid and just say
|
# We could conceivably get rid of maxmsgid and just say
|
||||||
# '1:*' here.
|
# '1:*' here.
|
||||||
response = imapobj.fetch('1:%d' % maxmsgid, '(FLAGS UID)')[1]
|
response = imapobj.fetch('1:%d' % maxmsgid, '(FLAGS UID INTERNALDATE)')[1]
|
||||||
finally:
|
finally:
|
||||||
self.imapserver.releaseconnection(imapobj)
|
self.imapserver.releaseconnection(imapobj)
|
||||||
for messagestr in response:
|
for messagestr in response:
|
||||||
@ -98,7 +98,8 @@ class IMAPFolder(BaseFolder):
|
|||||||
else:
|
else:
|
||||||
uid = long(options['UID'])
|
uid = long(options['UID'])
|
||||||
flags = imaputil.flagsimap2maildir(options['FLAGS'])
|
flags = imaputil.flagsimap2maildir(options['FLAGS'])
|
||||||
self.messagelist[uid] = {'uid': uid, 'flags': flags}
|
rtime = imaplib.Internaldate2epoch(messagestr)
|
||||||
|
self.messagelist[uid] = {'uid': uid, 'flags': flags, 'time': rtime}
|
||||||
|
|
||||||
def getmessagelist(self):
|
def getmessagelist(self):
|
||||||
return self.messagelist
|
return self.messagelist
|
||||||
@ -115,6 +116,9 @@ class IMAPFolder(BaseFolder):
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
self.imapserver.releaseconnection(imapobj)
|
self.imapserver.releaseconnection(imapobj)
|
||||||
|
|
||||||
|
def getmessagetime(self, uid):
|
||||||
|
return self.messagelist[uid]['time']
|
||||||
|
|
||||||
def getmessageflags(self, uid):
|
def getmessageflags(self, uid):
|
||||||
return self.messagelist[uid]['flags']
|
return self.messagelist[uid]['flags']
|
||||||
@ -177,7 +181,7 @@ class IMAPFolder(BaseFolder):
|
|||||||
matchinguids.sort()
|
matchinguids.sort()
|
||||||
return long(matchinguids[0])
|
return long(matchinguids[0])
|
||||||
|
|
||||||
def savemessage(self, uid, content, flags):
|
def savemessage(self, uid, content, flags, rtime):
|
||||||
imapobj = self.imapserver.acquireconnection()
|
imapobj = self.imapserver.acquireconnection()
|
||||||
ui = UIBase.getglobalui()
|
ui = UIBase.getglobalui()
|
||||||
ui.debug('imap', 'savemessage: called')
|
ui.debug('imap', 'savemessage: called')
|
||||||
@ -194,10 +198,17 @@ class IMAPFolder(BaseFolder):
|
|||||||
# In order to get the new uid, we need to save off the message ID.
|
# In order to get the new uid, we need to save off the message ID.
|
||||||
|
|
||||||
message = rfc822.Message(StringIO(content))
|
message = rfc822.Message(StringIO(content))
|
||||||
datetuple = rfc822.parsedate(message.getheader('Date'))
|
datetuple_msg = rfc822.parsedate(message.getheader('Date'))
|
||||||
# Will be None if missing or not in a valid format.
|
# Will be None if missing or not in a valid format.
|
||||||
if datetuple == None:
|
|
||||||
|
# If time isn't known
|
||||||
|
if rtime == None and datetuple_msg == None:
|
||||||
datetuple = time.localtime()
|
datetuple = time.localtime()
|
||||||
|
elif rtime == None:
|
||||||
|
datetuple = datetuple_msg
|
||||||
|
else:
|
||||||
|
datetuple = time.localtime(rtime)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if datetuple[0] < 1981:
|
if datetuple[0] < 1981:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseFolder
|
from Base import BaseFolder
|
||||||
import os, threading
|
import os, threading
|
||||||
@ -98,7 +98,7 @@ class LocalStatusFolder(BaseFolder):
|
|||||||
def getmessagelist(self):
|
def getmessagelist(self):
|
||||||
return self.messagelist
|
return self.messagelist
|
||||||
|
|
||||||
def savemessage(self, uid, content, flags):
|
def savemessage(self, uid, content, flags, rtime):
|
||||||
if uid < 0:
|
if uid < 0:
|
||||||
# We cannot assign a uid.
|
# We cannot assign a uid.
|
||||||
return uid
|
return uid
|
||||||
@ -107,13 +107,16 @@ class LocalStatusFolder(BaseFolder):
|
|||||||
self.savemessageflags(uid, flags)
|
self.savemessageflags(uid, flags)
|
||||||
return uid
|
return uid
|
||||||
|
|
||||||
self.messagelist[uid] = {'uid': uid, 'flags': flags}
|
self.messagelist[uid] = {'uid': uid, 'flags': flags, 'time': rtime}
|
||||||
self.autosave()
|
self.autosave()
|
||||||
return uid
|
return uid
|
||||||
|
|
||||||
def getmessageflags(self, uid):
|
def getmessageflags(self, uid):
|
||||||
return self.messagelist[uid]['flags']
|
return self.messagelist[uid]['flags']
|
||||||
|
|
||||||
|
def getmessagetime(self, uid):
|
||||||
|
return self.messagelist[uid]['time']
|
||||||
|
|
||||||
def savemessageflags(self, uid, flags):
|
def savemessageflags(self, uid, flags):
|
||||||
self.messagelist[uid]['flags'] = flags
|
self.messagelist[uid]['flags'] = flags
|
||||||
self.autosave()
|
self.autosave()
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseFolder
|
from Base import BaseFolder
|
||||||
from offlineimap import imaputil
|
from offlineimap import imaputil
|
||||||
@ -124,7 +124,12 @@ class MaildirFolder(BaseFolder):
|
|||||||
file.close()
|
file.close()
|
||||||
return retval.replace("\r\n", "\n")
|
return retval.replace("\r\n", "\n")
|
||||||
|
|
||||||
def savemessage(self, uid, content, flags):
|
def getmessagetime( self, uid ):
|
||||||
|
filename = self.messagelist[uid]['filename']
|
||||||
|
st = os.stat(filename)
|
||||||
|
return st.st_mtime
|
||||||
|
|
||||||
|
def savemessage(self, uid, content, flags, rtime):
|
||||||
ui = UIBase.getglobalui()
|
ui = UIBase.getglobalui()
|
||||||
ui.debug('maildir', 'savemessage: called to write with flags %s and content %s' % \
|
ui.debug('maildir', 'savemessage: called to write with flags %s and content %s' % \
|
||||||
(repr(flags), repr(content)))
|
(repr(flags), repr(content)))
|
||||||
@ -165,6 +170,7 @@ class MaildirFolder(BaseFolder):
|
|||||||
file = open(os.path.join(tmpdir, tmpmessagename), "wt")
|
file = open(os.path.join(tmpdir, tmpmessagename), "wt")
|
||||||
file.write(content)
|
file.write(content)
|
||||||
file.close()
|
file.close()
|
||||||
|
os.utime(os.path.join(tmpdir,tmpmessagename), (rtime,rtime))
|
||||||
ui.debug('maildir', 'savemessage: moving from %s to %s' % \
|
ui.debug('maildir', 'savemessage: moving from %s to %s' % \
|
||||||
(tmpmessagename, messagename))
|
(tmpmessagename, messagename))
|
||||||
os.link(os.path.join(tmpdir, tmpmessagename),
|
os.link(os.path.join(tmpdir, tmpmessagename),
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from threading import *
|
from threading import *
|
||||||
from offlineimap import threadutil
|
from offlineimap import threadutil
|
||||||
@ -130,7 +130,7 @@ class MappingFolderMixIn:
|
|||||||
"""Returns the content of the specified message."""
|
"""Returns the content of the specified message."""
|
||||||
return self._mb.getmessage(self, self.r2l[uid])
|
return self._mb.getmessage(self, self.r2l[uid])
|
||||||
|
|
||||||
def savemessage(self, uid, content, flags):
|
def savemessage(self, uid, content, flags, rtime):
|
||||||
"""Writes a new message, with the specified uid.
|
"""Writes a new message, with the specified uid.
|
||||||
If the uid is < 0, the backend should assign a new uid and return it.
|
If the uid is < 0, the backend should assign a new uid and return it.
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ class MappingFolderMixIn:
|
|||||||
if uid in self.r2l:
|
if uid in self.r2l:
|
||||||
self.savemessageflags(uid, flags)
|
self.savemessageflags(uid, flags)
|
||||||
return uid
|
return uid
|
||||||
newluid = self._mb.savemessage(self, -1, content, flags)
|
newluid = self._mb.savemessage(self, -1, content, flags, rtime)
|
||||||
if newluid < 1:
|
if newluid < 1:
|
||||||
raise ValueError, "Backend could not find uid for message"
|
raise ValueError, "Backend could not find uid for message"
|
||||||
self.maplock.acquire()
|
self.maplock.acquire()
|
||||||
@ -169,6 +169,9 @@ class MappingFolderMixIn:
|
|||||||
def getmessageflags(self, uid):
|
def getmessageflags(self, uid):
|
||||||
return self._mb.getmessageflags(self, self.r2l[uid])
|
return self._mb.getmessageflags(self, self.r2l[uid])
|
||||||
|
|
||||||
|
def getmessagetime(self, uid):
|
||||||
|
return None
|
||||||
|
|
||||||
def savemessageflags(self, uid, flags):
|
def savemessageflags(self, uid, flags):
|
||||||
self._mb.savemessageflags(self, self.r2l[uid], flags)
|
self._mb.savemessageflags(self, self.r2l[uid], flags)
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ Based on RFC 2060.
|
|||||||
Public class: IMAP4
|
Public class: IMAP4
|
||||||
Public variable: Debug
|
Public variable: Debug
|
||||||
Public functions: Internaldate2tuple
|
Public functions: Internaldate2tuple
|
||||||
|
Internaldate2epoch
|
||||||
Int2AP
|
Int2AP
|
||||||
ParseFlags
|
ParseFlags
|
||||||
Time2Internaldate
|
Time2Internaldate
|
||||||
@ -24,7 +25,7 @@ __version__ = "2.52"
|
|||||||
import binascii, re, socket, time, random, sys, os
|
import binascii, re, socket, time, random, sys, os
|
||||||
from offlineimap.ui import UIBase
|
from offlineimap.ui import UIBase
|
||||||
|
|
||||||
__all__ = ["IMAP4", "Internaldate2tuple",
|
__all__ = ["IMAP4", "Internaldate2tuple", "Internaldate2epoch",
|
||||||
"Int2AP", "ParseFlags", "Time2Internaldate"]
|
"Int2AP", "ParseFlags", "Time2Internaldate"]
|
||||||
|
|
||||||
# Globals
|
# Globals
|
||||||
@ -78,7 +79,7 @@ Commands = {
|
|||||||
Continuation = re.compile(r'\+( (?P<data>.*))?')
|
Continuation = re.compile(r'\+( (?P<data>.*))?')
|
||||||
Flags = re.compile(r'.*FLAGS \((?P<flags>[^\)]*)\)')
|
Flags = re.compile(r'.*FLAGS \((?P<flags>[^\)]*)\)')
|
||||||
InternalDate = re.compile(r'.*INTERNALDATE "'
|
InternalDate = re.compile(r'.*INTERNALDATE "'
|
||||||
r'(?P<day>[ 123][0-9])-(?P<mon>[A-Z][a-z][a-z])-(?P<year>[0-9][0-9][0-9][0-9])'
|
r'(?P<day>[ 0123][0-9])-(?P<mon>[A-Z][a-z][a-z])-(?P<year>[0-9][0-9][0-9][0-9])'
|
||||||
r' (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9])'
|
r' (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9])'
|
||||||
r' (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])'
|
r' (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])'
|
||||||
r'"')
|
r'"')
|
||||||
@ -1230,10 +1231,10 @@ class _Authenticator:
|
|||||||
Mon2num = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
|
Mon2num = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
|
||||||
'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
|
'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
|
||||||
|
|
||||||
def Internaldate2tuple(resp):
|
def Internaldate2epoch(resp):
|
||||||
"""Convert IMAP4 INTERNALDATE to UT.
|
"""Convert IMAP4 INTERNALDATE to UT.
|
||||||
|
|
||||||
Returns Python time module tuple.
|
Returns seconds since the epoch.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
mo = InternalDate.match(resp)
|
mo = InternalDate.match(resp)
|
||||||
@ -1259,7 +1260,16 @@ def Internaldate2tuple(resp):
|
|||||||
|
|
||||||
tt = (year, mon, day, hour, min, sec, -1, -1, -1)
|
tt = (year, mon, day, hour, min, sec, -1, -1, -1)
|
||||||
|
|
||||||
utc = time.mktime(tt)
|
return time.mktime(tt)
|
||||||
|
|
||||||
|
|
||||||
|
def Internaldate2tuple(resp):
|
||||||
|
"""Convert IMAP4 INTERNALDATE to UT.
|
||||||
|
|
||||||
|
Returns Python time module tuple.
|
||||||
|
"""
|
||||||
|
|
||||||
|
utc = Internaldate2epoch(resp)
|
||||||
|
|
||||||
# Following is necessary because the time module has no 'mkgmtime'.
|
# Following is necessary because the time module has no 'mkgmtime'.
|
||||||
# 'mktime' assumes arg in local timezone, so adds timezone/altzone.
|
# 'mktime' assumes arg in local timezone, so adds timezone/altzone.
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import imaplib, imaputil, threadutil
|
from offlineimap import imaplib, imaputil, threadutil
|
||||||
from offlineimap.ui import UIBase
|
from offlineimap.ui import UIBase
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import re, string, types
|
import re, string, types
|
||||||
from offlineimap.ui import UIBase
|
from offlineimap.ui import UIBase
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import imaplib, imapserver, repository, folder, mbnames, threadutil, version, syncmaster, accounts
|
from offlineimap import imaplib, imapserver, repository, folder, mbnames, threadutil, version, syncmaster, accounts
|
||||||
from offlineimap.localeval import LocalEval
|
from offlineimap.localeval import LocalEval
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import imp
|
import imp
|
||||||
try:
|
try:
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
import re # for folderfilter
|
import re # for folderfilter
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import CustomConfig
|
from offlineimap import CustomConfig
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseRepository
|
from Base import BaseRepository
|
||||||
from offlineimap import folder, imaputil, imapserver
|
from offlineimap import folder, imaputil, imapserver
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseRepository
|
from Base import BaseRepository
|
||||||
from offlineimap import folder
|
from offlineimap import folder
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Base import BaseRepository
|
from Base import BaseRepository
|
||||||
from offlineimap import folder, imaputil
|
from offlineimap import folder, imaputil
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from offlineimap import imaplib, imapserver, repository, folder, mbnames, threadutil, version
|
from offlineimap import imaplib, imapserver, repository, folder, mbnames, threadutil, version
|
||||||
from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread
|
from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from threading import *
|
from threading import *
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from threading import *
|
from threading import *
|
||||||
from offlineimap.ui.UIBase import UIBase
|
from offlineimap.ui.UIBase import UIBase
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from Blinkenlights import BlinkenBase
|
from Blinkenlights import BlinkenBase
|
||||||
from UIBase import UIBase
|
from UIBase import UIBase
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import sys, time
|
import sys, time
|
||||||
from UIBase import UIBase
|
from UIBase import UIBase
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from UIBase import UIBase
|
from UIBase import UIBase
|
||||||
from getpass import getpass
|
from getpass import getpass
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from __future__ import nested_scopes
|
from __future__ import nested_scopes
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import offlineimap.version
|
import offlineimap.version
|
||||||
import re, time, sys, traceback, threading, thread
|
import re, time, sys, traceback, threading, thread
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
|
||||||
import UIBase, Blinkenlights
|
import UIBase, Blinkenlights
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from threading import *
|
from threading import *
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import offlineimap.ui
|
import offlineimap.ui
|
||||||
import sys
|
import sys
|
||||||
|
@ -36,7 +36,7 @@ GNU General Public License for more details.
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"""
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA"""
|
||||||
|
|
||||||
cmdhelp = """
|
cmdhelp = """
|
||||||
offlineimap [ -1 ] [ -P profiledir ] [ -a accountlist ] [
|
offlineimap [ -1 ] [ -P profiledir ] [ -a accountlist ] [
|
||||||
|
Loading…
Reference in New Issue
Block a user