This commit is contained in:
Phillip Thelen 2021-02-11 13:33:49 +01:00
parent 5d23eab45f
commit 1fc7f605d8
5 changed files with 33 additions and 29 deletions

View file

@ -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>

View file

@ -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)
}
}

View file

@ -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
}

View file

@ -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
}
}

View file

@ -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()