Guarantee deletion of tmp file

This commit is contained in:
M66B 2022-11-01 08:21:16 +01:00
parent 20e17ce615
commit f2fb73b926
1 changed files with 28 additions and 26 deletions

View File

@ -1520,36 +1520,38 @@ class Core {
for (Message imessage : map.keySet()) {
EntityMessage message = map.get(imessage);
File file = new File(message.getFile(context).getAbsoluteFile() + ".copy");
try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
imessage.writeTo(os);
}
Properties props = MessageHelper.getSessionProperties(account.unicode);
Session isession = Session.getInstance(props, null);
Message icopy;
try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
if (duplicate) {
String msgid = EntityMessage.generateMessageId();
msgids.put(message, msgid);
icopy = new MimeMessageEx(isession, is, msgid);
icopy.saveChanges();
File file = new File(message.getFile(context).getAbsoluteFile() + ".copy");
try {
try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
imessage.writeTo(os);
}
if (!copy) {
List<EntityMessage> tmps = db.message().getMessagesByMsgId(message.account, message.msgid);
for (EntityMessage tmp : tmps)
if (target.id.equals(tmp.folder)) {
db.message().setMessageMsgId(tmp.id, msgid);
break;
}
}
} else
icopy = new MimeMessage(isession, is);
Properties props = MessageHelper.getSessionProperties(account.unicode);
Session isession = Session.getInstance(props, null);
try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
if (duplicate) {
String msgid = EntityMessage.generateMessageId();
msgids.put(message, msgid);
icopy = new MimeMessageEx(isession, is, msgid);
icopy.saveChanges();
if (!copy) {
List<EntityMessage> tmps = db.message().getMessagesByMsgId(message.account, message.msgid);
for (EntityMessage tmp : tmps)
if (target.id.equals(tmp.folder)) {
db.message().setMessageMsgId(tmp.id, msgid);
break;
}
}
} else
icopy = new MimeMessage(isession, is);
}
} finally {
file.delete();
}
file.delete();
for (Flags.Flag flag : imessage.getFlags().getSystemFlags())
icopy.setFlag(flag, true);