Loading app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +33 −59 Original line number Diff line number Diff line Loading @@ -640,7 +640,7 @@ public class MessagingController { if (commandException != null && !syncListener.syncFailed) { String rootMessage = getRootCauseMessage(commandException); Timber.e("Root cause failure in %s:%s was '%s'", account, folderServerId, rootMessage); updateFolderStatus(account, folderServerId, rootMessage); updateFolderStatus(account, folderId, rootMessage); listener.synchronizeMailboxFailed(account, folderId, rootMessage); } } Loading @@ -655,14 +655,9 @@ public class MessagingController { SYNC_FLAGS); } private void updateFolderStatus(Account account, String folderServerId, String status) { try { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderServerId); localFolder.setStatus(status); } catch (MessagingException e) { Timber.w(e, "Couldn't update folder status for folder %s", folderServerId); } private void updateFolderStatus(Account account, long folderId, String status) { MessageStore messageStore = messageStoreManager.getMessageStore(account); messageStore.setStatus(folderId, status); } public void handleAuthenticationFailure(Account account, boolean incoming) { Loading Loading @@ -1238,51 +1233,37 @@ public class MessagingController { ); } private void loadMessageRemoteSynchronous(Account account, long folderId, String uid, private void loadMessageRemoteSynchronous(Account account, long folderId, String messageServerId, MessagingListener listener, boolean loadPartialFromSearch) { try { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); localFolder.open(); String folderServerId = localFolder.getServerId(); if (messageServerId.startsWith(K9.LOCAL_UID_PREFIX)) { throw new IllegalArgumentException("Must not be called with a local UID"); } LocalMessage message = localFolder.getMessage(uid); MessageStore messageStore = messageStoreManager.getMessageStore(account); String folderServerId = messageStore.getFolderServerId(folderId); if (folderServerId == null) { throw new IllegalStateException("Folder not found (ID: " + folderId + ")"); } if (uid.startsWith(K9.LOCAL_UID_PREFIX)) { Timber.w("Message has local UID so cannot download fully."); // ASH move toast android.widget.Toast.makeText(context, "Message has local UID so cannot download fully", android.widget.Toast.LENGTH_LONG).show(); // TODO: Using X_DOWNLOADED_FULL is wrong because it's only a partial message. But // one we can't download completely. Maybe add a new flag; X_PARTIAL_MESSAGE ? message.setFlag(Flag.X_DOWNLOADED_FULL, true); message.setFlag(Flag.X_DOWNLOADED_PARTIAL, false); } else { Backend backend = getBackend(account); if (loadPartialFromSearch) { SyncConfig syncConfig = createSyncConfig(account); backend.downloadMessage(syncConfig, folderServerId, uid); backend.downloadMessage(syncConfig, folderServerId, messageServerId); } else { backend.downloadCompleteMessage(folderServerId, uid); backend.downloadCompleteMessage(folderServerId, messageServerId); } message = localFolder.getMessage(uid); if (!loadPartialFromSearch) { message.setFlag(Flag.X_DOWNLOADED_FULL, true); } } // now that we have the full message, refresh the headers for (MessagingListener l : getListeners(listener)) { l.loadMessageRemoteFinished(account, folderId, uid); l.loadMessageRemoteFinished(account, folderId, messageServerId); } } catch (Exception e) { for (MessagingListener l : getListeners(listener)) { l.loadMessageRemoteFailed(account, folderId, uid, e); l.loadMessageRemoteFailed(account, folderId, messageServerId, e); } notifyUserIfCertificateProblem(account, e, true); Timber.e(e, "Error while loading remote message"); } Loading Loading @@ -1933,26 +1914,19 @@ public class MessagingController { }); } public void deleteDraft(final Account account, long id) { try { public void deleteDraft(Account account, long messageId) { Long folderId = account.getDraftsFolderId(); if (folderId == null) { Timber.w("No Drafts folder configured. Can't delete draft."); return; } LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); localFolder.open(); String uid = localFolder.getMessageUidById(id); if (uid != null) { MessageReference messageReference = new MessageReference(account.getUuid(), folderId, uid); MessageStore messageStore = messageStoreManager.getMessageStore(account); String messageServerId = messageStore.getMessageServerId(messageId); MessageReference messageReference = new MessageReference(account.getUuid(), folderId, messageServerId); deleteMessage(messageReference); } } catch (MessagingException me) { Timber.e(me, "Error deleting draft"); } } public void deleteThreads(final List<MessageReference> messages) { actOnMessagesGroupedByAccountAndFolder(messages, (account, messageFolder, accountMessages) -> { Loading app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java +0 −9 Original line number Diff line number Diff line Loading @@ -117,10 +117,6 @@ public class LocalFolder { return lastChecked; } public String getStatus() { return status; } public long getDatabaseId() { return databaseId; } Loading Loading @@ -297,11 +293,6 @@ public class LocalFolder { } } public void setStatus(final String status) throws MessagingException { this.status = status; updateFolderColumn("status", status); } private void updateFolderColumn(final String column, final Object value) throws MessagingException { this.localStore.getDatabase().execute(false, new DbCallback<Void>() { @Override Loading Loading
app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +33 −59 Original line number Diff line number Diff line Loading @@ -640,7 +640,7 @@ public class MessagingController { if (commandException != null && !syncListener.syncFailed) { String rootMessage = getRootCauseMessage(commandException); Timber.e("Root cause failure in %s:%s was '%s'", account, folderServerId, rootMessage); updateFolderStatus(account, folderServerId, rootMessage); updateFolderStatus(account, folderId, rootMessage); listener.synchronizeMailboxFailed(account, folderId, rootMessage); } } Loading @@ -655,14 +655,9 @@ public class MessagingController { SYNC_FLAGS); } private void updateFolderStatus(Account account, String folderServerId, String status) { try { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderServerId); localFolder.setStatus(status); } catch (MessagingException e) { Timber.w(e, "Couldn't update folder status for folder %s", folderServerId); } private void updateFolderStatus(Account account, long folderId, String status) { MessageStore messageStore = messageStoreManager.getMessageStore(account); messageStore.setStatus(folderId, status); } public void handleAuthenticationFailure(Account account, boolean incoming) { Loading Loading @@ -1238,51 +1233,37 @@ public class MessagingController { ); } private void loadMessageRemoteSynchronous(Account account, long folderId, String uid, private void loadMessageRemoteSynchronous(Account account, long folderId, String messageServerId, MessagingListener listener, boolean loadPartialFromSearch) { try { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); localFolder.open(); String folderServerId = localFolder.getServerId(); if (messageServerId.startsWith(K9.LOCAL_UID_PREFIX)) { throw new IllegalArgumentException("Must not be called with a local UID"); } LocalMessage message = localFolder.getMessage(uid); MessageStore messageStore = messageStoreManager.getMessageStore(account); String folderServerId = messageStore.getFolderServerId(folderId); if (folderServerId == null) { throw new IllegalStateException("Folder not found (ID: " + folderId + ")"); } if (uid.startsWith(K9.LOCAL_UID_PREFIX)) { Timber.w("Message has local UID so cannot download fully."); // ASH move toast android.widget.Toast.makeText(context, "Message has local UID so cannot download fully", android.widget.Toast.LENGTH_LONG).show(); // TODO: Using X_DOWNLOADED_FULL is wrong because it's only a partial message. But // one we can't download completely. Maybe add a new flag; X_PARTIAL_MESSAGE ? message.setFlag(Flag.X_DOWNLOADED_FULL, true); message.setFlag(Flag.X_DOWNLOADED_PARTIAL, false); } else { Backend backend = getBackend(account); if (loadPartialFromSearch) { SyncConfig syncConfig = createSyncConfig(account); backend.downloadMessage(syncConfig, folderServerId, uid); backend.downloadMessage(syncConfig, folderServerId, messageServerId); } else { backend.downloadCompleteMessage(folderServerId, uid); backend.downloadCompleteMessage(folderServerId, messageServerId); } message = localFolder.getMessage(uid); if (!loadPartialFromSearch) { message.setFlag(Flag.X_DOWNLOADED_FULL, true); } } // now that we have the full message, refresh the headers for (MessagingListener l : getListeners(listener)) { l.loadMessageRemoteFinished(account, folderId, uid); l.loadMessageRemoteFinished(account, folderId, messageServerId); } } catch (Exception e) { for (MessagingListener l : getListeners(listener)) { l.loadMessageRemoteFailed(account, folderId, uid, e); l.loadMessageRemoteFailed(account, folderId, messageServerId, e); } notifyUserIfCertificateProblem(account, e, true); Timber.e(e, "Error while loading remote message"); } Loading Loading @@ -1933,26 +1914,19 @@ public class MessagingController { }); } public void deleteDraft(final Account account, long id) { try { public void deleteDraft(Account account, long messageId) { Long folderId = account.getDraftsFolderId(); if (folderId == null) { Timber.w("No Drafts folder configured. Can't delete draft."); return; } LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); localFolder.open(); String uid = localFolder.getMessageUidById(id); if (uid != null) { MessageReference messageReference = new MessageReference(account.getUuid(), folderId, uid); MessageStore messageStore = messageStoreManager.getMessageStore(account); String messageServerId = messageStore.getMessageServerId(messageId); MessageReference messageReference = new MessageReference(account.getUuid(), folderId, messageServerId); deleteMessage(messageReference); } } catch (MessagingException me) { Timber.e(me, "Error deleting draft"); } } public void deleteThreads(final List<MessageReference> messages) { actOnMessagesGroupedByAccountAndFolder(messages, (account, messageFolder, accountMessages) -> { Loading
app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java +0 −9 Original line number Diff line number Diff line Loading @@ -117,10 +117,6 @@ public class LocalFolder { return lastChecked; } public String getStatus() { return status; } public long getDatabaseId() { return databaseId; } Loading Loading @@ -297,11 +293,6 @@ public class LocalFolder { } } public void setStatus(final String status) throws MessagingException { this.status = status; updateFolderColumn("status", status); } private void updateFolderColumn(final String column, final Object value) throws MessagingException { this.localStore.getDatabase().execute(false, new DbCallback<Void>() { @Override Loading