[PATCH] Draft of maxfetch option
Łukasz Żarnowiecki
dolohow at outlook.com
Thu May 5 18:41:41 BST 2016
Signed-off-by: Łukasz Żarnowiecki <dolohow at outlook.com>
---
This is just a draft for you to take a look if this option actually make
any sense. I thought about it and I think it might be useful for
someone. I am wondering if it is possible to pass search condition like
you did in "_msg_to_fetch" for "imapobj.search". If not, I probably
should use "cachemessagelist" where I can slice the list, but I guess
the messages are not sorted by date. Any hint would be valuable.
Please take a look I tell me what you think.
offlineimap.conf | 16 ++++++++++++++++
offlineimap/folder/Base.py | 4 ++++
offlineimap/folder/Maildir.py | 3 +++
3 files changed, 23 insertions(+)
diff --git a/offlineimap.conf b/offlineimap.conf
index 6f05dcc..706bee7 100644
--- a/offlineimap.conf
+++ b/offlineimap.conf
@@ -364,6 +364,22 @@ remoterepository = RemoteExample
# This option stands in the [Account Test] section.
#
+# maxfetch enables you to sync only the last specified number of emails. This is
+# useful when you have limited bandwidth or when you know that the messages
+# could be rotated on the IMAP server.
+#
+# This works per folder. For OfflineIMAP it will be like these messages do not
+# exist.
+#
+# maxfetch is allowed only when the local folder of type Maildir.
+#
+# The maxfetch option expects an integer.
+#
+#maxfetch = 3
+
+
+# This option stands in the [Account Test] section.
+#
# Maildir file format uses colon (:) separator between uniq name and info.
# Unfortunatelly colon is not allowed character in windows file name. If you
# enable maildir-windows-compatible option, OfflineIMAP will be able to store
diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py
index 14b0867..d4d3c84 100644
--- a/offlineimap/folder/Base.py
+++ b/offlineimap/folder/Base.py
@@ -306,6 +306,10 @@ class BaseFolder(object):
return len(self.getmessagelist())
+ def getmaxfetch(self):
+ return self.config.getdefaultint("Account %s"%
+ self.accountname, "maxfetch", None)
+
def getmessage(self, uid):
"""Returns the content of the specified message."""
diff --git a/offlineimap/folder/Maildir.py b/offlineimap/folder/Maildir.py
index 77a774b..718b233 100644
--- a/offlineimap/folder/Maildir.py
+++ b/offlineimap/folder/Maildir.py
@@ -152,6 +152,7 @@ class MaildirFolder(BaseFolder):
"""
maxsize = self.getmaxsize()
+ maxfetch = self.getmaxfetch()
retval = {}
files = []
@@ -162,6 +163,8 @@ class MaildirFolder(BaseFolder):
filename in os.listdir(fulldirname))
date_excludees = {}
+ if maxfetch:
+ files = files[-maxfetch:]
for dirannex, filename in files:
if filename.startswith('.'):
continue # Ignore dot files.
--
2.8.2
More information about the OfflineIMAP-project
mailing list