Made sure that we don't archive messages flagged important unless we are

given the --include-flagged option.
This commit is contained in:
Paul Rodger 2002-04-17 13:15:04 +00:00
parent fd61a98c46
commit 80b2b99194
1 changed files with 37 additions and 10 deletions

View File

@ -22,7 +22,7 @@ Website: http://archivemail.sourceforge.net/
"""
# global administrivia
__version__ = "archivemail v0.4.0"
__version__ = "archivemail v0.4.1"
__cvs_id__ = "$Id$"
__copyright__ = """Copyright (C) 2002 Paul Rodger <paul@paulrodger.com>
This is free software; see the source for copying conditions. There is NO
@ -135,6 +135,7 @@ class Options:
days_old_max = 180
delete_old_mail = 0
dry_run = 0
include_flagged = 0
lockfile_attempts = 5
lockfile_extension = ".lock"
lockfile_sleep = 1
@ -162,8 +163,9 @@ class Options:
try:
opts, args = getopt.getopt(args, '?Vd:hno:qs:uv',
["days=", "delete", "dry-run", "help",
"preserve-unread", "no-compress", "output-dir=",
"quiet", "suffix", "verbose", "version",
"include-flagged", "no-compress",
"output-dir=", "preserve-unread", "quiet",
"suffix", "verbose", "version",
"warn-duplicate"])
except getopt.error, msg:
user_error(msg)
@ -171,14 +173,12 @@ class Options:
for o, a in opts:
if o == '--delete':
self.delete_old_mail = 1
if o in ('-u', '--preserve-unread'):
self.preserve_unread = 1
if o == '--include-flagged':
self.include_flagged = 1
if o == '--no-compress':
self.no_compress = 1
if o == '--warn-duplicate':
self.warn_duplicates = 1
if o in ('-n', '--dry-run'):
self.dry_run = 1
if o in ('-d', '--days'):
self.days_old_max = string.atoi(a)
if o in ('-o', '--output-dir'):
@ -186,12 +186,16 @@ class Options:
if o in ('-h', '-?', '--help'):
print usage
sys.exit(0)
if o in ('-n', '--dry-run'):
self.dry_run = 1
if o in ('-q', '--quiet'):
self.quiet = 1
if o in ('-v', '--verbose'):
self.verbose = 1
if o in ('-s', '--suffix'):
self.archive_suffix = a
if o in ('-u', '--preserve-unread'):
self.preserve_unread = 1
if o in ('-v', '--verbose'):
self.verbose = 1
if o in ('-V', '--version'):
print __version__ + "\n\n" + __copyright__
sys.exit(0)
@ -522,6 +526,7 @@ Options are as follows:
-n, --dry-run don't write to anything - just show what would be done
-u, --preserve-unread never archive unread messages
--delete delete rather than archive old mail (use with caution!)
--include-flagged messages flagged important can also be archived
--no-compress do not compress archives with gzip
--warn-duplicate warn about duplicate Message-IDs in the same mailbox
-v, --verbose report lots of extra debugging information
@ -649,11 +654,31 @@ def guess_delivery_time(message):
return time_message
def is_flagged(message):
"""return true if the message is flagged important, false otherwise"""
# MH and mbox mailboxes use the 'X-Status' header to indicate importance
x_status = message.get('X-Status')
if x_status and re.search('F', x_status):
vprint("message is important (X-Status header='%s')" % x_status)
return 1
file_name = None
try:
file_name = message.fp.name
except AttributeError:
pass
# maildir mailboxes use the filename suffix to indicate flagged status
if file_name and re.search(":2,.*F.*$", file_name):
vprint("message is important (filename info has 'F')")
return 1
vprint("message is not flagged important")
return 0
def is_unread(message):
"""return true if the message is unread, false otherwise"""
# MH and mbox mailboxes use the 'Status' header to indicate read status
status = message.get('Status')
if (status == 'RO') or (status == 'OR'):
if status and re.search('R', status):
vprint("message has been read (status header='%s')" % status)
return 0
file_name = None
@ -676,6 +701,8 @@ def should_archive(message):
# I could probably do this in one if statement, but then I wouldn't
# understand it.
if old:
if not options.include_flagged and is_flagged(message):
return 0
if options.preserve_unread:
if is_unread(message):
return 0