Skip to content

Commit

Permalink
improve loading performance
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed Dec 13, 2023
1 parent 17ee60d commit c732a2e
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import dev.datlag.burningseries.shared.SharedRes
import dev.datlag.burningseries.shared.common.*
import dev.datlag.burningseries.shared.ui.theme.TopLeftBottomRightRoundedShape
import dev.icerock.moko.resources.compose.stringResource
import kotlin.math.max
import kotlin.math.roundToInt

@Composable
Expand All @@ -39,10 +40,10 @@ fun EpisodeItem(
val enabled = content.hosters.isNotEmpty()

val length = remember(dbEpisode) {
dbEpisode?.length ?: 0L
max(dbEpisode?.length ?: 0L, 0L)
}
val progress = remember(dbEpisode) {
dbEpisode?.progress ?: 0L
max(dbEpisode?.progress ?: 0L, 0L)
}
val isFinished = remember(length, progress) {
if (length > 0L && progress > 0L) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,14 @@ package dev.datlag.burningseries.model.state
import dev.datlag.burningseries.model.Series

sealed interface SeriesState {
data class Loading(val href: String) : SeriesState
data class Success(val series: Series, val onDeviceReachable: Boolean) : SeriesState
data class Error(val msg: String) : SeriesState

val href: String

data class Loading(override val href: String) : SeriesState
data class Success(val series: Series, val onDeviceReachable: Boolean) : SeriesState {
override val href: String = series.href
}
data class Error(override val href: String) : SeriesState
}

sealed interface SeriesAction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@ class HomeStateMachine(
private val json: Json,
private val wrapApi: WrapAPI,
private val wrapApiKey: String?
) : FlowReduxStateMachine<HomeState, HomeAction>(initialState = HomeState.Loading) {
) : FlowReduxStateMachine<HomeState, HomeAction>(initialState = NetworkStateSaver.initialHomeState) {
init {
spec {
inState<HomeState.Loading> {
onEnterEffect {
NetworkStateSaver.initialHomeState = it
}
onEnter { state ->
try {
val loadedHome = BurningSeries.getHome(client) ?: run {
Expand All @@ -39,8 +42,15 @@ class HomeStateMachine(
}
}
}

inState<HomeState.Success> {
onEnterEffect {
NetworkStateSaver.initialHomeState = it
}
}
inState<HomeState.Error> {
onEnterEffect {
NetworkStateSaver.initialHomeState = it
}
on<HomeAction.Retry> { _, state ->
state.override { HomeState.Loading }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package dev.datlag.burningseries.network.state

import dev.datlag.burningseries.model.state.*
import dev.gitlive.firebase.auth.FirebaseUser

data object NetworkStateSaver {

var firebaseUser: FirebaseUser? = null

val mongoHosterMap: MutableMap<String, List<String>> = mutableMapOf()

// ignore EpisodeState as it's not provided as singleton
// ignore SaveState as it should reset after clearing view
// ignore SeriesState as it should reset after clearing view
var initialHomeState: HomeState = HomeState.Loading
var initialReleaseState: ReleaseState = ReleaseState.Loading
var initialSearchState: SearchState = SearchState.Loading
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
@OptIn(ExperimentalCoroutinesApi::class)
class ReleaseStateMachine(
private val gitHub: GitHub
) : FlowReduxStateMachine<ReleaseState, Nothing>(initialState = ReleaseState.Loading) {
) : FlowReduxStateMachine<ReleaseState, Nothing>(initialState = NetworkStateSaver.initialReleaseState) {
init {
spec {
inState<ReleaseState.Loading> {
onEnterEffect {
NetworkStateSaver.initialReleaseState = it
}
onEnter { state ->
try {
val releases = gitHub.getReleases(owner = "DatL4g", repo = "Burning-Series")
Expand All @@ -27,6 +30,16 @@ class ReleaseStateMachine(
}
}
}
inState<ReleaseState.Success> {
onEnterEffect {
NetworkStateSaver.initialReleaseState = it
}
}
inState<ReleaseState.Error> {
onEnterEffect {
NetworkStateSaver.initialReleaseState = it
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@ class SearchStateMachine(
private val wrapApiKey: String?,
private val saveToDB: (SearchState.Success) -> Unit,
private val loadFromDB: suspend () -> List<Genre>
) : FlowReduxStateMachine<SearchState, SearchAction>(initialState = SearchState.Loading) {
) : FlowReduxStateMachine<SearchState, SearchAction>(initialState = NetworkStateSaver.initialSearchState) {
init {
spec {
inState<SearchState.Loading> {
onEnterEffect {
NetworkStateSaver.initialSearchState = it
}
onEnter { state ->
try {
val loadedClient = suspendCatching {
Expand Down Expand Up @@ -61,11 +64,15 @@ class SearchStateMachine(

inState<SearchState.Success> {
onEnterEffect {
NetworkStateSaver.initialSearchState = it
saveToDB(it)
}
}

inState<SearchState.Error> {
onEnterEffect {
NetworkStateSaver.initialSearchState = it
}
on<SearchAction.Retry> { _, state ->
state.override { SearchState.Loading }
}
Expand Down

0 comments on commit c732a2e

Please sign in to comment.