refactor: restructure logging package, separate into data, domain, and di modules
This commit is contained in:
@@ -41,6 +41,10 @@ kotlin {
|
|||||||
commonMain.dependencies {
|
commonMain.dependencies {
|
||||||
// Logging
|
// Logging
|
||||||
implementation(libs.kermit)
|
implementation(libs.kermit)
|
||||||
|
|
||||||
|
// DI
|
||||||
|
implementation(project.dependencies.platform(libs.koin.bom))
|
||||||
|
implementation(libs.koin.core)
|
||||||
}
|
}
|
||||||
commonTest.dependencies {
|
commonTest.dependencies {
|
||||||
implementation(libs.kotlin.test)
|
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 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+39
@@ -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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -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
-1
@@ -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
|
* 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.runtime.NavEntry
|
||||||
import androidx.navigation3.ui.NavDisplay
|
import androidx.navigation3.ui.NavDisplay
|
||||||
import androidx.savedstate.compose.serialization.serializers.SnapshotStateListSerializer
|
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.di.sharedModule
|
||||||
import fr.ajaury.gwenedeg.navigation.Route
|
import fr.ajaury.gwenedeg.navigation.Route
|
||||||
import fr.ajaury.gwenedeg.player.di.audioPlayerModule
|
import fr.ajaury.gwenedeg.player.di.audioPlayerModule
|
||||||
@@ -24,6 +25,7 @@ fun App() {
|
|||||||
modules(
|
modules(
|
||||||
sharedModule,
|
sharedModule,
|
||||||
audioPlayerModule,
|
audioPlayerModule,
|
||||||
|
loggingModule
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package fr.ajaury.gwenedeg.di
|
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.player.ui.viewmodel.PlayerViewModel
|
||||||
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
|
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
|
||||||
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
||||||
@@ -16,7 +14,6 @@ import org.koin.core.module.dsl.viewModelOf
|
|||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val sharedModule = module {
|
val sharedModule = module {
|
||||||
single<Logger> { KermitLogger() }
|
|
||||||
factoryOf(::InMemoryRecordRepository) { bind<RecordRepository>() }
|
factoryOf(::InMemoryRecordRepository) { bind<RecordRepository>() }
|
||||||
factoryOf(::LrcParser)
|
factoryOf(::LrcParser)
|
||||||
factoryOf(::LrcSubtitleRepository) { bind<SubtitleRepository>() }
|
factoryOf(::LrcSubtitleRepository) { bind<SubtitleRepository>() }
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel
|
|||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
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.AudioPlayer
|
||||||
import fr.ajaury.gwenedeg.player.domain.AudioSessionManager
|
import fr.ajaury.gwenedeg.player.domain.AudioSessionManager
|
||||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
package fr.ajaury.gwenedeg.subtitle.data
|
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.Subtitle
|
||||||
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository
|
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository
|
||||||
import fr.ajaury.gwenedeg.subtitle.model.CantGetSubtitleException
|
import fr.ajaury.gwenedeg.subtitle.model.CantGetSubtitleException
|
||||||
|
|||||||
Reference in New Issue
Block a user