diff --git a/client-py/build.gradle.kts b/client-py/build.gradle.kts index ea4fcb6..80193e3 100644 --- a/client-py/build.gradle.kts +++ b/client-py/build.gradle.kts @@ -68,6 +68,7 @@ kotlin { sourceSets { val nativeMain by getting { dependencies { + implementation(projects.shared) api(projects.pyCommon) api(projects.pyInternal) implementation(libs.kotlinx.datetime) diff --git a/client-py/src/nativeMain/kotlin/Client.kt b/client-py/src/nativeMain/kotlin/Client.kt index 7bd2daa..bcf9ae7 100644 --- a/client-py/src/nativeMain/kotlin/Client.kt +++ b/client-py/src/nativeMain/kotlin/Client.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.cbor.Cbor +import xyz.xfqlittlefan.fhraise.logger import kotlin.coroutines.resume import kotlin.experimental.ExperimentalNativeApi diff --git a/client-py/src/nativeMain/kotlin/Logger.kt b/client-py/src/nativeMain/kotlin/Logger.kt index 7cc5893..3b4c7f2 100644 --- a/client-py/src/nativeMain/kotlin/Logger.kt +++ b/client-py/src/nativeMain/kotlin/Logger.kt @@ -18,35 +18,12 @@ package xyz.xfqlittlefan.fhraise.py -import kotlinx.datetime.Clock -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toLocalDateTime - -class Logger internal constructor(private val tag: Any) { - @Deprecated("This constructor is for calling from C code only.", level = DeprecationLevel.HIDDEN) - constructor(tag: String) : this(" $tag" as Any) - - fun debug(message: String) { - println("Debug", message) - } - - fun info(message: String) { - println("Info", message) - } - - fun warn(message: String) { - println("Warn", message) - } - - fun error(message: String) { - println("Error", message) - } - - private fun println(level: String, message: String) { - message.split("\n").forEach { - println("${Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())} [$tag] $level: $it") - } - } +class Logger(tag: String) { + private val delegate = xyz.xfqlittlefan.fhraise.Logger(" $tag") + + fun trace(message: String) = delegate.trace(message) + fun debug(message: String) = delegate.debug(message) + fun info(message: String) = delegate.info(message) + fun warn(message: String) = delegate.warn(message) + fun error(message: String) = delegate.error(message) } - -internal val Any.logger: Logger get() = Logger(this::class.let { it.qualifiedName ?: it }) diff --git a/client-py/src/nativeMain/kotlin/Throwable.kt b/client-py/src/nativeMain/kotlin/Throwable.kt index 5e4519b..1370818 100644 --- a/client-py/src/nativeMain/kotlin/Throwable.kt +++ b/client-py/src/nativeMain/kotlin/Throwable.kt @@ -19,6 +19,7 @@ package xyz.xfqlittlefan.fhraise.py import kotlinx.cinterop.* +import xyz.xfqlittlefan.fhraise.logger import kotlin.experimental.ExperimentalNativeApi @ExperimentalForeignApi diff --git a/compose-app/build.gradle.kts b/compose-app/build.gradle.kts index 0e092ad..0f6ccc6 100644 --- a/compose-app/build.gradle.kts +++ b/compose-app/build.gradle.kts @@ -66,7 +66,7 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(projects.shared) + implementation(projects.sharedApp) implementation(projects.pyCommon) implementation(compose.runtime) implementation(compose.foundation) diff --git a/compose-app/compose-android.pro b/compose-app/compose-android.pro index 06187d3..1b722c3 100644 --- a/compose-app/compose-android.pro +++ b/compose-app/compose-android.pro @@ -1,6 +1,4 @@ -dontwarn java.lang.management.ManagementFactory -dontwarn java.lang.management.RuntimeMXBean -#-dontwarn org.slf4j.impl.StaticLoggerBinder --keep class org.slf4j.** { *; } -keepclassmembers class xyz.xfqlittlefan.fhraise.oauth.OAuthApplication$module$1 diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 9a6d7dd..0a76476 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -34,7 +34,7 @@ application { } dependencies { - implementation(projects.shared) + implementation(projects.sharedApp) implementation(projects.pyCommon) implementation(projects.pyInternal) implementation(libs.kotlinx.coroutines.core) diff --git a/settings.gradle.kts b/settings.gradle.kts index 108188e..dd60d73 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -36,6 +36,7 @@ dependencyResolutionManagement { } include(":shared") +include(":shared-app") include(":compose-app") include(":server") diff --git a/shared-app/build.gradle.kts b/shared-app/build.gradle.kts new file mode 100644 index 0000000..f504830 --- /dev/null +++ b/shared-app/build.gradle.kts @@ -0,0 +1,109 @@ +/* + * This file is part of Fhraise. + * Copyright (c) 2024 HSAS Foodies. All Rights Reserved. + * + * Fhraise is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Fhraise is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with Fhraise. If not, see . + */ + +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl + +plugins { + alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.kotlinSerialization) + alias(libs.plugins.androidLibrary) +} + +kotlin { + androidTarget { + @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } + } + + jvm() + + @OptIn(ExperimentalWasmDsl::class) wasmJs { + browser() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(projects.shared) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.datetime) + implementation(libs.ktor.client.core) + implementation(libs.ktor.http) + implementation(libs.ktor.resources) + } + } + + val commonJvmMain by creating { + dependsOn(commonMain) + dependencies { + implementation(libs.androidx.datastore.core) + implementation(libs.androidx.datastore.preferences.core) + implementation(libs.ktor.server.core) + implementation(libs.ktor.server.resources) + } + + tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java) { + exclude("androidx/datastore/**") + } + } + + val androidMain by getting { + dependsOn(commonJvmMain) + dependencies { + implementation(libs.androidx.datastore.preferences) + } + } + + val jvmMain by getting { + dependsOn(commonJvmMain) + } + + val wasmJsMain by getting { + dependencies {} + } + } +} + +val androidCompileSdk: String by project +val androidMinSdk: String by project + +android { + namespace = "xyz.xfqlittlefan.fhraise.sharedapp" + compileSdk = androidCompileSdk.toInt() + + defaultConfig { + minSdk = androidMinSdk.toInt() + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + splits { + abi { + isEnable = true + isUniversalApk = true + } + } +} diff --git a/shared/src/androidMain/kotlin/datastore/PreferencesDataStore.android.kt b/shared-app/src/androidMain/kotlin/datastore/PreferencesDataStore.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/datastore/PreferencesDataStore.android.kt rename to shared-app/src/androidMain/kotlin/datastore/PreferencesDataStore.android.kt diff --git a/shared/src/commonJvmMain/kotlin/datastore/DataStoreImpl.commonJvm.kt b/shared-app/src/commonJvmMain/kotlin/datastore/DataStoreImpl.commonJvm.kt similarity index 100% rename from shared/src/commonJvmMain/kotlin/datastore/DataStoreImpl.commonJvm.kt rename to shared-app/src/commonJvmMain/kotlin/datastore/DataStoreImpl.commonJvm.kt diff --git a/shared/src/commonJvmMain/kotlin/datastore/PreferencesDataStore.kt b/shared-app/src/commonJvmMain/kotlin/datastore/PreferencesDataStore.kt similarity index 100% rename from shared/src/commonJvmMain/kotlin/datastore/PreferencesDataStore.kt rename to shared-app/src/commonJvmMain/kotlin/datastore/PreferencesDataStore.kt diff --git a/shared/src/commonJvmMain/kotlin/http/Proxy.kt b/shared-app/src/commonJvmMain/kotlin/http/Proxy.kt similarity index 100% rename from shared/src/commonJvmMain/kotlin/http/Proxy.kt rename to shared-app/src/commonJvmMain/kotlin/http/Proxy.kt diff --git a/shared/src/commonJvmMain/kotlin/http/Result.kt b/shared-app/src/commonJvmMain/kotlin/http/Result.kt similarity index 100% rename from shared/src/commonJvmMain/kotlin/http/Result.kt rename to shared-app/src/commonJvmMain/kotlin/http/Result.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/core/Storage.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/core/Storage.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/core/Storage.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/core/Storage.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceKeys.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceKeys.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceKeys.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceKeys.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt diff --git a/shared/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesFactory.kt b/shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesFactory.kt similarity index 100% rename from shared/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesFactory.kt rename to shared-app/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesFactory.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Constants.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Constants.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Constants.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Constants.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/auth/Jwt.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/auth/Jwt.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/auth/Jwt.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/auth/Jwt.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferenceStateFlow.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferenceStateFlow.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferenceStateFlow.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferenceStateFlow.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStore.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStore.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStore.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStore.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStoreImpl.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStoreImpl.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStoreImpl.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/datastore/PreferencesDataStoreImpl.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/flow/IdMessageFlow.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/flow/IdMessageFlow.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/flow/IdMessageFlow.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/flow/IdMessageFlow.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Headers.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Headers.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Headers.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Headers.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Keycloak.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Keycloak.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Keycloak.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Keycloak.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Resources.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Resources.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Resources.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/http/Resources.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/link/AppUri.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/link/AppUri.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/link/AppUri.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/link/AppUri.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/pattern/User.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/pattern/User.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/pattern/User.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/pattern/User.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/routes/Api.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/routes/Api.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/routes/Api.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/routes/Api.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/serializers/InstantSerializers.kt b/shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/serializers/InstantSerializers.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/serializers/InstantSerializers.kt rename to shared-app/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/serializers/InstantSerializers.kt diff --git a/shared/src/jvmMain/kotlin/datastore/PreferencesDataStore.jvm.kt b/shared-app/src/jvmMain/kotlin/datastore/PreferencesDataStore.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/datastore/PreferencesDataStore.jvm.kt rename to shared-app/src/jvmMain/kotlin/datastore/PreferencesDataStore.jvm.kt diff --git a/shared/src/wasmJsMain/kotlin/datastore/DataStoreImpl.wasmJs.kt b/shared-app/src/wasmJsMain/kotlin/datastore/DataStoreImpl.wasmJs.kt similarity index 100% rename from shared/src/wasmJsMain/kotlin/datastore/DataStoreImpl.wasmJs.kt rename to shared-app/src/wasmJsMain/kotlin/datastore/DataStoreImpl.wasmJs.kt diff --git a/shared/src/wasmJsMain/kotlin/datastore/PreferencesBrowserStorage.kt b/shared-app/src/wasmJsMain/kotlin/datastore/PreferencesBrowserStorage.kt similarity index 100% rename from shared/src/wasmJsMain/kotlin/datastore/PreferencesBrowserStorage.kt rename to shared-app/src/wasmJsMain/kotlin/datastore/PreferencesBrowserStorage.kt diff --git a/shared/src/wasmJsMain/kotlin/datastore/PreferencesDataStore.wasmJs.kt b/shared-app/src/wasmJsMain/kotlin/datastore/PreferencesDataStore.wasmJs.kt similarity index 100% rename from shared/src/wasmJsMain/kotlin/datastore/PreferencesDataStore.wasmJs.kt rename to shared-app/src/wasmJsMain/kotlin/datastore/PreferencesDataStore.wasmJs.kt diff --git a/shared/src/wasmJsMain/kotlin/datastore/PreferencesDataStoreFactory.kt b/shared-app/src/wasmJsMain/kotlin/datastore/PreferencesDataStoreFactory.kt similarity index 100% rename from shared/src/wasmJsMain/kotlin/datastore/PreferencesDataStoreFactory.kt rename to shared-app/src/wasmJsMain/kotlin/datastore/PreferencesDataStoreFactory.kt diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index fe30cd4..9d7df1d 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -27,10 +27,6 @@ plugins { } kotlin { - @OptIn(ExperimentalWasmDsl::class) wasmJs { - browser() - } - androidTarget { @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { jvmTarget.set(JvmTarget.JVM_17) @@ -39,46 +35,54 @@ kotlin { jvm() + @OptIn(ExperimentalWasmDsl::class) wasmJs { + browser() + } + + linuxArm64() + linuxX64() + mingwX64() + applyDefaultHierarchyTemplate() sourceSets { val commonMain by getting { dependencies { - implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.datetime) - implementation(libs.ktor.client.core) - implementation(libs.ktor.http) - implementation(libs.ktor.resources) } } val commonJvmMain by creating { dependsOn(commonMain) dependencies { - implementation(libs.androidx.datastore.core) - implementation(libs.androidx.datastore.preferences.core) - implementation(libs.ktor.server.core) - implementation(libs.ktor.server.resources) - } - - tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java) { - exclude("androidx/datastore/**") + implementation(libs.slf4j.api) } } val androidMain by getting { dependsOn(commonJvmMain) dependencies { - implementation(libs.androidx.datastore.preferences) + implementation(libs.logback.android) } } val jvmMain by getting { dependsOn(commonJvmMain) + dependencies { + implementation(libs.logback) + } + } + + val notJvmMain by creating { + dependsOn(commonMain) } val wasmJsMain by getting { - dependencies {} + dependsOn(notJvmMain) + } + + val nativeMain by getting { + dependsOn(notJvmMain) } } } @@ -92,6 +96,7 @@ android { defaultConfig { minSdk = androidMinSdk.toInt() + consumerProguardFiles("consumer-rules.pro") } compileOptions { diff --git a/shared/proguard-android.pro b/shared/proguard-android.pro new file mode 100644 index 0000000..ce79d73 --- /dev/null +++ b/shared/proguard-android.pro @@ -0,0 +1 @@ +-keep class org.slf4j.** { *; } diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Logger.kt b/shared/src/commonMain/kotlin/Logger.kt similarity index 100% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Logger.kt rename to shared/src/commonMain/kotlin/Logger.kt diff --git a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Platform.kt b/shared/src/commonMain/kotlin/Platform.kt similarity index 75% rename from shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Platform.kt rename to shared/src/commonMain/kotlin/Platform.kt index 06f7883..1b2741f 100644 --- a/shared/src/commonMain/kotlin/xyz/xfqlittlefan/fhraise/Platform.kt +++ b/shared/src/commonMain/kotlin/Platform.kt @@ -37,6 +37,20 @@ sealed interface DesktopPlatform : JvmPlatform { companion object } -object WasmPlatform : Platform { +data object WasmPlatform : Platform { override val name: String = "Web with Kotlin/Wasm" } + +sealed interface NativePlatform : Platform { + data object LinuxArm64 : NativePlatform { + override val name: String = "Linux Arm64" + } + + data object LinuxX64 : NativePlatform { + override val name: String = "Linux x64" + } + + data object WindowsX64 : NativePlatform { + override val name: String = "Windows x64" + } +} diff --git a/shared/src/linuxArm64Main/kotlin/Platform.linuxArm64.kt b/shared/src/linuxArm64Main/kotlin/Platform.linuxArm64.kt new file mode 100644 index 0000000..192d73e --- /dev/null +++ b/shared/src/linuxArm64Main/kotlin/Platform.linuxArm64.kt @@ -0,0 +1,21 @@ +/* + * This file is part of Fhraise. + * Copyright (c) 2024 HSAS Foodies. All Rights Reserved. + * + * Fhraise is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Fhraise is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with Fhraise. If not, see . + */ + +package xyz.xfqlittlefan.fhraise + +actual val platform: Platform = NativePlatform.LinuxArm64 diff --git a/client-py/src/nativeMain/kotlin/Types.kt b/shared/src/linuxX64Main/kotlin/Platform.linuxX64.kt similarity index 89% rename from client-py/src/nativeMain/kotlin/Types.kt rename to shared/src/linuxX64Main/kotlin/Platform.linuxX64.kt index 29ae811..51f8b8e 100644 --- a/client-py/src/nativeMain/kotlin/Types.kt +++ b/shared/src/linuxX64Main/kotlin/Platform.linuxX64.kt @@ -16,4 +16,6 @@ * with Fhraise. If not, see . */ -package xyz.xfqlittlefan.fhraise.py +package xyz.xfqlittlefan.fhraise + +actual val platform: Platform = NativePlatform.LinuxX64 diff --git a/shared/src/mingwX64Main/kotlin/Platform.mingwX64.kt b/shared/src/mingwX64Main/kotlin/Platform.mingwX64.kt new file mode 100644 index 0000000..e5fe07b --- /dev/null +++ b/shared/src/mingwX64Main/kotlin/Platform.mingwX64.kt @@ -0,0 +1,21 @@ +/* + * This file is part of Fhraise. + * Copyright (c) 2024 HSAS Foodies. All Rights Reserved. + * + * Fhraise is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Fhraise is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with Fhraise. If not, see . + */ + +package xyz.xfqlittlefan.fhraise + +actual val platform: Platform = NativePlatform.WindowsX64 diff --git a/shared/src/nativeMain/kotlin/Logger.native.kt b/shared/src/nativeMain/kotlin/Logger.native.kt new file mode 100644 index 0000000..d4d2dfb --- /dev/null +++ b/shared/src/nativeMain/kotlin/Logger.native.kt @@ -0,0 +1,41 @@ +/* + * This file is part of Fhraise. + * Copyright (c) 2024 HSAS Foodies. All Rights Reserved. + * + * Fhraise is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Fhraise is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with Fhraise. If not, see . + */ + +package xyz.xfqlittlefan.fhraise + +actual class Logger actual constructor(actual val name: String) : MyLogger { + actual fun trace(message: Any, throwable: Throwable?) { + getMessage("TRACE", message, throwable, true).forEach { println(it) } + } + + actual fun debug(message: Any, throwable: Throwable?) { + getMessage("DEBUG", message, throwable, true).forEach { println(it) } + } + + actual fun info(message: Any, throwable: Throwable?) { + getMessage("INFO", message, throwable).forEach { println(it) } + } + + actual fun warn(message: Any, throwable: Throwable?) { + getMessage("WARN", message, throwable).forEach { println(it) } + } + + actual fun error(message: Any, throwable: Throwable?) { + getMessage("ERROR", message, throwable).forEach { println(it) } + } +} diff --git a/shared/src/notJvmMain/kotlin/Logger.kt b/shared/src/notJvmMain/kotlin/Logger.kt new file mode 100644 index 0000000..8f236d3 --- /dev/null +++ b/shared/src/notJvmMain/kotlin/Logger.kt @@ -0,0 +1,41 @@ +/* + * This file is part of Fhraise. + * Copyright (c) 2024 HSAS Foodies. All Rights Reserved. + * + * Fhraise is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Fhraise is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with Fhraise. If not, see . + */ + +package xyz.xfqlittlefan.fhraise + +import kotlinx.datetime.Clock +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime + +interface MyLogger { + fun Logger.getMessage( + level: String, message: Any, throwable: Throwable?, stackTrace: Boolean = false + ): List { + var result = message.toString() + if (throwable != null) { + result += "\n$throwable" + if (stackTrace) { + result += "\n" + throwable.stackTraceToString() + } + } + + return result.split("\n").map { + "${Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())} [$name] $level: $it" + } + } +} diff --git a/shared/src/wasmJsMain/kotlin/Logger.wasmJs.kt b/shared/src/wasmJsMain/kotlin/Logger.wasmJs.kt index 510578d..defa47d 100644 --- a/shared/src/wasmJsMain/kotlin/Logger.wasmJs.kt +++ b/shared/src/wasmJsMain/kotlin/Logger.wasmJs.kt @@ -18,12 +18,9 @@ package xyz.xfqlittlefan.fhraise -import kotlinx.datetime.Clock -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toLocalDateTime import xyz.xfqlittlefan.fhraise.js.console -actual class Logger actual constructor(actual val name: String) { +actual class Logger actual constructor(actual val name: String) : MyLogger { actual fun trace(message: Any, throwable: Throwable?) { getMessage("TRACE", message, throwable, true).forEach { console.debug(it) } } @@ -43,20 +40,4 @@ actual class Logger actual constructor(actual val name: String) { actual fun error(message: Any, throwable: Throwable?) { getMessage("ERROR", message, throwable).forEach { console.error(it) } } - - private fun getMessage( - level: String, message: Any, throwable: Throwable?, stackTrace: Boolean = false - ): List { - var result = message.toString() - if (throwable != null) { - result += "\n$throwable" - if (stackTrace) { - result += "\n" + throwable.stackTraceToString() - } - } - - return result.split("\n").map { - "${Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())} [$name] $level: $it" - } - } }