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 @@ -3,6 +3,8 @@ package dev.dimension.flare.data.datastore
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.core.okio.OkioStorage
import dev.dimension.flare.data.datastore.model.ComposeConfigData
import dev.dimension.flare.data.datastore.model.ComposeConfigDataSerializer
import dev.dimension.flare.data.datastore.model.FlareConfig
import dev.dimension.flare.data.datastore.model.FlareConfigSerializer
import dev.dimension.flare.data.datastore.model.GuestData
Expand Down Expand Up @@ -39,4 +41,17 @@ internal class AppDataStore(
),
)
}

val composeConfigData: DataStore<ComposeConfigData> by lazy {
DataStoreFactory.create(
storage =
OkioStorage(
fileSystem = FileSystem.SYSTEM,
serializer = ComposeConfigDataSerializer,
producePath = {
platformPathProducer.dataStoreFile("compose_config.pb")
},
),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package dev.dimension.flare.data.datastore.model

import androidx.datastore.core.okio.OkioSerializer
import dev.dimension.flare.ui.model.UiTimeline
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromByteArray
import kotlinx.serialization.encodeToByteArray
import kotlinx.serialization.protobuf.ProtoBuf
import okio.BufferedSink
import okio.BufferedSource

@Serializable
internal data class ComposeConfigData(
val visibility: UiTimeline.ItemContent.Status.TopEndContent.Visibility.Type =
UiTimeline.ItemContent.Status.TopEndContent.Visibility.Type.Public,
)

@OptIn(ExperimentalSerializationApi::class)
internal data object ComposeConfigDataSerializer : OkioSerializer<ComposeConfigData> {
override val defaultValue: ComposeConfigData
get() = ComposeConfigData()

override suspend fun readFrom(source: BufferedSource): ComposeConfigData = ProtoBuf.decodeFromByteArray(source.readByteArray())

override suspend fun writeTo(
t: ComposeConfigData,
sink: BufferedSink,
) {
sink.write(ProtoBuf.encodeToByteArray(t))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import dev.dimension.flare.ui.render.UiRichText
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentListOf
import kotlinx.serialization.Serializable

@Immutable
public data class UiTimeline internal constructor(
Expand Down Expand Up @@ -157,6 +158,7 @@ public data class UiTimeline internal constructor(
public data class Visibility internal constructor(
val visibility: Type,
) : TopEndContent() {
@Serializable
public enum class Type {
Public,
Home,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import dev.dimension.flare.data.datasource.microblog.AuthenticatedMicroblogDataS
import dev.dimension.flare.data.datasource.microblog.ComposeConfig
import dev.dimension.flare.data.datasource.microblog.ComposeData
import dev.dimension.flare.data.datasource.microblog.ComposeType
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.data.repository.AccountRepository
import dev.dimension.flare.data.repository.accountProvider
import dev.dimension.flare.data.repository.accountServiceProvider
Expand Down Expand Up @@ -51,6 +52,7 @@ public class ComposePresenter(
KoinComponent {
private val composeUseCase: ComposeUseCase by inject()
private val accountRepository: AccountRepository by inject()
private val appDataStore: AppDataStore by inject()

@Composable
override fun body(): ComposeState {
Expand Down Expand Up @@ -332,6 +334,11 @@ public class ComposePresenter(
var visibility by remember {
mutableStateOf(UiTimeline.ItemContent.Status.TopEndContent.Visibility.Type.Public)
}
LaunchedEffect(appDataStore.composeConfigData.data) {
appDataStore.composeConfigData.data.collect {
visibility = it.visibility
}
}
return object : VisibilityState {
override val visibility: UiTimeline.ItemContent.Status.TopEndContent.Visibility.Type
get() = visibility
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable
import dev.dimension.flare.common.InAppNotification
import dev.dimension.flare.common.Message
import dev.dimension.flare.data.datasource.microblog.ComposeData
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.data.repository.tryRun
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
Expand All @@ -13,6 +14,7 @@ import kotlinx.coroutines.withContext
internal class ComposeUseCase(
private val scope: CoroutineScope,
private val inAppNotification: InAppNotification,
private val appDataStore: AppDataStore,
) {
operator fun invoke(data: ComposeData) {
invoke(data) {
Expand All @@ -36,6 +38,11 @@ internal class ComposeUseCase(
scope.launch {
tryRun {
progress.invoke(ComposeProgressState.Progress(0, 1))
appDataStore.composeConfigData.updateData {
it.copy(
visibility = data.visibility,
)
}
data.account.dataSource.compose(
data = data,
progress = {
Expand Down
Loading