@Override public Map<String, String> moveMessages(List<? extends Message> messages, Folder folder) throws MessagingException { if (messages.isEmpty()) { return null; } Map<String, String> uidMapping = copyMessages(messages, folder); setFlags(messages, Collections.singleton(Flag.DELETED), true); return uidMapping; }
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(); } } }
@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); } }
@Test public void setFlags_shouldIssueUidStoreCommand() throws Exception { ImapFolder folder = createFolder("Folder"); prepareImapFolderForOpen(OPEN_MODE_RW); folder.setFlags(newSet(Flag.SEEN), true); assertCommandIssued("UID STORE 1:* +FLAGS.SILENT (\\Seen)"); }