Skip to content

Commit

Permalink
initial work
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed Nov 1, 2023
1 parent 32e4369 commit c220b64
Show file tree
Hide file tree
Showing 9 changed files with 223 additions and 1 deletion.
3 changes: 3 additions & 0 deletions app/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ kotlin {
api(libs.ktor)
api(libs.ktor.content.negotiation)
api(libs.ktor.serialization.json)

api(project(":model"))
api(project(":network"))
}
}
val androidMain by getting {
Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ instesx = "0.1.0-alpha10"
kamel = "0.8.2"
kodein = "7.20.2"
kotlin = "1.9.10"
ksoup = "0.2.1"
ksp = "1.9.10-1.0.13"
ktor = "2.3.5"
ktorfit = "1.9.1"
Expand Down Expand Up @@ -59,13 +60,15 @@ insetsx = { group = "com.moriatsushi.insetsx", name = "insetsx", version.ref = "
kamel = { group = "media.kamel", name = "kamel-image", version.ref = "kamel" }
kodein = { group = "org.kodein.di", name = "kodein-di", version.ref = "kodein" }
kodein-compose = { group = "org.kodein.di", name = "kodein-di-framework-compose", version.ref = "kodein" }
ksoup = { group = "com.mohamedrejeb.ksoup", name = "ksoup-html", version.ref = "ksoup" }
ktor = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
ktor-android = { group = "io.ktor", name = "ktor-client-okhttp", version.ref = "ktor" }
ktor-apple = { group = "io.ktor", name = "ktor-client-darwin", version.ref = "ktor" }
ktor-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" }
ktor-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" }
ktor-serialization-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktorfit = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-lib", version.ref = "ktorfit" }
ktorfit-ksp = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-ksp", version.ref = "ktorfit" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
moko-resources-compose = { group = "dev.icerock.moko", name = "resources-compose", version.ref = "moko-resources" }
moko-resources-generator = { group = "dev.icerock.moko", name = "resources-generator", version.ref = "moko-resources" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
62 changes: 62 additions & 0 deletions model/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
plugins {
alias(libs.plugins.multiplatform)
alias(libs.plugins.serialization)
alias(libs.plugins.android.library)
id ("kotlin-parcelize") apply false
}

val artifact = VersionCatalog.artifactName("model")
group = artifact

kotlin {
jvm()
androidTarget()
iosX64()
iosArm64()
iosSimulatorArm64()

sourceSets {
val commonMain by getting {
dependencies {
api(libs.parcelable)
api(libs.serialization.json)
api(libs.coroutines)
}
}

val jvmMain by getting {
dependsOn(commonMain)
}

val androidMain by getting {
dependsOn(jvmMain)
apply(plugin = "kotlin-parcelize")
}

val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
}
}

android {
compileSdk = Configuration.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")

namespace = artifact

defaultConfig {
minSdk = Configuration.minSdk
}

compileOptions {
sourceCompatibility = CompileOptions.sourceCompatibility
targetCompatibility = CompileOptions.targetCompatibility
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package dev.datlag.burningseries.model.common

import kotlin.math.max
import kotlin.math.min

fun <T> listFrom(vararg list: Collection<T>): List<T> {
return mutableListOf<T>().apply {
list.forEach(::addAll)
}
}

fun <T> setFrom(vararg list: Collection<T>): Set<T> {
return mutableSetOf<T>().apply {
list.forEach(::addAll)
}
}

fun <T> T.asList(): List<T> {
return listOf(this)
}

fun <T> List<T>.safeSubList(from: Int, to: Int): List<T> {
if (this.isEmpty()) {
return this
}

val safeFrom = max(min(from, lastIndex), 0)
return this.subList(
safeFrom,
max(safeFrom, min(to, lastIndex))
)
}

fun Collection<String>.contains(element: String, ignoreCase: Boolean): Boolean {
return if (ignoreCase) {
this.any { it.equals(element, true) }
} else {
this.contains(element)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package dev.datlag.burningseries.model.common

import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow

fun <T> scopeCatching(block: () -> T): Result<T> = try {
Result.success(block())
} catch (e: Throwable) {
if (e is CancellationException) {
throw e
}
Result.failure(e)
}

suspend fun <T> suspendCatching(block: suspend CoroutineScope.() -> T): Result<T> = coroutineScope {
try {
Result.success(
block(this)
)
} catch (e: Throwable) {
if (e is CancellationException) {
throw e
}
Result.failure(e)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package dev.datlag.burningseries.model.common

fun String.getDigitsOrNull(): String? {
val replaced = this.replace("\\D+".toRegex(), String())
return replaced.ifBlank {
null
}
}
75 changes: 75 additions & 0 deletions network/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
plugins {
alias(libs.plugins.multiplatform)
alias(libs.plugins.serialization)
alias(libs.plugins.ksp)
alias(libs.plugins.android.library)
alias(libs.plugins.ktorfit) apply false
}

val artifact = VersionCatalog.artifactName("network")

group = artifact

kotlin {
jvm()
androidTarget()
iosX64()
iosArm64()
iosSimulatorArm64()

sourceSets {
val commonMain by getting {
dependencies {
api(project(":model"))

api(libs.ktorfit)
api(libs.serialization.json)
api(libs.coroutines)
api(libs.flowredux)
}
}

val jvmMain by getting {
dependsOn(commonMain)
}

val androidMain by getting {
dependsOn(jvmMain)
}

val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
}
}

android {
compileSdk = Configuration.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")

namespace = artifact

defaultConfig {
minSdk = Configuration.minSdk
}

compileOptions {
sourceCompatibility = CompileOptions.sourceCompatibility
targetCompatibility = CompileOptions.targetCompatibility
}
}

dependencies {
add("kspCommonMainMetadata", libs.ktorfit.ksp)
add("kspAndroid", libs.ktorfit.ksp)
add("kspJvm", libs.ktorfit.ksp)
add("kspIosX64", libs.ktorfit.ksp)
add("kspIosArm64", libs.ktorfit.ksp)
add("kspIosSimulatorArm64", libs.ktorfit.ksp)
}
3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ include(":app:shared")
include(":app:android")
include(":app:desktop")

include(":model")
include(":network")

pluginManagement {
repositories {
google()
Expand Down

0 comments on commit c220b64

Please sign in to comment.