Move authentication failure handling out of ImapSync

This commit is contained in:
cketti 2018-05-27 19:32:49 +02:00
parent 8ea215117d
commit ddfe93cab5
4 changed files with 11 additions and 11 deletions

View file

@ -4199,9 +4199,13 @@ public class MessagingController {
}
@Override
public void syncFailed(@NotNull String folderServerId, @NotNull String message) {
public void syncFailed(@NotNull String folderServerId, @NotNull String message, Exception exception) {
syncFailed = true;
if (exception instanceof AuthenticationFailedException) {
handleAuthenticationFailure(account, true);
}
for (MessagingListener messagingListener : getListeners(listener)) {
messagingListener.synchronizeMailboxFailed(account, folderServerId, message);
}

View file

@ -14,7 +14,7 @@ interface SyncListener {
fun syncRemovedMessage(folderServerId: String, message: Message)
fun syncFinished(folderServerId: String, totalMessagesInMailbox: Int, numNewMessages: Int)
fun syncFailed(folderServerId: String, message: String)
fun syncFailed(folderServerId: String, message: String, exception: Exception?)
fun folderStatusChanged(folderServerId: String, unreadMessageCount: Int)
}

View file

@ -251,9 +251,7 @@ class ImapSync {
Timber.i("Done synchronizing folder %s:%s", account.getDescription(), folder);
} catch (AuthenticationFailedException e) {
handleAuthenticationFailure(account, true);
listener.syncFailed(folder, "Authentication failure");
listener.syncFailed(folder, "Authentication failure", e);
} catch (Exception e) {
Timber.e(e, "synchronizeMailbox");
// If we don't set the last checked, it can try too often during
@ -269,7 +267,7 @@ class ImapSync {
}
}
listener.syncFailed(folder, rootMessage);
listener.syncFailed(folder, rootMessage, e);
notifyUserIfCertificateProblem(account, e, true);
Timber.e("Failed synchronizing folder %s:%s @ %tc", account.getDescription(), folder,
@ -815,10 +813,6 @@ class ImapSync {
controller.updateMoreMessages(remoteFolder, localFolder, earliestDate, remoteStart);
}
private void handleAuthenticationFailure(Account account, boolean incoming) {
controller.handleAuthenticationFailure(account, incoming);
}
private void notifyUserIfCertificateProblem(Account account, Exception exception, boolean incoming) {
controller.notifyUserIfCertificateProblem(account, exception, incoming);
}

View file

@ -38,6 +38,7 @@ import org.robolectric.shadows.ShadowLog;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
@ -121,7 +122,8 @@ public class ImapSyncTest extends RobolectricTest {
imapSync.sync(account, FOLDER_NAME, listener, remoteFolder);
verify(listener).syncFailed(FOLDER_NAME, "Exception: Message count -1 for folder Folder");
verify(listener).syncFailed(eq(FOLDER_NAME), eq("Exception: Message count -1 for folder Folder"),
any(Exception.class));
}
@Test