Skip to content

Commit ccbcd1e

Browse files
LunarXKevinBoulongne
authored andcommitted
feat: Hide snoozed folder if empty
1 parent c4397ea commit ccbcd1e

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

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

+5
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,17 @@ val inboxRefreshStrategy = object : DefaultRefreshStrategy {
4141
}
4242
}
4343

44+
val scheduledDraftRefreshStrategy = object : DefaultRefreshStrategy {
45+
override fun shouldHideEmptyFolder(): Boolean = true
46+
}
47+
4448
val snoozeRefreshStrategy = object : DefaultRefreshStrategy {
4549
override fun queryFolderThreads(folderId: String, realm: TypedRealm): List<Thread> {
4650
return ThreadController.getInboxThreadsWithSnoozeFilter(withSnooze = true, realm = realm)
4751
}
4852

4953
override fun otherFolderRolesToQueryThreads(): List<Folder.FolderRole> = listOf(Folder.FolderRole.INBOX)
54+
override fun shouldHideEmptyFolder(): Boolean = true
5055

5156
override fun getMessageFromShortUid(shortUid: String, folderId: String, realm: TypedRealm): Message? {
5257
val inboxId = FolderController.getFolder(Folder.FolderRole.INBOX, realm)?.id ?: return null

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

+12-4
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,10 @@ class RefreshController @Inject constructor(
560560
}
561561
}
562562

563-
private inline fun <reified T : MessageFlags> getMessagesUidsDelta(folderId: String, previousCursor: String): ActivitiesResult<T>? {
563+
private inline fun <reified T : MessageFlags> getMessagesUidsDelta(
564+
folderId: String,
565+
previousCursor: String,
566+
): ActivitiesResult<T>? {
564567
return with(ApiRepository.getMessagesUidsDelta<T>(mailbox.uuid, folderId, previousCursor, okHttpClient)) {
565568
if (!isSuccess()) throwErrorAsException()
566569
return@with data
@@ -650,18 +653,23 @@ class RefreshController @Inject constructor(
650653

651654
getUpToDateFolder(folderId).let { currentFolder ->
652655
currentFolder.threads.replaceContent(list = allCurrentFolderThreads)
653-
if (currentFolder.role == FolderRole.SCHEDULED_DRAFTS) currentFolder.isDisplayed = currentFolder.threads.isNotEmpty()
656+
if (currentFolderRefreshStrategy.shouldHideEmptyFolder()) {
657+
currentFolder.isDisplayed = currentFolder.threads.isNotEmpty()
658+
}
654659
extraFolderUpdates?.invoke(currentFolder)
655660
}
656661

657662
// Some folders such as inbox and snooze require to query again the other folder's threads as well. For example, if a
658663
// message uid is returned as "added" or "deleted" in the snooze folder, it should disappear or appear from inbox as well.
659664
currentFolderRefreshStrategy.otherFolderRolesToQueryThreads().forEach { folderRole ->
660665
getUpToDateFolder(folderRole)?.let { otherFolder ->
661-
val allOtherFolderThreads = otherFolder.refreshStrategy().queryFolderThreads(folderId, realm = this)
666+
val otherFolderRefreshStrategy = otherFolder.refreshStrategy()
667+
val allOtherFolderThreads = otherFolderRefreshStrategy.queryFolderThreads(folderId, realm = this)
662668
otherFolder.threads.replaceContent(list = allOtherFolderThreads)
663669

664-
if (otherFolder.role == FolderRole.SCHEDULED_DRAFTS) otherFolder.isDisplayed = otherFolder.threads.isNotEmpty()
670+
if (otherFolderRefreshStrategy.shouldHideEmptyFolder()) {
671+
otherFolder.isDisplayed = otherFolder.threads.isNotEmpty()
672+
}
665673
}
666674
}
667675
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import kotlinx.coroutines.ensureActive
3232
interface RefreshStrategy {
3333
fun queryFolderThreads(folderId: String, realm: TypedRealm): List<Thread>
3434
fun otherFolderRolesToQueryThreads(): List<Folder.FolderRole>
35+
fun shouldHideEmptyFolder(): Boolean
3536

3637
fun getMessageFromShortUid(shortUid: String, folderId: String, realm: TypedRealm): Message?
3738

@@ -72,6 +73,7 @@ interface DefaultRefreshStrategy : RefreshStrategy {
7273
}
7374

7475
override fun otherFolderRolesToQueryThreads(): List<Folder.FolderRole> = emptyList()
76+
override fun shouldHideEmptyFolder(): Boolean = false
7577

7678
override fun getMessageFromShortUid(shortUid: String, folderId: String, realm: TypedRealm): Message? {
7779
return MessageController.getMessage(shortUid.toLongUid(folderId), realm)

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

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ class Folder : RealmObject, Cloneable {
149149
fun refreshStrategy(): RefreshStrategy = when (role) {
150150
FolderRole.INBOX -> inboxRefreshStrategy
151151
FolderRole.SNOOZED -> snoozeRefreshStrategy
152+
FolderRole.SCHEDULED_DRAFTS -> scheduledDraftRefreshStrategy
152153
else -> defaultRefreshStrategy
153154
}
154155

0 commit comments

Comments
 (0)