This commit is contained in:
Phillip Thelen 2021-02-23 16:42:13 +01:00
parent 5e6e2cfc9e
commit d352c5dea4
3 changed files with 19 additions and 19 deletions

View file

@ -143,13 +143,12 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
path += user?.preferences?.background
}
return zipWithLiveUser(apiClient.unlockPath(path)) { unlockResponse, copiedUser ->
localRepository.modify(copiedUser) { copiedUser ->
copiedUser.preferences = unlockResponse.preferences
copiedUser.purchased = unlockResponse.purchased
copiedUser.items = unlockResponse.items
copiedUser.balance = copiedUser.balance - (customization.price ?: 0) / 4.0
localRepository.saveUser(copiedUser, false)
}
val user = localRepository.getUnmanagedCopy(copiedUser)
user.preferences = unlockResponse.preferences
user.purchased = unlockResponse.purchased
user.items = unlockResponse.items
user.balance = copiedUser.balance - (customization.price ?: 0) / 4.0
localRepository.saveUser(copiedUser, false)
unlockResponse
}
}
@ -164,7 +163,7 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
}
path = path.substring(1)
return Flowable.zip(apiClient.unlockPath(path), localRepository.getUser(userID).firstElement().toFlowable()
.map { localRepository.getLiveObject(it) }
.map { localRepository.getUnmanagedCopy(it) }
.skipNil(), { unlockResponse, copiedUser ->
copiedUser.preferences = unlockResponse.preferences
copiedUser.purchased = unlockResponse.purchased

View file

@ -7,6 +7,7 @@ import com.habitrpg.android.habitica.models.BaseObject
import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmObject
import io.realm.kotlin.isManaged
import io.realm.kotlin.where
abstract class RealmBaseLocalRepository internal constructor(override var realm: Realm) : BaseLocalRepository {
@ -72,7 +73,7 @@ abstract class RealmBaseLocalRepository internal constructor(override var realm:
override fun <T: BaseObject> modify(obj: T, transaction: (T) -> Unit) {
if (isClosed) { return }
val liveObject = getLiveObject(obj) ?: return
val liveObject = getLiveObject(obj) ?: return
realm.executeTransaction {
transaction(liveObject)
}
@ -88,6 +89,7 @@ abstract class RealmBaseLocalRepository internal constructor(override var realm:
override fun <T: RealmModel> getLiveObject(obj: T): T? {
if (isClosed) return null
if (!obj.isManaged()) return obj
val baseObject = obj as? BaseObject ?: return null
return realm.where(baseObject.realmClass).equalTo(baseObject.primaryIdentifierName, baseObject.primaryIdentifier).findFirst() as? T
}

View file

@ -31,18 +31,17 @@ class PushNotificationManager(var apiClient: ApiClient, private val sharedPrefer
}
fun addPushDeviceUsingStoredToken() {
if (this.refreshedToken.isEmpty()) {
this.refreshedToken = FirebaseMessaging.getInstance().token.result
}
FirebaseMessaging.getInstance().token.addOnCompleteListener {
this.refreshedToken = it.result
if (this.refreshedToken.isEmpty() || this.user == null || this.userHasPushDevice() || !this.userIsSubscribedToNotifications()) {
return@addOnCompleteListener
}
if (this.refreshedToken.isEmpty() || this.user == null || this.userHasPushDevice() || !this.userIsSubscribedToNotifications()) {
return
val pushDeviceData = HashMap<String, String>()
pushDeviceData["regId"] = this.refreshedToken
pushDeviceData["type"] = "android"
apiClient.addPushDevice(pushDeviceData).subscribe({ }, RxErrorHandler.handleEmptyError())
}
val pushDeviceData = HashMap<String, String>()
pushDeviceData["regId"] = this.refreshedToken
pushDeviceData["type"] = "android"
apiClient.addPushDevice(pushDeviceData).subscribe({ }, RxErrorHandler.handleEmptyError())
}
fun removePushDeviceUsingStoredToken() {