Fixed some bugs and some tests

This commit is contained in:
2016-12-21 08:09:53 +01:00
parent 702ac6cb82
commit 732032b1b5
8 changed files with 170 additions and 140 deletions

View File

@ -254,7 +254,10 @@ public class BitmessageContext {
public void addContact(BitmessageAddress contact) {
ctx.getAddressRepository().save(contact);
if (contact.getPubkey() == null) {
ctx.requestPubkey(contact);
BitmessageAddress stored = ctx.getAddressRepository().getAddress(contact.getAddress());
if (stored.getPubkey() == null) {
ctx.requestPubkey(contact);
}
}
}

View File

@ -377,6 +377,18 @@ public class Plaintext implements Streamable {
return extendedData;
}
@SuppressWarnings("unchecked")
public <T extends ExtendedEncoding.ExtendedType> T getExtendedData(Class<T> type) {
ExtendedEncoding extendedData = getExtendedData();
if (extendedData == null) {
return null;
}
if (type == null || type.isInstance(extendedData.getContent())) {
return (T) extendedData.getContent();
}
return null;
}
public List<InventoryVector> getParents() {
if (Message.TYPE.equals(getExtendedData().getType())) {
return ((Message) extendedData.getContent()).getParents();

View File

@ -37,15 +37,28 @@ public abstract class AbstractMessageRepository implements MessageRepository, In
this.ctx = context;
}
/**
* @deprecated use {@link #saveContactIfNecessary(BitmessageAddress)} instead.
*/
@Deprecated
protected void safeSenderIfNecessary(Plaintext message) {
if (message.getId() == null) {
BitmessageAddress savedAddress = ctx.getAddressRepository().getAddress(message.getFrom().getAddress());
saveContactIfNecessary(message.getFrom());
}
}
protected void saveContactIfNecessary(BitmessageAddress contact) {
if (contact != null) {
BitmessageAddress savedAddress = ctx.getAddressRepository().getAddress(contact.getAddress());
if (savedAddress == null) {
ctx.getAddressRepository().save(message.getFrom());
} else if (savedAddress.getPubkey() == null && message.getFrom().getPubkey() != null) {
savedAddress.setPubkey(message.getFrom().getPubkey());
ctx.getAddressRepository().save(contact);
} else if (savedAddress.getPubkey() == null && contact.getPubkey() != null) {
savedAddress.setPubkey(contact.getPubkey());
ctx.getAddressRepository().save(savedAddress);
}
if (savedAddress != null) {
contact.setAlias(savedAddress.getAlias());
}
}
}
@ -95,7 +108,7 @@ public abstract class AbstractMessageRepository implements MessageRepository, In
@Override
public List<Plaintext> findMessagesToResend() {
return find("status='" + Plaintext.Status.SENT.name() + "'" +
" AND next_try < " + UnixTime.now());
" AND next_try < " + UnixTime.now());
}
@Override
@ -119,7 +132,7 @@ public abstract class AbstractMessageRepository implements MessageRepository, In
return collection.iterator().next();
default:
throw new ApplicationException("This shouldn't happen, found " + collection.size() +
" items, one or none was expected");
" items, one or none was expected");
}
}

View File

@ -52,6 +52,11 @@ public interface AddressRepository {
*/
List<BitmessageAddress> getContacts();
/**
* Implementations must not delete cryptographic keys if they're not provided by <code>address</code>.
*
* @param address to save or update
*/
void save(BitmessageAddress address);
void remove(BitmessageAddress address);