def getFolders(self) -> List[Dict[str, Union[str, bool]]]: folders = Folders() # (typ, [data]) # e.g. ('OK', [b'(\\HasNoChildren) "." INBOX.DRAFT']) response = self.imap.list() self._debugResponse('list', response) status, data = response if status == 'OK': for bytes_folderInfo in data: foldersInfo = bytes_folderInfo.decode(ENCODING) lst_foldersInfo = foldersInfo.split(' ') folderName = ' '.join(lst_foldersInfo[2:]).encode(ENCODING) folder = Folder(folderName) folder.setRoot(lst_foldersInfo[1]) childrenInfo = lst_foldersInfo[0] if childrenInfo == "(\\HasNoChildren)": folder.setHasChildren(False) else: folder.setHasChildren(True) folders.append(folder) self._debug('getFolders', folders) return folders raise ImapCommandError(str(data))
def setUp(self): self.folderA = Folder(b'A') self.folderB = Folder(b'A') self.folderI = Folder(b'A/B') self.folderJ = Folder(b'A/B') self.foldersX = Folders(self.folderA, self.folderI) self.foldersY = Folders(self.folderB, self.folderJ)
def test_getFolders_of_recursive_B(self): folders = self.driverB.getFolders() expected = Folders( Folder(b'/'), Folder(b'subfolder_A'), Folder(b'subfolder_B'), Folder(b'subfolder_B/subsubfolder_X'), ) self.assertEqual(folders, expected)
def _syncAccount(self, account: Account): """Sync one account.""" accountName = account.getClassName() runtime.ui.infoL(3, "merging folders for %s"% accountName) # Get the repository instances from the rascal. leftRepository = account.fw_getLeft() rghtRepository = account.fw_getRight() self.left.buildDriver(accountName, 'left') self.rght.buildDriver(accountName, 'right') # Connect the drivers. self.left.connect() self.rght.connect() self.left.getFolders() self.rght.getFolders() # Get the folders from both sides so we can feed the folder tasks. leftFolders = self.left.getFolders_sync() rghtFolders = self.rght.getFolders_sync() # Merge the folder lists. mergedFolders = Folders() for sideFolders in [leftFolders, rghtFolders]: for folder in sideFolders: if folder not in mergedFolders: mergedFolders.append(folder) runtime.ui.infoL(3, "%s merged folders %s"% (accountName, mergedFolders)) # Pass the list to the rascal. rascalFolders = account.syncFolders(mergedFolders) # The rascal might request for non-existing folders! syncFolders = Folders() ignoredFolders = Folders() for folder in rascalFolders: if folder in mergedFolders: syncFolders.append(folder) else: ignoredFolders.append(folder) if len(ignoredFolders) > 0: runtime.ui.warn("rascal, you asked to sync non-existing folders" " for '%s': %s", accountName, ignoredFolders) if len(syncFolders) < 1: runtime.ui.infoL(3, "%s: no folder to sync"% accountName) self.setExitCode(0) return # Nothing more to do. #TODO: make max_connections mandatory in rascal. maxFolderWorkers = min( len(syncFolders), rghtRepository.conf.get('max_connections'), leftRepository.conf.get('max_connections')) runtime.ui.infoL(3, "%s syncing folders %s"% (accountName, syncFolders)) # Syncing folders is not the job of this engine. self.referent.syncFolders(accountName, maxFolderWorkers, syncFolders) # Wait until folders are synced. while self.referent.areFoldersDone_sync(): pass self.setExitCode(0)
def _folders(self): folders = Folders() for folderName in self.conf.get('folders'): folders.append(Folder(folderName)) return folders
def test_getFolders_of_recursive_A(self): folders = self.driverA.getFolders() expected = Folders(Folder(b'/')) self.assertEqual(folders, expected)
def getFolders(self): self._folders = Folders() # Erase whatever we had. self._recursiveScanMaildir() # Put result into self._folders. return self._folders