diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt index b5c1d80..80d5bc8 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt @@ -1,17 +1,28 @@ package com.github.nacabaro.vbhelper.daos import androidx.room.Dao +import androidx.room.Insert import androidx.room.Query -import androidx.room.Upsert import com.github.nacabaro.vbhelper.domain.card.CardProgress +import com.github.nacabaro.vbhelper.dtos.CharacterDtos @Dao interface CardProgressDao { - @Upsert - fun updateDimProgress(vararg cardProgresses: CardProgress) + @Query(""" + UPDATE CardProgress + SET + currentStage = :currentStage, + unlocked = :unlocked + WHERE cardId = :cardId AND + currentStage < :currentStage + """) + fun updateCardProgress(currentStage: Int, cardId: Long, unlocked: Boolean) @Query( "SELECT currentStage FROM CardProgress WHERE cardId = :cardId" ) fun getCardProgress(cardId: Long): Int + + @Insert + fun insertCardProgress(cardProgress: CardProgress) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt index 56066c5..261fa00 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt @@ -24,10 +24,12 @@ interface CharacterDao { d.cardId as cardId, c.charaIndex as charId, c.stage as stage, - c.attribute as attribute + c.attribute as attribute, + cp.currentStage as currentStage FROM CardCharacter c JOIN UserCharacter uc ON c.id = uc.charId JOIN Card d ON c.cardId = d.id + JOIN CardProgress cp ON d.id = cp.cardId WHERE c.id = :charId """ ) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt index b279432..dd4a6ab 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt @@ -38,7 +38,8 @@ object CharacterDtos { val cardId: Long, val charId: Int, val stage: Int, - val attribute: NfcCharacter.Attribute + val attribute: NfcCharacter.Attribute, + val currentStage: Int ) data class TransformationHistory( diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt index 016d935..084ea4e 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt @@ -7,8 +7,11 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.navigation.NavController import com.github.nacabaro.vbhelper.components.TopBanner @@ -23,7 +26,7 @@ fun CardAdventureScreen( cardId: Long ) { val cardAdventureMissions = remember { mutableStateOf(emptyList()) } - var currentCardAdventure = remember { 0 } + var currentCardAdventure by remember { mutableIntStateOf(0) } LaunchedEffect(cardId) { withContext(Dispatchers.IO) { @@ -55,7 +58,7 @@ fun CardAdventureScreen( cardAdventureMissions.value.mapIndexed { index, it -> CardAdventureEntry( cardAdventureEntry = it, - obscure = index > currentCardAdventure + obscure = index > currentCardAdventure - 1 ) } } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/FromNfcConverter.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/FromNfcConverter.kt index a398aae..7acb137 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/FromNfcConverter.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/FromNfcConverter.kt @@ -152,15 +152,13 @@ class FromNfcConverter ( nfcCharacter: NfcCharacter, cardData: Card ) { - val currentCardProgress = CardProgress( - cardId = cardData.id, - currentStage = nfcCharacter.nextAdventureMissionStage.toInt(), - unlocked = nfcCharacter.nextAdventureMissionStage.toInt() > cardData.stageCount - ) - database .cardProgressDao() - .updateDimProgress(currentCardProgress) + .updateCardProgress( + currentStage = nfcCharacter.nextAdventureMissionStage.toInt(), + cardId = cardData.id, + unlocked = nfcCharacter.nextAdventureMissionStage.toInt() > cardData.stageCount, + ) } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt index 624f87a..dbc58fc 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt @@ -38,14 +38,10 @@ class ToNfcConverter( .characterDao() .getCharacterInfo(userCharacter.charId) - val currentCardStage = database - .cardProgressDao() - .getCardProgress(characterInfo.cardId) - return if (userCharacter.characterType == DeviceType.BEDevice) - nfcToBENfc(characterId, characterInfo, currentCardStage, userCharacter) + nfcToBENfc(characterId, characterInfo, userCharacter) else - nfcToVBNfc(characterId, characterInfo, currentCardStage, userCharacter) + nfcToVBNfc(characterId, characterInfo, userCharacter) } @@ -53,7 +49,6 @@ class ToNfcConverter( private suspend fun nfcToVBNfc( characterId: Long, characterInfo: CharacterDtos.CardCharacterInfo, - currentCardStage: Int, userCharacter: UserCharacter ): VBNfcCharacter { val vbData = database @@ -70,7 +65,7 @@ class ToNfcConverter( stage = characterInfo.stage.toByte(), attribute = characterInfo.attribute, ageInDays = userCharacter.ageInDays.toByte(), - nextAdventureMissionStage = currentCardStage.toByte(), + nextAdventureMissionStage = characterInfo.currentStage.toByte(), mood = userCharacter.mood.toByte(), vitalPoints = userCharacter.vitalPoints.toUShort(), transformationCountdownInMinutes = userCharacter.transformationCountdown.toUShort(), @@ -173,7 +168,6 @@ class ToNfcConverter( private suspend fun nfcToBENfc( characterId: Long, characterInfo: CharacterDtos.CardCharacterInfo, - currentCardStage: Int, userCharacter: UserCharacter ): BENfcCharacter { val beData = database @@ -188,7 +182,7 @@ class ToNfcConverter( stage = characterInfo.stage.toByte(), attribute = characterInfo.attribute, ageInDays = userCharacter.ageInDays.toByte(), - nextAdventureMissionStage = currentCardStage.toByte(), + nextAdventureMissionStage = characterInfo.currentStage.toByte(), mood = userCharacter.mood.toByte(), vitalPoints = userCharacter.vitalPoints.toUShort(), itemEffectMentalStateValue = beData.itemEffectMentalStateValue.toByte(), diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt index cadae13..0e2a039 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt @@ -336,15 +336,15 @@ class SettingsScreenControllerImpl( private fun updateCardProgress( cardId: Long, ) { - val cardProgress = CardProgress( - cardId = cardId, - currentStage = 0, - unlocked = false - ) - database .cardProgressDao() - .updateDimProgress(cardProgress) + .insertCardProgress( + CardProgress( + cardId = cardId, + currentStage = 1, + unlocked = false + ) + ) } private fun importCard(uri: Uri) {