Skip to content

Commit 2f3f3ae

Browse files
Delete Thread in Realm if it's empty and we're trying to display it in ThreadsList
1 parent aea89e1 commit 2f3f3ae

File tree

6 files changed

+23
-0
lines changed

6 files changed

+23
-0
lines changed

app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/ThreadController.kt

+6
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ class ThreadController @Inject constructor(
159159
}
160160
}
161161
}
162+
163+
fun deleteThread(threadUid: String) {
164+
mailboxContentRealm().writeBlocking {
165+
delete(getThreadQuery(threadUid, realm = this))
166+
}
167+
}
162168
//endregion
163169

164170
companion object {

app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt

+4
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,10 @@ class MainViewModel @Inject constructor(
10471047
snackbarManager.postValue(appContext.getString(snackbarTitleRes))
10481048
}
10491049

1050+
fun deleteThreadInRealm(threadUid: String) = viewModelScope.launch(ioCoroutineContext) {
1051+
threadController.deleteThread(threadUid)
1052+
}
1053+
10501054
private fun shouldAutoAdvance(message: Message?, threadsUids: List<String>): Boolean {
10511055
val isWorkingWithThread = message == null
10521056
return isWorkingWithThread || threadHasOnlyOneMessageLeftInCurrentFolder(threadsUids.first())

app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt

+8
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,14 @@ class ThreadListAdapter @Inject constructor(
183183

184184
private fun CardviewThreadItemBinding.displayThread(thread: Thread, position: Int) {
185185

186+
// If we are trying to display an empty Thread, don't. Just delete it.
187+
if (thread.messages.isEmpty()) {
188+
// TODO: Find why we are sometimes displaying empty Threads, and fix it instead of just deleting them.
189+
// It's possibly because we are out of sync, and the situation will resolve itself shortly? ¯\_(ツ)_/¯
190+
threadListAdapterCallback?.deleteThreadInRealm?.invoke(thread.uid)
191+
return
192+
}
193+
186194
refreshCachedSelectedPosition(thread.uid, position) // If item changed position, update cached position.
187195
setupThreadDensityDependentUi()
188196
displayAvatar(thread)

app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapterCallback.kt

+1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ interface ThreadListAdapterCallback {
2525
var onFlushClicked: ((dialogTitle: String) -> Unit)?
2626
var onLoadMoreClicked: () -> Unit
2727
var onPositionClickedChanged: (position: Int, previousPosition: Int) -> Unit
28+
var deleteThreadInRealm: (threadUid: String) -> Unit
2829
}

app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
317317
}
318318

319319
override var onPositionClickedChanged: (Int, Int) -> Unit = ::updateAutoAdvanceNaturalThread
320+
321+
override var deleteThreadInRealm: (String) -> Unit = { threadUid -> mainViewModel.deleteThreadInRealm(threadUid) }
320322
},
321323
multiSelection = object : MultiSelectionListener<Thread> {
322324
override var isEnabled by mainViewModel::isMultiSelectOn

app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ class SearchFragment : TwoPaneFragment() {
172172
}
173173

174174
override var onPositionClickedChanged: (Int, Int) -> Unit = ::updateAutoAdvanceNaturalThread
175+
176+
override var deleteThreadInRealm: (String) -> Unit = { threadUid -> mainViewModel.deleteThreadInRealm(threadUid) }
175177
},
176178
)
177179

0 commit comments

Comments
 (0)