Skip to content

Commit 5c39c1b

Browse files
committed
Fixed updating drafts on the thread details screen. Step 3.| #74
1 parent f533967 commit 5c39c1b

File tree

3 files changed

+62
-25
lines changed

3 files changed

+62
-25
lines changed

FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/workmanager/MessagesSenderWorker.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,13 @@ class MessagesSenderWorker(context: Context, params: WorkerParameters) :
482482
.messages()
483483
.send(GmailApiHelper.DEFAULT_USER_ID, gmailMsg, mediaContent)
484484
.execute()
485+
.apply {
486+
setProgress(
487+
workDataOf(
488+
EXTRA_KEY_THREAD_ID_OF_SENT_MESSAGE to msgEntity.threadId,
489+
)
490+
)
491+
}
485492
} else {
486493
try {
487494
gmail
@@ -495,7 +502,12 @@ class MessagesSenderWorker(context: Context, params: WorkerParameters) :
495502
},
496503
mediaContent
497504
).execute().apply {
498-
setProgress(workDataOf(EXTRA_KEY_ID_OF_SENT_DRAFT to msgEntity.draftId))
505+
setProgress(
506+
workDataOf(
507+
EXTRA_KEY_ID_OF_SENT_DRAFT to msgEntity.draftId,
508+
EXTRA_KEY_THREAD_ID_OF_SENT_MESSAGE to msgEntity.threadId,
509+
)
510+
)
499511
}
500512
} catch (e: GoogleJsonResponseException) {
501513
val isDraftNotFound = e.details.errors.any {
@@ -509,6 +521,13 @@ class MessagesSenderWorker(context: Context, params: WorkerParameters) :
509521
.messages()
510522
.send(GmailApiHelper.DEFAULT_USER_ID, gmailMsg, mediaContent)
511523
.execute()
524+
.apply {
525+
setProgress(
526+
workDataOf(
527+
EXTRA_KEY_THREAD_ID_OF_SENT_MESSAGE to msgEntity.threadId,
528+
)
529+
)
530+
}
512531
} else {
513532
throw e
514533
}
@@ -592,6 +611,7 @@ class MessagesSenderWorker(context: Context, params: WorkerParameters) :
592611

593612
companion object {
594613
const val EXTRA_KEY_ID_OF_SENT_DRAFT = "ID_OF_SENT_DRAFT"
614+
const val EXTRA_KEY_THREAD_ID_OF_SENT_MESSAGE = "THREAD_ID_OF_SENT_MESSAGE"
595615

596616
private val TAG = MessagesSenderWorker::class.java.simpleName
597617
private val NOTIFICATION_ID = R.id.notification_id_sending_msgs_worker

FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/workmanager/sync/UploadDraftsWorker.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,14 @@ class UploadDraftsWorker(context: Context, params: WorkerParameters) :
131131
setProgress(
132132
workDataOf(
133133
EXTRA_KEY_MESSAGE_UID to existingDraftEntity.uid,
134+
EXTRA_KEY_THREAD_ID to existingDraftEntity.threadId,
134135
EXTRA_KEY_STATE to STATE_UPLOADING
135136
)
136137
)
137138
val lastVersion = drafts.maxBy { it.lastModified() }
138139
val inputStream = KeyStoreCryptoManager.getCipherInputStream(lastVersion.inputStream())
139140
val mimeMessage = MimeMessage(Session.getInstance(Properties()), inputStream)
140141
action.invoke(existingDraftEntity, mimeMessage)
141-
142-
if (existingDraftEntity.threadId != null) {
143-
val threadEntity = roomDatabase.msgDao().getThreadMessageEntity(
144-
existingDraftEntity.account,
145-
existingDraftEntity.folder,
146-
existingDraftEntity.threadId
147-
)
148-
setProgress(workDataOf("threadId" to (threadEntity?.id ?: 0L)))
149-
}
150142
drafts.forEach { FileAndDirectoryUtils.deleteFile(it) }
151143
if ((directory.listFiles() ?: emptyArray<File>()).isEmpty()) {
152144
FileAndDirectoryUtils.deleteDir(directory)
@@ -179,6 +171,7 @@ class UploadDraftsWorker(context: Context, params: WorkerParameters) :
179171
setProgress(
180172
workDataOf(
181173
EXTRA_KEY_MESSAGE_UID to existingDraftEntity.uid,
174+
EXTRA_KEY_THREAD_ID to existingDraftEntity.threadId,
182175
EXTRA_KEY_STATE to STATE_UPLOAD_COMPLETED
183176
)
184177
)
@@ -195,6 +188,7 @@ class UploadDraftsWorker(context: Context, params: WorkerParameters) :
195188

196189
companion object {
197190
const val EXTRA_KEY_MESSAGE_UID = "MESSAGE_UID"
191+
const val EXTRA_KEY_THREAD_ID = "THREAD_ID"
198192
const val EXTRA_KEY_STATE = "STATE"
199193

200194
const val STATE_UPLOADING = 0

FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/ThreadDetailsFragment.kt

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -858,30 +858,41 @@ class ThreadDetailsFragment : BaseFragment<FragmentThreadDetailsBinding>(), Prog
858858
.collect { workInfoList ->
859859
val workInfo = workInfoList.firstOrNull() ?: return@collect
860860
val messageUID = workInfo.progress.getLong(UploadDraftsWorker.EXTRA_KEY_MESSAGE_UID, -1)
861+
val threadId = workInfo.progress.getLong(UploadDraftsWorker.EXTRA_KEY_THREAD_ID, -1)
861862
val state = workInfo.progress.getInt(UploadDraftsWorker.EXTRA_KEY_STATE, -1)
863+
val currentThreadId = threadDetailsViewModel.threadMessageEntityFlow.value?.threadId
862864

863865
val message = messagesInThreadListAdapter.currentList.firstOrNull {
864866
it is MessagesInThreadListAdapter.Message && it.messageEntity.uid == messageUID
865867
} as? MessagesInThreadListAdapter.Message
866868

867-
if (message != null) {
868-
when (state) {
869-
UploadDraftsWorker.STATE_UPLOADING -> {
870-
threadDetailsViewModel.onMessageChanged(
871-
message.copy(hasActiveDraftUploadingProcess = true)
872-
)
873-
}
869+
when {
870+
message != null -> {
871+
when (state) {
872+
UploadDraftsWorker.STATE_UPLOADING -> {
873+
threadDetailsViewModel.onMessageChanged(
874+
message.copy(hasActiveDraftUploadingProcess = true)
875+
)
876+
}
874877

875-
UploadDraftsWorker.STATE_UPLOAD_COMPLETED -> {
876-
threadDetailsViewModel.loadMessages(silentUpdate = true)
878+
UploadDraftsWorker.STATE_UPLOAD_COMPLETED -> {
879+
threadDetailsViewModel.loadMessages(silentUpdate = true)
880+
}
877881
}
878882
}
879-
} else if (state == UploadDraftsWorker.STATE_COMMON_UPLOAD_COMPLETED) {
880-
if (messagesInThreadListAdapter.currentList.any {
881-
it is MessagesInThreadListAdapter.Message && it.hasActiveDraftUploadingProcess
882-
}) {
883+
884+
threadId == currentThreadId
885+
&& state == UploadDraftsWorker.STATE_UPLOAD_COMPLETED -> {
883886
threadDetailsViewModel.loadMessages(silentUpdate = true)
884887
}
888+
889+
state == UploadDraftsWorker.STATE_COMMON_UPLOAD_COMPLETED -> {
890+
if (messagesInThreadListAdapter.currentList.any {
891+
it is MessagesInThreadListAdapter.Message && it.hasActiveDraftUploadingProcess
892+
}) {
893+
threadDetailsViewModel.loadMessages(silentUpdate = true)
894+
}
895+
}
885896
}
886897
}
887898
}
@@ -891,10 +902,22 @@ class ThreadDetailsFragment : BaseFragment<FragmentThreadDetailsBinding>(), Prog
891902
.getWorkInfosForUniqueWorkFlow(MessagesSenderWorker.NAME)
892903
.collect { workInfoList ->
893904
val workInfo = workInfoList.firstOrNull() ?: return@collect
905+
val threadIdOfSentMessage =
906+
workInfo.progress.getLong(MessagesSenderWorker.EXTRA_KEY_THREAD_ID_OF_SENT_MESSAGE, -1)
894907
val draftId = workInfo.progress.getString(MessagesSenderWorker.EXTRA_KEY_ID_OF_SENT_DRAFT)
895-
?: return@collect
896908

897-
deleteDraftFromLocalCache(draftId)
909+
when {
910+
!draftId.isNullOrEmpty() -> {
911+
deleteDraftFromLocalCache(draftId)
912+
}
913+
914+
threadIdOfSentMessage != -1L -> {
915+
val currentThreadId = threadDetailsViewModel.threadMessageEntityFlow.value?.threadId
916+
if (currentThreadId == threadIdOfSentMessage) {
917+
threadDetailsViewModel.loadMessages(silentUpdate = true)
918+
}
919+
}
920+
}
898921
}
899922
}
900923
}

0 commit comments

Comments
 (0)