Temp
This commit is contained in:
parent
2ea902a081
commit
d3a8186fd8
|
@ -137,6 +137,15 @@ public class ContactDetailFragment extends Fragment {
|
|||
builder.show();
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
viewModel.dispose();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
|
|
|
@ -30,6 +30,7 @@ import io.reactivex.Single;
|
|||
import io.requery.Persistable;
|
||||
import io.requery.query.ResultDelegate;
|
||||
import io.requery.reactivex.ReactiveEntityStore;
|
||||
import io.requery.reactivex.ReactiveResult;
|
||||
|
||||
public class RxIkeyRepository implements IkeyRepository {
|
||||
|
||||
|
@ -118,12 +119,11 @@ public class RxIkeyRepository implements IkeyRepository {
|
|||
@Override
|
||||
public Completable storeSuperordinateTrust(UUID accountId, EntityBareJid jid, OpenPgpV4Fingerprint fingerprint, OpenPgpTrustStore.Trust trust) {
|
||||
return loadRecord(accountId, jid)
|
||||
.singleOrError()
|
||||
.map(record -> {
|
||||
record.setTrust(trust);
|
||||
return record;
|
||||
})
|
||||
.firstOrError()
|
||||
.doOnSuccess(m -> LOGGER.log(Level.INFO, "First Record: " + m))
|
||||
.flatMapCompletable(record -> storeRecord(accountId, jid, record));
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ public class RxIkeyRepository implements IkeyRepository {
|
|||
|
||||
@Override
|
||||
public Observable<IkeyRecord> loadContenderRecord(UUID accountId, EntityBareJid jid) {
|
||||
return getRecordModel(accountId, jid, false)
|
||||
return getRecordModel(accountId, jid, true)
|
||||
.map(m -> {
|
||||
List<IkeySubordinateRecord> subordinateRecords = new ArrayList<>();
|
||||
for (IkeySubordinateModel s : m.getSubordinates()) {
|
||||
|
@ -238,12 +238,25 @@ public class RxIkeyRepository implements IkeyRepository {
|
|||
.get().single().ignoreElement();
|
||||
}
|
||||
|
||||
// TODO: When this method is used in loadRecord() to get continuous updates of the record model
|
||||
// unfortunately updating the model (eg. per storeSuperordinateTrust() ) no longer terminates.
|
||||
private Observable<IkeyRecordModel> getContinuousRecordModel(UUID accountId, EntityBareJid jid, boolean isContender) {
|
||||
return getRecordModelResult(accountId, jid, isContender)
|
||||
.observableResult()
|
||||
.map(ResultDelegate::first);
|
||||
}
|
||||
|
||||
private Observable<IkeyRecordModel> getRecordModel(UUID accountId, EntityBareJid jid, boolean isContender) {
|
||||
return getRecordModelResult(accountId, jid, isContender)
|
||||
.observable();
|
||||
}
|
||||
|
||||
private ReactiveResult<IkeyRecordModel> getRecordModelResult(UUID accountId, EntityBareJid jid, boolean isContender) {
|
||||
return data.select(IkeyRecordModel.class)
|
||||
.where(IkeyRecordModel.ACCOUNT_ID.eq(accountId)
|
||||
.and(IkeyRecordModel.JID.eq(jid))
|
||||
.and(IkeyRecordModel.CONTENDER.eq(isContender)))
|
||||
.get().observable();
|
||||
.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,10 +73,12 @@ public class IkeyAwareOpenPgpStore extends MercuryOpenPgpStore {
|
|||
|
||||
private Single<Trust> readIkeyTrust(EntityBareJid owner, OpenPgpV4Fingerprint fingerprint) {
|
||||
return ikeyRecordRepository.loadRecord(accountId, owner)
|
||||
.filter(record -> record.getTrust() == Trust.trusted)
|
||||
.filter(record -> record.hasSubordinate(fingerprint))
|
||||
.map(IkeyRecord::getTrust)
|
||||
.map(trust -> trust == Trust.trusted ? Trust.ikey_trusted : trust)
|
||||
.map(record -> {
|
||||
if (record.getTrust() == Trust.trusted && record.hasSubordinate(fingerprint)) {
|
||||
return Trust.ikey_trusted;
|
||||
}
|
||||
return record.getTrust();
|
||||
})
|
||||
.firstElement()
|
||||
.flatMap(t -> t == Trust.undecided ? readManualTrust(owner, fingerprint).toMaybe() : Maybe.just(t))
|
||||
.switchIfEmpty(readManualTrust(owner, fingerprint));
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.jivesoftware.smack.packet.Presence;
|
|||
import org.jivesoftware.smack.roster.Roster;
|
||||
import org.jivesoftware.smack.roster.RosterEntry;
|
||||
import org.jivesoftware.smack.roster.RosterGroup;
|
||||
import org.jivesoftware.smackx.ikey.record.IkeyRecord;
|
||||
import org.jivesoftware.smackx.ox.OpenPgpManager;
|
||||
import org.jivesoftware.smackx.ox.crypto.OpenPgpProvider;
|
||||
import org.jivesoftware.smackx.ox.store.definition.OpenPgpStore;
|
||||
|
@ -42,6 +43,7 @@ import javax.inject.Inject;
|
|||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.functions.BiFunction;
|
||||
import io.reactivex.subjects.BehaviorSubject;
|
||||
import lombok.Getter;
|
||||
|
||||
|
@ -113,6 +115,7 @@ public class ContactDetailViewModel implements MercuryViewModel {
|
|||
roster = Roster.getInstanceFor(connection.getConnection());
|
||||
setupPresenceEventListener(roster, peer.getJid());
|
||||
|
||||
// peer
|
||||
addDisposable(peerRepository
|
||||
.observePeer(peerId)
|
||||
.filter(Optional::isPresent)
|
||||
|
@ -126,16 +129,28 @@ public class ContactDetailViewModel implements MercuryViewModel {
|
|||
}));
|
||||
|
||||
// Device keys
|
||||
addDisposable(openPgpRepository
|
||||
.observeFingerprints(peer.getAccount().getId(), peer.getJid())
|
||||
.map(viewItems -> {
|
||||
for (FingerprintViewItem item : viewItems) {
|
||||
item.setTrusted(openPgpStore.getTrust(item.getOwner(), item.getFingerprint()));
|
||||
}
|
||||
return viewItems;
|
||||
})
|
||||
.compose(schedulers.executeUiSafeObservable())
|
||||
.subscribe(fingerprints -> contactDeviceFingerprints.onNext(fingerprints)));
|
||||
addDisposable(
|
||||
Observable.combineLatest(
|
||||
openPgpRepository.observeFingerprints(peer.getAccount().getId(), peer.getJid())
|
||||
.doOnComplete(() -> LOGGER.log(Level.INFO, "Fingerprint complete"))
|
||||
.doOnNext(f -> LOGGER.log(Level.INFO, "Fingerprint Update: " + f)),
|
||||
ikeyRepository.loadRecord(accountId, peer.getJid())
|
||||
.doOnComplete(() -> LOGGER.log(Level.INFO, "Record complete"))
|
||||
.doOnNext(r -> LOGGER.log(Level.INFO, "Record update: " + r)),
|
||||
(viewItems, ikeyRecord) -> {
|
||||
LOGGER.log(Level.INFO, "Combining");
|
||||
for (FingerprintViewItem item : viewItems) {
|
||||
OpenPgpTrustStore.Trust trust = openPgpStore.getTrust(item.getOwner(), item.getFingerprint());
|
||||
item.setTrusted(trust);
|
||||
}
|
||||
return viewItems;
|
||||
})
|
||||
.doOnNext(m -> LOGGER.log(Level.INFO, "Combined Update: " + m))
|
||||
.compose(schedulers.executeUiSafeObservable())
|
||||
.doOnComplete(() -> LOGGER.log(Level.INFO, "Completed"))
|
||||
.doOnDispose(() -> LOGGER.log(Level.INFO, "Disposed"))
|
||||
.doOnTerminate(() -> LOGGER.log(Level.INFO, "Terminate"))
|
||||
.subscribe(fingerprints -> contactDeviceFingerprints.onNext(fingerprints)));
|
||||
|
||||
// Ikey
|
||||
addDisposable(ikeyRepository
|
||||
|
@ -248,6 +263,7 @@ public class ContactDetailViewModel implements MercuryViewModel {
|
|||
}
|
||||
|
||||
public void markIkeyFingerprintTrusted(OpenPgpV4Fingerprint fingerprint, EntityBareJid owner, boolean isChecked) {
|
||||
LOGGER.log(Level.INFO, "Marking Ikey " + fingerprint + " as " + (isChecked ? "trusted" : "untrusted"));
|
||||
OpenPgpTrustStore.Trust trust = isChecked ? OpenPgpTrustStore.Trust.trusted : OpenPgpTrustStore.Trust.untrusted;
|
||||
addDisposable(ikeyRepository.storeSuperordinateTrust(accountId, owner, fingerprint, trust)
|
||||
.subscribe(() -> LOGGER.log(Level.INFO, "Marked Ikey " + fingerprint + " of " + owner + " as " + trust),
|
||||
|
@ -276,6 +292,7 @@ public class ContactDetailViewModel implements MercuryViewModel {
|
|||
|
||||
@Override
|
||||
public void dispose() {
|
||||
LOGGER.log(Level.INFO, "Dispose");
|
||||
compositeDisposable.dispose();
|
||||
if (presenceEventListener != null) roster.removePresenceEventListener(presenceEventListener);
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 36997c5835e8ed72b927a5543d2dc55c12e8d28a
|
||||
Subproject commit 695a7982bfc9aa4720e9eb846bfaaf367b1fcaaa
|
Loading…
Reference in New Issue