From 3da69bfa9b396379c2fea9ac63ad209a495f82f7 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 31 Mar 2013 19:27:17 +0100 Subject: Fixes --- pieni-to-mail-archive | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'pieni-to-mail-archive') 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\d+) ' r'(?PJan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ' r'(?P\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() -- cgit v1.2.1