diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java index f71b87b4a..897d05ba6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java @@ -357,6 +357,6 @@ public interface ApiService { @POST("user/allocate-bulk") Observable> bulkAllocatePoints(@Body Map> stats); - @POST("world-state") + @GET("world-state") Observable> getWorldState(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt index eebe7cc7d..2a86b9b15 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.kt @@ -13,16 +13,17 @@ import rx.functions.Action1 internal abstract class ContentRepositoryImpl(localRepository: T, apiClient: ApiClient) : BaseRepositoryImpl(localRepository, apiClient), ContentRepository { - private var lastContentSync = Date() - private var lastWorldStateSync = Date() + private var lastContentSync = 0L + private var lastWorldStateSync = 0L override fun retrieveContent(): Observable { return retrieveContent(false) } override fun retrieveContent(forced: Boolean): Observable { - return if (forced || Date().time - this.lastContentSync.time > 3600000) { - lastContentSync = Date() + val now = Date().time + return if (forced || now - this.lastContentSync > 3600000) { + lastContentSync = now apiClient.content.doOnNext({ localRepository.saveContent(it) }) } else { Observable.just(null) @@ -30,8 +31,9 @@ internal abstract class ContentRepositoryImpl(localR } override fun retrieveWorldState(): Observable { - return if (Date().time - this.lastWorldStateSync.time > 3600000) { - lastWorldStateSync = Date() + val now = Date().time + return if (now - this.lastWorldStateSync > 3600000) { + lastWorldStateSync = now apiClient.worldState.doOnNext({ localRepository.saveWorldState(it) }) } else { Observable.just(null) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt index 70cc44018..f1c231c7c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt @@ -12,6 +12,7 @@ import com.habitrpg.android.habitica.models.social.Challenge import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.social.Group import com.habitrpg.android.habitica.models.user.User +import io.realm.Realm import io.realm.RealmResults import rx.Observable import rx.functions.Action1 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index 5f0812582..b44bdfbf6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -9,7 +9,6 @@ import com.habitrpg.android.habitica.models.Skill import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.CustomizationSet import com.habitrpg.android.habitica.models.responses.SkillResponse -import com.habitrpg.android.habitica.models.responses.TaskScoringResult import com.habitrpg.android.habitica.models.responses.UnlockResponse import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.tasks.Task diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.java deleted file mode 100644 index 7f200816c..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.habitrpg.android.habitica.data.local; - -import java.util.List; - -import io.realm.Realm; -import io.realm.RealmObject; - -public interface BaseLocalRepository { - - void close(); - - void executeTransaction(Realm.Transaction transaction); - - T getUnmanagedCopy(T object); - List getUnmanagedCopy(List list); - - void save(List objects); - void save(T object); - - boolean isClosed(); -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.kt new file mode 100644 index 000000000..17e57ac2d --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/BaseLocalRepository.kt @@ -0,0 +1,20 @@ +package com.habitrpg.android.habitica.data.local + +import io.realm.Realm +import io.realm.RealmObject + +interface BaseLocalRepository { + + val isClosed: Boolean + + fun close() + + fun executeTransaction(transaction: () -> Unit) + fun executeTransaction(transaction: Realm.Transaction) + + fun getUnmanagedCopy(managedObject: T): T + fun getUnmanagedCopy(list: List): List + + fun save(objects: List) + fun save(`object`: T) +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.java deleted file mode 100644 index 52a7ec78c..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.habitrpg.android.habitica.data.local.implementation; - -import com.habitrpg.android.habitica.data.local.BaseLocalRepository; - -import java.util.List; - -import io.realm.Realm; -import io.realm.RealmObject; - -public abstract class RealmBaseLocalRepository implements BaseLocalRepository { - - Realm realm; - - RealmBaseLocalRepository(Realm realm) { - this.realm = realm; - } - - @Override - public void close() { - realm.close(); - } - - @Override - public void executeTransaction(Realm.Transaction transaction) { - realm.executeTransaction(transaction); - } - - @Override - public T getUnmanagedCopy(T object) { - if (object.isManaged() && object.isValid()) { - return realm.copyFromRealm(object); - } else { - return object; - } - } - - @Override - public List getUnmanagedCopy(List list) { - return realm.copyFromRealm(list); - } - - @Override - public void save(T object) { - realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(object)); - } - - @Override - public boolean isClosed() { - return realm.isClosed(); - } - - @Override - public void save(List objects) { - realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(objects)); - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt new file mode 100644 index 000000000..b4a9f8d1c --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt @@ -0,0 +1,46 @@ +package com.habitrpg.android.habitica.data.local.implementation + +import com.habitrpg.android.habitica.data.local.BaseLocalRepository + +import io.realm.Realm +import io.realm.RealmObject + +abstract class RealmBaseLocalRepository internal constructor(protected var realm: Realm) : BaseLocalRepository { + + override val isClosed: Boolean + get() = realm.isClosed + + override fun close() { + realm.close() + } + + override fun executeTransaction(transaction: () -> Unit) { + realm.executeTransaction { + transaction() + } + } + + override fun executeTransaction(transaction: Realm.Transaction) { + realm.executeTransaction(transaction) + } + + override fun getUnmanagedCopy(managedObject: T): T { + return if (managedObject.isManaged && managedObject.isValid) { + realm.copyFromRealm(managedObject) + } else { + managedObject + } + } + + override fun getUnmanagedCopy(list: List): List { + return realm.copyFromRealm(list) + } + + override fun save(`object`: T) { + realm.executeTransactionAsync { realm1 -> realm1.insertOrUpdate(`object`) } + } + + override fun save(objects: List) { + realm.executeTransactionAsync { realm1 -> realm1.insertOrUpdate(objects) } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java index 6a77660e7..e842f3a24 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java @@ -21,7 +21,7 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl @Override public Observable getChallenge(String id) { - return realm.where(Challenge.class) + return getRealm().where(Challenge.class) .equalTo("id", id) .findFirstAsync() .asObservable() @@ -36,7 +36,7 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl @Override public Observable> getChallenges() { - return realm.where(Challenge.class) + return getRealm().where(Challenge.class) .isNotNull("name") .findAllSortedAsync("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING) .asObservable() @@ -45,7 +45,7 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl @Override public Observable> getUserChallenges(String userId) { - return realm.where(Challenge.class) + return getRealm().where(Challenge.class) .isNotNull("name") .equalTo("isParticipating", true) .findAllSortedAsync("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING) @@ -55,23 +55,23 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl @Override public void setParticipating(Challenge challenge, boolean isParticipating) { - realm.executeTransaction(realm1 -> challenge.isParticipating = isParticipating); + getRealm().executeTransaction(realm1 -> challenge.isParticipating = isParticipating); } @Override public void saveChallenges(List onlineChallenges) { - OrderedRealmCollectionSnapshot localChallenges = realm.where(Challenge.class).findAll().createSnapshot(); + OrderedRealmCollectionSnapshot localChallenges = getRealm().where(Challenge.class).findAll().createSnapshot(); List challengesToDelete = new ArrayList<>(); for (Challenge localTask : localChallenges) { if (!onlineChallenges.contains(localTask)) { challengesToDelete.add(localTask); } } - realm.executeTransaction(realm1 -> { + getRealm().executeTransaction(realm1 -> { for (Challenge localTask : challengesToDelete) { localTask.deleteFromRealm(); } }); - realm.executeTransaction(realm1 -> realm1.insertOrUpdate(onlineChallenges)); + getRealm().executeTransaction(realm1 -> realm1.insertOrUpdate(onlineChallenges)); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt index bd01b2a6d..15005e409 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.data.local.implementation import com.habitrpg.android.habitica.data.local.ContentLocalRepository import com.habitrpg.android.habitica.models.ContentResult import com.habitrpg.android.habitica.models.WorldState +import com.habitrpg.android.habitica.models.inventory.Quest import com.habitrpg.android.habitica.models.social.Group import io.realm.Realm @@ -32,10 +33,15 @@ internal open class RealmContentLocalRepository(realm: Realm) : RealmBaseLocalRe } override fun saveWorldState(worldState: WorldState) { - val tavern = realm.where(Group::class.java) + val tavern = getUnmanagedCopy(realm.where(Group::class.java) .equalTo("id", Group.TAVERN_ID) - .findFirst() ?: Group() - tavern.id = Group.TAVERN_ID + .findFirst() ?: Group()) + if (!tavern.isManaged) { + tavern.id = Group.TAVERN_ID + } + if (tavern.quest == null) { + tavern.quest = Quest() + } tavern.quest?.active = worldState.worldBossActive tavern.quest?.key = worldState.worldBossKey tavern.quest?.progress = worldState.progress diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.java index 3e314a425..86972d66b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.java @@ -19,7 +19,7 @@ public class RealmCustomizationLocalRepository extends RealmContentLocalReposito @Override public Observable> getCustomizations(String type, String category, boolean onlyAvailable) { - RealmQuery query = realm.where(Customization.class) + RealmQuery query = getRealm().where(Customization.class) .equalTo("type", type) .equalTo("category", category); if (onlyAvailable) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.java index b16133262..4769bfc58 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.java @@ -15,7 +15,7 @@ public class RealmFAQLocalRepository extends RealmContentLocalRepository impleme @Override public Observable> getArticles() { - return realm.where(FAQArticle.class) + return getRealm().where(FAQArticle.class) .findAll() .asObservable() .filter(RealmResults::isLoaded); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java index 8b458aadc..508595a57 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java @@ -40,7 +40,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable getQuestContent(String key) { - return realm.where(QuestContent.class).equalTo("key", key).findFirstAsync() + return getRealm().where(QuestContent.class).equalTo("key", key).findFirstAsync() .asObservable() .filter(realmObject -> realmObject.isLoaded()) .cast(QuestContent.class); @@ -48,7 +48,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getEquipment(List searchedKeys) { - return realm.where(Equipment.class) + return getRealm().where(Equipment.class) .in("key", searchedKeys.toArray(new String[0])) .findAll() .asObservable() @@ -57,7 +57,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public long getArmoireRemainingCount() { - return realm.where(Equipment.class) + return getRealm().where(Equipment.class) .equalTo("klass", "armoire") .beginGroup() .equalTo("owned", false) @@ -69,7 +69,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getOwnedEquipment(String type) { - return realm.where(Equipment.class) + return getRealm().where(Equipment.class) .equalTo("type", type) .equalTo("owned", true) .findAll() @@ -79,7 +79,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getOwnedEquipment() { - return realm.where(Equipment.class) + return getRealm().where(Equipment.class) .equalTo("owned", true) .findAll() .asObservable() @@ -92,7 +92,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i return Observable.empty(); } - RealmQuery query = realm.where(itemClass); + RealmQuery query = getRealm().where(itemClass); if (SpecialItem.class.isAssignableFrom(itemClass)) { if (user != null && user.getPurchased() != null && user.getPurchased().getPlan() != null) { SpecialItem mysticItem; @@ -138,7 +138,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable getEquipment(String key) { - return realm.where(Equipment.class) + return getRealm().where(Equipment.class) .equalTo("key", key) .findFirstAsync() .asObservable() @@ -148,7 +148,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getMounts() { - return realm.where(Mount.class) + return getRealm().where(Mount.class) .findAllSorted("animalGroup", Sort.ASCENDING, "animal", Sort.ASCENDING) .asObservable() .filter(RealmResults::isLoaded); @@ -156,7 +156,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getMounts(String type, String group) { - return realm.where(Mount.class) + return getRealm().where(Mount.class) .equalTo("animalGroup", group) .equalTo("animal", type) .findAll() @@ -166,7 +166,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getOwnedMounts() { - return realm.where(Mount.class) + return getRealm().where(Mount.class) .equalTo("owned", true) .findAllSorted("animalGroup", Sort.ASCENDING, "animal", Sort.ASCENDING) .asObservable() @@ -179,7 +179,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i animalGroup = ""; } animalGroup = animalGroup.replace("pets", "mounts").replace("Pets", "Mounts"); - return realm.where(Mount.class) + return getRealm().where(Mount.class) .equalTo("animalGroup", animalGroup) .equalTo("animal", animalType) .equalTo("owned", true) @@ -190,7 +190,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getPets() { - return realm.where(Pet.class) + return getRealm().where(Pet.class) .findAllSorted("animalGroup", Sort.ASCENDING, "animal", Sort.ASCENDING) .asObservable() .filter(RealmResults::isLoaded); @@ -198,7 +198,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getPets(String type, String group) { - return realm.where(Pet.class) + return getRealm().where(Pet.class) .equalTo("animalGroup", group) .equalTo("animal", type) .findAll() @@ -208,7 +208,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getOwnedPets() { - return realm.where(Pet.class) + return getRealm().where(Pet.class) .greaterThan("trained", 0) .findAllSorted("animalGroup", Sort.ASCENDING, "animal", Sort.ASCENDING) .asObservable() @@ -217,7 +217,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getOwnedPets(String type, String group) { - return realm.where(Pet.class) + return getRealm().where(Pet.class) .equalTo("animalGroup", group) .equalTo("animal", type) .greaterThan("trained", 0) @@ -238,7 +238,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public void changeOwnedCount(Item item, Integer amountToAdd) { - realm.executeTransaction(realm1 -> item.setOwned(item.getOwned()+amountToAdd)); + getRealm().executeTransaction(realm1 -> item.setOwned(item.getOwned()+amountToAdd)); } @Override @@ -257,15 +257,15 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i case "quests": itemClass = QuestContent.class; } - return realm.where(itemClass).equalTo("key", key).findFirstAsync().asObservable() + return getRealm().where(itemClass).equalTo("key", key).findFirstAsync().asObservable() .filter(realmObject -> realmObject.isLoaded()) .cast(Item.class); } @Override public void decrementMysteryItemCount(User user) { - SpecialItem item = realm.where(SpecialItem.class).equalTo("isMysteryItem", true).findFirst(); - realm.executeTransaction(realm1 -> { + SpecialItem item = getRealm().where(SpecialItem.class).equalTo("isMysteryItem", true).findFirst(); + getRealm().executeTransaction(realm1 -> { if (item != null && item.isValid()) { item.setOwned(item.getOwned() - 1); } @@ -277,7 +277,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public Observable> getInAppRewards() { - return realm.where(ShopItem.class) + return getRealm().where(ShopItem.class) .findAllAsync() .asObservable() .filter(RealmResults::isLoaded); @@ -285,14 +285,14 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public void saveInAppRewards(List onlineItems) { - OrderedRealmCollectionSnapshot localItems = realm.where(ShopItem.class).findAll().createSnapshot(); - realm.executeTransaction(realm1 -> { + OrderedRealmCollectionSnapshot localItems = getRealm().where(ShopItem.class).findAll().createSnapshot(); + getRealm().executeTransaction(realm1 -> { for (ShopItem localItem : localItems) { if (!onlineItems.contains(localItem)) { localItem.deleteFromRealm(); } } - realm.insertOrUpdate(onlineItems); + getRealm().insertOrUpdate(onlineItems); }); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.java index 907c1ec69..7fc1d51cd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.java @@ -18,12 +18,12 @@ public class RealmTagLocalRepository extends RealmBaseLocalRepository implements @Override public Observable> getTags(String userId) { - return realm.where(Tag.class).equalTo("userId", userId).findAll().asObservable(); + return getRealm().where(Tag.class).equalTo("userId", userId).findAll().asObservable(); } @Override public void removeOldTags(List onlineTags, String userID) { - OrderedRealmCollectionSnapshot localTags = realm.where(Tag.class).equalTo("userId", userID).findAll().createSnapshot(); + OrderedRealmCollectionSnapshot localTags = getRealm().where(Tag.class).equalTo("userId", userID).findAll().createSnapshot(); for (Tag localTag : localTags) { if (!onlineTags.contains(localTag)) { localTag.deleteFromRealm(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt index 54afacd08..808645c3d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt @@ -18,7 +18,16 @@ class WorldStateSerialization: JsonDeserializer { } state.worldBossActive = worldBossObject["active"].asBoolean state.worldBossKey = worldBossObject["key"].asString - state.progress = context?.deserialize(worldBossObject["progress"], QuestProgress::class.java) + if (worldBossObject.has("progress")) { + val progress = QuestProgress() + val progressObj = worldBossObject.getAsJsonObject("progress") + if (progressObj.has("hp")) { + progress.hp = progressObj["hp"].asDouble + } + if (progressObj.has("rage")) { + progress.rage = progressObj["rage"].asDouble + } + } if (worldBossObject.has("extra")) { val extra = worldBossObject["extra"].asJsonObject if (extra.has("worldDmg")) {