refactor: centralize domain models into core.model module
This commit is contained in:
+3
-3
@@ -1,15 +1,15 @@
|
||||
package fr.ajaury.gwenedeg.player.data
|
||||
|
||||
import fr.ajaury.gwenedeg.core.logging.domain.Logger
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import fr.ajaury.gwenedeg.player.domain.AudioPlayer
|
||||
import fr.ajaury.gwenedeg.player.domain.PlaybackRepository
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackTiming
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.resourcereader.data.domain.ResourceReader
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.GetCurrentSubtitleIndexUseCase
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.Subtitle
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository
|
||||
import fr.ajaury.gwenedeg.subtitle.model.Subtitle
|
||||
import gwenedeg.shared.generated.resources.Res
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.delay
|
||||
@@ -91,7 +91,7 @@ internal class PlaybackRepositoryImpl(
|
||||
val translationContent = record.translationSubtitleResourcePath
|
||||
?.let { resourceReader.read(resourcePath = it) }
|
||||
subtitleRepository.getSubtitle(
|
||||
content = content,
|
||||
transcriptionContent = content,
|
||||
translationContent = translationContent,
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package fr.ajaury.gwenedeg.player.domain
|
||||
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackTiming
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.Subtitle
|
||||
import fr.ajaury.gwenedeg.subtitle.model.Subtitle
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlin.time.Duration
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package fr.ajaury.gwenedeg.player.model
|
||||
|
||||
data class PlaybackTiming(
|
||||
val positionMs: Long = 0L,
|
||||
val durationMs: Long = 0L,
|
||||
) {
|
||||
val progress: Float
|
||||
get() = if (durationMs > 0) (positionMs.toFloat() / durationMs).coerceIn(0f, 1f) else 0f
|
||||
}
|
||||
@@ -22,11 +22,12 @@ import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import fr.ajaury.gwenedeg.core.model.Phrase
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackTiming
|
||||
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerUiState
|
||||
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleLine
|
||||
import fr.ajaury.gwenedeg.subtitle.model.SubtitleLine
|
||||
import fr.ajaury.gwenedeg.theme.GwenedegTheme
|
||||
import org.koin.compose.viewmodel.koinViewModel
|
||||
import org.koin.core.parameter.parametersOf
|
||||
@@ -133,9 +134,27 @@ fun PlayerScreen(
|
||||
|
||||
private val previewSubtitleLines =
|
||||
listOf(
|
||||
SubtitleLine(startTime = 0.milliseconds, text = "Demat deoc'h !", translation = "Bonjour !"),
|
||||
SubtitleLine(startTime = 4310.milliseconds, text = "Kenavo !", translation = "Au revoir !"),
|
||||
SubtitleLine(startTime = 7350.milliseconds, text = "Kenavo emberr !", translation = "À ce soir !"),
|
||||
SubtitleLine(
|
||||
startTime = 0.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Demat deoc'h !",
|
||||
translation = "Bonjour !",
|
||||
),
|
||||
),
|
||||
SubtitleLine(
|
||||
startTime = 4310.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Kenavo !",
|
||||
translation = "Au revoir !",
|
||||
),
|
||||
),
|
||||
SubtitleLine(
|
||||
startTime = 7350.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Kenavo emberr !",
|
||||
translation = "À ce soir !",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@Preview
|
||||
|
||||
@@ -27,7 +27,8 @@ import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleLine
|
||||
import fr.ajaury.gwenedeg.core.model.Phrase
|
||||
import fr.ajaury.gwenedeg.subtitle.model.SubtitleLine
|
||||
import fr.ajaury.gwenedeg.theme.GwenedegTheme
|
||||
import kotlin.math.abs
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
@@ -132,12 +133,12 @@ private fun Subtitle(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(2.dp),
|
||||
) {
|
||||
MainTextLine(
|
||||
text = line.text,
|
||||
TranscriptionLine(
|
||||
text = line.phrase.transcription,
|
||||
isCurrent = isCurrent,
|
||||
contentColor = contentColor,
|
||||
)
|
||||
line.translation?.let { translation ->
|
||||
line.phrase.translation?.let { translation ->
|
||||
TranslationLine(
|
||||
text = translation,
|
||||
isCurrent = isCurrent,
|
||||
@@ -148,7 +149,7 @@ private fun Subtitle(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun MainTextLine(
|
||||
private fun TranscriptionLine(
|
||||
text: String,
|
||||
isCurrent: Boolean,
|
||||
contentColor: Color,
|
||||
@@ -191,9 +192,27 @@ private fun TranslationLine(
|
||||
|
||||
private val previewSubtitleLines =
|
||||
listOf(
|
||||
SubtitleLine(startTime = 0.milliseconds, text = "Demat deoc'h !", translation = "Bonjour !"),
|
||||
SubtitleLine(startTime = 4310.milliseconds, text = "Kenavo !", translation = "Au revoir !"),
|
||||
SubtitleLine(startTime = 7350.milliseconds, text = "Kenavo emberr !", translation = "À ce soir !"),
|
||||
SubtitleLine(
|
||||
startTime = 0.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Demat deoc'h !",
|
||||
translation = "Bonjour !",
|
||||
),
|
||||
),
|
||||
SubtitleLine(
|
||||
startTime = 4310.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Kenavo !",
|
||||
translation = "Au revoir !",
|
||||
),
|
||||
),
|
||||
SubtitleLine(
|
||||
startTime = 7350.milliseconds,
|
||||
phrase = Phrase(
|
||||
transcription = "Kenavo emberr !",
|
||||
translation = "À ce soir !",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@Preview
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel
|
||||
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackTiming
|
||||
import fr.ajaury.gwenedeg.subtitle.domain.SubtitleLine
|
||||
import fr.ajaury.gwenedeg.subtitle.model.SubtitleLine
|
||||
|
||||
data class PlayerUiState(
|
||||
val recordTitle: String = "",
|
||||
|
||||
+1
-1
@@ -3,10 +3,10 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import fr.ajaury.gwenedeg.core.logging.domain.Logger
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import fr.ajaury.gwenedeg.player.domain.AudioSessionManager
|
||||
import fr.ajaury.gwenedeg.player.domain.PlaybackRepository
|
||||
import fr.ajaury.gwenedeg.player.model.PlaybackState
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package fr.ajaury.gwenedeg.records.data
|
||||
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package fr.ajaury.gwenedeg.records.domain
|
||||
|
||||
data class Record(
|
||||
val id: Int,
|
||||
val index: Int,
|
||||
val title: String,
|
||||
val titleTranslation: String? = null,
|
||||
val audioResourcePath: String,
|
||||
val subtitleResourcePath: String,
|
||||
val translationSubtitleResourcePath: String? = null,
|
||||
)
|
||||
@@ -1,5 +1,6 @@
|
||||
package fr.ajaury.gwenedeg.records.domain
|
||||
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface RecordRepository {
|
||||
|
||||
@@ -14,7 +14,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
|
||||
@Composable
|
||||
fun RecordView(
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package fr.ajaury.gwenedeg.records.ui
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.safeContentPadding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -14,7 +12,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
|
||||
import org.koin.compose.viewmodel.koinViewModel
|
||||
|
||||
|
||||
+1
-1
@@ -2,8 +2,8 @@ package fr.ajaury.gwenedeg.records.ui.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
||||
import fr.ajaury.gwenedeg.core.model.Record
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
|
||||
Reference in New Issue
Block a user