def migrate_mailboxes(session): config = session.config def _common_path(paths): common_head, junk = os.path.split(paths[0]) for path in paths: head, junk = os.path.split(path) while (common_head and common_head != '/' and head and head != '/' and head != common_head): # First we try shortening the target path... while head and head != '/' and head != common_head: head, junk = os.path.split(head) # If that failed, lop one off the common path and try again if head != common_head: common_head, junk = os.path.split(common_head) head, junk = os.path.split(path) return common_head mboxes = [] maildirs = [] macmaildirs = [] thunderbird = [] spam_tids = [tag._key for tag in config.get_tags(type='spam')] trash_tids = [tag._key for tag in config.get_tags(type='trash')] inbox_tids = [tag._key for tag in config.get_tags(type='inbox')] # Iterate through config.sys.mailbox, sort mailboxes by type for mbx_id, path, src in config.get_mailboxes(): if (path == '/dev/null' or path.startswith('src:') or src is not None or config.is_editable_mailbox(mbx_id)): continue elif os.path.exists(os.path.join(path, 'Info.plist')): macmaildirs.append((mbx_id, path)) elif os.path.isdir(path): maildirs.append((mbx_id, path)) elif 'thunderbird' in path.lower(): thunderbird.append((mbx_id, path)) else: mboxes.append((mbx_id, path)) # macmail: library/mail/v2 if thunderbird: # Create basic mail source... if 'tbird' not in config.sources: config.sources['tbird'] = { 'name': 'Thunderbird', 'protocol': 'mbox', } config.sources.tbird.discovery.create_tag = True config.sources.tbird.discovery.policy = 'read' config.sources.tbird.discovery.process_new = True tbird_src = MboxMailSource(session, config.sources.tbird) # Configure discovery policy? root = _common_path([path for mbx_id, path in thunderbird]) if 'thunderbird' in root.lower(): # FIXME: This is wrong, we should create a mailbox entry # with the policy 'watch'. tbird_src.my_config.discovery.path = root # Take over all the mailboxes for mbx_id, path in thunderbird: mbx = tbird_src.take_over_mailbox(mbx_id) if 'inbox' in path.lower(): mbx.apply_tags.extend(inbox_tids) elif 'spam' in path.lower() or 'junk' in path.lower(): mbx.apply_tags.extend(spam_tids) elif 'trash' in path.lower(): mbx.apply_tags.extend(trash_tids) tbird_src.my_config.discovery.policy = 'unknown' for name, mailboxes, proto, description, cls in ( ('mboxes', mboxes, 'mbox', 'Unix mbox files', MboxMailSource), ('maildirs', maildirs, 'maildir', 'Maildirs', MaildirMailSource), ): if mailboxes: # Create basic mail source... if name not in config.sources: config.sources[name] = { 'name': description, 'protocol': proto } config.sources[name].discovery.create_tag = False config.sources[name].discovery.policy = 'read' config.sources[name].discovery.process_new = True config.sources[name].discovery.apply_tags = inbox_tids[:] src = cls(session, config.sources[name]) for mbx_id, path in mailboxes: mbx = src.take_over_mailbox(mbx_id) config.sources[name].discovery.policy = 'unknown' return True
def migrate_mailboxes(session): config = session.config # FIXME: This should be using mailpile.vfs.FilePath # FIXME: Link new mail sources to a profile... any profile? def _common_path(paths): common_head, junk = os.path.split(paths[0]) for path in paths: head, junk = os.path.split(path) while (common_head and common_head != '/' and head and head != '/' and head != common_head): # First we try shortening the target path... while head and head != '/' and head != common_head: head, junk = os.path.split(head) # If that failed, lop one off the common path and try again if head != common_head: common_head, junk = os.path.split(common_head) head, junk = os.path.split(path) return common_head mailboxes = [] thunderbird = [] spam_tids = [tag._key for tag in config.get_tags(type='spam')] trash_tids = [tag._key for tag in config.get_tags(type='trash')] inbox_tids = [tag._key for tag in config.get_tags(type='inbox')] # Iterate through config.sys.mailbox, sort mailboxes by type for mbx_id, path, src in config.get_mailboxes(with_mail_source=False): if (path.startswith('src:') or config.is_editable_mailbox(mbx_id)): continue elif 'thunderbird' in path.lower(): thunderbird.append((mbx_id, path)) else: mailboxes.append((mbx_id, path)) if thunderbird: # Create basic mail source... if 'tbird' not in config.sources: config.sources['tbird'] = { 'name': 'Thunderbird', 'protocol': 'mbox', } config.sources.tbird.discovery.create_tag = True config.sources.tbird.discovery.policy = 'read' config.sources.tbird.discovery.process_new = True tbird_src = LocalMailSource(session, config.sources.tbird) # Configure discovery policy? root = _common_path([path for mbx_id, path in thunderbird]) if 'thunderbird' in root.lower(): # FIXME: This is wrong, we should create a mailbox entry # with the policy 'watch'. tbird_src.my_config.discovery.path = root # Take over all the mailboxes for mbx_id, path in thunderbird: mbx = tbird_src.take_over_mailbox(mbx_id) if 'inbox' in path.lower(): mbx.apply_tags.extend(inbox_tids) elif 'spam' in path.lower() or 'junk' in path.lower(): mbx.apply_tags.extend(spam_tids) elif 'trash' in path.lower(): mbx.apply_tags.extend(trash_tids) tbird_src.my_config.discovery.policy = 'unknown' for name, proto, description, cls in ( ('mboxes', 'local', 'Local mailboxes', LocalMailSource), ): if mailboxes: # Create basic mail source... if name not in config.sources: config.sources[name] = { 'name': description, 'protocol': proto } config.sources[name].discovery.create_tag = False config.sources[name].discovery.policy = 'read' config.sources[name].discovery.process_new = True config.sources[name].discovery.apply_tags = inbox_tids[:] src = cls(session, config.sources[name]) for mbx_id, path in mailboxes: mbx = src.take_over_mailbox(mbx_id) config.sources[name].discovery.policy = 'unknown' return True
def migrate_mailboxes(session): config = session.config def _common_path(paths): common_head, junk = os.path.split(paths[0]) for path in paths: head, junk = os.path.split(path) while (common_head and common_head != '/' and head and head != '/' and head != common_head): # First we try shortening the target path... while head and head != '/' and head != common_head: head, junk = os.path.split(head) # If that failed, lop one off the common path and try again if head != common_head: common_head, junk = os.path.split(common_head) head, junk = os.path.split(path) return common_head mboxes = [] maildirs = [] macmaildirs = [] thunderbird = [] spam_tids = [tag._key for tag in config.get_tags(type='spam')] trash_tids = [tag._key for tag in config.get_tags(type='trash')] inbox_tids = [tag._key for tag in config.get_tags(type='inbox')] # Iterate through config.sys.mailbox, sort mailboxes by type for mbx_id, path, src in config.get_mailboxes(): if (path == '/dev/null' or path.startswith('src:') or src is not None or config.is_editable_mailbox(mbx_id)): continue elif os.path.exists(os.path.join(path, 'Info.plist')): macmaildirs.append((mbx_id, path)) elif os.path.isdir(path): maildirs.append((mbx_id, path)) elif 'thunderbird' in path.lower(): thunderbird.append((mbx_id, path)) else: mboxes.append((mbx_id, path)) # macmail: library/mail/v2 if thunderbird: # Create basic mail source... if 'tbird' not in config.sources: config.sources['tbird'] = { 'name': 'Thunderbird', 'protocol': 'mbox', } config.sources.tbird.discovery.create_tag = True config.sources.tbird.discovery.policy = 'read' config.sources.tbird.discovery.process_new = True tbird_src = MboxMailSource(session, config.sources.tbird) # Configure discovery policy? root = _common_path([path for mbx_id, path in thunderbird]) if 'thunderbird' in root.lower(): # FIXME: This is wrong, we should create a mailbox entry # with the policy 'watch'. tbird_src.my_config.discovery.path = root # Take over all the mailboxes for mbx_id, path in thunderbird: mbx = tbird_src.take_over_mailbox(mbx_id) if 'inbox' in path.lower(): mbx.apply_tags.extend(inbox_tids) elif 'spam' in path.lower() or 'junk' in path.lower(): mbx.apply_tags.extend(spam_tids) elif 'trash' in path.lower(): mbx.apply_tags.extend(trash_tids) tbird_src.my_config.discovery.policy = 'unknown' for name, mailboxes, proto, description, cls in ( ('mboxes', mboxes, 'mbox', 'Unix mbox files', MboxMailSource), ('maildirs', maildirs, 'maildir', 'Maildirs', MaildirMailSource), ): if mailboxes: # Create basic mail source... if name not in config.sources: config.sources[name] = {'name': description, 'protocol': proto} config.sources[name].discovery.create_tag = False config.sources[name].discovery.policy = 'read' config.sources[name].discovery.process_new = True config.sources[name].discovery.apply_tags = inbox_tids[:] src = cls(session, config.sources[name]) for mbx_id, path in mailboxes: mbx = src.take_over_mailbox(mbx_id) config.sources[name].discovery.policy = 'unknown' return True