diff --git a/.github/workflows/Update.yml b/.github/workflows/Update.yml index 0e4746cb..d8db417a 100644 --- a/.github/workflows/Update.yml +++ b/.github/workflows/Update.yml @@ -62,11 +62,11 @@ jobs: run: | mkdir -p build jq 'del(.metadata)' --sort-keys desktop/build/aboutlibraries.json > build/json1.json - jq 'del(.metadata)' --sort-keys i18n/src/commonMain/resources/MR/files/aboutlibraries.json > build/json2.json + jq 'del(.metadata)' --sort-keys i18n/src/commonMain/moko-resources/files/aboutlibraries.json > build/json2.json if cmp --silent build/json1.json build/json2.json; then echo "Libraries didn't change" else - mv desktop/build/aboutlibraries.json i18n/src/commonMain/resources/MR/files/aboutlibraries.json -f + mv desktop/build/aboutlibraries.json i18n/src/commonMain/moko-resources/files/aboutlibraries.json -f echo "Moved file" fi diff --git a/.gitignore b/.gitignore index 2aff7f8e..9190aa8c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ build/ tmp/ Tachidesk.jar /wix311 +.kotlin # Eclipse .classpath diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 6abac551..8aaa253a 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,8 +1,8 @@ import Config.migrationCode -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) id(libs.plugins.android.application.get().pluginId) id(libs.plugins.ksp.get().pluginId) id(libs.plugins.compose.get().pluginId) @@ -142,6 +142,6 @@ android { kotlin { jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(Config.androidJvmTarget.majorVersion)) + languageVersion.set(JavaLanguageVersion.of(Config.androidJvmTarget.target)) } } diff --git a/build.gradle.kts b/build.gradle.kts index d5fcb3ce..f7d60344 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,17 +2,15 @@ import Config.migrationCode import Config.serverCode import Config.tachideskVersion import com.codingfeline.buildkonfig.compiler.FieldSpec.Type +import de.jensklingenberg.ktorfit.gradle.ErrorCheckingMode import org.jetbrains.compose.ComposeExtension import org.jetbrains.compose.ComposePlugin import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile -@Suppress("DSL_SCOPE_VIOLATION") plugins { - alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.serialization) apply false - alias(libs.plugins.android.library) apply false - alias(libs.plugins.android.application) apply false + alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.compose) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.buildconfig) apply false @@ -47,14 +45,14 @@ tasks.withType { - kotlinOptions { + compilerOptions { if (name.contains("android", true)) { - jvmTarget = Config.androidJvmTarget.toString() + jvmTarget = Config.androidJvmTarget } - freeCompilerArgs += listOf("-Xexpect-actual-classes") + freeCompilerArgs.add("-Xexpect-actual-classes") if (project.hasProperty("generateComposeCompilerMetrics")) { - freeCompilerArgs = freeCompilerArgs + listOf( + freeCompilerArgs.addAll( "-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + project.layout.buildDirectory.dir("compose_metrics").get().asFile.absolutePath, @@ -87,8 +85,8 @@ subprojects { } compileOptions { isCoreLibraryDesugaringEnabled = true - sourceCompatibility(Config.androidJvmTarget) - targetCompatibility(Config.androidJvmTarget) + sourceCompatibility(Config.androidJvmTarget.target) + targetCompatibility(Config.androidJvmTarget.target) } dependencies { add("coreLibraryDesugaring", libs.desugarJdkLibs) @@ -131,7 +129,7 @@ subprojects { plugins.withType { configure { - logging = project.hasProperty("debugApp") + errorCheckingMode = ErrorCheckingMode.WARNING } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2cc63f36..c02c379d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -5,6 +5,7 @@ plugins { repositories { mavenCentral() + google() maven("https://plugins.gradle.org/m2/") } @@ -13,4 +14,6 @@ dependencies { implementation(gradleApi()) implementation(localGroovy()) implementation(libs.gradle.download.task) + implementation(libs.gradle.kotlin) + implementation(libs.gradle.android) } diff --git a/buildSrc/src/main/kotlin/Config.kt b/buildSrc/src/main/kotlin/Config.kt index 4cc52d58..a05bc862 100644 --- a/buildSrc/src/main/kotlin/Config.kt +++ b/buildSrc/src/main/kotlin/Config.kt @@ -1,4 +1,4 @@ -import org.gradle.api.JavaVersion +import org.jetbrains.kotlin.gradle.dsl.JvmTarget object Config { const val migrationCode = 5 @@ -10,6 +10,6 @@ object Config { const val preview = false const val previewCommit = "54df9d634a1e83143a6cacf6206b6504721b6ca8" - val desktopJvmTarget = JavaVersion.VERSION_17 - val androidJvmTarget = JavaVersion.VERSION_11 + val desktopJvmTarget = JvmTarget.JVM_17 + val androidJvmTarget = JvmTarget.JVM_17 } diff --git a/buildSrc/src/main/kotlin/Localization.kt b/buildSrc/src/main/kotlin/Localization.kt index c8515fc1..e1e68d3f 100644 --- a/buildSrc/src/main/kotlin/Localization.kt +++ b/buildSrc/src/main/kotlin/Localization.kt @@ -8,13 +8,13 @@ fun TaskContainerScope.registerLocalizationTask(project: Project) { with(project) { register("generateLocales") { doFirst { - val langs = listOf("en") + file("src/commonMain/resources/MR/values").listFiles()?.map { it.name } + val langs = listOf("en") + file("src/commonMain/moko-resources/values").listFiles()?.map { it.name } ?.minus("base") ?.map { it.replace("-r", "-") } ?.sorted() .orEmpty() - val langFile = file("src/commonMain/resources/MR/files/languages.json") + val langFile = file("src/commonMain/moko-resources/files/languages.json") if (langFile.exists()) { val currentLangs = langFile.reader().use { Gson().fromJson(it, JsonObject::class.java) @@ -39,4 +39,4 @@ fun TaskContainerScope.registerLocalizationTask(project: Project) { } } } -} \ No newline at end of file +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8c03a8b8..16b756ae 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,6 +1,5 @@ import org.jetbrains.compose.compose -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) id(libs.plugins.android.library.get().pluginId) @@ -13,14 +12,22 @@ kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -54,7 +61,6 @@ kotlin { } val commonMain by getting { dependencies { - api(kotlin("stdlib-common")) api(libs.coroutines.core) api(libs.serialization.json.core) api(libs.serialization.json.okio) @@ -81,7 +87,6 @@ kotlin { val jvmMain by getting { dependencies { - api(kotlin("stdlib-jdk8")) } } val jvmTest by getting { diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 7eae605b..39a810b6 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,4 +1,3 @@ -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) id(libs.plugins.kotlin.serialization.get().pluginId) @@ -6,7 +5,6 @@ plugins { id(libs.plugins.ksp.get().pluginId) id(libs.plugins.buildkonfig.get().pluginId) id(libs.plugins.kotlinter.get().pluginId) - id(libs.plugins.ktorfit.get().pluginId) id(libs.plugins.apollo.get().pluginId) } @@ -14,14 +12,22 @@ kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -53,7 +59,6 @@ kotlin { } val commonMain by getting { dependencies { - api(kotlin("stdlib-common")) api(libs.coroutines.core) api(libs.serialization.json.core) api(libs.serialization.json.okio) @@ -62,8 +67,9 @@ kotlin { api(libs.ktor.websockets) api(libs.okio) api(libs.dateTime) - api(libs.apollo.runtime) - api(libs.apollo.engine.ktor) + implementation(libs.apollo.runtime) + implementation(libs.apollo.engine.ktor) + implementation(libs.ktorfit.lib) api(projects.core) api(projects.i18n) api(projects.domain) @@ -78,7 +84,6 @@ kotlin { val jvmMain by getting { dependencies { - api(kotlin("stdlib-jdk8")) } } val jvmTest by getting { @@ -110,7 +115,8 @@ dependencies { "kspAndroid", "kspIosArm64", "kspIosSimulatorArm64", - "kspIosX64" + "kspIosX64", + "kspCommonMainMetadata" ).forEach { add(it, libs.kotlinInject.compiler) } diff --git a/data/src/androidMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt b/data/src/androidMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt new file mode 100644 index 00000000..1628618a --- /dev/null +++ b/data/src/androidMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt @@ -0,0 +1,51 @@ +package ca.gosyer.jui.data + +import ca.gosyer.jui.domain.backup.service.createBackupRepositoryOld +import ca.gosyer.jui.domain.category.service.createCategoryRepositoryOld +import ca.gosyer.jui.domain.chapter.service.createChapterRepositoryOld +import ca.gosyer.jui.domain.download.service.createDownloadRepositoryOld +import ca.gosyer.jui.domain.extension.service.createExtensionRepositoryOld +import ca.gosyer.jui.domain.global.service.createGlobalRepositoryOld +import ca.gosyer.jui.domain.library.service.createLibraryRepositoryOld +import ca.gosyer.jui.domain.manga.service.createMangaRepositoryOld +import ca.gosyer.jui.domain.settings.service.createSettingsRepositoryOld +import ca.gosyer.jui.domain.source.service.createSourceRepositoryOld +import ca.gosyer.jui.domain.updates.service.createUpdatesRepositoryOld +import de.jensklingenberg.ktorfit.Ktorfit +import me.tatarka.inject.annotations.Provides + +actual interface SharedDataComponent { + + @Provides + fun backupRepositoryOld(ktorfit: Ktorfit) = ktorfit.createBackupRepositoryOld() + + @Provides + fun categoryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createCategoryRepositoryOld() + + @Provides + fun chapterRepositoryOld(ktorfit: Ktorfit) = ktorfit.createChapterRepositoryOld() + + @Provides + fun downloadRepositoryOld(ktorfit: Ktorfit) = ktorfit.createDownloadRepositoryOld() + + @Provides + fun extensionRepositoryOld(ktorfit: Ktorfit) = ktorfit.createExtensionRepositoryOld() + + @Provides + fun globalRepositoryOld(ktorfit: Ktorfit) = ktorfit.createGlobalRepositoryOld() + + @Provides + fun libraryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createLibraryRepositoryOld() + + @Provides + fun mangaRepositoryOld(ktorfit: Ktorfit) = ktorfit.createMangaRepositoryOld() + + @Provides + fun settingsRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSettingsRepositoryOld() + + @Provides + fun sourceRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSourceRepositoryOld() + + @Provides + fun updatesRepositoryOld(ktorfit: Ktorfit) = ktorfit.createUpdatesRepositoryOld() +} diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt index 7b1b344e..8b4310c7 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt @@ -8,24 +8,12 @@ package ca.gosyer.jui.data import ca.gosyer.jui.core.lang.addSuffix import ca.gosyer.jui.data.settings.SettingsRepositoryImpl -import ca.gosyer.jui.domain.backup.service.BackupRepositoryOld -import ca.gosyer.jui.domain.category.service.CategoryRepositoryOld -import ca.gosyer.jui.domain.chapter.service.ChapterRepositoryOld -import ca.gosyer.jui.domain.download.service.DownloadRepositoryOld -import ca.gosyer.jui.domain.extension.service.ExtensionRepositoryOld -import ca.gosyer.jui.domain.global.service.GlobalRepositoryOld -import ca.gosyer.jui.domain.library.service.LibraryRepositoryOld -import ca.gosyer.jui.domain.manga.service.MangaRepositoryOld import ca.gosyer.jui.domain.server.Http import ca.gosyer.jui.domain.server.service.ServerPreferences import ca.gosyer.jui.domain.settings.service.SettingsRepository -import ca.gosyer.jui.domain.settings.service.SettingsRepositoryOld -import ca.gosyer.jui.domain.source.service.SourceRepositoryOld -import ca.gosyer.jui.domain.updates.service.UpdatesRepositoryOld -import com.apollographql.apollo3.ApolloClient -import com.apollographql.apollo3.annotations.ApolloExperimental -import com.apollographql.apollo3.network.ktorClient -import com.apollographql.apollo3.network.ws.GraphQLWsProtocol +import com.apollographql.apollo.ApolloClient +import com.apollographql.apollo.network.ws.GraphQLWsProtocol +import com.apollographql.ktor.ktorClient import de.jensklingenberg.ktorfit.Ktorfit import io.ktor.http.URLBuilder import io.ktor.http.appendPathSegments @@ -33,7 +21,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import me.tatarka.inject.annotations.Provides -interface DataComponent { +interface DataComponent : SharedDataComponent { @Provides fun ktorfit( http: Http, @@ -45,7 +33,6 @@ interface DataComponent { .baseUrl(serverPreferences.serverUrl().get().toString().addSuffix('/')) .build() - @OptIn(ApolloExperimental::class) @Provides fun apolloClient( http: Http, @@ -61,39 +48,6 @@ interface DataComponent { .dispatcher(Dispatchers.IO) .build() - @Provides - fun backupRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun categoryRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun chapterRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun downloadRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun extensionRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun globalRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun libraryRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun mangaRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun settingsRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun sourceRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - - @Provides - fun updatesRepositoryOld(ktorfit: Ktorfit) = ktorfit.create() - @Provides fun settingsRepository(apolloClient: ApolloClient): SettingsRepository = SettingsRepositoryImpl(apolloClient) } diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/FlowConverterFactory.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/FlowConverterFactory.kt index d7ed0fb6..cb8acbf0 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/FlowConverterFactory.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/FlowConverterFactory.kt @@ -8,7 +8,8 @@ package ca.gosyer.jui.data import de.jensklingenberg.ktorfit.Ktorfit import de.jensklingenberg.ktorfit.converter.Converter -import de.jensklingenberg.ktorfit.internal.TypeData +import de.jensklingenberg.ktorfit.converter.KtorfitResult +import de.jensklingenberg.ktorfit.converter.TypeData import io.ktor.client.call.body import io.ktor.client.statement.HttpResponse import kotlinx.coroutines.Dispatchers @@ -29,7 +30,7 @@ class FlowConverterFactory : Converter.Factory { val convertedBody = ktorfit.nextSuspendResponseConverter( null, typeData.typeArgs.first(), - )?.convert(response) + )?.convert(KtorfitResult.Success(response)) ?: response.body(typeData.typeArgs.first().typeInfo) emit(convertedBody) }.flowOn(Dispatchers.IO) diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt new file mode 100644 index 00000000..2eab5bf4 --- /dev/null +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt @@ -0,0 +1,4 @@ +package ca.gosyer.jui.data + + +expect interface SharedDataComponent diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/scalars/LongStringScalar.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/scalars/LongStringScalar.kt index 6f5542a3..a9122269 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/scalars/LongStringScalar.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/scalars/LongStringScalar.kt @@ -6,10 +6,10 @@ package ca.gosyer.jui.data.scalars -import com.apollographql.apollo3.api.Adapter -import com.apollographql.apollo3.api.CustomScalarAdapters -import com.apollographql.apollo3.api.json.JsonReader -import com.apollographql.apollo3.api.json.JsonWriter +import com.apollographql.apollo.api.Adapter +import com.apollographql.apollo.api.CustomScalarAdapters +import com.apollographql.apollo.api.json.JsonReader +import com.apollographql.apollo.api.json.JsonWriter object LongStringScalar : Adapter { override fun fromJson( diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/settings/SettingsRepositoryImpl.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/settings/SettingsRepositoryImpl.kt index 2c7560fa..216e1dad 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/settings/SettingsRepositoryImpl.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/settings/SettingsRepositoryImpl.kt @@ -16,7 +16,7 @@ import ca.gosyer.jui.data.util.toOptional import ca.gosyer.jui.domain.settings.model.SetSettingsInput import ca.gosyer.jui.domain.settings.model.Settings import ca.gosyer.jui.domain.settings.service.SettingsRepository -import com.apollographql.apollo3.ApolloClient +import com.apollographql.apollo.ApolloClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.flow.Flow diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/util/ApolloUtils.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/util/ApolloUtils.kt index 993e34f8..a15d2e8c 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/util/ApolloUtils.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/util/ApolloUtils.kt @@ -6,6 +6,6 @@ package ca.gosyer.jui.data.util -import com.apollographql.apollo3.api.Optional +import com.apollographql.apollo.api.Optional internal fun T?.toOptional() = Optional.presentIfNotNull(this) diff --git a/data/src/desktopMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt b/data/src/desktopMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt new file mode 100644 index 00000000..1628618a --- /dev/null +++ b/data/src/desktopMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt @@ -0,0 +1,51 @@ +package ca.gosyer.jui.data + +import ca.gosyer.jui.domain.backup.service.createBackupRepositoryOld +import ca.gosyer.jui.domain.category.service.createCategoryRepositoryOld +import ca.gosyer.jui.domain.chapter.service.createChapterRepositoryOld +import ca.gosyer.jui.domain.download.service.createDownloadRepositoryOld +import ca.gosyer.jui.domain.extension.service.createExtensionRepositoryOld +import ca.gosyer.jui.domain.global.service.createGlobalRepositoryOld +import ca.gosyer.jui.domain.library.service.createLibraryRepositoryOld +import ca.gosyer.jui.domain.manga.service.createMangaRepositoryOld +import ca.gosyer.jui.domain.settings.service.createSettingsRepositoryOld +import ca.gosyer.jui.domain.source.service.createSourceRepositoryOld +import ca.gosyer.jui.domain.updates.service.createUpdatesRepositoryOld +import de.jensklingenberg.ktorfit.Ktorfit +import me.tatarka.inject.annotations.Provides + +actual interface SharedDataComponent { + + @Provides + fun backupRepositoryOld(ktorfit: Ktorfit) = ktorfit.createBackupRepositoryOld() + + @Provides + fun categoryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createCategoryRepositoryOld() + + @Provides + fun chapterRepositoryOld(ktorfit: Ktorfit) = ktorfit.createChapterRepositoryOld() + + @Provides + fun downloadRepositoryOld(ktorfit: Ktorfit) = ktorfit.createDownloadRepositoryOld() + + @Provides + fun extensionRepositoryOld(ktorfit: Ktorfit) = ktorfit.createExtensionRepositoryOld() + + @Provides + fun globalRepositoryOld(ktorfit: Ktorfit) = ktorfit.createGlobalRepositoryOld() + + @Provides + fun libraryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createLibraryRepositoryOld() + + @Provides + fun mangaRepositoryOld(ktorfit: Ktorfit) = ktorfit.createMangaRepositoryOld() + + @Provides + fun settingsRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSettingsRepositoryOld() + + @Provides + fun sourceRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSourceRepositoryOld() + + @Provides + fun updatesRepositoryOld(ktorfit: Ktorfit) = ktorfit.createUpdatesRepositoryOld() +} diff --git a/data/src/iosMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt b/data/src/iosMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt new file mode 100644 index 00000000..1628618a --- /dev/null +++ b/data/src/iosMain/kotlin/ca/gosyer/jui/data/SharedDataComponent.kt @@ -0,0 +1,51 @@ +package ca.gosyer.jui.data + +import ca.gosyer.jui.domain.backup.service.createBackupRepositoryOld +import ca.gosyer.jui.domain.category.service.createCategoryRepositoryOld +import ca.gosyer.jui.domain.chapter.service.createChapterRepositoryOld +import ca.gosyer.jui.domain.download.service.createDownloadRepositoryOld +import ca.gosyer.jui.domain.extension.service.createExtensionRepositoryOld +import ca.gosyer.jui.domain.global.service.createGlobalRepositoryOld +import ca.gosyer.jui.domain.library.service.createLibraryRepositoryOld +import ca.gosyer.jui.domain.manga.service.createMangaRepositoryOld +import ca.gosyer.jui.domain.settings.service.createSettingsRepositoryOld +import ca.gosyer.jui.domain.source.service.createSourceRepositoryOld +import ca.gosyer.jui.domain.updates.service.createUpdatesRepositoryOld +import de.jensklingenberg.ktorfit.Ktorfit +import me.tatarka.inject.annotations.Provides + +actual interface SharedDataComponent { + + @Provides + fun backupRepositoryOld(ktorfit: Ktorfit) = ktorfit.createBackupRepositoryOld() + + @Provides + fun categoryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createCategoryRepositoryOld() + + @Provides + fun chapterRepositoryOld(ktorfit: Ktorfit) = ktorfit.createChapterRepositoryOld() + + @Provides + fun downloadRepositoryOld(ktorfit: Ktorfit) = ktorfit.createDownloadRepositoryOld() + + @Provides + fun extensionRepositoryOld(ktorfit: Ktorfit) = ktorfit.createExtensionRepositoryOld() + + @Provides + fun globalRepositoryOld(ktorfit: Ktorfit) = ktorfit.createGlobalRepositoryOld() + + @Provides + fun libraryRepositoryOld(ktorfit: Ktorfit) = ktorfit.createLibraryRepositoryOld() + + @Provides + fun mangaRepositoryOld(ktorfit: Ktorfit) = ktorfit.createMangaRepositoryOld() + + @Provides + fun settingsRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSettingsRepositoryOld() + + @Provides + fun sourceRepositoryOld(ktorfit: Ktorfit) = ktorfit.createSourceRepositoryOld() + + @Provides + fun updatesRepositoryOld(ktorfit: Ktorfit) = ktorfit.createUpdatesRepositoryOld() +} diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index a7be0c12..f85f93a8 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -6,9 +6,9 @@ import org.jetbrains.compose.compose import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.jvm.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) id(libs.plugins.ksp.get().pluginId) id(libs.plugins.compose.get().pluginId) id(libs.plugins.buildconfig.get().pluginId) @@ -106,15 +106,15 @@ dependencies { } java { - sourceCompatibility = Config.desktopJvmTarget - targetCompatibility = Config.desktopJvmTarget + sourceCompatibility = JavaVersion.toVersion(Config.desktopJvmTarget.target) + targetCompatibility = JavaVersion.toVersion(Config.desktopJvmTarget.target) } tasks { withType { - kotlinOptions { - jvmTarget = Config.desktopJvmTarget.toString() - freeCompilerArgs = listOf( + compilerOptions { + jvmTarget = Config.desktopJvmTarget + freeCompilerArgs.add( "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi" ) } diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index 90ba5703..a3c41d72 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -1,6 +1,5 @@ import org.jetbrains.compose.compose -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) id(libs.plugins.kotlin.serialization.get().pluginId) @@ -8,20 +7,29 @@ plugins { id(libs.plugins.ksp.get().pluginId) id(libs.plugins.buildkonfig.get().pluginId) id(libs.plugins.kotlinter.get().pluginId) + id(libs.plugins.ktorfit.get().pluginId) } kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -54,8 +62,6 @@ kotlin { } val commonMain by getting { dependencies { - api(kotlin("stdlib-common")) - api(kotlin("stdlib-common")) api(libs.coroutines.core) api(libs.serialization.json.core) api(libs.serialization.json.okio) @@ -83,7 +89,6 @@ kotlin { val jvmMain by getting { dependencies { - api(kotlin("stdlib-jdk8")) api(libs.ktor.okHttp) } } @@ -123,7 +128,6 @@ dependencies { "kspIosX64" ).forEach { add(it, libs.kotlinInject.compiler) - add(it, libs.ktorfit.ksp) } } diff --git a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/source/interactor/SourcePager.kt b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/source/interactor/SourcePager.kt index 788bcd60..899d7102 100644 --- a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/source/interactor/SourcePager.kt +++ b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/source/interactor/SourcePager.kt @@ -29,14 +29,16 @@ import me.tatarka.inject.annotations.Assisted import me.tatarka.inject.annotations.Inject import org.lighthousegames.logging.logging -typealias GetMangaPage = @param:Assisted suspend (page: Int) -> MangaPage? +fun interface GetMangaPage { + suspend fun get(page: Int): MangaPage? +} class SourcePager @Inject constructor( private val getManga: GetManga, private val serverListeners: ServerListeners, - private val fetcher: GetMangaPage, + @Assisted private val fetcher: GetMangaPage, ) : CoroutineScope by CoroutineScope(Dispatchers.Default + SupervisorJob()) { private val sourceMutex = Mutex() @@ -72,7 +74,7 @@ class SourcePager launch { if (hasNextPage.value && sourceMutex.tryLock()) { _pageNum.value++ - val page = fetcher(_pageNum.value) + val page = fetcher.get(_pageNum.value) if (page != null) { _sourceManga.value = _sourceManga.value + page.mangaList _hasNextPage.value = page.hasNextPage diff --git a/gradle.properties b/gradle.properties index dbdfe01e..6f430ad1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,3 +6,4 @@ kotlin.mpp.stability.nowarn=true kotlin.native.ignoreDisabledTargets=true org.jetbrains.compose.experimental.uikit.enabled=true kotlin.mpp.androidSourceSetLayoutVersion=2 +moko.resources.disableStaticFrameworkWarning=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e59de75b..8d9d5e7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,47 +1,49 @@ [versions] # Kotlin -kotlin = "1.9.23" +kotlin = "2.0.20" coroutines = "1.8.1" # Serialization -json = "1.6.3" +json = "1.7.1" # Compose -composeGradle = "1.6.1" +composeGradle = "1.6.11" # Compose Libraries voyager = "1.0.0" accompanist = "0.30.1" googleAccompanist = "0.30.1" -imageloader = "1.7.8" +imageloader = "1.8.1" materialDialogs = "0.9.5" # Android -androidGradle = "8.3.1" -core = "1.12.0" +androidGradle = "8.5.2" +core = "1.13.1" appCompat = "1.7.0" -activityCompose = "1.8.2" +activityCompose = "1.9.1" work = "2.9.1" # Android Lifecycle -lifecycle = "2.7.0" +lifecycle = "2.8.4" # Swing darklaf = "3.0.2" # Ksp -ksp = "1.9.23-1.0.19" +ksp = "2.0.20-1.0.24" # Dependency Injection -kotlinInject = "0.6.3" +kotlinInject = "0.7.1" # Network -ktor = "2.3.9" -ktorfit = "1.12.0" -apollo = "4.0.0-beta.5" +ktor = "2.3.12" +ktorfit = "2.0.1" +ktorfitKsp = "2.0.1-1.0.24" +apollo = "4.0.0" +apolloKtor = "0.0.2" # Logging -slf4j = "2.0.12" +slf4j = "2.0.16" log4j = "2.23.1" kmlogging = "1.4.2" @@ -54,14 +56,14 @@ multiplatformSettings = "1.1.1" # Utility desugarJdkLibs = "2.0.4" -aboutLibraries = "11.1.1" -dateTime = "0.6.0-RC.2" +aboutLibraries = "11.2.2" +dateTime = "0.6.1" immutableCollections = "0.3.7" korge = "5.4.0" -gradleDownloadTask = "5.4.0" +gradleDownloadTask = "5.6.0" # Localization -moko = "0.23.0" +moko = "0.24.2" # BuildConfigs buildconfig = "5.3.5" @@ -129,9 +131,9 @@ ktor-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor-websockets = { module = "io.ktor:ktor-client-websockets", version.ref = "ktor" } ktor-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" } ktorfit-lib = { module = "de.jensklingenberg.ktorfit:ktorfit-lib-light", version.ref = "ktorfit" } -ktorfit-ksp = { module = "de.jensklingenberg.ktorfit:ktorfit-ksp", version.ref = "ktorfit" } -apollo-runtime = { module = "com.apollographql.apollo3:apollo-runtime", version.ref = "apollo" } -apollo-engine-ktor = { module = "com.apollographql.apollo3:apollo-engine-ktor", version.ref = "apollo" } +ktorfit-ksp = { module = "de.jensklingenberg.ktorfit:ktorfit-ksp", version.ref = "ktorfitKsp" } +apollo-runtime = { module = "com.apollographql.apollo:apollo-runtime", version.ref = "apollo" } +apollo-engine-ktor = { module = "com.apollographql.ktor:apollo-engine-ktor", version.ref = "apolloKtor" } # Logging logging-slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } @@ -166,6 +168,8 @@ moko-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "m proguard = { module = "com.guardsquare:proguard-gradle", version.ref = "proguard" } # Gradle +gradle-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +gradle-android = { module = "com.android.tools.build:gradle", version.ref = "androidGradle" } gradle-download-task = { module = "de.undercouch:gradle-download-task", version.ref = "gradleDownloadTask" } [plugins] @@ -174,6 +178,7 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } # Android android-library = { id = "com.android.library", version.ref = "androidGradle" } @@ -187,7 +192,7 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } # Network ktorfit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktorfit" } -apollo = { id = "com.apollographql.apollo3", version.ref = "apollo" } +apollo = { id = "com.apollographql.apollo", version.ref = "apollo" } # Localization moko-gradle = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd491..a4b76b95 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23a..09523c0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42..f5feea6d 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f..9d21a218 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/i18n/build.gradle.kts b/i18n/build.gradle.kts index a6e6be1d..0119080e 100644 --- a/i18n/build.gradle.kts +++ b/i18n/build.gradle.kts @@ -1,4 +1,3 @@ -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) id(libs.plugins.android.library.get().pluginId) @@ -9,14 +8,22 @@ kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -35,38 +42,26 @@ kotlin { applyDefaultHierarchyTemplate() sourceSets { - val commonMain by getting { + getByName("commonMain") { dependencies { - api(kotlin("stdlib-common")) api(libs.moko.core) } } - val commonTest by getting { + getByName("commonTest") { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } } - - getByName("desktopMain") { - dependsOn(commonMain) - } - - getByName("androidMain") { - dependsOn(commonMain) - } } } tasks { registerLocalizationTask(project) - - getByName("desktopProcessResources") - .dependsOn("generateMRcommonMain", "generateMRdesktopMain") } multiplatformResources { - multiplatformResourcesPackage = "ca.gosyer.jui.i18n" + resourcesPackage = "ca.gosyer.jui.i18n" } android { diff --git a/i18n/src/commonMain/resources/MR/files/aboutlibraries.json b/i18n/src/commonMain/moko-resources/files/aboutlibraries.json similarity index 100% rename from i18n/src/commonMain/resources/MR/files/aboutlibraries.json rename to i18n/src/commonMain/moko-resources/files/aboutlibraries.json diff --git a/i18n/src/commonMain/resources/MR/files/languages.json b/i18n/src/commonMain/moko-resources/files/languages.json similarity index 100% rename from i18n/src/commonMain/resources/MR/files/languages.json rename to i18n/src/commonMain/moko-resources/files/languages.json diff --git a/i18n/src/commonMain/resources/MR/images/discord@0.5x.png b/i18n/src/commonMain/moko-resources/images/discord@0.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@0.5x.png rename to i18n/src/commonMain/moko-resources/images/discord@0.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@0.75x.png b/i18n/src/commonMain/moko-resources/images/discord@0.75x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@0.75x.png rename to i18n/src/commonMain/moko-resources/images/discord@0.75x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@1.5x.png b/i18n/src/commonMain/moko-resources/images/discord@1.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@1.5x.png rename to i18n/src/commonMain/moko-resources/images/discord@1.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@1x.png b/i18n/src/commonMain/moko-resources/images/discord@1x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@1x.png rename to i18n/src/commonMain/moko-resources/images/discord@1x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@2x.png b/i18n/src/commonMain/moko-resources/images/discord@2x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@2x.png rename to i18n/src/commonMain/moko-resources/images/discord@2x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@3x.png b/i18n/src/commonMain/moko-resources/images/discord@3x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@3x.png rename to i18n/src/commonMain/moko-resources/images/discord@3x.png diff --git a/i18n/src/commonMain/resources/MR/images/discord@4x.png b/i18n/src/commonMain/moko-resources/images/discord@4x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/discord@4x.png rename to i18n/src/commonMain/moko-resources/images/discord@4x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@0.5x.png b/i18n/src/commonMain/moko-resources/images/github@0.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@0.5x.png rename to i18n/src/commonMain/moko-resources/images/github@0.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@0.75x.png b/i18n/src/commonMain/moko-resources/images/github@0.75x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@0.75x.png rename to i18n/src/commonMain/moko-resources/images/github@0.75x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@1.5x.png b/i18n/src/commonMain/moko-resources/images/github@1.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@1.5x.png rename to i18n/src/commonMain/moko-resources/images/github@1.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@1x.png b/i18n/src/commonMain/moko-resources/images/github@1x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@1x.png rename to i18n/src/commonMain/moko-resources/images/github@1x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@2x.png b/i18n/src/commonMain/moko-resources/images/github@2x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@2x.png rename to i18n/src/commonMain/moko-resources/images/github@2x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@3x.png b/i18n/src/commonMain/moko-resources/images/github@3x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@3x.png rename to i18n/src/commonMain/moko-resources/images/github@3x.png diff --git a/i18n/src/commonMain/resources/MR/images/github@4x.png b/i18n/src/commonMain/moko-resources/images/github@4x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/github@4x.png rename to i18n/src/commonMain/moko-resources/images/github@4x.png diff --git a/i18n/src/commonMain/resources/MR/images/icon@1x.png b/i18n/src/commonMain/moko-resources/images/icon@1x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/icon@1x.png rename to i18n/src/commonMain/moko-resources/images/icon@1x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@0.5x.png b/i18n/src/commonMain/moko-resources/images/reddit@0.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@0.5x.png rename to i18n/src/commonMain/moko-resources/images/reddit@0.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@0.75x.png b/i18n/src/commonMain/moko-resources/images/reddit@0.75x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@0.75x.png rename to i18n/src/commonMain/moko-resources/images/reddit@0.75x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@1.5x.png b/i18n/src/commonMain/moko-resources/images/reddit@1.5x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@1.5x.png rename to i18n/src/commonMain/moko-resources/images/reddit@1.5x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@1x.png b/i18n/src/commonMain/moko-resources/images/reddit@1x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@1x.png rename to i18n/src/commonMain/moko-resources/images/reddit@1x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@2x.png b/i18n/src/commonMain/moko-resources/images/reddit@2x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@2x.png rename to i18n/src/commonMain/moko-resources/images/reddit@2x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@3x.png b/i18n/src/commonMain/moko-resources/images/reddit@3x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@3x.png rename to i18n/src/commonMain/moko-resources/images/reddit@3x.png diff --git a/i18n/src/commonMain/resources/MR/images/reddit@4x.png b/i18n/src/commonMain/moko-resources/images/reddit@4x.png similarity index 100% rename from i18n/src/commonMain/resources/MR/images/reddit@4x.png rename to i18n/src/commonMain/moko-resources/images/reddit@4x.png diff --git a/i18n/src/commonMain/resources/MR/values/ar/strings.xml b/i18n/src/commonMain/moko-resources/values/ar/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/ar/strings.xml rename to i18n/src/commonMain/moko-resources/values/ar/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/base/strings.xml b/i18n/src/commonMain/moko-resources/values/base/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/base/strings.xml rename to i18n/src/commonMain/moko-resources/values/base/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/cs/strings.xml b/i18n/src/commonMain/moko-resources/values/cs/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/cs/strings.xml rename to i18n/src/commonMain/moko-resources/values/cs/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/de/strings.xml b/i18n/src/commonMain/moko-resources/values/de/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/de/strings.xml rename to i18n/src/commonMain/moko-resources/values/de/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/es/strings.xml b/i18n/src/commonMain/moko-resources/values/es/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/es/strings.xml rename to i18n/src/commonMain/moko-resources/values/es/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/fa/strings.xml b/i18n/src/commonMain/moko-resources/values/fa/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/fa/strings.xml rename to i18n/src/commonMain/moko-resources/values/fa/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/fr/strings.xml b/i18n/src/commonMain/moko-resources/values/fr/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/fr/strings.xml rename to i18n/src/commonMain/moko-resources/values/fr/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/hi/strings.xml b/i18n/src/commonMain/moko-resources/values/hi/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/hi/strings.xml rename to i18n/src/commonMain/moko-resources/values/hi/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/in/strings.xml b/i18n/src/commonMain/moko-resources/values/in/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/in/strings.xml rename to i18n/src/commonMain/moko-resources/values/in/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/it/strings.xml b/i18n/src/commonMain/moko-resources/values/it/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/it/strings.xml rename to i18n/src/commonMain/moko-resources/values/it/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/kk/strings.xml b/i18n/src/commonMain/moko-resources/values/kk/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/kk/strings.xml rename to i18n/src/commonMain/moko-resources/values/kk/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/nb-rNO/strings.xml b/i18n/src/commonMain/moko-resources/values/nb-rNO/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/nb-rNO/strings.xml rename to i18n/src/commonMain/moko-resources/values/nb-rNO/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/nl/strings.xml b/i18n/src/commonMain/moko-resources/values/nl/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/nl/strings.xml rename to i18n/src/commonMain/moko-resources/values/nl/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/pt-rBR/strings.xml b/i18n/src/commonMain/moko-resources/values/pt-rBR/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/pt-rBR/strings.xml rename to i18n/src/commonMain/moko-resources/values/pt-rBR/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/ru/strings.xml b/i18n/src/commonMain/moko-resources/values/ru/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/ru/strings.xml rename to i18n/src/commonMain/moko-resources/values/ru/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/sv/strings.xml b/i18n/src/commonMain/moko-resources/values/sv/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/sv/strings.xml rename to i18n/src/commonMain/moko-resources/values/sv/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/tam/strings.xml b/i18n/src/commonMain/moko-resources/values/tam/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/tam/strings.xml rename to i18n/src/commonMain/moko-resources/values/tam/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/th/strings.xml b/i18n/src/commonMain/moko-resources/values/th/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/th/strings.xml rename to i18n/src/commonMain/moko-resources/values/th/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/ti/strings.xml b/i18n/src/commonMain/moko-resources/values/ti/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/ti/strings.xml rename to i18n/src/commonMain/moko-resources/values/ti/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/tr/strings.xml b/i18n/src/commonMain/moko-resources/values/tr/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/tr/strings.xml rename to i18n/src/commonMain/moko-resources/values/tr/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/uk/strings.xml b/i18n/src/commonMain/moko-resources/values/uk/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/uk/strings.xml rename to i18n/src/commonMain/moko-resources/values/uk/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/vi/strings.xml b/i18n/src/commonMain/moko-resources/values/vi/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/vi/strings.xml rename to i18n/src/commonMain/moko-resources/values/vi/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/zh-rCN/strings.xml b/i18n/src/commonMain/moko-resources/values/zh-rCN/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/zh-rCN/strings.xml rename to i18n/src/commonMain/moko-resources/values/zh-rCN/strings.xml diff --git a/i18n/src/commonMain/resources/MR/values/zh-rTW/strings.xml b/i18n/src/commonMain/moko-resources/values/zh-rTW/strings.xml similarity index 100% rename from i18n/src/commonMain/resources/MR/values/zh-rTW/strings.xml rename to i18n/src/commonMain/moko-resources/values/zh-rTW/strings.xml diff --git a/ios/build.gradle.kts b/ios/build.gradle.kts index 57504e1b..8ed03a94 100644 --- a/ios/build.gradle.kts +++ b/ios/build.gradle.kts @@ -1,14 +1,15 @@ import org.jetbrains.compose.compose import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) id(libs.plugins.ksp.get().pluginId) id(libs.plugins.compose.get().pluginId) id(libs.plugins.buildkonfig.get().pluginId) id(libs.plugins.kotlinter.get().pluginId) id(libs.plugins.aboutLibraries.get().pluginId) + id(libs.plugins.ktorfit.get().pluginId) } kotlin { diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts index 81127198..8b482c7d 100644 --- a/presentation/build.gradle.kts +++ b/presentation/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.compose.compose -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) id(libs.plugins.android.library.get().pluginId) id(libs.plugins.ksp.get().pluginId) id(libs.plugins.compose.get().pluginId) @@ -14,14 +14,22 @@ kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -57,7 +65,6 @@ kotlin { } val commonMain by getting { dependencies { - api(kotlin("stdlib-common")) api(libs.coroutines.core) api(libs.imageloader.core) api(libs.imageloader.moko) @@ -97,8 +104,6 @@ kotlin { val jvmMain by getting { dependencies { - api(kotlin("stdlib-jdk8")) - api(compose.desktop.currentOs) } } diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt index f0ce7891..59b8c8d1 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt @@ -8,4 +8,4 @@ package ca.gosyer.jui.ui.base.screen import cafe.adriel.voyager.core.screen.Screen -expect abstract class BaseScreen : Screen +expect abstract class BaseScreen() : Screen diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/settings/SettingsGeneralScreen.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/settings/SettingsGeneralScreen.kt index 99987266..a4f11cd5 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/settings/SettingsGeneralScreen.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/settings/SettingsGeneralScreen.kt @@ -104,7 +104,7 @@ class SettingsGeneralViewModel @Composable fun getLanguageChoices(): ImmutableMap { - val langJsonState = MR.files.languages.readTextAsync() + val langJsonState = MR.files.languages_json.readTextAsync() val langs by produceState(emptyMap(), langJsonState.value) { val langJson = langJsonState.value if (langJson != null) { diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/util/lang/Okio.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/util/lang/Okio.kt index 5ab14ae7..1c4b0d24 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/util/lang/Okio.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/util/lang/Okio.kt @@ -8,5 +8,7 @@ package ca.gosyer.jui.ui.util.lang import io.ktor.utils.io.ByteReadChannel import okio.Source +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext -expect suspend fun ByteReadChannel.toSource(): Source +expect suspend fun ByteReadChannel.toSource(context: CoroutineContext = EmptyCoroutineContext): Source diff --git a/presentation/src/desktopMain/kotlin/ca/gosyer/jui/ui/main/about/licenses/components/DesktopLicenses.kt b/presentation/src/desktopMain/kotlin/ca/gosyer/jui/ui/main/about/licenses/components/DesktopLicenses.kt index 629a3ed9..2e5efa21 100644 --- a/presentation/src/desktopMain/kotlin/ca/gosyer/jui/ui/main/about/licenses/components/DesktopLicenses.kt +++ b/presentation/src/desktopMain/kotlin/ca/gosyer/jui/ui/main/about/licenses/components/DesktopLicenses.kt @@ -19,7 +19,7 @@ actual fun getLicenses(): Libs? { null, ) { withIOContext { - val json = MR.files.aboutlibraries.readText() + val json = MR.files.aboutlibraries_json.readText() value = Libs.Builder().withJson(json).build() } } diff --git a/presentation/src/iosMain/kotlin/ca/gosyer/jui/ui/util/lang/IosOkio.kt b/presentation/src/iosMain/kotlin/ca/gosyer/jui/ui/util/lang/IosOkio.kt index 3bad8b84..23a0a4c6 100644 --- a/presentation/src/iosMain/kotlin/ca/gosyer/jui/ui/util/lang/IosOkio.kt +++ b/presentation/src/iosMain/kotlin/ca/gosyer/jui/ui/util/lang/IosOkio.kt @@ -6,9 +6,32 @@ package ca.gosyer.jui.ui.util.lang -import ca.gosyer.jui.core.io.source -import io.ktor.util.toByteArray import io.ktor.utils.io.ByteReadChannel +import io.ktor.utils.io.cancel +import io.ktor.utils.io.readAvailable +import kotlinx.coroutines.runBlocking +import okio.Buffer import okio.Source +import okio.Timeout +import kotlin.coroutines.CoroutineContext + +actual suspend fun ByteReadChannel.toSource(context: CoroutineContext): Source { + val channel = this + return object : okio.Source { + override fun close() { + channel.cancel() + } + + override fun read(sink: Buffer, byteCount: Long): Long { + val buffer = ByteArray(byteCount.toInt()) + val read = runBlocking(context) { channel.readAvailable(buffer) } + sink.write(buffer.reversedArray()) + return read.toLong() + } + + override fun timeout(): Timeout { + return Timeout() + } + } +} -actual suspend fun ByteReadChannel.toSource(): Source = this.toByteArray().source() diff --git a/presentation/src/jvmMain/kotlin/ca/gosyer/jui/ui/util/lang/JvmOkio.kt b/presentation/src/jvmMain/kotlin/ca/gosyer/jui/ui/util/lang/JvmOkio.kt index 1a70111b..72126954 100644 --- a/presentation/src/jvmMain/kotlin/ca/gosyer/jui/ui/util/lang/JvmOkio.kt +++ b/presentation/src/jvmMain/kotlin/ca/gosyer/jui/ui/util/lang/JvmOkio.kt @@ -10,5 +10,6 @@ import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.jvm.javaio.toInputStream import okio.Source import okio.source +import kotlin.coroutines.CoroutineContext -actual suspend fun ByteReadChannel.toSource(): Source = toInputStream().source() +actual suspend fun ByteReadChannel.toSource(context: CoroutineContext): Source = toInputStream().source() diff --git a/ui-core/build.gradle.kts b/ui-core/build.gradle.kts index bdf5eb77..82ad14f1 100644 --- a/ui-core/build.gradle.kts +++ b/ui-core/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.compose.compose -@Suppress("DSL_SCOPE_VIOLATION") plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) + id(libs.plugins.kotlin.compose.get().pluginId) id(libs.plugins.android.library.get().pluginId) id(libs.plugins.compose.get().pluginId) id(libs.plugins.buildkonfig.get().pluginId) @@ -13,14 +13,22 @@ kotlin { androidTarget { compilations { all { - kotlinOptions.jvmTarget = Config.androidJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.androidJvmTarget + } + } } } } jvm("desktop") { compilations { all { - kotlinOptions.jvmTarget = Config.desktopJvmTarget.toString() + compileTaskProvider.configure { + compilerOptions { + jvmTarget = Config.desktopJvmTarget + } + } } } } @@ -54,7 +62,6 @@ kotlin { } val commonMain by getting { dependencies { - api(kotlin("stdlib-common")) api(libs.coroutines.core) api(libs.imageloader.core) api(libs.imageloader.moko) @@ -81,7 +88,6 @@ kotlin { val jvmMain by getting { dependencies { - api(kotlin("stdlib-jdk8")) api(compose.desktop.currentOs) } }