Skip to content

Commit f5f0d8a

Browse files
committed
prepare language preference
1 parent 9148aad commit f5f0d8a

4 files changed

Lines changed: 32 additions & 7 deletions

File tree

composeApp/src/commonMain/kotlin/dev/datlag/mimasu/ui/navigation/detail/show/ShowContent.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ import dev.datlag.mimasu.ui.navigation.detail.show.components.ShowSeason
3939
import dev.datlag.mimasu.ui.other.ShowState
4040
import dev.datlag.mimasu.ui.viewmodel.ShowViewModel
4141
import dev.datlag.mimasu.ui.viewmodel.VideoViewModel
42+
import dev.datlag.tooling.compose.LaunchedDefault
4243
import kotlinx.collections.immutable.ImmutableList
4344
import kotlinx.collections.immutable.persistentMapOf
4445
import kotlinx.collections.immutable.toImmutableList
46+
import kotlinx.coroutines.delay
47+
import kotlin.time.Duration.Companion.seconds
4548

4649
@Composable
4750
fun ShowContent(
@@ -63,6 +66,14 @@ fun ShowContent(
6366
onLogin: () -> Unit
6467
) {
6568
var episodeDialogVisible by remember { mutableStateOf(false) }
69+
var episodeClickBlocked by remember { mutableStateOf(false) }
70+
71+
LaunchedDefault(episodeClickBlocked) {
72+
if (episodeClickBlocked) {
73+
delay(10.seconds)
74+
episodeClickBlocked = false
75+
}
76+
}
6677

6778
if (episodeDialogVisible) {
6879
EpisodeDialog(
@@ -180,6 +191,7 @@ fun ShowContent(
180191
seasonNumber = seasonState.season.seasonNumber,
181192
showAvailability = showAvailability,
182193
loggedIn = loggedIn,
194+
clickBlocked = episodeClickBlocked,
183195
modifier = Modifier.fillParentMaxWidth().padding(4.dp),
184196
onDialog = {
185197
episodeDialogVisible = true
@@ -201,7 +213,10 @@ fun ShowContent(
201213
markAsUnWatched = {
202214
markAsUnWatched(episode)
203215
},
204-
onLogin = onLogin
216+
onLogin = onLogin,
217+
blockClick = {
218+
episodeClickBlocked = it
219+
}
205220
)
206221
}
207222
}

composeApp/src/commonMain/kotlin/dev/datlag/mimasu/ui/navigation/detail/show/components/EpisodeItem.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import dev.datlag.mimasu.ui.other.ShowState
4545
import dev.datlag.mimasu.ui.other.rememberEpisodeStream
4646
import dev.datlag.tooling.Platform
4747
import dev.datlag.tooling.async.VirtualIO
48+
import dev.datlag.tooling.async.launchVirtualIO
4849
import dev.datlag.tooling.async.withMainContext
4950
import dev.datlag.tooling.compose.platform.colorScheme
5051
import dev.datlag.tooling.compose.platform.shapes
@@ -64,12 +65,14 @@ fun EpisodeItem(
6465
seasonNumber: Int?,
6566
showAvailability: ShowState,
6667
loggedIn: Boolean,
68+
clickBlocked: Boolean,
6769
modifier: Modifier = Modifier,
6870
onDialog: () -> Unit,
6971
onStream: (Extension.Response) -> Unit,
7072
markAsWatched: suspend () -> Unit,
7173
markAsUnWatched: suspend () -> Unit,
72-
onLogin: () -> Unit
74+
onLogin: () -> Unit,
75+
blockClick: (Boolean) -> Unit
7376
) {
7477
val episodeStream = rememberEpisodeStream(
7578
showState = showAvailability,
@@ -93,8 +96,13 @@ fun EpisodeItem(
9396
modifier = modifier,
9497
isRevealed = isRevealed,
9598
onCardClick = {
96-
scope.launch(Dispatchers.VirtualIO) {
97-
val stream = episodeStream.getStream() ?: return@launch onDialog()
99+
scope.launchVirtualIO {
100+
blockClick(true)
101+
val stream = episodeStream.getStream() ?: return@launchVirtualIO run {
102+
blockClick(false)
103+
onDialog()
104+
}
105+
blockClick(false)
98106

99107
withMainContext {
100108
onStream(stream)
@@ -106,7 +114,7 @@ fun EpisodeItem(
106114
contentColor = Platform.colorScheme().onBackground
107115
),
108116
revealedCardColors = CardDefaults.cardColors(),
109-
cardEnabled = !isRevealed && when (val current = episodeStreamState) {
117+
cardEnabled = !clickBlocked && !isRevealed && when (val current = episodeStreamState) {
110118
is EpisodeStreamState.Available -> current.state
111119
else -> current !is EpisodeStreamState.Unavailable
112120
},
@@ -116,7 +124,7 @@ fun EpisodeItem(
116124
onClick = {
117125
isRevealed = false
118126
if (loggedIn) {
119-
scope.launch(Dispatchers.VirtualIO) {
127+
scope.launchVirtualIO {
120128
if (watched) {
121129
markAsUnWatched()
122130
} else {

extension/src/commonMain/kotlin/dev/datlag/mimasu/extension/model/Show.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ sealed interface Show {
3838
val numberOfNormalSeasons: Int? = null,
3939
val hasSpecialSeason: Boolean? = null,
4040
val season: Int? = null,
41+
val appLocale: String? = null
4142
) : Show {
4243

4344
@OptIn(ExperimentalSerializationApi::class)

ui/src/androidMain/kotlin/dev/datlag/mimasu/ui/other/ShowWatchInfo.android.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ actual fun rememberEpisodeStream(
7474
Extension.EpisodeRequest(
7575
episodeNumber = episode.episodeNumber,
7676
episodeTitle = episode.name,
77-
season = seasonNumber
77+
season = seasonNumber,
78+
appLocale = Locale.current.toLanguageTag()
7879
)
7980
}
8081

0 commit comments

Comments
 (0)