fix(app-phone): автоподхват восстанавливает контекст просмотра (слайдер/длительность)
После рестарта телефона автоподхват создавал звук, но state.currentItem оставался null — пульт не знал длительность: слайдер скрыт, «сколько всего» не показывалось. Теперь при успешном подхвате восстанавливаются currentItem (jellyfin.item по itemId), currentAudioIndex, mode=MOVIE, playing. Железо: «Акира · 05:21 / 2:04:28» + слайдер на месте.
This commit is contained in:
@@ -9,6 +9,7 @@ import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.launch
|
||||
import pw.binom.viewmate.core.GlassesMode
|
||||
import pw.binom.viewmate.core.media.JellyfinClient
|
||||
import pw.binom.viewmate.core.media.MirrorClient
|
||||
import pw.binom.viewmate.core.phone.PhoneActions
|
||||
@@ -58,7 +59,7 @@ class PhoneApp : Application() {
|
||||
* PlaybackPosition с itemId+audioIndex, а audioSync не активен (телефон «не в курсе»).
|
||||
* Создаём аудио-плеер с позиции очков — как в DetailsScreen.onWatch.
|
||||
*/
|
||||
private suspend fun autostartAudio(itemId: String?, audioIndex: Int, positionMs: Long) {
|
||||
private suspend fun autostartAudio(itemId: String?, audioIndex: Int, positionMs: Long, playing: Boolean) {
|
||||
if (itemId == null || audioSync.isActive || itemId == lastFailedItemId) return
|
||||
val mirrorFiles = runCatching { mirror.mirrorByItem(itemId) }.getOrNull()?.files
|
||||
val source = resolveAudioSource(downloadManager, itemId, mirrorFiles, audioIndex)
|
||||
@@ -66,6 +67,13 @@ class PhoneApp : Application() {
|
||||
lastFailedItemId = null
|
||||
audioSync.play(source, positionMs)
|
||||
log("audio", "автоподхват звука: itemId=$itemId idx=$audioIndex pos=$positionMs")
|
||||
val item = runCatching { jellyfin.item(userId.value, itemId) }.getOrNull()
|
||||
if (item != null) {
|
||||
state.currentItem = item
|
||||
state.currentAudioIndex = audioIndex
|
||||
state.mode = GlassesMode.MOVIE
|
||||
state.playing = playing
|
||||
}
|
||||
} else {
|
||||
log("audio", "автоподхват звука не удался: itemId=$itemId idx=$audioIndex (нет источника)")
|
||||
lastFailedItemId = itemId
|
||||
@@ -84,7 +92,7 @@ class PhoneApp : Application() {
|
||||
// + автоподхват звука (очки играют после рестарта телефона, audioSync не активен)
|
||||
server.hub.onPlaybackPosition = { positionMs, playing, itemId, audioIndex ->
|
||||
audioSync.sync(positionMs, playing)
|
||||
scope.launch { autostartAudio(itemId, audioIndex, positionMs) }
|
||||
scope.launch { autostartAudio(itemId, audioIndex, positionMs, playing) }
|
||||
}
|
||||
|
||||
// автоматика обрыва связи: потеря → пауза, восстановление → продолжить с того же места
|
||||
|
||||
Reference in New Issue
Block a user