62 lines
2.8 KiB
Java
62 lines
2.8 KiB
Java
|
package org.mercury_im.messenger.core.viewmodel.accounts;
|
||
|
|
||
|
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.entity.Account;
|
||
|
import org.pgpainless.key.OpenPgpV4Fingerprint;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.Date;
|
||
|
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<EntityBareJid> getJid(UUID accountId) {
|
||
|
return accountRepository.getAccount(accountId).toSingle()
|
||
|
.compose(schedulers.executeUiSafeSingle())
|
||
|
.map(Account::getJid);
|
||
|
}
|
||
|
|
||
|
public Observable<Optional<OpenPgpV4Fingerprint>> observeLocalFingerprint(UUID accountId) {
|
||
|
return openPgpRepository.observeLocalFingerprintOf(accountId);
|
||
|
}
|
||
|
|
||
|
public Observable<List<AccountFingerprintViewItem>> observeRemoteFingerprints(UUID accountId) {
|
||
|
return openPgpRepository.observeRemoteFingerprintsOfAccount(accountId)
|
||
|
.map(list -> {
|
||
|
List<AccountFingerprintViewItem> viewItems = new ArrayList<>(list.size());
|
||
|
for (OpenPgpV4Fingerprint fingerprint : list) {
|
||
|
OpenPgpTrustStore.Trust trust = openPgpRepository.loadTrust(accountId, fingerprint).blockingGet();
|
||
|
Date announcementDate = openPgpRepository.loadAnnouncementDate(accountId, fingerprint).blockingGet();
|
||
|
viewItems.add(new AccountFingerprintViewItem(fingerprint, announcementDate, trust == OpenPgpTrustStore.Trust.trusted));
|
||
|
}
|
||
|
return viewItems;
|
||
|
});
|
||
|
}
|
||
|
}
|