summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpieni-to-mail-archive41
1 files changed, 32 insertions, 9 deletions
diff --git a/pieni-to-mail-archive b/pieni-to-mail-archive
index 909478e..de66fa2 100755
--- a/pieni-to-mail-archive
+++ b/pieni-to-mail-archive
@@ -11,7 +11,7 @@ import shutil
received_date = re.compile(
- r'^from (|\n)*; (Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+'
+ r'^from (.|\n)*; (Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+'
r'(?P<day>\d+) '
r'(?P<mon>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) '
r'(?P<year>\d+)',
@@ -42,6 +42,13 @@ montab = {
class PieniToMailArchive(cliapp.Application):
def add_settings(self):
+ self.settings.boolean(
+ ['rsync-from-pieni'],
+ 'rsync new archived mails from pieni.net?')
+ self.settings.string(
+ ['maildirs-dir'],
+ 'where to put maildirs from pieni.net',
+ default='maildirs')
self.settings.string(
['mbox-dir'],
'where to put archived mail mboxes',
@@ -52,17 +59,33 @@ class PieniToMailArchive(cliapp.Application):
self.mbox_filename = None
def cleanup(self):
- print 'closing'
+ self.output.write('closing\n')
if self.mbox != None:
self.mbox.close()
def process_args(self, args):
- # FIXME: Rsync from pieni here.
-
- for maildir in args:
- print 'processing:', maildir
- self.archive_mails_in_maildir(maildir)
- self.remove_maildir_if_empty(maildir)
+ if self.settings['rsync-from-pieni']:
+ self.rsync_from_pieni()
+
+ maildirs = self.settings['maildirs-dir']
+ for dirname in sorted(glob.glob(maildirs + '/*/')):
+ if self.is_maildir(dirname):
+ self.output.write('processing: %s\n' % dirname)
+ self.archive_mails_in_maildir(dirname)
+ self.remove_maildir_if_empty(dirname)
+ else:
+ self.output.write('SKIPPING (not a maildir): %s\n' % dirname)
+
+ def is_maildir(self, dirname):
+ subdirs = ['cur', 'new', 'tmp']
+ return all(os.path.exists(os.path.join(dirname, x)) for x in subdirs)
+
+ def rsync_from_pieni(self):
+ self.output.write('rsyncing from pieni.net\n')
+ cliapp.runcmd(
+ ['rsync', '-av', 'pieni.net:backups/mail/.',
+ self.settings['maildirs-dir'] + '/.'],
+ stdout=self.output)
def archive_mails_in_maildir(self, maildir):
md = mailbox.Maildir(maildir, factory=None)
@@ -84,7 +107,7 @@ class PieniToMailArchive(cliapp.Application):
self.mbox = mailbox.mbox(filename, create=True)
self.mbox_filename = filename
self.mbox.add(msg)
- md.remove(key)
+# md.remove(key)
md.close()