| 888 | } |
| 889 | |
| 890 | private static Message[] findMsgId(Context context, EntityAccount account, IMAPFolder ifolder, String msgid, Long from) throws MessagingException, IOException { |
| 891 | // https://stackoverflow.com/questions/18891509/how-to-get-message-from-messageidterm-for-yahoo-imap-profile |
| 892 | if (account.isYahooJp() || from != null) { |
| 893 | if (from == null) |
| 894 | from = new Date().getTime(); |
| 895 | from -= 24 * 3600 * 1000L; |
| 896 | long to = from + 3 * 24 * 3600 * 1000L; |
| 897 | |
| 898 | Message[] itemps = ifolder.search( |
| 899 | new AndTerm( |
| 900 | new ReceivedDateTerm(ComparisonTerm.GE, new Date(from)), |
| 901 | new ReceivedDateTerm(ComparisonTerm.LE, new Date(to)))); |
| 902 | List<Message> tmp = new ArrayList<>(); |
| 903 | for (Message itemp : itemps) { |
| 904 | MessageHelper helper = new MessageHelper((MimeMessage) itemp, context); |
| 905 | if (msgid.equals(helper.getMessageID())) |
| 906 | tmp.add(itemp); |
| 907 | } |
| 908 | Log.w("Fallback search by" + |
| 909 | " msgid=" + msgid + |
| 910 | " host=" + account.host + |
| 911 | " from=" + new Date(from) + " to=" + new Date(to) + |
| 912 | " found=" + tmp.size()); |
| 913 | return tmp.toArray(new Message[0]); |
| 914 | } else { |
| 915 | Message[] messages = ifolder.search(new MessageIDTerm(msgid)); |
| 916 | if (messages == null || messages.length <= 1) |
| 917 | return messages; |
| 918 | List<Message> tmp = new ArrayList<>(); |
| 919 | for (Message m : messages) { |
| 920 | MessageHelper helper = new MessageHelper((MimeMessage) m, context); |
| 921 | if (msgid.equals(helper.getMessageID())) |
| 922 | tmp.add(m); |
| 923 | else |
| 924 | Log.w("findMsgId msgid=" + msgid + " <> " + helper.getMessageID() + " !!!"); |
| 925 | } |
| 926 | return tmp.toArray(new Message[0]); |
| 927 | } |
| 928 | } |
| 929 | |
| 930 | private static Map<EntityMessage, Message> findMessages(Context context, EntityFolder folder, List<EntityMessage> messages, POP3Store istore, POP3Folder ifolder) throws MessagingException, IOException { |
| 931 | Map<String, String> caps = istore.capabilities(); |