package org.mercury_im.messenger.core.viewmodel.account.detail; import org.jivesoftware.smackx.ox.store.definition.OpenPgpTrustStore; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.core.SchedulersFacade; import org.mercury_im.messenger.core.data.repository.AccountRepository; import org.mercury_im.messenger.core.data.repository.OpenPgpRepository; import org.mercury_im.messenger.core.util.Optional; import org.mercury_im.messenger.core.viewmodel.MercuryViewModel; import org.mercury_im.messenger.core.viewmodel.openpgp.FingerprintViewItem; import org.mercury_im.messenger.entity.Account; import org.pgpainless.key.OpenPgpV4Fingerprint; import java.util.List; import java.util.UUID; import io.reactivex.Observable; import io.reactivex.Single; public class AccountDetailsViewModel implements MercuryViewModel { private final OpenPgpRepository openPgpRepository; private final AccountRepository accountRepository; private final SchedulersFacade schedulers; public AccountDetailsViewModel(OpenPgpRepository openPgpRepository, AccountRepository accountRepository, SchedulersFacade schedulers) { this.openPgpRepository = openPgpRepository; this.accountRepository = accountRepository; this.schedulers = schedulers; } public void markFingerprintTrusted(UUID accountId, OpenPgpV4Fingerprint fingerprint, boolean trusted) { addDisposable(openPgpRepository.storeTrust(accountId, fingerprint, trusted ? OpenPgpTrustStore.Trust.trusted : OpenPgpTrustStore.Trust.untrusted) .compose(schedulers.executeUiSafeCompletable()) .subscribe()); } public Single getJid(UUID accountId) { return accountRepository.getAccount(accountId).toSingle() .compose(schedulers.executeUiSafeSingle()) .map(Account::getJid); } public Observable> observeLocalFingerprint(UUID accountId) { return openPgpRepository.observeLocalFingerprintOf(accountId); } public Observable> observeRemoteFingerprints(UUID accountId) { return accountRepository.getAccount(accountId).toSingle() .flatMapObservable(account -> openPgpRepository.observeFingerprints(accountId, account.getJid())); } }