diff --git a/build.gradle.kts b/build.gradle.kts index fa5b611..26a22f4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,8 @@ allprojects { // Enable experimental coroutines APIs, including Flow freeCompilerArgs.addAll( "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", - "-opt-in=kotlinx.coroutines.FlowPreview" + "-opt-in=kotlinx.coroutines.FlowPreview", + "-opt-in=kotlin.time.ExperimentalTime", ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d7fd8a0..f9f6176 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] -kotlin = "2.0.21" +kotlin = "2.2.10" ben-manes-versions = "0.52.0" -dokka = "1.9.20" -kotlinx-datetime = "0.6.1" -kotlinx-serialization = "1.7.3" -coroutines = "1.9.0" -ktor = "3.0.1" -junit-jupiter = "5.11.3" +dokka = "2.0.0" +kotlinx-datetime = "0.7.1" +kotlinx-serialization = "1.9.0" +coroutines = "1.10.2" +ktor = "3.2.3" +junit-jupiter = "5.13.4" truth = "1.4.4" junit = "4.13.2" maven-publish = "0.34.0" diff --git a/tmdb-api/build.gradle.kts b/tmdb-api/build.gradle.kts index b8f2d07..b28f75b 100644 --- a/tmdb-api/build.gradle.kts +++ b/tmdb-api/build.gradle.kts @@ -1,5 +1,6 @@ import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -12,8 +13,8 @@ plugins { kotlin { jvm { - compilations.all { - kotlinOptions.jvmTarget = "17" + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/DateTimeExtensions.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/DateTimeExtensions.kt index cd1ced3..94bfe59 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/DateTimeExtensions.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/DateTimeExtensions.kt @@ -1,15 +1,12 @@ package app.moviebase.tmdb.core -import kotlinx.datetime.Clock +import kotlin.time.Clock import kotlinx.datetime.DateTimeUnit import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.minus import kotlinx.datetime.plus -import kotlinx.datetime.toInstant -import kotlinx.datetime.toLocalDate -import kotlinx.datetime.toLocalDateTime import kotlinx.datetime.todayIn internal fun currentLocalDate(timeZone: TimeZone = TimeZone.UTC): LocalDate = Clock.System.todayIn(timeZone) @@ -19,7 +16,7 @@ internal fun LocalDate.plusWeeks(weeks: Int) = plus(weeks, DateTimeUnit.WEEK) internal fun LocalDate.minusWeeks(weeks: Int) = minus(weeks, DateTimeUnit.WEEK) internal fun String.tryLocalDate(): LocalDate? = try { - if (isBlank()) null else toLocalDate() + if (isBlank()) null else LocalDate.parse(this) } catch (t: Throwable) { null } diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/TmdbInstantSerializer.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/TmdbInstantSerializer.kt index d7e64c8..77ea6b0 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/TmdbInstantSerializer.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/core/TmdbInstantSerializer.kt @@ -1,7 +1,6 @@ package app.moviebase.tmdb.core -import kotlinx.datetime.Instant -import kotlinx.datetime.toInstant +import kotlin.time.Instant import kotlinx.serialization.KSerializer import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor @@ -21,7 +20,7 @@ internal class TmdbInstantSerializer : KSerializer { val string = decoder.decodeString() val splits = string.split(" ") val isoString = "${splits[0]}T${splits[1]}Z" - return isoString.toInstant() + return Instant.parse(isoString) } override fun serialize(encoder: Encoder, value: Instant) { diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/Tmdb4AccountModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/Tmdb4AccountModel.kt index 3f218c3..c832021 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/Tmdb4AccountModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/Tmdb4AccountModel.kt @@ -1,7 +1,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.core.TmdbInstantSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbAuthenticationModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbAuthenticationModel.kt index 823bd04..908791f 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbAuthenticationModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbAuthenticationModel.kt @@ -1,7 +1,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.core.TmdbInstantSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.datetime.LocalDateTime import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbChangesModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbChangesModel.kt index 73739e0..d084604 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbChangesModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbChangesModel.kt @@ -1,7 +1,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.core.TmdbInstantSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbListModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbListModel.kt index e293c2f..b2988d3 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbListModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbListModel.kt @@ -1,7 +1,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.core.TmdbInstantSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbMovieModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbMovieModel.kt index 2349015..fb7737e 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbMovieModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbMovieModel.kt @@ -2,7 +2,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.image.TmdbImage import app.moviebase.tmdb.core.LocalDateSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.datetime.LocalDate import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbReviewsModel.kt b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbReviewsModel.kt index d3aa20e..f10c14d 100644 --- a/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbReviewsModel.kt +++ b/tmdb-api/src/commonMain/kotlin/app/moviebase/tmdb/model/TmdbReviewsModel.kt @@ -1,7 +1,7 @@ package app.moviebase.tmdb.model import app.moviebase.tmdb.core.TmdbInstantSerializer -import kotlinx.datetime.Instant +import kotlin.time.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/Tmdb4AccountApiTest.kt b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/Tmdb4AccountApiTest.kt index e92fc55..ad89231 100644 --- a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/Tmdb4AccountApiTest.kt +++ b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/Tmdb4AccountApiTest.kt @@ -2,6 +2,7 @@ package app.moviebase.tmdb.api import app.moviebase.tmdb.core.mockHttpClient import com.google.common.truth.Truth.assertThat +import kotlin.time.Instant import kotlinx.coroutines.test.runTest import kotlinx.datetime.toInstant import org.junit.jupiter.api.Test @@ -28,7 +29,7 @@ class Tmdb4AccountApiTest { val result = results.results.first() assertThat(result.id).isEqualTo(44676) - assertThat(result.updatedAt).isEqualTo("2021-11-20T19:26:52Z".toInstant()) - assertThat(result.createdAt).isEqualTo("2018-01-08T18:03:08Z".toInstant()) + assertThat(result.updatedAt).isEqualTo(Instant.parse("2021-11-20T19:26:52Z")) + assertThat(result.createdAt).isEqualTo(Instant.parse("2018-01-08T18:03:08Z")) } } diff --git a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbAuthenticationApiTest.kt b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbAuthenticationApiTest.kt index 09f6fb7..e28abeb 100644 --- a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbAuthenticationApiTest.kt +++ b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbAuthenticationApiTest.kt @@ -2,9 +2,9 @@ package app.moviebase.tmdb.api import app.moviebase.tmdb.core.mockHttpClient import com.google.common.truth.Truth.assertThat +import kotlin.time.Instant import kotlinx.coroutines.test.runTest import kotlinx.datetime.TimeZone -import kotlinx.datetime.toInstant import kotlinx.datetime.toLocalDateTime import org.junit.jupiter.api.Test @@ -22,7 +22,7 @@ class TmdbAuthenticationApiTest { @Test fun `it should return request token`() = runTest { val requestToken = classToTest.requestToken() - val currentDateTime = "2023-03-05T10:38:01Z".toInstant() + val currentDateTime = Instant.parse("2023-03-05T10:38:01Z") assertThat(requestToken.success).isTrue() // 2007-12-31T23:59:01 diff --git a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbMoviesApiTest.kt b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbMoviesApiTest.kt index 59da2b3..7745e93 100644 --- a/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbMoviesApiTest.kt +++ b/tmdb-api/src/jvmTest/kotlin/app/moviebase/tmdb/api/TmdbMoviesApiTest.kt @@ -8,8 +8,8 @@ import app.moviebase.tmdb.model.getCertification import app.moviebase.tmdb.model.getReleaseDateBy import app.moviebase.tmdb.model.getReleaseDatesBy import com.google.common.truth.Truth.assertThat +import kotlin.time.Instant import kotlinx.coroutines.test.runTest -import kotlinx.datetime.toInstant import org.junit.jupiter.api.Test class TmdbMoviesApiTest { @@ -119,7 +119,7 @@ class TmdbMoviesApiTest { "2024-03-01T00:00:00.000Z", "2022-06-14T00:00:00.000Z", "2024-03-20T00:00:00.000Z" - ).map { it.toInstant() } + ).map { Instant.parse(it) } val releaseDateInstants = releaseDates?.map { it.releaseDate } assertThat(releaseDateInstants).isEqualTo(expectedReleaseDates)