Skip to content

Commit acff04e

Browse files
authored
videoskip: migrate to kotlinx serialization (#2881)
1 parent 41a9f25 commit acff04e

5 files changed

Lines changed: 96 additions & 107 deletions

File tree

app/src/androidTest/java/com/lagradost/cloudstream3/SerializationClassTester.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class SerializationClassTester {
3030
println("Number of serializable classes: ${serializableClasses.size}")
3131

3232
serializableClasses.forEach { kClass ->
33-
val instance = Instancio.create(kClass.java)
33+
val instance = Instancio.of(kClass.java).withMaxDepth(10).create()
3434

3535
val jacksonJson = jacksonMapper.writeValueAsString(instance)
3636
val kotlinxJson = serializeWithKotlinx(kClass, instance)
@@ -61,7 +61,7 @@ class SerializationClassTester {
6161
println("Number of serializable classes: ${serializableClasses.size}")
6262

6363
serializableClasses.forEach { kClass ->
64-
val instance = Instancio.create(kClass.java)
64+
val instance = Instancio.of(kClass.java).withMaxDepth(10).create()
6565
// Convert to JSON to get example JSON object
6666
// We prefer jackson here because the app may have many jackson JSON strings in local storage
6767
val originalJson = jacksonMapper.writeValueAsString(instance)

app/src/main/java/com/lagradost/cloudstream3/utils/videoskip/AniSkip.kt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.lagradost.cloudstream3.utils.videoskip
22

3-
import com.fasterxml.jackson.databind.annotation.JsonSerialize
3+
import com.fasterxml.jackson.annotation.JsonProperty
44
import com.lagradost.cloudstream3.AnimeLoadResponse
55
import com.lagradost.cloudstream3.LoadResponse
66
import com.lagradost.cloudstream3.LoadResponse.Companion.getMalId
77
import com.lagradost.cloudstream3.TvType
88
import com.lagradost.cloudstream3.app
99
import com.lagradost.cloudstream3.ui.result.ResultEpisode
10+
import kotlinx.serialization.SerialName
11+
import kotlinx.serialization.Serializable
1012

1113
// taken from https://github.com/saikou-app/saikou/blob/3803f8a7a59b826ca193664d46af3a22bbc989f7/app/src/main/java/ani/saikou/others/AniSkip.kt
1214
// the following is GPLv3 code https://github.com/saikou-app/saikou/blob/main/LICENSE.md
@@ -47,22 +49,25 @@ class AniSkip : SkipAPI() {
4749
}
4850
}
4951

52+
@Serializable
5053
data class AniSkipResponse(
51-
@JsonSerialize val found: Boolean,
52-
@JsonSerialize val results: List<Stamp>?,
53-
@JsonSerialize val message: String?,
54-
@JsonSerialize val statusCode: Int
54+
@JsonProperty("found") @SerialName("found") val found: Boolean,
55+
@JsonProperty("results") @SerialName("results") val results: List<Stamp>?,
56+
@JsonProperty("message") @SerialName("message") val message: String?,
57+
@JsonProperty("statusCode") @SerialName("statusCode") val statusCode: Int,
5558
)
5659

60+
@Serializable
5761
data class Stamp(
58-
@JsonSerialize val interval: AniSkipInterval,
59-
@JsonSerialize val skipType: String,
60-
@JsonSerialize val skipId: String,
61-
@JsonSerialize val episodeLength: Double
62+
@JsonProperty("interval") @SerialName("interval") val interval: AniSkipInterval,
63+
@JsonProperty("skipType") @SerialName("skipType") val skipType: String,
64+
@JsonProperty("skipId") @SerialName("skipId") val skipId: String,
65+
@JsonProperty("episodeLength") @SerialName("episodeLength") val episodeLength: Double,
6266
)
6367

68+
@Serializable
6469
data class AniSkipInterval(
65-
@JsonSerialize val startTime: Double,
66-
@JsonSerialize val endTime: Double
70+
@JsonProperty("startTime") @SerialName("startTime") val startTime: Double,
71+
@JsonProperty("endTime") @SerialName("endTime") val endTime: Double,
6772
)
68-
}
73+
}

app/src/main/java/com/lagradost/cloudstream3/utils/videoskip/AnimeSkip.kt

Lines changed: 46 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import com.lagradost.cloudstream3.syncproviders.PlainAuthRepo
1717
import com.lagradost.cloudstream3.ui.result.ResultEpisode
1818
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
1919
import com.lagradost.cloudstream3.utils.AppUtils.toJson
20+
import kotlinx.serialization.SerialName
21+
import kotlinx.serialization.Serializable
2022
import java.math.BigInteger
2123
import java.util.concurrent.ConcurrentHashMap
2224
import java.security.MessageDigest
@@ -34,58 +36,51 @@ class AnimeSkipAuth : AuthAPI() {
3436
return BigInteger(1, md.digest(input.toByteArray())).toString(16).padStart(32, '0')
3537
}
3638

39+
@Serializable
3740
data class LoginRoot(
38-
@JsonProperty("data")
39-
val data: LoginData,
41+
@JsonProperty("data") @SerialName("data") val data: LoginData,
4042
)
4143

44+
@Serializable
4245
data class LoginData(
43-
@JsonProperty("login")
44-
val login: Login,
46+
@JsonProperty("login") @SerialName("login") val login: Login,
4547
)
4648

49+
@Serializable
4750
data class Login(
48-
@JsonProperty("authToken")
49-
val authToken: String,
50-
@JsonProperty("refreshToken")
51-
val refreshToken: String,
52-
@JsonProperty("account")
53-
val account: Account,
51+
@JsonProperty("authToken") @SerialName("authToken") val authToken: String,
52+
@JsonProperty("refreshToken") @SerialName("refreshToken") val refreshToken: String,
53+
@JsonProperty("account") @SerialName("account") val account: Account,
5454
)
5555

56+
@Serializable
5657
data class ApiRoot(
57-
@JsonProperty("data")
58-
val data: ApiData,
58+
@JsonProperty("data") @SerialName("data") val data: ApiData,
5959
)
6060

61+
@Serializable
6162
data class ApiData(
62-
@JsonProperty("myApiClients")
63-
val myApiClients: List<MyApiClient>,
63+
@JsonProperty("myApiClients") @SerialName("myApiClients") val myApiClients: List<MyApiClient>,
6464
)
6565

66+
@Serializable
6667
data class MyApiClient(
67-
@JsonProperty("id")
68-
val id: String,
68+
@JsonProperty("id") @SerialName("id") val id: String,
6969
)
7070

71+
@Serializable
7172
data class Account(
72-
@JsonProperty("profileUrl")
73-
val profileUrl: String,
74-
@JsonProperty("username")
75-
val username: String,
76-
@JsonProperty("email")
77-
val email: String,
73+
@JsonProperty("profileUrl") @SerialName("profileUrl") val profileUrl: String,
74+
@JsonProperty("username") @SerialName("username") val username: String,
75+
@JsonProperty("email") @SerialName("email") val email: String,
7876
)
7977

78+
@Serializable
8079
data class Payload(
81-
@JsonProperty("profileUrl")
82-
val profileUrl: String,
83-
@JsonProperty("username")
84-
val username: String,
85-
@JsonProperty("email")
86-
val email: String,
87-
@JsonProperty("clientId")
88-
val clientId: String,
80+
@JsonProperty("profileUrl") @SerialName("profileUrl") val profileUrl: String,
81+
@JsonProperty("username") @SerialName("username") val username: String,
82+
@JsonProperty("email") @SerialName("email") val email: String,
83+
@JsonProperty("clientId") @SerialName("clientId") val clientId: String,
8984
)
9085

9186
override suspend fun user(token: AuthToken?): AuthUser? {
@@ -187,52 +182,43 @@ class AnimeSkip : SkipAPI() {
187182
name?.replace(asciiRegex, "")?.lowercase()
188183
}
189184

185+
@Serializable
190186
data class Root(
191-
@JsonProperty("data")
192-
val data: Data,
187+
@JsonProperty("data") @SerialName("data") val data: Data,
193188
)
194189

190+
@Serializable
195191
data class Data(
196-
@JsonProperty("searchShows")
197-
val searchShows: List<SearchShow>,
192+
@JsonProperty("searchShows") @SerialName("searchShows") val searchShows: List<SearchShow>,
198193
)
199194

195+
@Serializable
200196
data class SearchShow(
201-
@JsonProperty("name")
202-
val name: String,
203-
@JsonProperty("originalName")
204-
val originalName: String?,
205-
@JsonProperty("seasonCount")
206-
val seasonCount: Long,
207-
@JsonProperty("episodeCount")
208-
val episodeCount: Long,
209-
@JsonProperty("baseDuration")
210-
val baseDuration: Double,
211-
@JsonProperty("episodes")
212-
val episodes: List<Episode>,
197+
@JsonProperty("name") @SerialName("name") val name: String,
198+
@JsonProperty("originalName") @SerialName("originalName") val originalName: String?,
199+
@JsonProperty("seasonCount") @SerialName("seasonCount") val seasonCount: Long,
200+
@JsonProperty("episodeCount") @SerialName("episodeCount") val episodeCount: Long,
201+
@JsonProperty("baseDuration") @SerialName("baseDuration") val baseDuration: Double,
202+
@JsonProperty("episodes") @SerialName("episodes") val episodes: List<Episode>,
213203
)
214204

205+
@Serializable
215206
data class Episode(
216-
@JsonProperty("number")
217-
val number: String?,
218-
@JsonProperty("absoluteNumber")
219-
val absoluteNumber: String?,
220-
@JsonProperty("season")
221-
val season: String?,
222-
@JsonProperty("timestamps")
223-
val timestamps: List<Timestamp>,
207+
@JsonProperty("number") @SerialName("number") val number: String?,
208+
@JsonProperty("absoluteNumber") @SerialName("absoluteNumber") val absoluteNumber: String?,
209+
@JsonProperty("season") @SerialName("season") val season: String?,
210+
@JsonProperty("timestamps") @SerialName("timestamps") val timestamps: List<Timestamp>,
224211
)
225212

213+
@Serializable
226214
data class Timestamp(
227-
@JsonProperty("at")
228-
val at: Double,
229-
@JsonProperty("type")
230-
val type: Type,
215+
@JsonProperty("at") @SerialName("at") val at: Double,
216+
@JsonProperty("type") @SerialName("type") val type: Type,
231217
)
232218

219+
@Serializable
233220
data class Type(
234-
@JsonProperty("name")
235-
val name: String,
221+
@JsonProperty("name") @SerialName("name") val name: String,
236222
)
237223

238224
val cache: ConcurrentHashMap<String, Data> = ConcurrentHashMap()
@@ -367,4 +353,3 @@ class AnimeSkip : SkipAPI() {
367353
return result
368354
}
369355
}
370-

app/src/main/java/com/lagradost/cloudstream3/utils/videoskip/IntroDbSkip.kt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.lagradost.cloudstream3.LoadResponse.Companion.getImdbId
66
import com.lagradost.cloudstream3.TvType
77
import com.lagradost.cloudstream3.app
88
import com.lagradost.cloudstream3.ui.result.ResultEpisode
9+
import kotlinx.serialization.SerialName
10+
import kotlinx.serialization.Serializable
911

1012
class IntroDbSkip : SkipAPI() {
1113
override val name = "IntroDb"
@@ -55,23 +57,24 @@ class IntroDbSkip : SkipAPI() {
5557
)
5658
}
5759

58-
60+
@Serializable
5961
data class IntroDbResponse(
60-
@JsonProperty("imdb_id") val imdbId: String?,
61-
val season: Int?,
62-
val episode: Int?,
63-
val intro: Segment?,
64-
val recap: Segment?,
65-
val outro: Segment?,
62+
@JsonProperty("imdb_id") @SerialName("imdb_id") val imdbId: String?,
63+
@JsonProperty("season") @SerialName("season") val season: Int?,
64+
@JsonProperty("episode") @SerialName("episode") val episode: Int?,
65+
@JsonProperty("intro") @SerialName("intro") val intro: Segment?,
66+
@JsonProperty("recap") @SerialName("recap") val recap: Segment?,
67+
@JsonProperty("outro") @SerialName("outro") val outro: Segment?,
6668
)
6769

70+
@Serializable
6871
data class Segment(
69-
@JsonProperty("start_sec") val startSec: Double?,
70-
@JsonProperty("end_sec") val endSec: Double?,
71-
@JsonProperty("start_ms") val startMs: Long?,
72-
@JsonProperty("end_ms") val endMs: Long?,
73-
val confidence: Double?,
74-
@JsonProperty("submission_count") val submissionCount: Int?,
75-
@JsonProperty("updated_at") val updatedAt: String?,
72+
@JsonProperty("start_sec") @SerialName("start_sec") val startSec: Double?,
73+
@JsonProperty("end_sec") @SerialName("end_sec") val endSec: Double?,
74+
@JsonProperty("start_ms") @SerialName("start_ms") val startMs: Long?,
75+
@JsonProperty("end_ms") @SerialName("end_ms") val endMs: Long?,
76+
@JsonProperty("confidence") @SerialName("confidence") val confidence: Double?,
77+
@JsonProperty("submission_count") @SerialName("submission_count") val submissionCount: Int?,
78+
@JsonProperty("updated_at") @SerialName("updated_at") val updatedAt: String?,
7679
)
77-
}
80+
}

