Loading app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +4 −2 Original line number Diff line number Diff line Loading @@ -562,7 +562,8 @@ public class MessagingController { LocalMessage localMessage = localFolder.getMessage(messageServerId); if (localMessage == null) { Message message = backend.fetchMessage(folderServerId, messageServerId, fetchProfile); int maxDownloadSize = account.getMaximumAutoDownloadMessageSize(); Message message = backend.fetchMessage(folderServerId, messageServerId, fetchProfile, maxDownloadSize); localFolder.appendMessages(Collections.singletonList(message)); } } Loading Loading @@ -1259,7 +1260,8 @@ public class MessagingController { FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.BODY); fp.add(FetchProfile.Item.FLAGS); Message remoteMessage = backend.fetchMessage(folder, uid, fp); int maxDownloadSize = account.getMaximumAutoDownloadMessageSize(); Message remoteMessage = backend.fetchMessage(folder, uid, fp, maxDownloadSize); localFolder.appendMessages(Collections.singletonList(remoteMessage)); } Loading app/core/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +6 −3 Original line number Diff line number Diff line Loading @@ -269,7 +269,8 @@ public class MessagingControllerTest extends K9RobolectricTest { }).when(backend).fetchMessage( eq(FOLDER_NAME), eq("newMessageUid2"), any(FetchProfile.class)); any(FetchProfile.class), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); reqFlags = Collections.singleton(Flag.ANSWERED); forbiddenFlags = Collections.singleton(Flag.DELETED); Loading Loading @@ -327,7 +328,8 @@ public class MessagingControllerTest extends K9RobolectricTest { controller.searchRemoteMessagesSynchronous(ACCOUNT_UUID, FOLDER_NAME, "query", reqFlags, forbiddenFlags, listener); verify(backend).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid2"), fetchProfileCaptor.capture()); verify(backend).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid2"), fetchProfileCaptor.capture(), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); } @Test Loading @@ -336,7 +338,8 @@ public class MessagingControllerTest extends K9RobolectricTest { controller.searchRemoteMessagesSynchronous(ACCOUNT_UUID, FOLDER_NAME, "query", reqFlags, forbiddenFlags, listener); verify(backend, never()).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid1"), fetchProfileCaptor.capture()); verify(backend, never()).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid1"), fetchProfileCaptor.capture(), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); } @Test Loading backend/api/src/main/java/com/fsck/k9/backend/api/Backend.kt +6 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,12 @@ interface Backend { ): List<String> @Throws(MessagingException::class) fun fetchMessage(folderServerId: String, messageServerId: String, fetchProfile: FetchProfile): Message fun fetchMessage( folderServerId: String, messageServerId: String, fetchProfile: FetchProfile, maxDownloadSize: Int ): Message @Throws(MessagingException::class) fun fetchPart(folderServerId: String, messageServerId: String, part: Part, bodyFactory: BodyFactory) Loading backend/imap/src/main/java/com/fsck/k9/backend/imap/CommandFetchMessage.kt +17 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,12 @@ import com.fsck.k9.mail.store.imap.ImapStore internal class CommandFetchMessage(private val imapStore: ImapStore) { fun fetchMessage(folderServerId: String, messageServerId: String, fetchProfile: FetchProfile): Message { fun fetchMessage( folderServerId: String, messageServerId: String, fetchProfile: FetchProfile, maxDownloadSize: Int ): Message { val folder = imapStore.getFolder(folderServerId) try { folder.open(ImapFolder.OPEN_MODE_RO) Loading @@ -23,10 +28,10 @@ internal class CommandFetchMessage(private val imapStore: ImapStore) { val headerFetchProfile = fetchProfile.without(FetchProfile.Item.STRUCTURE) val structureFetchProfile = FetchProfile().apply { add(FetchProfile.Item.STRUCTURE) } fetchMessage(folder, message, headerFetchProfile) fetchMessage(folder, message, structureFetchProfile) fetchMessage(folder, message, headerFetchProfile, maxDownloadSize) fetchMessage(folder, message, structureFetchProfile, maxDownloadSize) } else { fetchMessage(folder, message, fetchProfile) fetchMessage(folder, message, fetchProfile, maxDownloadSize) } return message Loading @@ -41,14 +46,19 @@ internal class CommandFetchMessage(private val imapStore: ImapStore) { folder.open(ImapFolder.OPEN_MODE_RW) val message = folder.getMessage(messageServerId) folder.fetchPart(message, part, null, bodyFactory) folder.fetchPart(message, part, null, bodyFactory, -1) } finally { folder.close() } } private fun fetchMessage(remoteFolder: ImapFolder, message: ImapMessage, fetchProfile: FetchProfile) { remoteFolder.fetch(listOf(message), fetchProfile, null) private fun fetchMessage( remoteFolder: ImapFolder, message: ImapMessage, fetchProfile: FetchProfile, maxDownloadSize: Int ) { remoteFolder.fetch(listOf(message), fetchProfile, null, maxDownloadSize) } private fun FetchProfile.without(item: FetchProfile.Item) = FetchProfile().apply { Loading backend/imap/src/main/java/com/fsck/k9/backend/imap/ImapBackend.java +2 −2 Original line number Diff line number Diff line Loading @@ -190,8 +190,8 @@ public class ImapBackend implements Backend { @NotNull @Override public Message fetchMessage(@NotNull String folderServerId, @NotNull String messageServerId, @NotNull FetchProfile fetchProfile) throws MessagingException { return commandFetchMessage.fetchMessage(folderServerId, messageServerId, fetchProfile); @NotNull FetchProfile fetchProfile, int maxDownloadSize) { return commandFetchMessage.fetchMessage(folderServerId, messageServerId, fetchProfile, maxDownloadSize); } @Override Loading Loading
app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +4 −2 Original line number Diff line number Diff line Loading @@ -562,7 +562,8 @@ public class MessagingController { LocalMessage localMessage = localFolder.getMessage(messageServerId); if (localMessage == null) { Message message = backend.fetchMessage(folderServerId, messageServerId, fetchProfile); int maxDownloadSize = account.getMaximumAutoDownloadMessageSize(); Message message = backend.fetchMessage(folderServerId, messageServerId, fetchProfile, maxDownloadSize); localFolder.appendMessages(Collections.singletonList(message)); } } Loading Loading @@ -1259,7 +1260,8 @@ public class MessagingController { FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.BODY); fp.add(FetchProfile.Item.FLAGS); Message remoteMessage = backend.fetchMessage(folder, uid, fp); int maxDownloadSize = account.getMaximumAutoDownloadMessageSize(); Message remoteMessage = backend.fetchMessage(folder, uid, fp, maxDownloadSize); localFolder.appendMessages(Collections.singletonList(remoteMessage)); } Loading
app/core/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +6 −3 Original line number Diff line number Diff line Loading @@ -269,7 +269,8 @@ public class MessagingControllerTest extends K9RobolectricTest { }).when(backend).fetchMessage( eq(FOLDER_NAME), eq("newMessageUid2"), any(FetchProfile.class)); any(FetchProfile.class), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); reqFlags = Collections.singleton(Flag.ANSWERED); forbiddenFlags = Collections.singleton(Flag.DELETED); Loading Loading @@ -327,7 +328,8 @@ public class MessagingControllerTest extends K9RobolectricTest { controller.searchRemoteMessagesSynchronous(ACCOUNT_UUID, FOLDER_NAME, "query", reqFlags, forbiddenFlags, listener); verify(backend).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid2"), fetchProfileCaptor.capture()); verify(backend).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid2"), fetchProfileCaptor.capture(), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); } @Test Loading @@ -336,7 +338,8 @@ public class MessagingControllerTest extends K9RobolectricTest { controller.searchRemoteMessagesSynchronous(ACCOUNT_UUID, FOLDER_NAME, "query", reqFlags, forbiddenFlags, listener); verify(backend, never()).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid1"), fetchProfileCaptor.capture()); verify(backend, never()).fetchMessage(eq(FOLDER_NAME), eq("newMessageUid1"), fetchProfileCaptor.capture(), eq(MAXIMUM_SMALL_MESSAGE_SIZE)); } @Test Loading
backend/api/src/main/java/com/fsck/k9/backend/api/Backend.kt +6 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,12 @@ interface Backend { ): List<String> @Throws(MessagingException::class) fun fetchMessage(folderServerId: String, messageServerId: String, fetchProfile: FetchProfile): Message fun fetchMessage( folderServerId: String, messageServerId: String, fetchProfile: FetchProfile, maxDownloadSize: Int ): Message @Throws(MessagingException::class) fun fetchPart(folderServerId: String, messageServerId: String, part: Part, bodyFactory: BodyFactory) Loading
backend/imap/src/main/java/com/fsck/k9/backend/imap/CommandFetchMessage.kt +17 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,12 @@ import com.fsck.k9.mail.store.imap.ImapStore internal class CommandFetchMessage(private val imapStore: ImapStore) { fun fetchMessage(folderServerId: String, messageServerId: String, fetchProfile: FetchProfile): Message { fun fetchMessage( folderServerId: String, messageServerId: String, fetchProfile: FetchProfile, maxDownloadSize: Int ): Message { val folder = imapStore.getFolder(folderServerId) try { folder.open(ImapFolder.OPEN_MODE_RO) Loading @@ -23,10 +28,10 @@ internal class CommandFetchMessage(private val imapStore: ImapStore) { val headerFetchProfile = fetchProfile.without(FetchProfile.Item.STRUCTURE) val structureFetchProfile = FetchProfile().apply { add(FetchProfile.Item.STRUCTURE) } fetchMessage(folder, message, headerFetchProfile) fetchMessage(folder, message, structureFetchProfile) fetchMessage(folder, message, headerFetchProfile, maxDownloadSize) fetchMessage(folder, message, structureFetchProfile, maxDownloadSize) } else { fetchMessage(folder, message, fetchProfile) fetchMessage(folder, message, fetchProfile, maxDownloadSize) } return message Loading @@ -41,14 +46,19 @@ internal class CommandFetchMessage(private val imapStore: ImapStore) { folder.open(ImapFolder.OPEN_MODE_RW) val message = folder.getMessage(messageServerId) folder.fetchPart(message, part, null, bodyFactory) folder.fetchPart(message, part, null, bodyFactory, -1) } finally { folder.close() } } private fun fetchMessage(remoteFolder: ImapFolder, message: ImapMessage, fetchProfile: FetchProfile) { remoteFolder.fetch(listOf(message), fetchProfile, null) private fun fetchMessage( remoteFolder: ImapFolder, message: ImapMessage, fetchProfile: FetchProfile, maxDownloadSize: Int ) { remoteFolder.fetch(listOf(message), fetchProfile, null, maxDownloadSize) } private fun FetchProfile.without(item: FetchProfile.Item) = FetchProfile().apply { Loading
backend/imap/src/main/java/com/fsck/k9/backend/imap/ImapBackend.java +2 −2 Original line number Diff line number Diff line Loading @@ -190,8 +190,8 @@ public class ImapBackend implements Backend { @NotNull @Override public Message fetchMessage(@NotNull String folderServerId, @NotNull String messageServerId, @NotNull FetchProfile fetchProfile) throws MessagingException { return commandFetchMessage.fetchMessage(folderServerId, messageServerId, fetchProfile); @NotNull FetchProfile fetchProfile, int maxDownloadSize) { return commandFetchMessage.fetchMessage(folderServerId, messageServerId, fetchProfile, maxDownloadSize); } @Override Loading