Skip to content

Commit 455b4b0

Browse files
committed
feat: Save summary in realm
1 parent 7d9324c commit 455b4b0

4 files changed

Lines changed: 35 additions & 0 deletions

File tree

app/src/main/java/com/infomaniak/mail/data/models/message/Body.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ class Body : EmbeddedRealmObject {
3333
@Serializable(FlatteningSubBodiesSerializer::class)
3434
@SerialName("subBody")
3535
var subBodies = realmListOf<SubBody>()
36+
var summary: String? = null
3637
//endregion
3738

39+
val hasSummary: Boolean get() = summary != null
40+
3841
companion object
3942
}

app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadAdapter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ class ThreadAdapter(
541541
closeButton.setOnClickListener {
542542
threadAdapterState.aiSummaryStateMap.remove(messageUid)
543543
root.isVisible = false
544+
threadAdapterCallbacks?.onAiSummaryClose?.invoke(messageUid)
544545
}
545546

546547
informationButton.setOnClickListener {
@@ -1200,6 +1201,7 @@ class ThreadAdapter(
12001201
var onAddEmoji: ((emoji: String, messageUid: String) -> Unit)? = null,
12011202
var showEmojiDetails: ((messageUid: String, emoji: String) -> Unit)? = null,
12021203
var onAiSummaryRetry: ((messageUid: String) -> Unit)? = null,
1204+
var onAiSummaryClose: ((messageUid: String) -> Unit)? = null,
12031205
var showSnackbarRetry: (() -> Unit)? = null,
12041206
)
12051207

app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadFragment.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ class ThreadFragment : Fragment(), PickerEmojiObserver {
446446
}
447447
},
448448
onAiSummaryRetry = { messageUid -> doAiAction(messageUid, AiAction.SUMMARY) },
449+
onAiSummaryClose = { messageUid -> threadViewModel.removeSummary(messageUid)},
449450
showSnackbarRetry = ::createSnackBarRetry,
450451
),
451452
)
@@ -1026,6 +1027,12 @@ class ThreadFragment : Fragment(), PickerEmojiObserver {
10261027
val wasLoaderShown = currentState is AiProcessState.Retrying && currentState.isLoaderVisible
10271028

10281029
val finalState = mapApiResultToState(result, isRetry, wasLoaderShown)
1030+
1031+
val summaryContent = result.data
1032+
if (summaryContent != null) {
1033+
threadViewModel.saveSummary(messageUid,summaryContent)
1034+
}
1035+
10291036
updateAiProcessState(messageUid, aiAction, finalState)
10301037
}
10311038

app/src/main/java/com/infomaniak/mail/ui/main/thread/ThreadViewModel.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,12 +409,35 @@ class ThreadViewModel @Inject constructor(
409409
val isNotAlreadySplit = !threadState.cachedSplitBodies.contains(message.uid)
410410
if (isNotAlreadySplit) threadState.cachedSplitBodies[message.uid] = MessageBodyUtils.splitContentAndQuote(it)
411411
splitBody = threadState.cachedSplitBodies[message.uid]
412+
413+
it.summary?.let { summaryText ->
414+
if (threadState.aiSummaryStateMap[message.uid] == null) {
415+
threadState.aiSummaryStateMap[message.uid] =
416+
AiProcessState.Success(content = summaryText)
417+
}
418+
}
412419
}
413420
}
414421

415422
return@withContext message
416423
}
417424

425+
fun saveSummary(messageUid: String, summaryText: String) = viewModelScope.launch(ioCoroutineContext) {
426+
mailboxContentRealm().write {
427+
MessageController.updateMessageBlocking(messageUid, realm = this) { localMessage ->
428+
localMessage?.body?.summary = summaryText
429+
}
430+
}
431+
}
432+
433+
fun removeSummary(messageUid: String) = viewModelScope.launch(ioCoroutineContext) {
434+
mailboxContentRealm().write {
435+
MessageController.updateMessageBlocking(messageUid, realm = this) { localMessage ->
436+
localMessage?.body?.summary = null
437+
}
438+
}
439+
}
440+
418441
private fun markThreadAsSeen(thread: Thread) = viewModelScope.launch(ioCoroutineContext) {
419442
sharedUtils.markAsSeen(mailbox(), listOf(thread))
420443
}

0 commit comments

Comments
 (0)