app/src/main/java/com/lagradost/cloudstream3/utils/videoskip/TheIntroDBSkip.kt

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.lagradost.cloudstream3.LoadResponse.Companion.isMovie
88
import com.lagradost.cloudstream3.TvType
99
import com.lagradost.cloudstream3.ui.result.ResultEpisode
1010
import com.lagradost.cloudstream3.app
11+
import kotlinx.serialization.SerialName
12+
import kotlinx.serialization.Serializable
1113

1214
/** https://theintrodb.org/docs */
1315
class TheIntroDBSkip : SkipAPI() {
@@ -52,25 +54,19 @@ class TheIntroDBSkip : SkipAPI() {
5254
}.flatten()
5355
}
5456

57+
@Serializable
5558
data class Root(
56-
@JsonProperty("tmdb_id")
57-
val tmdbId: Long,
58-
@JsonProperty("type")
59-
val type: String,
60-
@JsonProperty("intro")
61-
val intro: List<Stamp> = emptyList(),
62-
@JsonProperty("recap")
63-
val recap: List<Stamp> = emptyList(),
64-
@JsonProperty("credits")
65-
val credits: List<Stamp> = emptyList(),
66-
@JsonProperty("preview")
67-
val preview: List<Stamp> = emptyList(),
59+
@JsonProperty("tmdb_id") @SerialName("tmdb_id") val tmdbId: Long,
60+
@JsonProperty("type") @SerialName("type") val type: String,
61+
@JsonProperty("intro") @SerialName("intro") val intro: List<Stamp> = emptyList(),
62+
@JsonProperty("recap") @SerialName("recap") val recap: List<Stamp> = emptyList(),
63+
@JsonProperty("credits") @SerialName("credits") val credits: List<Stamp> = emptyList(),
64+
@JsonProperty("preview") @SerialName("preview") val preview: List<Stamp> = emptyList(),
6865
)
6966

67+
@Serializable
7068
data class Stamp(
71-
@JsonProperty("start_ms")
72-
val startMs: Long?,
73-
@JsonProperty("end_ms")
74-
val endMs: Long?,
69+
@JsonProperty("start_ms") @SerialName("start_ms") val startMs: Long?,
70+
@JsonProperty("end_ms") @SerialName("end_ms") val endMs: Long?,
7571
)
76-
}
72+
}

0 commit comments

Comments
 (0)