add mailbox.py
This commit is contained in:
		
							parent
							
								
									6812dd0b8d
								
							
						
					
					
						commit
						ee94d3a6d3
					
				
							
								
								
									
										37
									
								
								serpent/imap/mailbox.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								serpent/imap/mailbox.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					from mailbox import Maildir
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExtendedMaildir(Maildir):
 | 
				
			||||||
 | 
					    def set_flags(self, key, flags):
 | 
				
			||||||
 | 
					        sflags = sorted(flags)
 | 
				
			||||||
 | 
					        if sflags == self.get_flags(key): return True
 | 
				
			||||||
 | 
					        subpath = self._lookup(key)
 | 
				
			||||||
 | 
					        info = '2,' + ''.join(sflags)
 | 
				
			||||||
 | 
					        oldpath = os.path.join(self._path, subpath)
 | 
				
			||||||
 | 
					        newsubdir = os.path.split(subpath)[0]
 | 
				
			||||||
 | 
					        newname = key + self.colon + info
 | 
				
			||||||
 | 
					        if 'S' in sflags and newsubdir == 'new':
 | 
				
			||||||
 | 
					            newsubdir = 'cur'
 | 
				
			||||||
 | 
					        if 'S' not in sflags and newsubdir == 'cur':
 | 
				
			||||||
 | 
					            newsubdir = 'new'
 | 
				
			||||||
 | 
					        newpath = os.path.join(self._path, newsubdir, newname)
 | 
				
			||||||
 | 
					        if hasattr(os, 'link'):
 | 
				
			||||||
 | 
					            os.link(oldpath, newpath)
 | 
				
			||||||
 | 
					            os.remove(oldpath)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            os.rename(oldpath, newpath)
 | 
				
			||||||
 | 
					        self._toc[key] = os.path.join(newsubdir, newname)
 | 
				
			||||||
 | 
					    def get_flags(self, key):
 | 
				
			||||||
 | 
					        subpath = self._lookup(key)
 | 
				
			||||||
 | 
					        _, name = os.path.split(subpath)
 | 
				
			||||||
 | 
					        info = name.split(self.colon)[-1]
 | 
				
			||||||
 | 
					        if info.startswith('2,'):
 | 
				
			||||||
 | 
					            return info[2:]
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return ''
 | 
				
			||||||
 | 
					    def add_flag(self, key, flag):
 | 
				
			||||||
 | 
					        self.set_flags(key, ''.join(set(self.get_flags(key)) | set(flag)))
 | 
				
			||||||
 | 
					    def remove_flag(self, key, flag):
 | 
				
			||||||
 | 
					        if flag not in self.get_flags(key): return True
 | 
				
			||||||
 | 
					        if self.get_flags(key):
 | 
				
			||||||
 | 
					            self.set_flags(key, ''.join(set(self.get_flags(key)) - set(flag)))
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user