Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import net.thunderbird.feature.mail.message.list.ui.state.Avatar

@Composable
fun MessageItemAvatar(
avatar: Avatar,
avatar: Avatar?,
showMessageAvatar: Boolean,
modifier: Modifier = Modifier,
onAvatarClick: () -> Unit,
Expand Down Expand Up @@ -60,6 +60,7 @@ fun MessageItemAvatar(
)

is Avatar.Monogram -> TextTitleSmall(text = avatar.value)
null -> Unit
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toImmutableMap
import kotlinx.collections.immutable.toPersistentMap
import net.thunderbird.core.common.state.builder.StateMachineBuilder
import net.thunderbird.feature.account.UnifiedAccountId
import net.thunderbird.feature.mail.message.list.ui.event.FolderEvent
import net.thunderbird.feature.mail.message.list.ui.event.MessageItemEvent
import net.thunderbird.feature.mail.message.list.ui.event.MessageListEvent
Expand Down Expand Up @@ -32,7 +33,7 @@ internal fun StateMachineBuilder<MessageListState, MessageListEvent>.globalState
}

transition<FolderEvent.FolderLoaded> { state, (folder) ->
state.withMetadata { copy(folder = folder) }
state.withMetadata { copy(folder = folder, showAccountIndicator = folder.account.id == UnifiedAccountId) }
}

transition<MessageItemEvent.SelectAll> { state, _ ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@ package net.thunderbird.feature.mail.message.list.internal.ui.state.sideeffect
import androidx.compose.ui.graphics.Color
import app.k9mail.legacy.mailstore.FolderRepository
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first
import net.thunderbird.core.logging.Logger
import net.thunderbird.feature.account.AccountId
import net.thunderbird.feature.account.UnifiedAccountId
import net.thunderbird.feature.account.profile.AccountProfileRepository
import net.thunderbird.feature.mail.folder.api.FolderType
import net.thunderbird.feature.mail.message.list.ui.effect.MessageListEffect
import net.thunderbird.feature.mail.message.list.ui.event.FolderEvent
import net.thunderbird.feature.mail.message.list.ui.event.MessageListEvent
Expand All @@ -22,18 +26,41 @@ internal class LoadFolderInformationSideEffect(
dispatch: suspend (MessageListEvent) -> Unit,
private val logger: Logger,
private val folderRepository: FolderRepository,
private val profileRepository: AccountProfileRepository,
) : MessageListStateSideEffectHandler(logger, dispatch) {
override fun accept(event: MessageListEvent, oldState: MessageListState, newState: MessageListState): Boolean =
accountIds.size == 1 && folderId != null && event == MessageListEvent.LoadConfigurations
event == MessageListEvent.LoadConfigurations

override suspend fun consume(
event: MessageListEvent,
oldState: MessageListState,
newState: MessageListState,
): ConsumeResult {
val accountId = accountIds.first()
val folderId = requireNotNull(folderId)
logger.verbose(TAG) { "$TAG.handle() called with: oldState = $oldState, newState = $newState" }
return if (folderId == null) {
consumeUnifiedFolder()
} else {
consumeSingleAccountFolder(folderId)
}
}

private suspend fun consumeUnifiedFolder(): ConsumeResult {
dispatch(
FolderEvent.FolderLoaded(
folder = Folder(
id = "unified_inbox",
account = Account(id = UnifiedAccountId, color = Color.Unspecified),
name = "Unified Inbox",
type = FolderType.INBOX,
),
),
)

return ConsumeResult.Consumed
}

private suspend fun consumeSingleAccountFolder(folderId: Long): ConsumeResult {
val accountId = accountIds.first()
val folder = folderRepository.getFolder(accountId, folderId)
return if (folder != null) {
val remoteFolder = if (!folder.isLocalOnly) {
Expand All @@ -42,11 +69,13 @@ internal class LoadFolderInformationSideEffect(
null
}

val profile = profileRepository.getById(accountId).first()
val color = profile?.color?.let(::Color) ?: Color.Unspecified
dispatch(
FolderEvent.FolderLoaded(
folder = Folder(
id = remoteFolder?.serverId ?: "local_folder",
account = Account(id = accountId, color = Color.Unspecified), // TODO: fetch color
account = Account(id = accountId, color = color),
name = folder.name,
type = folder.type,
),
Expand All @@ -63,6 +92,7 @@ internal class LoadFolderInformationSideEffect(
private val folderId: Long?,
private val logger: Logger,
private val folderRepository: FolderRepository,
private val profileRepository: AccountProfileRepository,
) : MessageListStateSideEffectHandlerFactory {
override fun create(
scope: CoroutineScope,
Expand All @@ -74,6 +104,7 @@ internal class LoadFolderInformationSideEffect(
dispatch = dispatch,
logger = logger,
folderRepository = folderRepository,
profileRepository = profileRepository,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ internal val messageListSideEffectsModule = module {
folderId = args.folderId,
logger = get(),
folderRepository = get(),
profileRepository = get(),
)
},
{ AllConfigurationsReadySideEffect.Factory(logger = get()) },
Expand Down
Loading
Loading