diff --git a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt index 3bb6bc3c90..eaf3e82478 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt @@ -601,70 +601,76 @@ class MainViewModel @Inject constructor( val titleRes = if (apiResponse.isSuccess()) R.string.snackbarDraftDeleted else apiResponse.translateError() snackbarManager.postValue(appContext.getString(titleRes)) } + //endregion - fun unscheduleDraft(scheduleAction: String) = viewModelScope.launch(ioCoroutineContext) { - val mailbox = currentMailbox.value!! - val apiResponse = ApiRepository.unscheduleDraft(scheduleAction) + //region Scheduled Drafts + fun rescheduleDraft(draftResource: String, scheduleDate: Date) = viewModelScope.launch(ioCoroutineContext) { + + val apiResponse = ApiRepository.rescheduleDraft(draftResource, scheduleDate) if (apiResponse.isSuccess()) { - val draftFolderId = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS)!!.id - refreshFoldersAsync(mailbox, listOf(draftFolderId)) + val scheduledDraftsFolderId = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS)!!.id + refreshFoldersAsync(currentMailbox.value!!, listOf(scheduledDraftsFolderId)) + } else { + snackbarManager.postValue(title = appContext.getString(apiResponse.translatedError)) } - - showUnscheduledDraftSnackbar(apiResponse) } - private fun showUnscheduledDraftSnackbar(apiResponse: ApiResponse) { - - fun openDraftFolder() = folderController.getFolder(FolderRole.DRAFT)?.id?.let(::openFolder) + fun modifyScheduledDraft( + scheduleAction: String, + draftResource: String, + onSuccess: () -> Unit, + ) = viewModelScope.launch(ioCoroutineContext) { + val mailbox = currentMailbox.value!! + val apiResponse = ApiRepository.unscheduleDraft(scheduleAction) if (apiResponse.isSuccess()) { - snackbarManager.postValue( - title = appContext.getString(R.string.snackbarSaveInDraft), - buttonTitle = R.string.draftFolder, - customBehavior = ::openDraftFolder, - ) + val scheduledDraftsFolderId = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS)!!.id + refreshFoldersAsync(mailbox, listOf(scheduledDraftsFolderId)) + + // TODO: Check if we can directly execute the onSuccess, and the NewMessageActivity will handle by itself the `getDraft` API call? + getDraft(draftResource, onSuccess) } else { - snackbarManager.postValue(appContext.getString(apiResponse.translateError())) + snackbarManager.postValue(title = appContext.getString(apiResponse.translatedError)) } } - //endregion - //region Scheduled Draft - private fun getScheduleDraft(draftResource: String, onSuccess: () -> Unit) = viewModelScope.launch(ioCoroutineContext) { - val apiResponse = ApiRepository.getDraft(draftResource) + fun unscheduleDraft(scheduleAction: String) = viewModelScope.launch(ioCoroutineContext) { + val mailbox = currentMailbox.value!! + val apiResponse = ApiRepository.unscheduleDraft(scheduleAction) if (apiResponse.isSuccess()) { - onSuccess() - } else { - snackbarManager.postValue(title = appContext.getString(apiResponse.translatedError)) + val scheduledDraftsFolderId = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS)!!.id + refreshFoldersAsync(mailbox, listOf(scheduledDraftsFolderId)) } + + showUnscheduledDraftSnackbar(apiResponse) } - fun rescheduleDraft(draftResource: String, scheduleDate: Date) = viewModelScope.launch(ioCoroutineContext) { - val apiResponse = ApiRepository.rescheduleDraft(draftResource, scheduleDate) + private fun getDraft(draftResource: String, onSuccess: () -> Unit) = viewModelScope.launch(ioCoroutineContext) { + val apiResponse = ApiRepository.getDraft(draftResource) if (apiResponse.isSuccess()) { - refreshScheduleDraftFolder() + onSuccess() } else { snackbarManager.postValue(title = appContext.getString(apiResponse.translatedError)) } } - fun modifyDraft(scheduleAction: String, draftResource: String, onSuccess: () -> Unit) = - viewModelScope.launch(ioCoroutineContext) { - val mailbox = currentMailbox.value!! - val apiResponse = ApiRepository.unscheduleDraft(scheduleAction) + private fun showUnscheduledDraftSnackbar(apiResponse: ApiResponse) { - if (apiResponse.isSuccess()) { - val draftFolderId = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS)!!.id - refreshFoldersAsync(mailbox, listOf(draftFolderId)) + fun openDraftFolder() = folderController.getFolder(FolderRole.DRAFT)?.id?.let(::openFolder) - getScheduleDraft(draftResource, onSuccess) - } else { - snackbarManager.postValue(title = appContext.getString(apiResponse.translatedError)) - } + if (apiResponse.isSuccess()) { + snackbarManager.postValue( + title = appContext.getString(R.string.snackbarSaveInDraft), + buttonTitle = R.string.draftFolder, + customBehavior = ::openDraftFolder, + ) + } else { + snackbarManager.postValue(appContext.getString(apiResponse.translateError())) } + } //endregion //region Move @@ -1229,19 +1235,6 @@ class MainViewModel @Inject constructor( } } - private fun refreshScheduleDraftFolder() = viewModelScope.launch(ioCoroutineContext) { - val folder = folderController.getFolder(FolderRole.SCHEDULED_DRAFTS) - - if (folder?.cursor != null) { - refreshController.refreshThreads( - refreshMode = RefreshMode.REFRESH_FOLDER_WITH_ROLE, - mailbox = currentMailbox.value!!, - folderId = folder.id, - realm = mailboxContentRealm(), - ) - } - } - fun handleDeletedMessages(messagesUids: Set) = viewModelScope.launch(ioCoroutineContext) { snackbarManager.postValue(appContext.getString(R.string.snackbarDeletedConversation)) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt index d00c2b8f2c..bef1f127a3 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt @@ -381,7 +381,7 @@ class ThreadFragment : Fragment() { val draftResource = message.draftResource if (scheduleAction != null && draftResource != null) { - mainViewModel.modifyDraft(scheduleAction, draftResource) { + mainViewModel.modifyScheduledDraft(scheduleAction, draftResource) { trackNewMessageEvent(OPEN_FROM_DRAFT_NAME) twoPaneViewModel.navigateToNewMessage( arrivedFromExistingDraft = true,