diff --git a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioSessionManager.kt b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioSessionManager.kt deleted file mode 100644 index 48aeeca..0000000 --- a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioSessionManager.kt +++ /dev/null @@ -1,9 +0,0 @@ -package fr.ajaury.gwenedeg.player - -class AndroidAudioSessionManager : AudioSessionManager { - override fun activate() { - } - - override fun deactivate() { - } -} diff --git a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioPlayer.kt b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioPlayer.kt similarity index 92% rename from core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioPlayer.kt rename to core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioPlayer.kt index 6f1c040..4239b30 100644 --- a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/AndroidAudioPlayer.kt +++ b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioPlayer.kt @@ -1,17 +1,19 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data import android.content.Context import androidx.media3.common.C import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.exoplayer.ExoPlayer +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.model.PlaybackState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds -class AndroidAudioPlayer( +internal class AndroidAudioPlayer( context: Context, ) : AudioPlayer { private val player = ExoPlayer.Builder(context).build() diff --git a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioSessionManager.kt b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioSessionManager.kt new file mode 100644 index 0000000..09c5f34 --- /dev/null +++ b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/data/AndroidAudioSessionManager.kt @@ -0,0 +1,11 @@ +package fr.ajaury.gwenedeg.player.data + +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager + +internal class AndroidAudioSessionManager : AudioSessionManager { + override fun activate() { + } + + override fun deactivate() { + } +} diff --git a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.android.kt b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.android.kt index b3e27d4..0485366 100644 --- a/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.android.kt +++ b/core/audioplayer/src/androidMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.android.kt @@ -1,9 +1,9 @@ package fr.ajaury.gwenedeg.player.di -import fr.ajaury.gwenedeg.player.AndroidAudioPlayer -import fr.ajaury.gwenedeg.player.AndroidAudioSessionManager -import fr.ajaury.gwenedeg.player.AudioPlayer -import fr.ajaury.gwenedeg.player.AudioSessionManager +import fr.ajaury.gwenedeg.player.data.AndroidAudioPlayer +import fr.ajaury.gwenedeg.player.data.AndroidAudioSessionManager +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import org.koin.core.module.Module import org.koin.dsl.module diff --git a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioPlayer.kt b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioPlayer.kt similarity index 78% rename from core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioPlayer.kt rename to core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioPlayer.kt index 227ad25..1c4ce42 100644 --- a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioPlayer.kt +++ b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioPlayer.kt @@ -1,5 +1,6 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.domain +import fr.ajaury.gwenedeg.player.model.PlaybackState import kotlinx.coroutines.flow.StateFlow import kotlin.time.Duration diff --git a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioSessionManager.kt b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioSessionManager.kt similarity index 81% rename from core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioSessionManager.kt rename to core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioSessionManager.kt index fcd9819..fe118f4 100644 --- a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/AudioSessionManager.kt +++ b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/domain/AudioSessionManager.kt @@ -1,4 +1,4 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.domain /** * An Audio Session will allow to request Audio focus and declare our audio source to the system diff --git a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/PlaybackState.kt b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/model/PlaybackState.kt similarity index 65% rename from core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/PlaybackState.kt rename to core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/model/PlaybackState.kt index 362cffc..35843ed 100644 --- a/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/PlaybackState.kt +++ b/core/audioplayer/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/model/PlaybackState.kt @@ -1,4 +1,4 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.model enum class PlaybackState { IDLE, diff --git a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioPlayer.kt b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioPlayer.kt similarity index 94% rename from core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioPlayer.kt rename to core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioPlayer.kt index dc21583..03b218d 100644 --- a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioPlayer.kt +++ b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioPlayer.kt @@ -1,5 +1,7 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.model.PlaybackState import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -24,7 +26,7 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds -class IosAudioPlayer : AudioPlayer { +internal class IosAudioPlayer : AudioPlayer { private var player: AVPlayer? = null private var endObserver: NSObjectProtocol? = null diff --git a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioSessionManager.kt b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioSessionManager.kt similarity index 85% rename from core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioSessionManager.kt rename to core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioSessionManager.kt index e962dd0..b47a039 100644 --- a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/IosAudioSessionManager.kt +++ b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/data/IosAudioSessionManager.kt @@ -1,5 +1,6 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import kotlinx.cinterop.ExperimentalForeignApi import platform.AVFAudio.AVAudioSession import platform.AVFAudio.AVAudioSessionCategoryOptionDuckOthers @@ -7,7 +8,7 @@ import platform.AVFAudio.AVAudioSessionCategoryPlayback import platform.AVFAudio.AVAudioSessionModeSpokenAudio import platform.AVFAudio.setActive -class IosAudioSessionManager : AudioSessionManager { +internal class IosAudioSessionManager : AudioSessionManager { private val session = AVAudioSession.sharedInstance() @OptIn(ExperimentalForeignApi::class) diff --git a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.ios.kt b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.ios.kt index 919c96f..a642412 100644 --- a/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.ios.kt +++ b/core/audioplayer/src/iosMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.ios.kt @@ -1,9 +1,9 @@ package fr.ajaury.gwenedeg.player.di -import fr.ajaury.gwenedeg.player.AudioPlayer -import fr.ajaury.gwenedeg.player.AudioSessionManager -import fr.ajaury.gwenedeg.player.IosAudioPlayer -import fr.ajaury.gwenedeg.player.IosAudioSessionManager +import fr.ajaury.gwenedeg.player.data.IosAudioPlayer +import fr.ajaury.gwenedeg.player.data.IosAudioSessionManager +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import org.koin.core.module.Module import org.koin.dsl.module diff --git a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioPlayer.kt b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioPlayer.kt similarity index 94% rename from core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioPlayer.kt rename to core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioPlayer.kt index 6beb1ef..ade088b 100644 --- a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioPlayer.kt +++ b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioPlayer.kt @@ -1,5 +1,7 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.model.PlaybackState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -19,7 +21,7 @@ import kotlin.time.Duration.Companion.microseconds * the JDK [AudioSystem] discovers automatically, so loading works the same as any natively * supported format. */ -class JvmAudioPlayer : AudioPlayer { +internal class JvmAudioPlayer : AudioPlayer { private var clip: Clip? = null private var stoppedByUser = false diff --git a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioSessionManager.kt b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioSessionManager.kt similarity index 50% rename from core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioSessionManager.kt rename to core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioSessionManager.kt index 71e7609..dd20897 100644 --- a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/JvmAudioSessionManager.kt +++ b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/data/JvmAudioSessionManager.kt @@ -1,9 +1,11 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data + +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager /** * Desktop has no system audio focus model to honour, so activation is a no-op. */ -class JvmAudioSessionManager : AudioSessionManager { +internal class JvmAudioSessionManager : AudioSessionManager { override fun activate() { } diff --git a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.jvm.kt b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.jvm.kt index 99a5d2e..ce5ec50 100644 --- a/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.jvm.kt +++ b/core/audioplayer/src/jvmMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.jvm.kt @@ -1,9 +1,9 @@ package fr.ajaury.gwenedeg.player.di -import fr.ajaury.gwenedeg.player.AudioPlayer -import fr.ajaury.gwenedeg.player.AudioSessionManager -import fr.ajaury.gwenedeg.player.JvmAudioPlayer -import fr.ajaury.gwenedeg.player.JvmAudioSessionManager +import fr.ajaury.gwenedeg.player.data.JvmAudioPlayer +import fr.ajaury.gwenedeg.player.data.JvmAudioSessionManager +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import org.koin.core.module.Module import org.koin.dsl.module diff --git a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioSessionManager.kt b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioSessionManager.kt deleted file mode 100644 index 6ffaf8a..0000000 --- a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioSessionManager.kt +++ /dev/null @@ -1,9 +0,0 @@ -package fr.ajaury.gwenedeg.player - -class WebAudioSessionManager : AudioSessionManager { - override fun activate() { - } - - override fun deactivate() { - } -} diff --git a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioPlayer.kt b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioPlayer.kt similarity index 88% rename from core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioPlayer.kt rename to core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioPlayer.kt index 5f1a515..04d67f6 100644 --- a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/WebAudioPlayer.kt +++ b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioPlayer.kt @@ -1,5 +1,7 @@ -package fr.ajaury.gwenedeg.player +package fr.ajaury.gwenedeg.player.data +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.model.PlaybackState import kotlinx.browser.document import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -8,7 +10,7 @@ import org.w3c.dom.HTMLAudioElement import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds -class WebAudioPlayer : AudioPlayer { +internal class WebAudioPlayer : AudioPlayer { private var audio: HTMLAudioElement? = null private val _playbackState = MutableStateFlow(PlaybackState.IDLE) diff --git a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioSessionManager.kt b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioSessionManager.kt new file mode 100644 index 0000000..c4f18c3 --- /dev/null +++ b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/data/WebAudioSessionManager.kt @@ -0,0 +1,11 @@ +package fr.ajaury.gwenedeg.player.data + +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager + +internal class WebAudioSessionManager : AudioSessionManager { + override fun activate() { + } + + override fun deactivate() { + } +} diff --git a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.web.kt b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.web.kt index 4720fe6..d932a8e 100644 --- a/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.web.kt +++ b/core/audioplayer/src/webMain/kotlin/fr/ajaury/gwenedeg/player/di/AudioPlayerModule.web.kt @@ -1,9 +1,9 @@ package fr.ajaury.gwenedeg.player.di -import fr.ajaury.gwenedeg.player.AudioPlayer -import fr.ajaury.gwenedeg.player.AudioSessionManager -import fr.ajaury.gwenedeg.player.WebAudioPlayer -import fr.ajaury.gwenedeg.player.WebAudioSessionManager +import fr.ajaury.gwenedeg.player.data.WebAudioPlayer +import fr.ajaury.gwenedeg.player.data.WebAudioSessionManager +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import org.koin.core.module.Module import org.koin.dsl.module diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt index 3feb79a..a152983 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt @@ -45,7 +45,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import fr.ajaury.gwenedeg.player.PlaybackState +import fr.ajaury.gwenedeg.player.model.PlaybackState import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerUiState import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel import fr.ajaury.gwenedeg.subtitle.domain.SubtitleLine diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerUiState.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerUiState.kt index 3bc7a1e..e2f9b8e 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerUiState.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerUiState.kt @@ -1,6 +1,6 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel -import fr.ajaury.gwenedeg.player.PlaybackState +import fr.ajaury.gwenedeg.player.model.PlaybackState import fr.ajaury.gwenedeg.subtitle.domain.SubtitleLine data class PlayerUiState( diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt index 2797a14..39a085a 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt @@ -3,9 +3,9 @@ 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.player.AudioPlayer -import fr.ajaury.gwenedeg.player.AudioSessionManager -import fr.ajaury.gwenedeg.player.PlaybackState +import fr.ajaury.gwenedeg.player.domain.AudioPlayer +import fr.ajaury.gwenedeg.player.domain.AudioSessionManager +import fr.ajaury.gwenedeg.player.model.PlaybackState import fr.ajaury.gwenedeg.subtitle.domain.GetCurrentSubtitleIndexUseCase import fr.ajaury.gwenedeg.subtitle.domain.Subtitle import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository