kopia lustrzana https://github.com/ryukoposting/Signal-Android
57 wiersze
2.0 KiB
Kotlin
57 wiersze
2.0 KiB
Kotlin
package org.thoughtcrime.securesms.badges.gifts.viewgift
|
|
|
|
import io.reactivex.rxjava3.core.Observable
|
|
import io.reactivex.rxjava3.core.Single
|
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
|
import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation
|
|
import org.thoughtcrime.securesms.badges.models.Badge
|
|
import org.thoughtcrime.securesms.components.settings.app.subscription.getBadge
|
|
import org.thoughtcrime.securesms.database.DatabaseObserver
|
|
import org.thoughtcrime.securesms.database.SignalDatabase
|
|
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
|
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
|
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
|
import java.util.Locale
|
|
|
|
/**
|
|
* Shared repository for getting information about a particular gift.
|
|
*/
|
|
class ViewGiftRepository {
|
|
fun getBadge(giftBadge: GiftBadge): Single<Badge> {
|
|
val presentation = ReceiptCredentialPresentation(giftBadge.redemptionToken.toByteArray())
|
|
return Single
|
|
.fromCallable {
|
|
ApplicationDependencies
|
|
.getDonationsService()
|
|
.getDonationsConfiguration(Locale.getDefault())
|
|
}
|
|
.flatMap { it.flattenResult() }
|
|
.map { it.getBadge(presentation.receiptLevel.toInt()) }
|
|
.subscribeOn(Schedulers.io())
|
|
}
|
|
|
|
fun getGiftBadge(messageId: Long): Observable<GiftBadge> {
|
|
return Observable.create { emitter ->
|
|
fun refresh() {
|
|
val record = SignalDatabase.mms.getMessageRecord(messageId)
|
|
val giftBadge: GiftBadge = (record as MmsMessageRecord).giftBadge!!
|
|
|
|
emitter.onNext(giftBadge)
|
|
}
|
|
|
|
val messageObserver = DatabaseObserver.MessageObserver {
|
|
if (it.mms && messageId == it.id) {
|
|
refresh()
|
|
}
|
|
}
|
|
|
|
ApplicationDependencies.getDatabaseObserver().registerMessageUpdateObserver(messageObserver)
|
|
emitter.setCancellable {
|
|
ApplicationDependencies.getDatabaseObserver().unregisterObserver(messageObserver)
|
|
}
|
|
|
|
refresh()
|
|
}
|
|
}
|
|
}
|