feat: разделение контента — на телефон только аудио, на очки только видео

Телефон качает audio-N.ogg (audioKeys вместо fileKeys, стадия «звук»),
очки получают DownloadFiles только с video.mkv (buildGlassesFileSpecs).
Watch проверяет готовность обоих: телефон — audioReady(), очки — как
было; отказ с подсказкой «Скачать на телефон/очки». Тесты: lib-core 19,
phone 36.
This commit is contained in:
Hermes Agent
2026-08-20 01:41:43 +03:00
parent 9f1c6735c1
commit 2844d6a3ac
7 changed files with 77 additions and 32 deletions
@@ -55,7 +55,7 @@ class DownloadManagerTest {
assertTrue(result.downloaded.isEmpty())
assertEquals(
DownloadProgress("i2", DownloadPhase.DOWNLOADING, 50, "видео"),
DownloadProgress("i2", DownloadPhase.DOWNLOADING, 50, "звук"),
result.progress["i2"],
)
}
@@ -68,7 +68,7 @@ class DownloadManagerTest {
val result = scanDownloads(base, emptyMap())
assertEquals(DownloadProgress("i3", DownloadPhase.DOWNLOADING, 0, "видео"), result.progress["i3"])
assertEquals(DownloadProgress("i3", DownloadPhase.DOWNLOADING, 0, "звук"), result.progress["i3"])
}
@Test
@@ -131,6 +131,27 @@ class DownloadManagerTest {
assertEquals(listOf("video", "audio-0", "audio-1"), fileKeys(files))
}
@Test
fun audioKeysFromMirrorCoversOnlyAudios() {
val files = MirrorFiles(
video = MirrorVideo(key = "v", url = "http://v"),
audios = listOf(
MirrorAudio(index = 0, key = "a0", url = "http://a0"),
MirrorAudio(index = 1, key = "a1", url = "http://a1"),
),
)
assertEquals(listOf("audio-0", "audio-1"), audioKeys(files))
}
@Test
fun audioKeysEmptyWithoutAudios() {
val files = MirrorFiles(
video = MirrorVideo(key = "v", url = "http://v"),
audios = emptyList(),
)
assertTrue(audioKeys(files).isEmpty())
}
@Test
fun isFullyOnDiskRequiresAllFilesNoParts() {
val base = newBaseDir()
@@ -38,11 +38,9 @@ class GlassesFilesTest {
assertEquals("movie-1", msg.itemId)
assertEquals("Interstellar", msg.title)
assertEquals(3, msg.files.size)
assertEquals(1, msg.files.size)
assertEquals("video.mkv", msg.files[0].name)
assertEquals("https://s3/mirror/video.mkv?sig", msg.files[0].url)
assertEquals("audio-0.ogg", msg.files[1].name)
assertEquals("audio-1.ogg", msg.files[2].name)
}
@Test
@@ -56,8 +54,6 @@ class GlassesFilesTest {
)
assertEquals(1_863_946_240L, msg.files[0].sizeBytes)
assertEquals(68_157_440L, msg.files[1].sizeBytes)
assertEquals(0L, msg.files[2].sizeBytes)
}
@Test
@@ -67,8 +63,9 @@ class GlassesFilesTest {
sizes = emptyMap(),
presign = { "signed-$it" },
)
assertEquals(3, specs.size)
assertEquals(1, specs.size)
assertTrue(specs.all { it.url.startsWith("signed-") })
assertEquals("video.mkv", specs.single().name)
}
@Test