diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreenComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreenComponent.kt index a894b9f3..758058b3 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreenComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreenComponent.kt @@ -11,6 +11,7 @@ import com.arkivanov.decompose.router.slot.* import com.arkivanov.decompose.value.Value import com.arkivanov.essenty.backhandler.BackCallback import dev.datlag.burningseries.database.BurningSeries +import dev.datlag.burningseries.database.common.convertedNumber import dev.datlag.burningseries.model.BSUtil import dev.datlag.burningseries.model.Series import dev.datlag.burningseries.model.common.collectSafe @@ -116,12 +117,20 @@ class SeriesScreenComponent( if (seriesEpisodes == null) { null } else { - val maxWatchedEpisode = savedEpisodes.maxByOrNull { + val availableEpisodes = savedEpisodes.filter { + seriesEpisodes.any { s -> + s.href.equals(it.href, true) + } + } + + val maxWatchedEpisode = availableEpisodes.mapNotNull { if (it.progress > 0L || it.progress == Long.MIN_VALUE) { - it.number.toIntOrNull() ?: -1 + it } else { - -1 + null } + }.maxByOrNull { + it.convertedNumber ?: -1 } if (maxWatchedEpisode == null) { @@ -141,9 +150,9 @@ class SeriesScreenComponent( } val wantedNumber = if (isFinished) { - maxWatchedEpisode.number.toIntOrNull()?.plus(1)?.toString() + maxWatchedEpisode.convertedNumber?.plus(1)?.toString() } else { - maxWatchedEpisode.number + maxWatchedEpisode.convertedNumber?.toString() ?: maxWatchedEpisode.number } if (!wantedNumber.isNullOrBlank()) { @@ -151,7 +160,7 @@ class SeriesScreenComponent( it.number.equals(wantedNumber, true) } ?: seriesEpisodes.firstOrNull { val compareNumber = wantedNumber.toIntOrNull() ?: return@firstOrNull false - it.number.toIntOrNull() == compareNumber + it.convertedNumber == compareNumber } } else { null diff --git a/database/src/commonMain/kotlin/dev/datlag/burningseries/database/common/ExtendModels.kt b/database/src/commonMain/kotlin/dev/datlag/burningseries/database/common/ExtendModels.kt index 5481f504..a94491c3 100644 --- a/database/src/commonMain/kotlin/dev/datlag/burningseries/database/common/ExtendModels.kt +++ b/database/src/commonMain/kotlin/dev/datlag/burningseries/database/common/ExtendModels.kt @@ -7,6 +7,7 @@ import dev.datlag.burningseries.database.Series import dev.datlag.burningseries.model.BSUtil import dev.datlag.burningseries.model.Genre import dev.datlag.burningseries.model.algorithm.JaroWinkler +import dev.datlag.burningseries.model.common.getDigitsOrNull import dev.datlag.burningseries.model.Series as ModelSeries import dev.datlag.burningseries.model.Series.Episode as ModelEpisode import dev.datlag.burningseries.model.Series.Episode.Hoster as ModelHoster @@ -95,4 +96,7 @@ val Series.bestTitle } private val allTitlesCache = mutableMapOf>() -private val bestTitleCache = mutableMapOf() \ No newline at end of file +private val bestTitleCache = mutableMapOf() + +val Episode.convertedNumber: Int? + get() = this.number.toIntOrNull() ?: this.number.getDigitsOrNull()?.toIntOrNull() \ No newline at end of file diff --git a/model/src/commonMain/kotlin/dev/datlag/burningseries/model/Series.kt b/model/src/commonMain/kotlin/dev/datlag/burningseries/model/Series.kt index f0cbf3f5..66b68caf 100644 --- a/model/src/commonMain/kotlin/dev/datlag/burningseries/model/Series.kt +++ b/model/src/commonMain/kotlin/dev/datlag/burningseries/model/Series.kt @@ -84,6 +84,8 @@ data class Series( val episodeNumber: String = BSUtil.episodeNumberRegex.find(title)?.groupValues?.lastOrNull() ?: number val episodeTitle: String = BSUtil.episodeNumberRegex.replaceFirst(title, String()).trim().ifBlank { title } + val convertedNumber: Int? = number.toIntOrNull() ?: number.getDigitsOrNull()?.toIntOrNull() + @Serializable data class Hoster( @SerialName("title") val title: String,