void setFlag(@NotNull String folderServerId, @NotNull List<String> messageServerIds, @NotNull Flag flag, boolean newState) throws MessagingException { ImapFolder remoteFolder = imapStore.getFolder(folderServerId); if (!remoteFolder.exists() || !remoteFolder.isFlagSupported(flag)) { return; } try { remoteFolder.open(Folder.OPEN_MODE_RW); if (remoteFolder.getMode() != Folder.OPEN_MODE_RW) { return; } List<Message> messages = new ArrayList<>(); for (String uid : messageServerIds) { if (!uid.startsWith(BackendFolder.LOCAL_UID_PREFIX)) { messages.add(remoteFolder.getMessage(uid)); } } if (messages.isEmpty()) { return; } remoteFolder.setFlags(messages, Collections.singleton(flag), newState); } finally { remoteFolder.close(); } } }
void markAllAsRead(@NotNull String folderServerId) throws MessagingException { ImapFolder remoteFolder = imapStore.getFolder(folderServerId); if (!remoteFolder.exists()) { return; } try { remoteFolder.open(Folder.OPEN_MODE_RW); if (remoteFolder.getMode() != Folder.OPEN_MODE_RW) { return; } remoteFolder.setFlags(Collections.singleton(Flag.SEEN), true); } finally { remoteFolder.close(); } } }
@Test public void exists_withClosedFolder_shouldOpenConnectionAndIssueStatusCommand() throws Exception { ImapFolder imapFolder = createFolder("Folder"); when(imapStore.getConnection()).thenReturn(imapConnection); imapFolder.exists(); verify(imapConnection).executeSimpleCommand("STATUS \"Folder\" (UIDVALIDITY)"); }
@Test public void exists_withNegativeImapResponse_shouldReturnFalse() throws Exception { ImapFolder imapFolder = createFolder("Folder"); when(imapStore.getConnection()).thenReturn(imapConnection); doThrow(NegativeImapResponseException.class).when(imapConnection) .executeSimpleCommand("STATUS \"Folder\" (UIDVALIDITY)"); boolean folderExists = imapFolder.exists(); assertFalse(folderExists); }
@Test public void exists_withoutNegativeImapResponse_shouldReturnTrue() throws Exception { ImapFolder imapFolder = createFolder("Folder"); when(imapStore.getConnection()).thenReturn(imapConnection); boolean folderExists = imapFolder.exists(); assertTrue(folderExists); }
@Test public void open_shouldMakeExistReturnTrueWithoutExecutingAdditionalCommands() throws Exception { ImapFolder imapFolder = createFolder("Folder"); prepareImapFolderForOpen(OPEN_MODE_RW); imapFolder.open(OPEN_MODE_RW); assertTrue(imapFolder.exists()); verify(imapConnection, times(1)).executeSimpleCommand(anyString()); }
if (!remoteSrcFolder.exists()) { throw new MessagingException("processingPendingMoveOrCopy: remoteFolder " + srcFolder + " does not exist", true);
if (!exists(escapedDestinationFolderName)) { if (K9MailLib.isDebug()) { Timber.i("ImapFolder.copyMessages: couldn't find remote folder '%s' for %s",
@Override public void delete(List<? extends Message> messages, String trashFolder) throws MessagingException { if (messages.isEmpty()) { return; } if (trashFolder == null || getServerId().equals(trashFolder)) { setFlags(messages, Collections.singleton(Flag.DELETED), true); } else { ImapFolder remoteTrashFolder = getStore().getFolder(trashFolder); String encodedTrashFolderName = folderNameCodec.encode(remoteTrashFolder.getPrefixedName()); String escapedTrashFolderName = ImapUtility.encodeString(encodedTrashFolderName); if (!exists(escapedTrashFolderName)) { if (K9MailLib.isDebug()) { Timber.i("ImapFolder.delete: couldn't find remote trash folder '%s' for %s", trashFolder, getLogId()); } throw new FolderNotFoundException(remoteTrashFolder.getServerId()); } if (K9MailLib.isDebug()) { Timber.d("IMAPMessage.delete: copying remote %d messages to '%s' for %s", messages.size(), trashFolder, getLogId()); } moveMessages(messages, remoteTrashFolder); } }