diff --git a/.github/workflows/ci-client.yml b/.github/workflows/ci-client.yml index 263ff5f6..58e2d498 100644 --- a/.github/workflows/ci-client.yml +++ b/.github/workflows/ci-client.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - name: Install curl run: sudo apt-get install -y curl libcurl4-openssl-dev - name: Verify Android @@ -32,7 +32,7 @@ jobs: - name: Verify JVM/JS run: ./gradlew jvmTest - name: Archive test results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: code-coverage-report path: build/reports diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97140c98..ed132487 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,11 +16,11 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 - - name: Install java 11 + - name: Install java 21 uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - name: Install curl run: sudo apt-get install -y curl libcurl4-openssl-dev - name: Test android @@ -28,7 +28,7 @@ jobs: - name: Test jvm run: ./gradlew jvmTest - name: Archive test results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 if: always() with: name: code-coverage-report diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b1a10cf2..99b9f2d7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,11 +29,11 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 - - name: Install java 11 + - name: Install java 21 uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - name: Install curl run: sudo apt-get install -y curl libcurl4-openssl-dev - name: Verify Android @@ -43,7 +43,7 @@ jobs: - name: Publish JVM/Linux/Android run: ./gradlew publishKotlinMultiplatformPublicationToNexusRepository publishJvmPublicationToNexusRepository publishAndroidPublicationToNexusRepository publishLinuxX64PublicationToNexusRepository publishJsPublicationToNexusRepository - name: Archive test results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: code-coverage-report path: build/reports @@ -55,11 +55,11 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 - - name: Install java 11 + - name: Install java 21 uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - name: Publish macOS/iOS run: ./gradlew publishMacosX64PublicationToNexusRepository publishIosX64PublicationToNexusRepository publishIosArm64PublicationToNexusRepository release_windows: @@ -69,11 +69,11 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 - - name: Install java 11 + - name: Install java 21 uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - run: choco install curl - name: Publish windows run: ./gradlew publishMingwX64PublicationToNexusRepository @@ -83,11 +83,11 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 - - name: Install java 11 + - name: Install java 21 uses: actions/setup-java@v2 with: distribution: 'adopt' - java-version: '17' + java-version: '21' - name: Build docs run: ./gradlew dokkaHtml - name: Push docs to docs repo diff --git a/build.gradle.kts b/build.gradle.kts index 06dceb5f..cf481ef3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,14 +8,14 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackOutput.Target plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) `maven-publish` signing - id("com.android.library") - kotlin("plugin.serialization") - id("com.diffplug.spotless") version "6.21.0" - id("com.moowork.node") version "1.3.1" - id("org.jetbrains.dokka") version "1.9.0" + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.spotless) + alias(libs.plugins.node) + alias(libs.plugins.dokka) } repositories { @@ -23,19 +23,8 @@ repositories { mavenCentral() } -buildscript { - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle:") // resolved in settings.gradle.kts - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:") // resolved in settings.gradle.kts - } -} - // --- spotify-web-api-kotlin info --- -val libraryVersion: String = System.getenv("SPOTIFY_API_PUBLISH_VERSION") ?: "0.0.0.SNAPSHOT" +val libraryVersion = System.getenv("SPOTIFY_API_PUBLISH_VERSION") ?: "0.0.0.SNAPSHOT" // Publishing credentials (environment variable) val nexusUsername: String? = System.getenv("NEXUS_USERNAME") @@ -44,20 +33,21 @@ val nexusPassword: String? = System.getenv("NEXUS_PASSWORD") group = "com.adamratzman" version = libraryVersion - android { namespace = "com.adamratzman.spotify" - compileSdk = 31 + compileSdk = 35 + compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } + packaging { resources.excludes.add("META-INF/*.md") // needed to prevent android compilation errors } + defaultConfig { minSdk = 23 - setCompileSdkVersion(31) testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" } @@ -66,15 +56,19 @@ android { isMinifyEnabled = false } } + testOptions { - this.unitTests.isReturnDefaultValues = true + unitTests.isReturnDefaultValues = true + } + + sourceSets { + getByName("main").setRoot("src/androidMain") + getByName("test").setRoot("src/androidUnitTest") } - sourceSets["main"].setRoot("src/androidMain") - sourceSets["test"].setRoot("src/androidUnitTest") } // invoked in kotlin closure, needs to be registered before -val dokkaJar: TaskProvider by tasks.registering(Jar::class) { +val dokkaJar by tasks.registering(Jar::class) { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "spotify-web-api-kotlin generated documentation" from(tasks.dokkaHtml) @@ -83,25 +77,27 @@ val dokkaJar: TaskProvider by tasks.registering(Jar::class) { kotlin { @OptIn(ExperimentalKotlinGradlePluginApi::class) - compilerOptions { + compilerOptions { freeCompilerArgs.add("-Xexpect-actual-classes") } + explicitApiWarning() - jvmToolchain(17) + jvmToolchain(21) androidTarget { - compilations.all { kotlinOptions.jvmTarget = "17" } + compilations.all { + kotlinOptions.jvmTarget = "21" + } mavenPublication { setupPom(artifactId) } publishLibraryVariants("debug", "release") - publishLibraryVariantsGroupedByFlavor = true } jvm { compilations.all { - kotlinOptions.jvmTarget = "1.8" + kotlinOptions.jvmTarget = "21" } testRuns["test"].executionTask.configure { useJUnit() @@ -157,45 +153,24 @@ kotlin { mavenPublication { setupPom(artifactId) } } - // !! unable to include currently due to korlibs not being available !! - /* - tvos { - binaries { framework { baseName = "spotify" } } - - mavenPublication { setupPom(artifactId) } - } - - watchos { - binaries { framework { baseName = "spotify" } } - - mavenPublication { setupPom(artifactId) } - }*/ - + // Apply default hierarchy template for source sets applyDefaultHierarchyTemplate() sourceSets { - val kotlinxDatetimeVersion: String by project - val kotlinxSerializationVersion: String by project - val kotlinxCoroutinesVersion: String by project - val ktorVersion: String by project - - val sparkVersion: String by project - val korlibsVersion: String by project - commonMain { dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion") - implementation("io.ktor:ktor-client-core:$ktorVersion") - implementation("com.soywiz.korlibs.krypto:krypto:$korlibsVersion") - implementation("com.soywiz.korlibs.korim:korim:$korlibsVersion") - implementation("org.jetbrains.kotlinx:kotlinx-datetime:$kotlinxDatetimeVersion") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion") + implementation(libs.kotlinx.serialization.json) + implementation(libs.ktor.client.core) + implementation(libs.korlibs.krypto) + implementation(libs.korlibs.korim) + implementation(libs.kotlinx.datetime) + implementation(libs.kotlinx.coroutines.core) } } commonTest { dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion") + implementation(libs.kotlinx.coroutines.test) implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } @@ -205,14 +180,16 @@ kotlin { dependsOn(commonMain.get()) dependencies { - implementation("net.sourceforge.streamsupport:android-retrofuture:1.7.3") + implementation(libs.android.retrofuture) } } val commonJvmLikeTest by creating { + dependsOn(commonTest.get()) + dependencies { implementation(kotlin("test-junit")) - implementation("com.sparkjava:spark-core:$sparkVersion") + implementation(libs.spark.core) runtimeOnly(kotlin("reflect")) } } @@ -224,12 +201,8 @@ kotlin { jvmMain { dependsOn(commonJvmLikeMain) - repositories { - mavenCentral() - } - dependencies { - implementation("io.ktor:ktor-client-cio:$ktorVersion") + implementation(libs.ktor.client.cio) } } @@ -237,7 +210,7 @@ kotlin { jsMain { dependencies { - implementation("io.ktor:ktor-client-js:$ktorVersion") + implementation(libs.ktor.client.js) implementation(kotlin("stdlib-js")) } } @@ -253,19 +226,11 @@ kotlin { androidMain { dependsOn(commonJvmLikeMain) - repositories { - mavenCentral() - } - dependencies { - val androidSpotifyAuthVersion: String by project - val androidCryptoVersion: String by project - val androidxCompatVersion: String by project - - api("com.spotify.android:auth:$androidSpotifyAuthVersion") - implementation("io.ktor:ktor-client-okhttp:$ktorVersion") - implementation("androidx.security:security-crypto:$androidCryptoVersion") - implementation("androidx.appcompat:appcompat:$androidxCompatVersion") + api(libs.android.spotify.auth) + implementation(libs.ktor.client.okhttp) + implementation(libs.android.crypto) + implementation(libs.androidx.appcompat) } } @@ -274,12 +239,11 @@ kotlin { } // desktop targets - // as kotlin/native, they require special ktor versions val desktopMain by creating { dependsOn(commonMain.get()) dependencies { - implementation("io.ktor:ktor-client-curl:$ktorVersion") + implementation(libs.ktor.client.curl) } } @@ -287,22 +251,26 @@ kotlin { mingwMain.get().dependsOn(desktopMain) macosMain.get().dependsOn(desktopMain) - val desktopTest by creating { dependsOn(commonNonJvmTargetsTest) } + val desktopTest by creating { + dependsOn(commonNonJvmTargetsTest) + } + linuxTest.get().dependsOn(desktopTest) mingwTest.get().dependsOn(desktopTest) macosTest.get().dependsOn(desktopTest) // darwin targets - val nativeDarwinMain by creating { dependsOn(commonMain.get()) dependencies { - implementation("io.ktor:ktor-client-ios:$ktorVersion") + implementation(libs.ktor.client.ios) } } - val nativeDarwinTest by creating { dependsOn(commonNonJvmTargetsTest) } + val nativeDarwinTest by creating { + dependsOn(commonNonJvmTargetsTest) + } iosMain.get().dependsOn(nativeDarwinMain) iosTest.get().dependsOn(nativeDarwinTest) @@ -343,11 +311,10 @@ tasks { } } - - val publishAllPublicationsToNexusRepositoryWithTests by registering(Task::class) { - dependsOn.add(check) - dependsOn.add("publishAllPublicationsToNexusRepository") - dependsOn.add(dokkaHtml) + register("publishAllPublicationsToNexusRepositoryWithTests") { + dependsOn(check) + dependsOn("publishAllPublicationsToNexusRepository") + dependsOn(dokkaHtml) } withType { @@ -356,27 +323,30 @@ tasks { } } - val packForXcode by creating(Sync::class) { + register("packForXcode") { group = "build" val mode = System.getenv("CONFIGURATION") ?: "DEBUG" val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator" val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64" val framework = kotlin.targets.getByName(targetName).binaries.getFramework(mode) inputs.property("mode", mode) - dependsOn(framework.linkTask) + dependsOn(framework.linkTaskProvider) val targetDir = File(layout.buildDirectory.asFile.get(), "xcode-frameworks") from({ framework.outputDirectory }) into(targetDir) } - getByName("build").dependsOn(packForXcode) + + named("build") { + dependsOn("packForXcode") + } } +// Configure signing tasks to run before publishing val signingTasks = tasks.withType() tasks.withType().configureEach { dependsOn(signingTasks) } - fun MavenPublication.setupPom(publicationName: String) { artifactId = artifactId.replace("-web", "") artifact(dokkaJar.get()) // add javadocs to publication @@ -400,6 +370,7 @@ fun MavenPublication.setupPom(publicationName: String) { distribution.set("repo") } } + developers { developer { id.set("adamratzman") @@ -410,9 +381,7 @@ fun MavenPublication.setupPom(publicationName: String) { } } - // --- Publishing --- - fun PublishingExtension.registerPublishing() { publications { val kotlinMultiplatform by getting(MavenPublication::class) { @@ -445,10 +414,7 @@ val signingPassword = project.findProperty("SIGNING_PASSWORD") as? String signing { if (signingKey != null && signingPassword != null) { - useInMemoryPgpKeys( - project.findProperty("SIGNING_KEY") as? String, - project.findProperty("SIGNING_PASSWORD") as? String - ) + useInMemoryPgpKeys(signingKey, signingPassword) sign(publishing.publications) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..af465e54 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,64 @@ +[versions] +# Plugin versions +kotlin = "2.1.0" # Use the latest stable Kotlin version +spotless = "6.25.0" +node = "1.3.1" +dokka = "1.9.10" +android-gradle = "8.2.2" + +# Library versions +kotlinx-datetime = "0.5.0" +kotlinx-serialization = "1.6.2" +kotlinx-coroutines = "1.7.3" +ktor = "2.3.7" +spark = "2.9.4" +korlibs = "4.0.10" + +# Android specific versions +android-spotify-auth = "2.1.1" +android-crypto = "1.1.0-alpha06" +androidx-compat = "1.7.0" +android-retrofuture = "1.7.4" + +[libraries] +# Gradle plugins +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" } +dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } +spotless-gradle-plugin = { module = "com.diffplug.spotless:spotless-gradle-plugin", version.ref = "spotless" } +node-gradle-plugin = { module = "com.github.node-gradle:gradle-node-plugin", version.ref = "node" } + +# KotlinX +kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } +kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" } + +# Ktor +ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } +ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } +ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" } +ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } +ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor" } +ktor-client-ios = { module = "io.ktor:ktor-client-ios", version.ref = "ktor" } + +# Korlibs +korlibs-krypto = { module = "com.soywiz.korlibs.krypto:krypto", version.ref = "korlibs" } +korlibs-korim = { module = "com.soywiz.korlibs.korim:korim", version.ref = "korlibs" } + +# Test +spark-core = { module = "com.sparkjava:spark-core", version.ref = "spark" } + +# Android specific +android-spotify-auth = { module = "com.spotify.android:auth", version.ref = "android-spotify-auth" } +android-crypto = { module = "androidx.security:security-crypto", version.ref = "android-crypto" } +androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-compat" } +android-retrofuture = { module = "net.sourceforge.streamsupport:android-retrofuture", version.ref = "android-retrofuture" } + +[plugins] +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } +spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } +node = { id = "com.moowork.node", version.ref = "node" } +android-library = { id = "com.android.library", version.ref = "android-gradle" } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index f63d6bd7..aa522fcb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,36 +1,33 @@ pluginManagement { val kotlinVersion: String by settings - val androidBuildToolsVersion: String by settings + val androidBuildToolsVersion: String by settings // Renamed for clarity plugins { - id("org.jetbrains.kotlin.multiplatform").version(kotlinVersion) - id("org.jetbrains.kotlin.plugin.serialization").version(kotlinVersion) + kotlin("multiplatform").version(kotlinVersion) // Idiomatic Kotlin DSL + kotlin("plugin.serialization").version(kotlinVersion) // Idiomatic Kotlin DSL id("org.jetbrains.dokka").version(kotlinVersion) } resolutionStrategy { eachPlugin { - if (requested.id.id == "kotlin-multiplatform") { - useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - } - if (requested.id.id == "org.jetbrains.kotlin.jvm") { - useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - } - if (requested.id.id == "kotlinx-serialization") { - useModule("org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion") - } else if (requested.id.id == "com.android.library") { - useModule("com.android.tools.build:gradle:$androidBuildToolsVersion") - } else if (requested.id.id == "kotlin-android-extensions") { - useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + when (requested.id.id) { // Using when for better readability + "kotlin-multiplatform", "org.jetbrains.kotlin.jvm", "kotlin-android-extensions" -> { + useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + } + "kotlinx-serialization" -> { + useModule("org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion") + } + "com.android.library", "com.android.application" -> { // Added "com.android.application" + useModule("com.android.tools.build:gradle:$androidBuildToolsVersion") + } } } } repositories { - mavenCentral() - gradlePluginPortal() + gradlePluginPortal() // Put the most specific repository first google() - maven { url = java.net.URI("https://plugins.gradle.org/m2/") } + mavenCentral() } } diff --git a/src/commonMain/kotlin/com.adamratzman.spotify/SpotifyApiBuilder.kt b/src/commonMain/kotlin/com.adamratzman.spotify/SpotifyApiBuilder.kt index cba12f8b..c98e7e4e 100644 --- a/src/commonMain/kotlin/com.adamratzman.spotify/SpotifyApiBuilder.kt +++ b/src/commonMain/kotlin/com.adamratzman.spotify/SpotifyApiBuilder.kt @@ -9,9 +9,9 @@ import com.adamratzman.spotify.models.Token import com.adamratzman.spotify.models.serialization.nonstrictJson import com.adamratzman.spotify.models.serialization.toObject import com.adamratzman.spotify.utils.urlEncodeBase64String -import com.soywiz.krypto.SHA256 import io.ktor.client.plugins.ServerResponseException import io.ktor.utils.io.core.toByteArray +import korlibs.crypto.SHA256 import kotlinx.coroutines.CancellationException import kotlinx.serialization.json.Json diff --git a/src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt b/src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt index 54a1eeb7..18fe762d 100644 --- a/src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt +++ b/src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt @@ -23,7 +23,7 @@ import com.adamratzman.spotify.utils.convertLocalImagePathToBufferedImage import com.adamratzman.spotify.utils.convertUrlPathToBufferedImage import com.adamratzman.spotify.utils.encodeUrl import com.adamratzman.spotify.utils.jsonMap -import com.soywiz.korio.file.VfsFile +import korlibs.io.file.VfsFile import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonArray diff --git a/src/commonMain/kotlin/com.adamratzman.spotify/http/HttpRequest.kt b/src/commonMain/kotlin/com.adamratzman.spotify/http/HttpRequest.kt index 688cbdb9..eb73b437 100644 --- a/src/commonMain/kotlin/com.adamratzman.spotify/http/HttpRequest.kt +++ b/src/commonMain/kotlin/com.adamratzman.spotify/http/HttpRequest.kt @@ -11,8 +11,6 @@ import com.adamratzman.spotify.models.ErrorResponse import com.adamratzman.spotify.models.SpotifyRatelimitedException import com.adamratzman.spotify.models.serialization.nonstrictJson import com.adamratzman.spotify.models.serialization.toObject -import com.soywiz.klogger.Console -import com.soywiz.korio.async.launch import io.ktor.client.HttpClient import io.ktor.client.plugins.ResponseException import io.ktor.client.request.HttpRequestBuilder @@ -25,6 +23,7 @@ import io.ktor.http.ContentType import io.ktor.http.HttpMethod import io.ktor.http.content.ByteArrayContent import io.ktor.utils.io.core.toByteArray +import korlibs.logger.Console import kotlinx.coroutines.CancellationException import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.delay diff --git a/src/commonMain/kotlin/com.adamratzman.spotify/utils/Encoding.kt b/src/commonMain/kotlin/com.adamratzman.spotify/utils/Encoding.kt index 14696f1c..54e06ca6 100644 --- a/src/commonMain/kotlin/com.adamratzman.spotify/utils/Encoding.kt +++ b/src/commonMain/kotlin/com.adamratzman.spotify/utils/Encoding.kt @@ -1,8 +1,8 @@ /* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2022; Original author: Adam Ratzman */ package com.adamratzman.spotify.utils -import com.soywiz.krypto.encoding.Base64 import io.ktor.utils.io.core.toByteArray +import korlibs.crypto.encoding.Base64 internal fun String.base64ByteEncode() = Base64.encode(toByteArray()) diff --git a/src/commonMain/kotlin/com.adamratzman.spotify/utils/IO.kt b/src/commonMain/kotlin/com.adamratzman.spotify/utils/IO.kt index a297fb17..767cb4b9 100644 --- a/src/commonMain/kotlin/com.adamratzman.spotify/utils/IO.kt +++ b/src/commonMain/kotlin/com.adamratzman.spotify/utils/IO.kt @@ -1,12 +1,12 @@ /* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2022; Original author: Adam Ratzman */ package com.adamratzman.spotify.utils -import com.soywiz.korim.bitmap.Bitmap import com.soywiz.korim.format.jpg.JPEG -import com.soywiz.korio.file.VfsFile -import com.soywiz.korio.file.std.UrlVfs -import com.soywiz.korio.file.std.localVfs -import com.soywiz.krypto.encoding.Base64 +import korlibs.crypto.encoding.Base64 +import korlibs.image.bitmap.Bitmap +import korlibs.io.file.VfsFile +import korlibs.io.file.std.UrlVfs +import korlibs.io.file.std.localVfs /** * Represents an image. Please use convertXToBufferedImage and convertBufferedImageToX methods to read and write [BufferedImage] diff --git a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEG.kt b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEG.kt index c22370ac..0d5cb0ec 100644 --- a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEG.kt +++ b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEG.kt @@ -1,15 +1,15 @@ /* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2022; Original author: Adam Ratzman */ package com.soywiz.korim.format.jpg -import com.soywiz.korim.format.ImageData -import com.soywiz.korim.format.ImageDecodingProps -import com.soywiz.korim.format.ImageEncodingProps -import com.soywiz.korim.format.ImageFormat -import com.soywiz.korim.format.ImageFrame -import com.soywiz.korim.format.ImageInfo -import com.soywiz.korio.stream.SyncStream -import com.soywiz.korio.stream.readAll -import com.soywiz.korio.stream.writeBytes +import korlibs.image.format.ImageData +import korlibs.image.format.ImageDecodingProps +import korlibs.image.format.ImageEncodingProps +import korlibs.image.format.ImageFormat +import korlibs.image.format.ImageFrame +import korlibs.image.format.ImageInfo +import korlibs.io.stream.SyncStream +import korlibs.io.stream.readAll +import korlibs.io.stream.writeBytes public object JPEG : ImageFormat("jpg", "jpeg") { override fun decodeHeader(s: SyncStream, props: ImageDecodingProps): ImageInfo? = try { diff --git a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGDecoder.kt b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGDecoder.kt index 6cc7d691..ea229963 100644 --- a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGDecoder.kt +++ b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGDecoder.kt @@ -1,12 +1,12 @@ /* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2022; Original author: Adam Ratzman */ package com.soywiz.korim.format.jpg -import com.soywiz.kmem.UByteArrayInt -import com.soywiz.kmem.asByteArray -import com.soywiz.korim.bitmap.Bitmap32 -import com.soywiz.korim.color.RGBA -import com.soywiz.korim.color.decodeToBitmap32 -import com.soywiz.korio.lang.invalidOp +import korlibs.image.bitmap.Bitmap32 +import korlibs.image.color.RGBA +import korlibs.image.color.decodeToBitmap32 +import korlibs.io.lang.invalidOp +import korlibs.memory.UByteArrayInt +import korlibs.memory.asByteArray import kotlin.math.ceil // https://github.com/eugeneware/jpeg-js/blob/652bfced3ead53808285b1b5fa9c0b589d00bbf0/lib/decoder.js diff --git a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGEncoder.kt b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGEncoder.kt index a9674589..082e416f 100644 --- a/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGEncoder.kt +++ b/src/commonMain/kotlin/com.soywiz.korim.format.jpg/JPEGEncoder.kt @@ -1,8 +1,8 @@ /* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2022; Original author: Adam Ratzman */ package com.soywiz.korim.format.jpg -import com.soywiz.kmem.ByteArrayBuilder -import com.soywiz.korim.bitmap.Bitmap32 +import korlibs.image.bitmap.Bitmap32 +import korlibs.memory.ByteArrayBuilder import kotlin.math.floor /*