Skip to content

Commit

Permalink
refactor: Revamp Scheduled Drafts region in MainViewModel actions
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Jan 30, 2025
1 parent eeb2a33 commit f77ba3e
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 51 deletions.
93 changes: 43 additions & 50 deletions app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<Unit>) {

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<Unit>) {

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
Expand Down Expand Up @@ -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<String>) = viewModelScope.launch(ioCoroutineContext) {

snackbarManager.postValue(appContext.getString(R.string.snackbarDeletedConversation))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit f77ba3e

Please sign in to comment.