From 7d74c1cd46b7da10690e18bd3d92754a6bcff55e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Sat, 17 Jan 2026 17:46:26 +0100 Subject: [PATCH] Fix migration of pages rotated with previous versions of the app --- .../org/fairscan/app/data/ImageRepository.kt | 20 ++++++++----------- .../fairscan/app/data/ImageRepositoryTest.kt | 10 ++++++++++ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/data/ImageRepository.kt b/app/src/main/java/org/fairscan/app/data/ImageRepository.kt index f82c777..a145c3b 100644 --- a/app/src/main/java/org/fairscan/app/data/ImageRepository.kt +++ b/app/src/main/java/org/fairscan/app/data/ImageRepository.kt @@ -85,7 +85,7 @@ class ImageRepository( else -> filesOnDisk .sorted() - .map { pageFromFileName(it) } + .map { pageFromLegacyFileName(it) } .toMutableList() } } @@ -104,20 +104,16 @@ class ImageRepository( } private fun migrateFromV1(meta: DocumentMetadataV1): MutableList { - return meta.pages.map { - old -> pageFromFileName(old.file) + return meta.pages.map { old -> + pageFromLegacyFileName(old.file) }.toMutableList() } - private fun pageFromFileName(fileName: String): PageV2 { - val fileName = fileName.removeSuffix(".jpg") - val dashIndex = fileName.lastIndexOf('-') - val rotation = if (dashIndex >= 0) - fileName.substring(dashIndex + 1).toInt() - else - 0 - val id = if (dashIndex >= 0) fileName.substring(0, dashIndex) else fileName - return PageV2(id, manualRotationDegrees = rotation) + private fun pageFromLegacyFileName(fileName: String): PageV2 { + val name = fileName.removeSuffix(".jpg") + val dashIndex = name.lastIndexOf('-') + val id = if (dashIndex >= 0) name.substring(0, dashIndex) else name + return PageV2(id) } private fun saveMetadata() { diff --git a/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt b/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt index 9524d18..fffc401 100644 --- a/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt +++ b/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt @@ -156,6 +156,16 @@ class ImageRepositoryTest { assertThat(jpegFiles).hasSize(1).allMatch { it?.name == "123.jpg" } } + @Test + fun `should rename rotated files with no base file but listed in json`() { + writeDocumentDotJson("""{"pages":[{"file":"1-90.jpg"}]}""") + val bytes = byteArrayOf(105, 106, 107) + File(scanDir(), "1-90.jpg").writeBytes(bytes) + val repo = repo() + assertThat(repo.imageIds()).containsExactly("1") + assertThat(repo.jpegBytes("1")).isEqualTo(bytes) + } + @Test fun `should return null on invalid id`() { val repo = repo()