@Override public String getUidFromMessageId(String messageId) throws MessagingException { if (K9MailLib.isDebug()) { Timber.d("Looking for UID for message with message-id %s for %s", messageId, getLogId()); } String command = String.format("UID SEARCH HEADER MESSAGE-ID %s", ImapUtility.encodeString(messageId)); List<ImapResponse> imapResponses; try { imapResponses = executeSimpleCommand(command); } catch (IOException ioe) { throw ioExceptionHandler(connection, ioe); } SearchResponse searchResponse = SearchResponse.parse(imapResponses); List<Long> uids = searchResponse.getNumbers(); if (uids.size() > 0) { return Long.toString(uids.get(0)); } return null; }
private MessagingException ioExceptionHandler(ImapConnection connection, IOException ioe) { Timber.e(ioe, "IOException for %s", getLogId()); if (connection != null) { connection.close(); } close(); return new MessagingException("IO Error", ioe); }
@Override public String getNewPushState(String oldSerializedPushState, Message message) { try { String uid = message.getUid(); long messageUid = Long.parseLong(uid); ImapPushState oldPushState = ImapPushState.parse(oldSerializedPushState); if (messageUid >= oldPushState.uidNext) { long uidNext = messageUid + 1; ImapPushState newPushState = new ImapPushState(uidNext); return newPushState.toString(); } else { return null; } } catch (Exception e) { Timber.e(e, "Exception while updated push state for %s", getLogId()); return null; } }
@Override public void delete(List<? extends Message> messages, String trashFolder) throws MessagingException { if (messages.isEmpty()) { return; } if (trashFolder == null || getServerId().equals(trashFolder)) { setFlags(messages, Collections.singleton(Flag.DELETED), true); } else { ImapFolder remoteTrashFolder = getStore().getFolder(trashFolder); String encodedTrashFolderName = folderNameCodec.encode(remoteTrashFolder.getPrefixedName()); String escapedTrashFolderName = ImapUtility.encodeString(encodedTrashFolderName); if (!exists(escapedTrashFolderName)) { if (K9MailLib.isDebug()) { Timber.i("ImapFolder.delete: couldn't find remote trash folder '%s' for %s", trashFolder, getLogId()); } throw new FolderNotFoundException(remoteTrashFolder.getServerId()); } if (K9MailLib.isDebug()) { Timber.d("IMAPMessage.delete: copying remote %d messages to '%s' for %s", messages.size(), trashFolder, getLogId()); } moveMessages(messages, remoteTrashFolder); } }
if (K9MailLib.isDebug()) { Timber.i("ImapFolder.copyMessages: couldn't find remote folder '%s' for %s", escapedDestinationFolderName, getLogId());
/** * Handle an untagged response that the caller doesn't care to handle themselves. */ protected void handleUntaggedResponse(ImapResponse response) { if (response.getTag() == null && response.size() > 1) { if (ImapResponseParser.equalsIgnoreCase(response.get(1), "EXISTS")) { messageCount = response.getNumber(0); if (K9MailLib.isDebug()) { Timber.d("Got untagged EXISTS with value %d for %s", messageCount, getLogId()); } } handlePossibleUidNext(response); if (ImapResponseParser.equalsIgnoreCase(response.get(1), "EXPUNGE") && messageCount > 0) { messageCount--; if (K9MailLib.isDebug()) { Timber.d("Got untagged EXPUNGE with messageCount %d for %s", messageCount, getLogId()); } } } }
if (message == null) { if (K9MailLib.isDebug()) { Timber.d("Do not have message in messageMap for UID %s for %s", uid, getLogId());
protected void handlePossibleUidNext(ImapResponse response) { if (ImapResponseParser.equalsIgnoreCase(response.get(0), "OK") && response.size() > 1) { Object bracketedObj = response.get(1); if (bracketedObj instanceof ImapList) { ImapList bracketed = (ImapList) bracketedObj; if (bracketed.size() > 1) { Object keyObj = bracketed.get(0); if (keyObj instanceof String) { String key = (String) keyObj; if ("UIDNEXT".equalsIgnoreCase(key)) { uidNext = bracketed.getLong(1); if (K9MailLib.isDebug()) { Timber.d("Got UidNext = %s for %s", uidNext, getLogId()); } } } } } } }
} catch (MessagingException e) { if (K9MailLib.isDebug()) { Timber.d(e, "Error handling message for %s", getLogId());
throw ioExceptionHandler(connection, ioe); } catch (MessagingException me) { Timber.e(me, "Unable to open connection for %s", getLogId()); throw me;
Timber.d("Did not ask for UID %s for %s", uid, getLogId());
String newUid = messageId != null ? getUidFromMessageId(messageId) : null; if (K9MailLib.isDebug()) { Timber.d("Got UID %s for message for %s", newUid, getLogId());