mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Fixes #1466
This commit is contained in:
parent
5d23eab45f
commit
1fc7f605d8
5 changed files with 33 additions and 29 deletions
|
|
@ -48,8 +48,8 @@ interface InventoryRepository : BaseRepository {
|
|||
|
||||
fun changeOwnedCount(type: String, key: String, amountToAdd: Int)
|
||||
|
||||
fun sellItem(user: User?, type: String, key: String): Flowable<User>
|
||||
fun sellItem(user: User?, item: OwnedItem): Flowable<User>
|
||||
fun sellItem(type: String, key: String): Flowable<User>
|
||||
fun sellItem(item: OwnedItem): Flowable<User>
|
||||
|
||||
fun equipGear(user: User?, equipment: String, asCostume: Boolean): Flowable<Items>
|
||||
fun equip(user: User?, type: String, key: String): Flowable<Items>
|
||||
|
|
|
|||
|
|
@ -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<User> {
|
||||
override fun sellItem(type: String, key: String): Flowable<User> {
|
||||
return localRepository.getOwnedItem(userID, type, key, true)
|
||||
.flatMap { item -> sellItem(user, item) }
|
||||
.flatMap { item -> sellItem(item) }
|
||||
}
|
||||
|
||||
override fun sellItem(user: User?, item: OwnedItem): Flowable<User> {
|
||||
override fun sellItem(item: OwnedItem): Flowable<User> {
|
||||
return localRepository.getItem(item.itemType ?: "", item.key ?: "")
|
||||
.flatMap { newItem -> sellItem(user, newItem, item) }
|
||||
.flatMap { newItem -> sellItem(newItem, item) }
|
||||
}
|
||||
|
||||
override fun getLatestMysteryItem(): Flowable<Equipment> {
|
||||
|
|
@ -136,34 +136,16 @@ class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClie
|
|||
return localRepository.getItem(type, key)
|
||||
}
|
||||
|
||||
private fun sellItem(user: User?, item: Item, ownedItem: OwnedItem): Flowable<User> {
|
||||
if (user != null && appConfigManager.enableLocalChanges()) {
|
||||
private fun sellItem(item: Item, ownedItem: OwnedItem): Flowable<User> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Equipment>
|
||||
fun soldItem(userID: String, updatedUser: User): User
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), 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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue