diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/InventoryRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/InventoryRepository.kt index d64964f95..ff76776f6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/InventoryRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/InventoryRepository.kt @@ -48,8 +48,8 @@ interface InventoryRepository : BaseRepository { fun changeOwnedCount(type: String, key: String, amountToAdd: Int) - fun sellItem(user: User?, type: String, key: String): Flowable - fun sellItem(user: User?, item: OwnedItem): Flowable + fun sellItem(type: String, key: String): Flowable + fun sellItem(item: OwnedItem): Flowable fun equipGear(user: User?, equipment: String, asCostume: Boolean): Flowable fun equip(user: User?, type: String, key: String): Flowable diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt index 5ed77106c..8d5ab2208 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt @@ -118,14 +118,14 @@ class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClie localRepository.changeOwnedCount(type, key, userID, amountToAdd) } - override fun sellItem(user: User?, type: String, key: String): Flowable { + override fun sellItem(type: String, key: String): Flowable { return localRepository.getOwnedItem(userID, type, key, true) - .flatMap { item -> sellItem(user, item) } + .flatMap { item -> sellItem(item) } } - override fun sellItem(user: User?, item: OwnedItem): Flowable { + override fun sellItem(item: OwnedItem): Flowable { return localRepository.getItem(item.itemType ?: "", item.key ?: "") - .flatMap { newItem -> sellItem(user, newItem, item) } + .flatMap { newItem -> sellItem(newItem, item) } } override fun getLatestMysteryItem(): Flowable { @@ -136,34 +136,16 @@ class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClie return localRepository.getItem(type, key) } - private fun sellItem(user: User?, item: Item, ownedItem: OwnedItem): Flowable { - if (user != null && appConfigManager.enableLocalChanges()) { + private fun sellItem(item: Item, ownedItem: OwnedItem): Flowable { + if (appConfigManager.enableLocalChanges()) { localRepository.executeTransaction { val liveItem = localRepository.getLiveObject(ownedItem) - val liveUser = localRepository.getLiveObject(user) liveItem?.numberOwned = (liveItem?.numberOwned ?: 0) - 1 - liveUser?.stats?.gp = (user.stats?.gp ?: 0.0) + item.value } } return apiClient.sellItem(item.type, item.key) - .map { user1 -> - localRepository.modifyWithRealm(user1) { realm, liveUser -> - if (user != null) { - val items = liveUser.items - if (items != null) { - items.userId = user.id - val newItems = realm.copyToRealmOrUpdate(items) - user.items = newItems - } - val stats = liveUser.stats - if (stats != null) { - stats.userId = user.id - val newStats = realm.copyToRealmOrUpdate(stats) - user.stats = newStats - } - } - } - user ?: user1 + .map { user -> + localRepository.soldItem(userID, user) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt index 8cf45bd44..61937975c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt @@ -56,4 +56,5 @@ interface InventoryLocalRepository : ContentLocalRepository { fun unhatchPet(eggKey: String, potionKey: String, userID: String) fun feedPet(foodKey: String, petKey: String, feedValue: Int, userID: String) fun getLatestMysteryItem(): Flowable + fun soldItem(userID: String, updatedUser: User): User } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt index 02accb30d..e0c43f3b2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt @@ -350,4 +350,25 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository( .filter { it.isLoaded && it.size > 0} .map { it.first() }) } + + override fun soldItem(userID: String, updatedUser: User): User { + val user = realm.where(User::class.java) + .equalTo("id", userID) + .findFirst() ?: return updatedUser + executeTransaction { + val items = updatedUser.items + if (items != null) { + items.userId = user.id + val newItems = realm.copyToRealmOrUpdate(items) + user.items = newItems + } + val stats = updatedUser.stats + if (stats != null) { + stats.userId = user.id + val newStats = realm.copyToRealmOrUpdate(stats) + user.stats = newStats + } + } + return user + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt index eac2a48ec..6b2533b27 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt @@ -93,7 +93,7 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL adapter?.let { adapter -> compositeSubscription.add(adapter.getSellItemFlowable() - .flatMap { item -> inventoryRepository.sellItem(user, item) } + .flatMap { item -> inventoryRepository.sellItem(item) } .subscribe({ }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getQuestInvitationFlowable()