Message with MH-specific properties.
| 1751 | |
| 1752 | |
| 1753 | class MHMessage(Message): |
| 1754 | """Message with MH-specific properties.""" |
| 1755 | |
| 1756 | _type_specific_attributes = ['_sequences'] |
| 1757 | |
| 1758 | def __init__(self, message=None): |
| 1759 | """Initialize an MHMessage instance.""" |
| 1760 | self._sequences = [] |
| 1761 | Message.__init__(self, message) |
| 1762 | |
| 1763 | def get_sequences(self): |
| 1764 | """Return a list of sequences that include the message.""" |
| 1765 | return self._sequences[:] |
| 1766 | |
| 1767 | def set_sequences(self, sequences): |
| 1768 | """Set the list of sequences that include the message.""" |
| 1769 | self._sequences = list(sequences) |
| 1770 | |
| 1771 | def add_sequence(self, sequence): |
| 1772 | """Add sequence to list of sequences including the message.""" |
| 1773 | if isinstance(sequence, str): |
| 1774 | if not sequence in self._sequences: |
| 1775 | self._sequences.append(sequence) |
| 1776 | else: |
| 1777 | raise TypeError('sequence type must be str: %s' % type(sequence)) |
| 1778 | |
| 1779 | def remove_sequence(self, sequence): |
| 1780 | """Remove sequence from the list of sequences including the message.""" |
| 1781 | try: |
| 1782 | self._sequences.remove(sequence) |
| 1783 | except ValueError: |
| 1784 | pass |
| 1785 | |
| 1786 | def _explain_to(self, message): |
| 1787 | """Copy MH-specific state to message insofar as possible.""" |
| 1788 | if isinstance(message, MaildirMessage): |
| 1789 | sequences = set(self.get_sequences()) |
| 1790 | if 'unseen' in sequences: |
| 1791 | message.set_subdir('cur') |
| 1792 | else: |
| 1793 | message.set_subdir('cur') |
| 1794 | message.add_flag('S') |
| 1795 | if 'flagged' in sequences: |
| 1796 | message.add_flag('F') |
| 1797 | if 'replied' in sequences: |
| 1798 | message.add_flag('R') |
| 1799 | elif isinstance(message, _mboxMMDFMessage): |
| 1800 | sequences = set(self.get_sequences()) |
| 1801 | if 'unseen' not in sequences: |
| 1802 | message.add_flag('RO') |
| 1803 | else: |
| 1804 | message.add_flag('O') |
| 1805 | if 'flagged' in sequences: |
| 1806 | message.add_flag('F') |
| 1807 | if 'replied' in sequences: |
| 1808 | message.add_flag('A') |
| 1809 | elif isinstance(message, MHMessage): |
| 1810 | for sequence in self.get_sequences(): |