Purge: fixed concurrent modification (2)

pull/209/head
M66B 3 years ago
parent 21d12e2066
commit 1bc7f6c741

@ -2906,19 +2906,23 @@ class Core {
int chunk_size = prefs.getInt("chunk_size", DEFAULT_CHUNK_SIZE); int chunk_size = prefs.getInt("chunk_size", DEFAULT_CHUNK_SIZE);
Flags flags = new Flags(Flags.Flag.DELETED); Flags flags = new Flags(Flags.Flag.DELETED);
List<Message> iremove = new ArrayList<>();
for (List<Message> list : Helper.chunkList(idelete, chunk_size)) for (List<Message> list : Helper.chunkList(idelete, chunk_size))
try { try {
ifolder.setFlags(list.toArray(new Message[0]), flags, true); ifolder.setFlags(list.toArray(new Message[0]), flags, true);
} catch (MessagingException ex) { } catch (MessagingException ex) {
Log.w(ex); Log.w(ex);
for (Message imessage : new ArrayList<>(list)) for (Message imessage : list)
try { try {
imessage.setFlag(Flags.Flag.DELETED, true); imessage.setFlag(Flags.Flag.DELETED, true);
} catch (MessagingException mex) { } catch (MessagingException mex) {
Log.w(mex); Log.w(mex);
idelete.remove(imessage); iremove.add(imessage);
} }
} }
for (Message imessage : iremove)
idelete.remove(imessage);
} }
Log.i(folder.name + " purge deleted"); Log.i(folder.name + " purge deleted");
expunge(context, ifolder, idelete); expunge(context, ifolder, idelete);

Loading…
Cancel
Save