refactor: restructure logging package, separate into data, domain, and di modules

This commit is contained in:
2026-06-19 17:44:03 +02:00
parent 2938fc7fa8
commit fdeeee9bf8
9 changed files with 58 additions and 32 deletions
+4
View File
@@ -41,6 +41,10 @@ kotlin {
commonMain.dependencies {
// Logging
implementation(libs.kermit)
// DI
implementation(project.dependencies.platform(libs.koin.bom))
implementation(libs.koin.core)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
@@ -1,26 +0,0 @@
package fr.ajaury.gwenedeg.core.logging
import co.touchlab.kermit.Logger as Kermit
/**
* Kermit-backed implementation (adapter) of the [Logger] port.
*/
class KermitLogger(
private val tag: String = "Gwenedeg",
) : Logger {
override fun debug(message: String, throwable: Throwable?) {
Kermit.d(throwable = throwable, tag = tag) { message }
}
override fun info(message: String, throwable: Throwable?) {
Kermit.i(throwable = throwable, tag = tag) { message }
}
override fun warning(message: String, throwable: Throwable?) {
Kermit.w(throwable = throwable, tag = tag) { message }
}
override fun error(message: String, throwable: Throwable?) {
Kermit.e(throwable = throwable, tag = tag) { message }
}
}
@@ -0,0 +1,39 @@
package fr.ajaury.gwenedeg.core.logging.data
import fr.ajaury.gwenedeg.core.logging.domain.Logger
internal class KermitLogger(
private val tag: String = "Gwenedeg",
) : Logger {
override fun debug(
message: String,
throwable: Throwable?,
) {
co.touchlab.kermit.Logger
.d(throwable = throwable, tag = tag) { message }
}
override fun info(
message: String,
throwable: Throwable?,
) {
co.touchlab.kermit.Logger
.i(throwable = throwable, tag = tag) { message }
}
override fun warning(
message: String,
throwable: Throwable?,
) {
co.touchlab.kermit.Logger
.w(throwable = throwable, tag = tag) { message }
}
override fun error(
message: String,
throwable: Throwable?,
) {
co.touchlab.kermit.Logger
.e(throwable = throwable, tag = tag) { message }
}
}
@@ -0,0 +1,10 @@
package fr.ajaury.gwenedeg.core.logging.di
import fr.ajaury.gwenedeg.core.logging.data.KermitLogger
import fr.ajaury.gwenedeg.core.logging.domain.Logger
import org.koin.core.module.Module
import org.koin.dsl.module
val loggingModule: Module = module {
single<Logger> { KermitLogger() }
}
@@ -1,4 +1,4 @@
package fr.ajaury.gwenedeg.core.logging
package fr.ajaury.gwenedeg.core.logging.domain
/**
* Logging abstraction so the rest of the app depends on this interface
@@ -7,6 +7,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation3.runtime.NavEntry
import androidx.navigation3.ui.NavDisplay
import androidx.savedstate.compose.serialization.serializers.SnapshotStateListSerializer
import fr.ajaury.gwenedeg.core.logging.di.loggingModule
import fr.ajaury.gwenedeg.di.sharedModule
import fr.ajaury.gwenedeg.navigation.Route
import fr.ajaury.gwenedeg.player.di.audioPlayerModule
@@ -24,6 +25,7 @@ fun App() {
modules(
sharedModule,
audioPlayerModule,
loggingModule
)
},
) {
@@ -1,7 +1,5 @@
package fr.ajaury.gwenedeg.di
import fr.ajaury.gwenedeg.core.logging.KermitLogger
import fr.ajaury.gwenedeg.core.logging.Logger
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
import fr.ajaury.gwenedeg.records.domain.RecordRepository
@@ -16,7 +14,6 @@ import org.koin.core.module.dsl.viewModelOf
import org.koin.dsl.module
val sharedModule = module {
single<Logger> { KermitLogger() }
factoryOf(::InMemoryRecordRepository) { bind<RecordRepository>() }
factoryOf(::LrcParser)
factoryOf(::LrcSubtitleRepository) { bind<SubtitleRepository>() }
@@ -2,7 +2,7 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import fr.ajaury.gwenedeg.core.logging.Logger
import fr.ajaury.gwenedeg.core.logging.domain.Logger
import fr.ajaury.gwenedeg.player.domain.AudioPlayer
import fr.ajaury.gwenedeg.player.domain.AudioSessionManager
import fr.ajaury.gwenedeg.player.model.PlaybackState
@@ -1,6 +1,6 @@
package fr.ajaury.gwenedeg.subtitle.data
import fr.ajaury.gwenedeg.core.logging.Logger
import fr.ajaury.gwenedeg.core.logging.domain.Logger
import fr.ajaury.gwenedeg.subtitle.domain.Subtitle
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository
import fr.ajaury.gwenedeg.subtitle.model.CantGetSubtitleException