in server/src/main/java/org/apache/hupa/server/service/DeleteMessageBaseServiceImpl.java [36:90]
public DeleteMessageResult delete(DeleteMessageAction action) throws HupaException {
ImapFolder folder = action.getFolder();
User user = getUser();
try {
IMAPStore store = cache.get(user);
com.sun.mail.imap.IMAPFolder f = (com.sun.mail.imap.IMAPFolder) store
.getFolder(folder.getFullName());
// check if the folder is open, if not open it "rw"
if (f.isOpen() == false) {
f.open(com.sun.mail.imap.IMAPFolder.READ_WRITE);
}
Message[] mArray = getMessagesToDelete(action);
// check if the delete was triggered not in the trash folder
if (folder.getFullName().equalsIgnoreCase(
user.getSettings().getTrashFolderName()) == false) {
com.sun.mail.imap.IMAPFolder trashFolder = (com.sun.mail.imap.IMAPFolder) store
.getFolder(user.getSettings().getTrashFolderName());
boolean trashFound = false;
// if the trash folder does not exist we create it
if (trashFolder.exists() == false) {
trashFound = trashFolder
.create(com.sun.mail.imap.IMAPFolder.READ_WRITE);
} else {
trashFound = true;
}
// Check if we are able to copy the messages to the trash folder
if (trashFound) {
// copy the messages to the trashfolder
f.copyMessages(mArray, trashFolder);
}
}
// delete the messages from the folder
f.setFlags(mArray, new Flags(Flags.Flag.DELETED), true);
try {
f.expunge(mArray);
f.close(false);
} catch (MessagingException e) {
// prolly UID expunge is not supported
f.close(true);
}
return new DeleteMessageResultImpl(user, folder, mArray.length);
} catch (MessagingException e) {
logger.error("Error while deleting messages for user " + user
+ " in folder" + action.getFolder(), e);
throw new HupaException("Error while deleting messages");
}
}