Double check found messages

pull/217/head
M66B 8 months ago
parent c465445fde
commit 0778af503c

@ -896,8 +896,20 @@ class Core {
" from=" + new Date(from) + " to=" + new Date(to) + " from=" + new Date(from) + " to=" + new Date(to) +
" found=" + tmp.size()); " found=" + tmp.size());
return tmp.toArray(new Message[0]); return tmp.toArray(new Message[0]);
} else } else {
return ifolder.search(new MessageIDTerm(msgid)); Message[] messages = ifolder.search(new MessageIDTerm(msgid));
if (messages == null || messages.length <= 1)
return messages;
List<Message> tmp = new ArrayList<>();
for (Message m : messages) {
MessageHelper helper = new MessageHelper((MimeMessage) m, context);
if (msgid.equals(helper.getMessageID()))
tmp.add(m);
else
Log.w("findMsgId msgid=" + msgid + " <> " + helper.getMessageID() + " !!!");
}
return tmp.toArray(new Message[0]);
}
} }
private static Map<EntityMessage, Message> findMessages(Context context, EntityFolder folder, List<EntityMessage> messages, POP3Store istore, POP3Folder ifolder) throws MessagingException, IOException { private static Map<EntityMessage, Message> findMessages(Context context, EntityFolder folder, List<EntityMessage> messages, POP3Store istore, POP3Folder ifolder) throws MessagingException, IOException {
@ -1302,66 +1314,67 @@ class Core {
db.message().setMessageUid(message.id, null); db.message().setMessageUid(message.id, null);
// Some providers do not list the new message yet // Some providers do not list the new message yet
try { if (EntityFolder.DRAFTS.equals(folder.type))
List<Message> delete = new ArrayList<>(); try {
List<Message> delete = new ArrayList<>();
if (message.uid != null)
try {
Message iprev = ifolder.getMessageByUID(message.uid);
if (iprev != null) {
Log.i(folder.name + " found prev uid=" + message.uid + " msgid=" + message.msgid);
iprev.setFlag(Flags.Flag.DELETED, true);
delete.add(iprev);
}
} catch (Throwable ex) {
Log.w(ex);
}
Log.i(folder.name + " searching for added msgid=" + message.msgid);
Message[] imessages = findMsgId(context, account, ifolder, message.msgid, null);
if (imessages != null) {
Long found = newuid;
for (Message iexisting : imessages) if (message.uid != null)
try { try {
long muid = ifolder.getUID(iexisting); Message iprev = ifolder.getMessageByUID(message.uid);
if (muid < 0) if (iprev != null) {
continue; Log.i(folder.name + " found prev uid=" + message.uid + " msgid=" + message.msgid);
Log.i(folder.name + " found added uid=" + muid + " msgid=" + message.msgid); iprev.setFlag(Flags.Flag.DELETED, true);
if (found == null || muid > found) delete.add(iprev);
found = muid; }
} catch (MessageRemovedException ex) { } catch (Throwable ex) {
Log.w(ex); Log.w(ex);
} }
if (found != null) { Log.i(folder.name + " searching for added msgid=" + message.msgid);
if (newuid == null || found > newuid) Message[] imessages = findMsgId(context, account, ifolder, message.msgid, null);
newuid = found; if (imessages != null) {
Long found = newuid;
for (Message iexisting : imessages) for (Message iexisting : imessages)
try { try {
long muid = ifolder.getUID(iexisting); long muid = ifolder.getUID(iexisting);
if (muid < 0) if (muid < 0)
continue; continue;
if (muid < newuid && Log.i(folder.name + " found added uid=" + muid + " msgid=" + message.msgid);
(message.uid == null || message.uid != muid)) if (found == null || muid > found)
try { found = muid;
iexisting.setFlag(Flags.Flag.DELETED, true);
delete.add(iexisting);
} catch (MessagingException ex) {
Log.w(ex);
}
} catch (MessageRemovedException ex) { } catch (MessageRemovedException ex) {
Log.w(ex); Log.w(ex);
} }
if (found != null) {
if (newuid == null || found > newuid)
newuid = found;
for (Message iexisting : imessages)
try {
long muid = ifolder.getUID(iexisting);
if (muid < 0)
continue;
if (muid < newuid &&
(message.uid == null || message.uid != muid))
try {
iexisting.setFlag(Flags.Flag.DELETED, true);
delete.add(iexisting);
} catch (MessagingException ex) {
Log.w(ex);
}
} catch (MessageRemovedException ex) {
Log.w(ex);
}
}
} }
}
expunge(context, ifolder, delete); expunge(context, ifolder, delete);
} catch (MessagingException ex) { } catch (MessagingException ex) {
Log.w(ex); Log.w(ex);
} }
if (newuid != null && (message.uid == null || newuid > message.uid)) if (newuid != null && (message.uid == null || newuid > message.uid))
try { try {

Loading…
Cancel
Save