From ba049043c34c2fc4122ad7f09f1bf46df0b37a69 Mon Sep 17 00:00:00 2001 From: "Andres Gomez, Thomas (ITDV RL)" Date: Tue, 2 Jul 2024 13:40:32 +0200 Subject: [PATCH] Fix adventure story indexing. --- .../data/model/adventure/AdventureStory.kt | 1 + .../data/parser/adventure/AdventureStoryParser.kt | 1 + .../repository/adventure/AdventureDboFactory.kt | 3 +-- .../repository/adventure/AdventureRepository.kt | 14 +++++++++++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/adventure/AdventureStory.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/adventure/AdventureStory.kt index b4b4d02..28a8c48 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/adventure/AdventureStory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/adventure/AdventureStory.kt @@ -3,6 +3,7 @@ package com.pixelized.rplexicon.data.model.adventure import android.net.Uri data class AdventureStory( + val index: Int, val title: String, val category: String?, val revision: Long, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/parser/adventure/AdventureStoryParser.kt b/app/src/main/java/com/pixelized/rplexicon/data/parser/adventure/AdventureStoryParser.kt index 0621be2..e7451d2 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/parser/adventure/AdventureStoryParser.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/parser/adventure/AdventureStoryParser.kt @@ -25,6 +25,7 @@ class AdventureStoryParser @Inject constructor( if (title != null && revision != null) { val adventure = AdventureStory( + index = index, title = title, category = row.parse(CATEGORY), revision = revision, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureDboFactory.kt b/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureDboFactory.kt index 00eb069..0a665fd 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureDboFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureDboFactory.kt @@ -57,14 +57,13 @@ class AdventureDboFactory @Inject constructor() { fun convertToDbo( story: AdventureStory, - index: Int, documentId: String, ) = AdventureStoryDbo( title = story.title, category = story.category, background = story.background.toString(), revision = story.revision, - index = index, + index = story.index, documentId = documentId, ) diff --git a/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureRepository.kt b/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureRepository.kt index 50993e3..1428779 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureRepository.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/repository/adventure/AdventureRepository.kt @@ -145,6 +145,15 @@ class AdventureRepository @Inject constructor( private suspend fun DatabaseUpdateScope.fetchAndCompareStories( documentId: String, ) { + fun shouldUpdate( + cache: AdventureStoryDbo?, + item: AdventureStoryDbo + ): Boolean { + return cache?.let { + it.revision < item.revision || cache.index != item.index + } ?: false + } + val cache = database.fetchAdventureStories( documentId = documentId, ).associateBy { @@ -160,7 +169,7 @@ class AdventureRepository @Inject constructor( update.forEach { item -> when (toRemove.remove(item.id)) { - true -> if ((cache[item.id]?.revision ?: 0) < item.revision) toUpdate.add(item) + true -> if (shouldUpdate(cache = cache[item.id], item = item)) toUpdate.add(item) else -> toInsert.add(item) } } @@ -248,10 +257,9 @@ class AdventureRepository @Inject constructor( return googleRepository.fetch { sheet -> val request = sheet.get(documentId, Adventures.ADVENTURES) adventureStoryParser.parse(sheet = request.execute()) - }.mapIndexed { index, story -> + }.map { story -> adventureDboFactory.convertToDbo( story = story, - index = index, documentId = documentId, ) }