Skip to content

Commit bbb7ef7

Browse files
committed
migrate to new auto skip api
1 parent df7131c commit bbb7ef7

File tree

5 files changed

+18
-17
lines changed

5 files changed

+18
-17
lines changed

app/shared/app-data/src/commonMain/kotlin/data/network/AniApiProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
package me.him188.ani.app.data.network
1111

1212
import me.him188.ani.app.domain.foundation.ServerListFeatureConfig
13-
import me.him188.ani.client.apis.AutoSkipAniApi
1413
import me.him188.ani.client.apis.BangumiAniApi
1514
import me.him188.ani.client.apis.BangumiOAuthAniApi
1615
import me.him188.ani.client.apis.DanmakuAniApi
16+
import me.him188.ani.client.apis.EpisodesAniApi
1717
import me.him188.ani.client.apis.PeerFilterRuleAniApi
1818
import me.him188.ani.client.apis.ScheduleAniApi
1919
import me.him188.ani.client.apis.SubjectRelationsAniApi
@@ -37,7 +37,7 @@ class AniApiProvider(
3737
val subjectRelationsApi = ApiInvoker(client) { SubjectRelationsAniApi(baseurl, it) }
3838
val danmakuApi = ApiInvoker(client) { DanmakuAniApi(baseurl, it) }
3939
val pfRuleApi = ApiInvoker(client) { PeerFilterRuleAniApi(baseurl, it) }
40-
val autoSkipApi = ApiInvoker(client) { AutoSkipAniApi(baseurl, it) }
40+
val episodesApi = ApiInvoker(client) { EpisodesAniApi(baseurl, it) }
4141

4242
val bangumiApi = ApiInvoker(client) { BangumiAniApi(baseurl, it) }
4343
val subjectApi = ApiInvoker(client) { SubjectsAniApi(baseurl, it) }

app/shared/app-data/src/commonMain/kotlin/data/network/AutoSkipRepository.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import kotlinx.coroutines.sync.Mutex
1616
import kotlinx.coroutines.sync.withLock
1717
import kotlinx.coroutines.withContext
1818
import me.him188.ani.app.data.repository.Repository
19-
import me.him188.ani.client.apis.AutoSkipAniApi
20-
import me.him188.ani.client.models.AutoSkipReportRequest
19+
import me.him188.ani.client.apis.EpisodesAniApi
20+
import me.him188.ani.client.models.AniReportAutoSkipRequest
2121
import me.him188.ani.utils.coroutines.IO_
2222
import me.him188.ani.utils.ktor.ApiInvoker
2323
import kotlin.coroutines.CoroutineContext
@@ -27,7 +27,7 @@ import kotlin.time.Clock
2727
* Client-side helper for AutoSkip reporting and querying rules.
2828
*/
2929
class AutoSkipRepository(
30-
private val api: ApiInvoker<AutoSkipAniApi>,
30+
private val api: ApiInvoker<EpisodesAniApi>,
3131
private val ioDispatcher: CoroutineContext = Dispatchers.IO_,
3232
) : Repository() {
3333

@@ -38,17 +38,17 @@ class AutoSkipRepository(
3838
* Report a manual skip action.
3939
* Client-side throttling: at most 2 reports per episode, and at most once per 10 minutes per episode.
4040
*/
41-
suspend fun reportSkip(episodeId: Int, mediaSourceId: String, timeSeconds: Int) = lock.withLock {
41+
suspend fun reportSkip(episodeId: Int, mediaSourceId: String, timeSeconds: Int, timeMillis: Long) = lock.withLock {
4242
val now = Clock.System.now().toEpochMilliseconds()
4343
val state = reportStates.getOrPut(episodeId) { EpisodeReportState(0, 0L) }
4444
if (state.count >= 2) return
4545
if (now - state.lastReportAt < TEN_MINUTES_MS) return
4646

4747
withContext(ioDispatcher) {
4848
api {
49-
reportSkip(
49+
this.reportAutoSkip(
5050
episodeId.toLong(),
51-
AutoSkipReportRequest(mediaSourceId = mediaSourceId, time = timeSeconds),
51+
AniReportAutoSkipRequest(mediaSourceId = mediaSourceId, time = timeSeconds, timeMs = timeMillis),
5252
).body()
5353
}
5454
}
@@ -59,9 +59,9 @@ class AutoSkipRepository(
5959
/**
6060
* Fetch autoskip rules for an episode. Emits once.
6161
*/
62-
fun rulesFlow(episodeId: Int): Flow<List<Int>> = flow {
62+
fun rulesFlow(episodeId: Int): Flow<List<Long>> = flow {
6363
val rules = withContext(ioDispatcher) {
64-
api { getAutoSkipRules(episodeId.toLong()).body().rules.map { it.time } }
64+
api { this.getAutoSkipRules(episodeId.toLong()).body().rules.map { it.timeMs } }
6565
}
6666
emit(rules)
6767
}

app/shared/application/src/commonMain/kotlin/platform/CommonKoinModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ private fun KoinApplication.otherModules(getContext: () -> Context, coroutineSco
331331
single<AnimeScheduleService> { AnimeScheduleService(get<AniApiProvider>().scheduleApi) }
332332
single<TrendsRepository> { TrendsRepository(get<AniApiProvider>().trendsApi, get<BangumiClient>().nextTrendingApi) }
333333
single<RecommendationRepository> { RecommendationRepository(get<TrendsRepository>()) }
334-
single<AutoSkipRepository> { AutoSkipRepository(get<AniApiProvider>().autoSkipApi) }
334+
single<AutoSkipRepository> { AutoSkipRepository(get<AniApiProvider>().episodesApi) }
335335

336336
single<DanmakuManager> {
337337
DanmakuManager(

app/shared/src/commonMain/kotlin/ui/subject/episode/EpisodeViewModel.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ class EpisodeViewModel(
669669
autoSkipRepository.rulesFlow(session.episodeId)
670670
}.combine(
671671
player.mediaProperties.mapNotNull { it?.durationMillis?.milliseconds },
672-
) { times, videoLength ->
672+
) { millisecondTimes, videoLength ->
673673
val durationMillis = when {
674674
videoLength > 20.minutes -> 85_000L
675675
videoLength > 10.minutes -> 55_000L
@@ -678,10 +678,10 @@ class EpisodeViewModel(
678678
if (durationMillis == 0L) {
679679
emptyList()
680680
} else {
681-
times.mapIndexed { index, t ->
682-
val name = if (times.size == 2) {
681+
millisecondTimes.mapIndexed { index, t ->
682+
val name = if (millisecondTimes.size == 2) {
683683
val anotherIndex = if (index == 0) 1 else 0
684-
if (t <= times[anotherIndex]) {
684+
if (t <= millisecondTimes[anotherIndex]) {
685685
"OP"
686686
} else {
687687
"ED"
@@ -692,7 +692,7 @@ class EpisodeViewModel(
692692
Chapter(
693693
name,
694694
durationMillis,
695-
t.toLong() * 1000L,
695+
t,
696696
)
697697
}
698698
}
@@ -943,7 +943,7 @@ class EpisodeViewModel(
943943
logger.warn { "Refusing to report skip 85 at invalid time ${timeSeconds}s" }
944944
return@launchInBackground
945945
}
946-
autoSkipRepository.reportSkip(episodeId, mediaSourceId, timeSeconds)
946+
autoSkipRepository.reportSkip(episodeId, mediaSourceId, timeSeconds, currentPositionMillis)
947947
}
948948
}
949949

client/src/commonMain/kotlin/me/him188/ani/client/models/AutoSkipModels.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@ data class AutoSkipRules(
2525
data class AutoSkipReportRequest(
2626
val mediaSourceId: String,
2727
val time: Int,
28+
val timeMillis: Long,
2829
)
2930

0 commit comments

Comments
 (0)