From 2d9345c0183b79908e7f60015adeddd80f289738 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 4 Sep 2018 15:57:52 -0300 Subject: [PATCH 01/15] Remove unnecessary information from private message classes --- .../android/contact/ContactListFragment.java | 3 +- .../android/contact/ConversationItem.java | 25 ++++---- .../android/forum/ForumControllerImpl.java | 2 +- .../conversation/GroupControllerImpl.java | 2 +- .../briar/api/blog/BlogInvitationRequest.java | 2 +- .../api/blog/BlogInvitationResponse.java | 6 +- .../briar/api/client/BaseMessageHeader.java | 58 ------------------- .../api/forum/ForumInvitationRequest.java | 2 +- .../api/forum/ForumInvitationResponse.java | 6 +- .../api/introduction/IntroductionMessage.java | 21 +------ .../api/introduction/IntroductionRequest.java | 18 +++--- .../introduction/IntroductionResponse.java | 12 +++- .../api/messaging/PrivateMessageHeader.java | 43 +++++++++++++- .../invitation/GroupInvitationRequest.java | 2 +- .../invitation/GroupInvitationResponse.java | 6 +- .../briar/api/sharing/InvitationMessage.java | 14 +---- .../briar/api/sharing/InvitationRequest.java | 8 +-- .../briar/api/sharing/InvitationResponse.java | 7 +-- .../briar/api/sharing/Shareable.java | 3 - .../IntroduceeProtocolEngine.java | 10 ++-- .../introduction/IntroductionManagerImpl.java | 7 +-- .../invitation/CreatorProtocolEngine.java | 2 +- .../GroupInvitationManagerImpl.java | 2 +- .../sharing/BlogInvitationFactoryImpl.java | 5 +- .../briar/sharing/BlogProtocolEngineImpl.java | 4 +- .../briar/sharing/BlogSharingManagerImpl.java | 4 +- .../sharing/ForumInvitationFactoryImpl.java | 4 +- .../sharing/ForumProtocolEngineImpl.java | 4 +- .../briar/sharing/InvitationFactory.java | 2 +- .../briar/sharing/SharingManagerImpl.java | 29 +++++----- .../GroupInvitationIntegrationTest.java | 3 - .../GroupInvitationManagerImplTest.java | 1 - .../sharing/BlogSharingIntegrationTest.java | 24 ++------ .../sharing/ForumSharingIntegrationTest.java | 10 +--- 34 files changed, 137 insertions(+), 214 deletions(-) delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/client/BaseMessageHeader.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 5ab78c73c..af8aebc43 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -36,7 +36,6 @@ import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.keyagreement.ContactExchangeActivity; import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.api.android.AndroidNotificationManager; -import org.briarproject.briar.api.client.BaseMessageHeader; import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; @@ -283,7 +282,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { } } - private void updateItem(ContactId c, BaseMessageHeader h) { + private void updateItem(ContactId c, PrivateMessageHeader h) { runOnUiThreadUnlessDestroyed(() -> { adapter.incrementRevision(); int position = adapter.findItemPosition(c); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 9070c738f..4d96f88d4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -11,7 +11,6 @@ import org.briarproject.briar.R; import org.briarproject.briar.android.contact.ConversationRequestItem.RequestType; import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.blog.BlogInvitationResponse; -import org.briarproject.briar.api.client.BaseMessageHeader; import org.briarproject.briar.api.forum.ForumInvitationRequest; import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.introduction.IntroductionRequest; @@ -92,7 +91,7 @@ abstract class ConversationItem { if (ir.isLocal()) { String text = ctx.getString(R.string.introduction_request_sent, contactName, ir.getName()); - return new ConversationNoticeOutItem(ir.getMessageId(), + return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(), ir.isSent(), ir.isSeen()); } else { @@ -109,7 +108,7 @@ abstract class ConversationItem { text = ctx.getString(R.string.introduction_request_received, contactName, ir.getName()); } - return new ConversationRequestItem(ir.getMessageId(), + return new ConversationRequestItem(ir.getId(), ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text, ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, ir.wasAnswered(), false); @@ -132,9 +131,8 @@ abstract class ConversationItem { R.string.introduction_response_declined_sent, ir.getName()); } - return new ConversationNoticeOutItem(ir.getMessageId(), - ir.getGroupId(), text, null, ir.getTimestamp(), ir.isSent(), - ir.isSeen()); + return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), + text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); } else { String text; if (ir.wasAccepted()) { @@ -152,9 +150,8 @@ abstract class ConversationItem { contactName, ir.getName()); } } - return new ConversationNoticeInItem(ir.getMessageId(), - ir.getGroupId(), text, null, ir.getTimestamp(), - ir.isRead()); + return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), + text, null, ir.getTimestamp(), ir.isRead()); } } @@ -272,12 +269,10 @@ abstract class ConversationItem { /** * This method should not be used to display the resulting ConversationItem * in the UI, but only to update list information based on the - * BaseMessageHeader. + * PrivateMessageHeader. **/ - static ConversationItem from(Context ctx, BaseMessageHeader h) { - if (h instanceof PrivateMessageHeader) { - return from((PrivateMessageHeader) h); - } else if(h instanceof IntroductionRequest) { + static ConversationItem from(Context ctx, PrivateMessageHeader h) { + if(h instanceof IntroductionRequest) { return from(ctx, "", (IntroductionRequest) h); } else if(h instanceof IntroductionResponse) { return from(ctx, "", (IntroductionResponse) h); @@ -286,7 +281,7 @@ abstract class ConversationItem { } else if(h instanceof InvitationResponse) { return from(ctx, "", (InvitationResponse) h); } else { - throw new IllegalArgumentException("Unknown message header"); + return from(h); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index bd28b4864..91d0cf596 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -88,7 +88,7 @@ class ForumControllerImpl extends (ForumInvitationResponse) f.getResponse(); if (r.getShareableId().equals(getGroupId()) && r.wasAccepted()) { LOG.info("Forum invitation was accepted"); - onForumInvitationAccepted(r.getContactId()); + onForumInvitationAccepted(f.getContactId()); } } else if (e instanceof ContactLeftShareableEvent) { ContactLeftShareableEvent c = (ContactLeftShareableEvent) e; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index 97a64c1a7..cc825d3b1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -103,7 +103,7 @@ class GroupControllerImpl extends (GroupInvitationResponse) g.getResponse(); if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) { listener.runOnUiThreadUnlessDestroyed( - () -> listener.onInvitationAccepted(r.getContactId())); + () -> listener.onInvitationAccepted(g.getContactId())); } } else if (e instanceof GroupDissolvedEvent) { GroupDissolvedEvent g = (GroupDissolvedEvent) e; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index 77dddbbe0..bdf3f1e6c 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -17,7 +17,7 @@ public class BlogInvitationRequest extends InvitationRequest { SessionId sessionId, Blog blog, ContactId contactId, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, blog, - contactId, message, available, canBeOpened); + message, available, canBeOpened); } public String getBlogAuthorName() { diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index e49142300..3183a37b0 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.blog; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -12,10 +11,9 @@ public class BlogInvitationResponse extends InvitationResponse { public BlogInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId blogId, ContactId contactId, - boolean accept) { + SessionId sessionId, GroupId blogId, boolean accept) { super(id, groupId, time, local, sent, seen, read, sessionId, blogId, - contactId, accept); + accept); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/client/BaseMessageHeader.java b/briar-api/src/main/java/org/briarproject/briar/api/client/BaseMessageHeader.java deleted file mode 100644 index 8cbbceb32..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/client/BaseMessageHeader.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.briarproject.briar.api.client; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class BaseMessageHeader { - - private final MessageId id; - private final GroupId groupId; - private final long timestamp; - private final boolean local, sent, seen, read; - - public BaseMessageHeader(MessageId id, GroupId groupId, long timestamp, - boolean local, boolean sent, boolean seen, boolean read) { - - this.id = id; - this.groupId = groupId; - this.timestamp = timestamp; - this.local = local; - this.sent = sent; - this.seen = seen; - this.read = read; - } - - public MessageId getId() { - return id; - } - - public GroupId getGroupId() { - return groupId; - } - - public long getTimestamp() { - return timestamp; - } - - public boolean isLocal() { - return local; - } - - public boolean isSent() { - return sent; - } - - public boolean isSeen() { - return seen; - } - - public boolean isRead() { - return read; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index 2d23ab0e8..adf68302e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -19,7 +19,7 @@ public class ForumInvitationRequest extends InvitationRequest { SessionId sessionId, Forum forum, ContactId contactId, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, forum, - contactId, message, available, canBeOpened); + message, available, canBeOpened); } public String getForumName() { diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index 48f03ce85..9c44bba71 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.forum; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -15,10 +14,9 @@ public class ForumInvitationResponse extends InvitationResponse { public ForumInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId forumId, ContactId contactId, - boolean accept) { + SessionId sessionId, GroupId forumId, boolean accept) { super(id, groupId, time, local, sent, seen, read, sessionId, forumId, - contactId, accept); + accept); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java index 009487fa2..31cc5ac44 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java @@ -3,41 +3,26 @@ package org.briarproject.briar.api.introduction; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.BaseMessageHeader; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.Immutable; -import static org.briarproject.briar.api.introduction.Role.INTRODUCER; - @Immutable @NotNullByDefault -public class IntroductionMessage extends BaseMessageHeader { +public abstract class IntroductionMessage extends PrivateMessageHeader { private final SessionId sessionId; - private final MessageId messageId; - private final Role role; IntroductionMessage(SessionId sessionId, MessageId messageId, - GroupId groupId, Role role, long time, boolean local, boolean sent, + GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read) { - super(messageId, groupId, time, local, sent, seen, read); this.sessionId = sessionId; - this.messageId = messageId; - this.role = role; } public SessionId getSessionId() { return sessionId; } - public MessageId getMessageId() { - return messageId; - } - - public boolean isIntroducer() { - return role == INTRODUCER; - } - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index b2a804bd8..718864c89 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.introduction; +import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -10,25 +11,28 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class IntroductionRequest extends IntroductionResponse { +public class IntroductionRequest extends IntroductionMessage { + private final Author introducedAuthor; @Nullable private final String message; private final boolean answered, exists; public IntroductionRequest(SessionId sessionId, MessageId messageId, - GroupId groupId, Role role, long time, boolean local, boolean sent, - boolean seen, boolean read, String name, boolean accepted, + GroupId groupId, long time, boolean local, boolean sent, + boolean seen, boolean read, Author introducedAuthor, @Nullable String message, boolean answered, boolean exists) { - - super(sessionId, messageId, groupId, role, time, local, sent, seen, - read, name, accepted); - + super(sessionId, messageId, groupId, time, local, sent, seen, read); + this.introducedAuthor = introducedAuthor; this.message = message; this.answered = answered; this.exists = exists; } + public String getName() { + return introducedAuthor.getName(); + } + @Nullable public String getMessage() { return message; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 816135d43..812d548c7 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -7,20 +7,22 @@ import org.briarproject.briar.api.client.SessionId; import javax.annotation.concurrent.Immutable; +import static org.briarproject.briar.api.introduction.Role.INTRODUCER; + @Immutable @NotNullByDefault public class IntroductionResponse extends IntroductionMessage { private final String name; + private final Role role; private final boolean accepted; public IntroductionResponse(SessionId sessionId, MessageId messageId, GroupId groupId, Role role, long time, boolean local, boolean sent, boolean seen, boolean read, String name, boolean accepted) { - super(sessionId, messageId, groupId, role, time, local, sent, seen, - read); - + super(sessionId, messageId, groupId, time, local, sent, seen, read); this.name = name; + this.role = role; this.accepted = accepted; } @@ -28,6 +30,10 @@ public class IntroductionResponse extends IntroductionMessage { return name; } + public boolean isIntroducer() { + return role == INTRODUCER; + } + public boolean wasAccepted() { return accepted; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java index 9caf3bd56..619f0303b 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java @@ -3,18 +3,55 @@ package org.briarproject.briar.api.messaging; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.BaseMessageHeader; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class PrivateMessageHeader extends BaseMessageHeader { +public class PrivateMessageHeader { + + private final MessageId id; + private final GroupId groupId; + private final long timestamp; + private final boolean local, sent, seen, read; public PrivateMessageHeader(MessageId id, GroupId groupId, long timestamp, boolean local, boolean read, boolean sent, boolean seen) { + this.id = id; + this.groupId = groupId; + this.timestamp = timestamp; + this.local = local; + this.sent = sent; + this.seen = seen; + this.read = read; + } - super(id, groupId, timestamp, local, sent, seen, read); + public MessageId getId() { + return id; + } + + public GroupId getGroupId() { + return groupId; + } + + public long getTimestamp() { + return timestamp; + } + + public boolean isLocal() { + return local; + } + + public boolean isSent() { + return sent; + } + + public boolean isSeen() { + return seen; + } + + public boolean isRead() { + return read; } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index d447ae8ef..e69ab0c3d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -20,7 +20,7 @@ public class GroupInvitationRequest extends InvitationRequest { SessionId sessionId, PrivateGroup shareable, ContactId contactId, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, shareable, - contactId, message, available, canBeOpened); + message, available, canBeOpened); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index b2e7d54b5..8531f502d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.privategroup.invitation; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -15,10 +14,9 @@ public class GroupInvitationResponse extends InvitationResponse { public GroupInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId shareableId, ContactId contactId, - boolean accept) { + SessionId sessionId, GroupId shareableId, boolean accept) { super(id, groupId, time, local, sent, seen, read, sessionId, - shareableId, contactId, accept); + shareableId, accept); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java index df93ebdfa..0af27b35b 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java @@ -1,36 +1,28 @@ package org.briarproject.briar.api.sharing; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.BaseMessageHeader; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class InvitationMessage extends BaseMessageHeader { +public abstract class InvitationMessage extends PrivateMessageHeader { private final SessionId sessionId; - private final ContactId contactId; public InvitationMessage(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, ContactId contactId) { - + SessionId sessionId) { super(id, groupId, time, local, sent, seen, read); this.sessionId = sessionId; - this.contactId = contactId; } public SessionId getSessionId() { return sessionId; } - public ContactId getContactId() { - return contactId; - } - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java index c5239310d..cb32a619e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.sharing; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -11,7 +10,8 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class InvitationRequest extends InvitationMessage { +public abstract class InvitationRequest + extends InvitationMessage { private final S shareable; @Nullable @@ -20,9 +20,9 @@ public class InvitationRequest extends InvitationMessage { public InvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, S shareable, ContactId contactId, + SessionId sessionId, S shareable, @Nullable String message, boolean available, boolean canBeOpened) { - super(id, groupId, time, local, sent, seen, read, sessionId, contactId); + super(id, groupId, time, local, sent, seen, read, sessionId); this.shareable = shareable; this.message = message; this.available = available; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java index 517b6068e..58b7d5390 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.sharing; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -10,7 +9,7 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class InvitationResponse extends InvitationMessage { +public abstract class InvitationResponse extends InvitationMessage { private final GroupId shareableId; private final boolean accept; @@ -18,8 +17,8 @@ public class InvitationResponse extends InvitationMessage { public InvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, SessionId sessionId, GroupId shareableId, - ContactId contactId, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId, contactId); + boolean accept) { + super(id, groupId, time, local, sent, seen, read, sessionId); this.shareableId = shareableId; this.accept = accept; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java index 409e4ba21..dad36908d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java @@ -1,7 +1,6 @@ package org.briarproject.briar.api.sharing; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.GroupId; @NotNullByDefault @@ -9,8 +8,6 @@ public interface Shareable { GroupId getId(); - Group getGroup(); - String getName(); } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 6bdaea9d2..80fc87e8b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -41,7 +41,6 @@ import javax.inject.Inject; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.util.LogUtils.logException; -import static org.briarproject.briar.api.introduction.Role.INTRODUCEE; import static org.briarproject.briar.introduction.IntroduceeState.AWAIT_AUTH; import static org.briarproject.briar.introduction.IntroduceeState.AWAIT_RESPONSES; import static org.briarproject.briar.introduction.IntroduceeState.LOCAL_ACCEPTED; @@ -255,11 +254,10 @@ class IntroduceeProtocolEngine localAuthor.getId()); boolean contactExists = contactManager .contactExists(txn, m.getAuthor().getId(), localAuthor.getId()); - IntroductionRequest request = - new IntroductionRequest(s.getSessionId(), m.getMessageId(), - m.getGroupId(), INTRODUCEE, m.getTimestamp(), false, - false, false, false, m.getAuthor().getName(), false, - m.getMessage(), false, contactExists); + IntroductionRequest request = new IntroductionRequest(s.getSessionId(), + m.getMessageId(), m.getGroupId(), m.getTimestamp(), false, + false, false, false, m.getAuthor(), m.getMessage(), false, + contactExists); IntroductionRequestReceivedEvent e = new IntroductionRequestReceivedEvent(c.getId(), request); txn.attach(e); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index b6a56f709..268efb2b1 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -472,10 +472,9 @@ class IntroductionManagerImpl extends ConversationClientImpl localAuthor.getId()); return new IntroductionRequest(sessionId, m, contactGroupId, - role, meta.getTimestamp(), meta.isLocal(), - status.isSent(), status.isSeen(), meta.isRead(), - author.getName(), false, message, !meta.isAvailableToAnswer(), - contactExists); + meta.getTimestamp(), meta.isLocal(), status.isSent(), + status.isSeen(), meta.isRead(), author, message, + !meta.isAvailableToAnswer(), contactExists); } private IntroductionResponse parseInvitationResponse(GroupId contactGroupId, diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index d043fbad2..057c3420f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -258,6 +258,6 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, sessionId, - m.getPrivateGroupId(), c, accept); + m.getPrivateGroupId(), accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index a4aef1eca..16d85f6bd 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -434,7 +434,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl return new GroupInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), sessionId, - meta.getPrivateGroupId(), c, accept); + meta.getPrivateGroupId(), accept); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java index 0162f08de..c7472a145 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java @@ -30,11 +30,10 @@ public class BlogInvitationFactoryImpl @Override public BlogInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, GroupId shareableId, - ContactId contactId, boolean accept) { + boolean seen, boolean read, GroupId shareableId, boolean accept) { SessionId sessionId = new SessionId(shareableId.getBytes()); return new BlogInvitationResponse(id, contactGroupId, time, local, - sent, seen, read, sessionId, shareableId, contactId, accept); + sent, seen, read, sessionId, shareableId, accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 25e0d0e8e..72a356193 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -63,7 +63,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), contactId, true); + m.getShareableId(), true); return new BlogInvitationResponseReceivedEvent(contactId, response); } @@ -73,7 +73,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), contactId, true); + m.getShareableId(), true); return new BlogInvitationResponseReceivedEvent(contactId, response); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java index 5c77c7be9..26852845d 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java @@ -80,8 +80,8 @@ class BlogSharingManagerImpl extends SharingManagerImpl // Pre-share both blogs, if they have not been shared already try { - preShareShareable(txn, c, ourBlog); - preShareShareable(txn, c, theirBlog); + preShareGroup(txn, c, ourBlog.getGroup()); + preShareGroup(txn, c, theirBlog.getGroup()); } catch (FormatException e) { throw new DbException(e); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java index c59acfd00..b71083524 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java @@ -31,10 +31,10 @@ public class ForumInvitationFactoryImpl public ForumInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, boolean seen, boolean read, GroupId shareableId, - ContactId contactId, boolean accept) { + boolean accept) { SessionId sessionId = new SessionId(shareableId.getBytes()); return new ForumInvitationResponse(id, contactGroupId, time, local, - sent, seen, read, sessionId, shareableId, contactId, accept); + sent, seen, read, sessionId, shareableId, accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index 7b2a1c785..1b17e2f24 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -65,7 +65,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), contactId, true); + m.getShareableId(), true); return new ForumInvitationResponseReceivedEvent(contactId, response); } @@ -75,7 +75,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), contactId, true); + m.getShareableId(), true); return new ForumInvitationResponseReceivedEvent(contactId, response); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java index ef473ca7b..3b990b247 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java @@ -16,6 +16,6 @@ public interface InvitationFactory } /** - * Adds the given Shareable and initializes a session between us + * Adds the given Group and initializes a session between us * and the Contact c in state SHARING. * If a session already exists, this does nothing. */ - void preShareShareable(Transaction txn, Contact c, S shareable) + void preShareGroup(Transaction txn, Contact c, Group g) throws DbException, FormatException { // Return if a session already exists with the contact GroupId contactGroupId = getContactGroup(c).getId(); StoredSession existingSession = getSession(txn, contactGroupId, - getSessionId(shareable.getId())); + getSessionId(g.getId())); if (existingSession != null) return; - // Add the shareable - db.addGroup(txn, shareable.getGroup()); + // Add the shareable's group + db.addGroup(txn, g); // Apply the client's visibility Visibility client = clientVersioningManager.getClientVisibility(txn, c.getId(), getShareableClientId(), getShareableMajorVersion()); - db.setGroupVisibility(txn, c.getId(), shareable.getId(), client); + db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Initialize session in sharing state - Session session = new Session(SHARING, contactGroupId, - shareable.getId(), null, null, 0, 0); + Session session = new Session(SHARING, contactGroupId, g.getId(), + null, null, 0, 0); MessageId storageId = createStorageId(txn, contactGroupId); storeSession(txn, storageId, session); } @@ -343,11 +343,11 @@ abstract class SharingManagerImpl parseInvitationRequest(txn, c, m, meta, status)); } else if (type == ACCEPT) { messages.add( - parseInvitationResponse(c, contactGroupId, m, meta, + parseInvitationResponse(contactGroupId, m, meta, status, true)); } else if (type == DECLINE) { messages.add( - parseInvitationResponse(c, contactGroupId, m, meta, + parseInvitationResponse(contactGroupId, m, meta, status, false)); } } @@ -374,13 +374,12 @@ abstract class SharingManagerImpl meta.isAvailableToAnswer(), canBeOpened); } - private InvitationResponse parseInvitationResponse(ContactId c, - GroupId contactGroupId, MessageId m, MessageMetadata meta, - MessageStatus status, boolean accept) - throws DbException, FormatException { + private InvitationResponse parseInvitationResponse(GroupId contactGroupId, + MessageId m, MessageMetadata meta, MessageStatus status, + boolean accept) { return invitationFactory.createInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), meta.getShareableId(), c, + status.isSeen(), meta.isRead(), meta.getShareableId(), accept); } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 66a0bdb03..ffdb8e836 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -100,7 +100,6 @@ public class GroupInvitationIntegrationTest assertEquals(msg, request.getMessage()); assertEquals(author0, request.getShareable().getCreator()); assertEquals(timestamp, request.getTimestamp()); - assertEquals(contactId0From1, request.getContactId()); assertEquals(privateGroup0.getName(), request.getShareable().getName()); assertFalse(request.isLocal()); assertFalse(request.isRead()); @@ -126,7 +125,6 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); assertTrue(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -143,7 +141,6 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); assertFalse(response.isLocal()); assertFalse(response.wasAccepted()); } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index 328347b4d..79217f566 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -706,7 +706,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { assertEquals(2, messages.size()); for (InvitationMessage m : messages) { assertEquals(contactGroup.getId(), m.getGroupId()); - assertEquals(contactId, m.getContactId()); if (m.getId().equals(message.getId())) { assertTrue(m instanceof GroupInvitationRequest); assertEquals(time1, m.getTimestamp()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 1fbc64387..48992747f 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -153,18 +153,14 @@ public class BlogSharingIntegrationTest // check other things are alright with the message for (InvitationMessage m : list) { if (m instanceof BlogInvitationRequest) { - BlogInvitationRequest invitation = - (BlogInvitationRequest) m; + BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertFalse(invitation.isAvailable()); assertEquals(blog2.getAuthor().getName(), invitation.getBlogAuthorName()); assertFalse(invitation.getShareable().isRssFeed()); - assertEquals(contactId1From0, invitation.getContactId()); assertEquals("Hi!", invitation.getMessage()); } else { - BlogInvitationResponse response = - (BlogInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); + BlogInvitationResponse response = (BlogInvitationResponse) m; assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -228,18 +224,14 @@ public class BlogSharingIntegrationTest // check other things are alright with the message for (InvitationMessage m : list) { if (m instanceof BlogInvitationRequest) { - BlogInvitationRequest invitation = - (BlogInvitationRequest) m; + BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertFalse(invitation.isAvailable()); assertEquals(rssBlog.getAuthor().getName(), invitation.getBlogAuthorName()); assertTrue(invitation.getShareable().isRssFeed()); - assertEquals(contactId1From0, invitation.getContactId()); assertEquals("Hi!", invitation.getMessage()); } else { - BlogInvitationResponse response = - (BlogInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); + BlogInvitationResponse response = (BlogInvitationResponse) m; assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -291,17 +283,13 @@ public class BlogSharingIntegrationTest // check things are alright with the message for (InvitationMessage m : list) { if (m instanceof BlogInvitationRequest) { - BlogInvitationRequest invitation = - (BlogInvitationRequest) m; + BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertFalse(invitation.isAvailable()); assertEquals(blog2.getAuthor().getName(), invitation.getBlogAuthorName()); - assertEquals(contactId1From0, invitation.getContactId()); assertEquals(null, invitation.getMessage()); } else { - BlogInvitationResponse response = - (BlogInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); + BlogInvitationResponse response = (BlogInvitationResponse) m; assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 2683ea715..7cb6d0bc6 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -141,13 +141,11 @@ public class ForumSharingIntegrationTest (ForumInvitationRequest) m; assertFalse(invitation.isAvailable()); assertEquals(forum0.getName(), invitation.getForumName()); - assertEquals(contactId1From0, invitation.getContactId()); assertEquals("Hi!", invitation.getMessage()); assertTrue(invitation.canBeOpened()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -196,17 +194,13 @@ public class ForumSharingIntegrationTest // check things are alright with the forum message for (InvitationMessage m : list) { if (m instanceof ForumInvitationRequest) { - ForumInvitationRequest invitation = - (ForumInvitationRequest) m; + ForumInvitationRequest invitation = (ForumInvitationRequest) m; assertFalse(invitation.isAvailable()); assertEquals(forum0.getName(), invitation.getForumName()); - assertEquals(contactId1From0, invitation.getContactId()); assertEquals(null, invitation.getMessage()); assertFalse(invitation.canBeOpened()); } else { - ForumInvitationResponse response = - (ForumInvitationResponse) m; - assertEquals(contactId0From1, response.getContactId()); + ForumInvitationResponse response = (ForumInvitationResponse) m; assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } From 59fae2fa3c3d023b1a75b52e60e39144bbd3d7a8 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 4 Sep 2018 18:28:12 -0300 Subject: [PATCH 02/15] Unify all private message requests in one PrivateRequest class --- .../android/contact/ContactListFragment.java | 4 +- .../android/contact/ConversationActivity.java | 36 ++++---- .../android/contact/ConversationItem.java | 83 ++++++++----------- .../briar/api/blog/BlogInvitationRequest.java | 11 +-- .../BlogInvitationRequestReceivedEvent.java | 4 +- .../api/forum/ForumInvitationRequest.java | 11 +-- .../ForumInvitationRequestReceivedEvent.java | 4 +- .../briar/api/introduction/Introduction.java | 32 +++++++ .../api/introduction/IntroductionManager.java | 3 +- .../api/introduction/IntroductionMessage.java | 28 ------- .../api/introduction/IntroductionRequest.java | 38 ++------- .../introduction/IntroductionResponse.java | 11 ++- .../briar/api/messaging/Nameable.java | 10 +++ .../briar/api/messaging/PrivateRequest.java | 57 +++++++++++++ .../invitation/GroupInvitationManager.java | 4 +- .../invitation/GroupInvitationRequest.java | 7 +- .../briar/api/sharing/InvitationMessage.java | 28 ------- .../briar/api/sharing/InvitationRequest.java | 49 ----------- .../briar/api/sharing/InvitationResponse.java | 11 ++- .../briar/api/sharing/Shareable.java | 5 +- .../briar/api/sharing/SharingManager.java | 3 +- .../event/InvitationRequestReceivedEvent.java | 8 +- .../IntroduceeProtocolEngine.java | 9 +- .../introduction/IntroductionManagerImpl.java | 17 ++-- .../GroupInvitationManagerImpl.java | 8 +- .../invitation/InviteeProtocolEngine.java | 2 +- .../sharing/BlogInvitationFactoryImpl.java | 2 +- .../briar/sharing/BlogProtocolEngineImpl.java | 4 +- .../sharing/ForumInvitationFactoryImpl.java | 2 +- .../sharing/ForumProtocolEngineImpl.java | 4 +- .../briar/sharing/InvitationFactory.java | 4 +- .../briar/sharing/SharingManagerImpl.java | 10 +-- .../IntroductionIntegrationTest.java | 14 ++-- .../GroupInvitationIntegrationTest.java | 26 +++--- .../GroupInvitationManagerImplTest.java | 6 +- .../sharing/BlogSharingIntegrationTest.java | 32 +++---- .../sharing/ForumSharingIntegrationTest.java | 24 +++--- 37 files changed, 288 insertions(+), 323 deletions(-) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index af8aebc43..95e8c3067 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -43,8 +43,8 @@ import org.briarproject.briar.api.introduction.event.IntroductionRequestReceived import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.messaging.ConversationManager; import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; -import org.briarproject.briar.api.sharing.InvitationRequest; import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; @@ -271,7 +271,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { LOG.info("Invitation Request received, update item"); InvitationRequestReceivedEvent m = (InvitationRequestReceivedEvent) e; - InvitationRequest ir = m.getRequest(); + PrivateRequest ir = m.getRequest(); updateItem(m.getContactId(), ir); } else if (e instanceof InvitationResponseReceivedEvent) { LOG.info("Invitation response received, updating item"); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index 38ed62ea7..e881c82d8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -62,7 +62,6 @@ import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.introduction.IntroductionMessage; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; @@ -71,10 +70,9 @@ import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; -import org.briarproject.briar.api.sharing.InvitationMessage; -import org.briarproject.briar.api.sharing.InvitationRequest; import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; @@ -344,15 +342,15 @@ public class ConversationActivity extends BriarActivity long start = now(); Collection headers = messagingManager.getMessageHeaders(contactId); - Collection introductions = + Collection introductions = introductionManager.getIntroductionMessages(contactId); - Collection forumInvitations = + Collection forumInvitations = forumSharingManager.getInvitationMessages(contactId); - Collection blogInvitations = + Collection blogInvitations = blogSharingManager.getInvitationMessages(contactId); - Collection groupInvitations = + Collection groupInvitations = groupInvitationManager.getInvitationMessages(contactId); - List invitations = new ArrayList<>( + List invitations = new ArrayList<>( forumInvitations.size() + blogInvitations.size() + groupInvitations.size()); invitations.addAll(forumInvitations); @@ -370,8 +368,8 @@ public class ConversationActivity extends BriarActivity private void displayMessages(int revision, Collection headers, - Collection introductions, - Collection invitations) { + Collection introductions, + Collection invitations) { runOnUiThreadUnlessDestroyed(() -> { if (revision == adapter.getRevision()) { adapter.incrementRevision(); @@ -397,8 +395,8 @@ public class ConversationActivity extends BriarActivity @SuppressWarnings("ConstantConditions") private List createItems( Collection headers, - Collection introductions, - Collection invitations) { + Collection introductions, + Collection invitations) { int size = headers.size() + introductions.size() + invitations.size(); List items = new ArrayList<>(size); @@ -409,7 +407,7 @@ public class ConversationActivity extends BriarActivity else item.setBody(body); items.add(item); } - for (IntroductionMessage m : introductions) { + for (PrivateMessageHeader m : introductions) { ConversationItem item; if (m instanceof IntroductionRequest) { IntroductionRequest i = (IntroductionRequest) m; @@ -420,11 +418,11 @@ public class ConversationActivity extends BriarActivity } items.add(item); } - for (InvitationMessage i : invitations) { + for (PrivateMessageHeader i : invitations) { ConversationItem item; - if (i instanceof InvitationRequest) { - InvitationRequest r = (InvitationRequest) i; - item = ConversationItem.from(this, contactName, r); + if (i instanceof PrivateRequest) { + item = ConversationItem + .from(this, contactName, (PrivateRequest) i); } else { InvitationResponse r = (InvitationResponse) i; item = ConversationItem.from(this, contactName, r); @@ -525,7 +523,7 @@ public class ConversationActivity extends BriarActivity (InvitationRequestReceivedEvent) e; if (event.getContactId().equals(contactId)) { LOG.info("Invitation received, adding..."); - InvitationRequest ir = event.getRequest(); + PrivateRequest ir = event.getRequest(); handleInvitationRequest(ir); } } else if (e instanceof InvitationResponseReceivedEvent) { @@ -586,7 +584,7 @@ public class ConversationActivity extends BriarActivity }); } - private void handleInvitationRequest(InvitationRequest m) { + private void handleInvitationRequest(PrivateRequest m) { getContactNameTask().addListener(new FutureTaskListener() { @Override public void onSuccess(String contactName) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 4d96f88d4..6ee0505d4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -16,10 +16,11 @@ import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationRequest; import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -86,35 +87,6 @@ abstract class ConversationItem { } } - static ConversationItem from(Context ctx, String contactName, - IntroductionRequest ir) { - if (ir.isLocal()) { - String text = ctx.getString(R.string.introduction_request_sent, - contactName, ir.getName()); - return new ConversationNoticeOutItem(ir.getId(), - ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(), - ir.isSent(), ir.isSeen()); - } else { - String text; - if (ir.wasAnswered()) { - text = ctx.getString( - R.string.introduction_request_answered_received, - contactName, ir.getName()); - } else if (ir.contactExists()){ - text = ctx.getString( - R.string.introduction_request_exists_received, - contactName, ir.getName()); - } else { - text = ctx.getString(R.string.introduction_request_received, - contactName, ir.getName()); - } - return new ConversationRequestItem(ir.getId(), - ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text, - ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, - ir.wasAnswered(), false); - } - } - static ConversationItem from(Context ctx, String contactName, IntroductionResponse ir) { if (ir.isLocal()) { @@ -156,21 +128,22 @@ abstract class ConversationItem { } static ConversationItem from(Context ctx, String contactName, - InvitationRequest ir) { + PrivateRequest ir) { if (ir.isLocal()) { String text; - if (ir instanceof ForumInvitationRequest) { + if (ir instanceof IntroductionRequest) { + text = ctx.getString(R.string.introduction_request_sent, + contactName, ir.getName()); + } else if (ir instanceof ForumInvitationRequest) { text = ctx.getString(R.string.forum_invitation_sent, - ((ForumInvitationRequest) ir).getForumName(), - contactName); + ir.getName(), contactName); } else if (ir instanceof BlogInvitationRequest) { text = ctx.getString(R.string.blogs_sharing_invitation_sent, - ((BlogInvitationRequest) ir).getBlogAuthorName(), - contactName); + ir.getName(), contactName); } else if (ir instanceof GroupInvitationRequest) { text = ctx.getString( R.string.groups_invitations_invitation_sent, - contactName, ir.getShareable().getName()); + contactName, ir.getName()); } else { throw new IllegalArgumentException("Unknown InvitationRequest"); } @@ -180,20 +153,36 @@ abstract class ConversationItem { } else { String text; RequestType type; - if (ir instanceof ForumInvitationRequest) { + if (ir instanceof IntroductionRequest) { + type = INTRODUCTION; + if (ir.wasAnswered()) { + text = ctx.getString( + R.string.introduction_request_answered_received, + contactName, ir.getName()); + } else if (ir.doesExist()) { + text = ctx.getString( + R.string.introduction_request_exists_received, + contactName, ir.getName()); + } else { + text = ctx.getString(R.string.introduction_request_received, + contactName, ir.getName()); + } + return new ConversationRequestItem(ir.getId(), + ir.getGroupId(), type, ir.getSessionId(), text, + ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, + ir.wasAnswered(), false); + } else if (ir instanceof ForumInvitationRequest) { text = ctx.getString(R.string.forum_invitation_received, - contactName, - ((ForumInvitationRequest) ir).getForumName()); + contactName, ir.getName()); type = FORUM; } else if (ir instanceof BlogInvitationRequest) { text = ctx.getString(R.string.blogs_sharing_invitation_received, - contactName, - ((BlogInvitationRequest) ir).getBlogAuthorName()); + contactName, ir.getName()); type = BLOG; } else if (ir instanceof GroupInvitationRequest) { text = ctx.getString( R.string.groups_invitations_invitation_received, - contactName, ir.getShareable().getName()); + contactName, ir.getName()); type = GROUP; } else { throw new IllegalArgumentException("Unknown InvitationRequest"); @@ -201,8 +190,8 @@ abstract class ConversationItem { return new ConversationRequestItem(ir.getId(), ir.getGroupId(), type, ir.getSessionId(), text, ir.getMessage(), ir.getTimestamp(), ir.isRead(), - ir.getShareable().getId(), !ir.isAvailable(), - ir.canBeOpened()); + ((Shareable) ir.getObject()).getId(), !ir.wasAnswered(), + ir.doesExist()); } } @@ -276,8 +265,8 @@ abstract class ConversationItem { return from(ctx, "", (IntroductionRequest) h); } else if(h instanceof IntroductionResponse) { return from(ctx, "", (IntroductionResponse) h); - } else if(h instanceof InvitationRequest) { - return from(ctx, "", (InvitationRequest) h); + } else if(h instanceof PrivateRequest) { + return from(ctx, "", (PrivateRequest) h); } else if(h instanceof InvitationResponse) { return from(ctx, "", (InvitationResponse) h); } else { diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index bdf3f1e6c..439a5b7c7 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -1,27 +1,22 @@ package org.briarproject.briar.api.blog; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.Nullable; @NotNullByDefault -public class BlogInvitationRequest extends InvitationRequest { +public class BlogInvitationRequest extends PrivateRequest { public BlogInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Blog blog, ContactId contactId, + SessionId sessionId, Blog blog, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, blog, message, available, canBeOpened); } - public String getBlogAuthorName() { - return getShareable().getName(); - } - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java index cbb5381ca..ee90a2e12 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java @@ -3,7 +3,7 @@ package org.briarproject.briar.api.blog.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.blog.Blog; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import javax.annotation.concurrent.Immutable; @@ -14,7 +14,7 @@ public class BlogInvitationRequestReceivedEvent extends InvitationRequestReceivedEvent { public BlogInvitationRequestReceivedEvent(Blog blog, ContactId contactId, - InvitationRequest request) { + PrivateRequest request) { super(blog, contactId, request); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index adf68302e..7721fd8b9 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -1,29 +1,24 @@ package org.briarproject.briar.api.forum; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class ForumInvitationRequest extends InvitationRequest { +public class ForumInvitationRequest extends PrivateRequest { public ForumInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Forum forum, ContactId contactId, + SessionId sessionId, Forum forum, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, forum, message, available, canBeOpened); } - public String getForumName() { - return getShareable().getName(); - } - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java index 8d1b0ea39..7fe834892 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java @@ -3,7 +3,7 @@ package org.briarproject.briar.api.forum.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.forum.Forum; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import javax.annotation.concurrent.Immutable; @@ -14,7 +14,7 @@ public class ForumInvitationRequestReceivedEvent extends InvitationRequestReceivedEvent { public ForumInvitationRequestReceivedEvent(Forum forum, ContactId contactId, - InvitationRequest request) { + PrivateRequest request) { super(forum, contactId, request); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java new file mode 100644 index 000000000..0384d1971 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java @@ -0,0 +1,32 @@ +package org.briarproject.briar.api.introduction; + +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.briar.api.messaging.Nameable; + +import javax.annotation.concurrent.Immutable; + +import static org.briarproject.briar.api.introduction.Role.INTRODUCER; + +@Immutable +@NotNullByDefault +public class Introduction implements Nameable { + + private final Author introducedAuthor; + private final Role ourRole; + + public Introduction(Author introducedAuthor, Role ourRole) { + this.introducedAuthor = introducedAuthor; + this.ourRole = ourRole; + } + + @Override + public String getName() { + return introducedAuthor.getName(); + } + + public boolean isIntroducer() { + return ourRole == INTRODUCER; + } + +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java index 532d63353..384dbb1ce 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.ClientId; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import java.util.Collection; @@ -50,7 +51,7 @@ public interface IntroductionManager extends ConversationClient { /** * Returns all introduction messages for the given contact. */ - Collection getIntroductionMessages(ContactId contactId) + Collection getIntroductionMessages(ContactId contactId) throws DbException; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java deleted file mode 100644 index 31cc5ac44..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionMessage.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.briarproject.briar.api.introduction; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class IntroductionMessage extends PrivateMessageHeader { - - private final SessionId sessionId; - - IntroductionMessage(SessionId sessionId, MessageId messageId, - GroupId groupId, long time, boolean local, boolean sent, - boolean seen, boolean read) { - super(messageId, groupId, time, local, sent, seen, read); - this.sessionId = sessionId; - } - - public SessionId getSessionId() { - return sessionId; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index 718864c89..6d67dec89 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -1,48 +1,24 @@ package org.briarproject.briar.api.introduction; -import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class IntroductionRequest extends IntroductionMessage { +public class IntroductionRequest extends PrivateRequest { - private final Author introducedAuthor; - @Nullable - private final String message; - private final boolean answered, exists; - - public IntroductionRequest(SessionId sessionId, MessageId messageId, - GroupId groupId, long time, boolean local, boolean sent, - boolean seen, boolean read, Author introducedAuthor, + public IntroductionRequest(MessageId messageId, GroupId groupId, + long time, boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, Introduction introduction, @Nullable String message, boolean answered, boolean exists) { - super(sessionId, messageId, groupId, time, local, sent, seen, read); - this.introducedAuthor = introducedAuthor; - this.message = message; - this.answered = answered; - this.exists = exists; + super(messageId, groupId, time, local, sent, seen, read, sessionId, + introduction, message, answered, exists); } - public String getName() { - return introducedAuthor.getName(); - } - - @Nullable - public String getMessage() { - return message; - } - - public boolean wasAnswered() { - return answered; - } - - public boolean contactExists() { - return exists; - } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 812d548c7..5ac474d57 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.Immutable; @@ -11,8 +12,9 @@ import static org.briarproject.briar.api.introduction.Role.INTRODUCER; @Immutable @NotNullByDefault -public class IntroductionResponse extends IntroductionMessage { +public class IntroductionResponse extends PrivateMessageHeader { + private final SessionId sessionId; private final String name; private final Role role; private final boolean accepted; @@ -20,12 +22,17 @@ public class IntroductionResponse extends IntroductionMessage { public IntroductionResponse(SessionId sessionId, MessageId messageId, GroupId groupId, Role role, long time, boolean local, boolean sent, boolean seen, boolean read, String name, boolean accepted) { - super(sessionId, messageId, groupId, time, local, sent, seen, read); + super(messageId, groupId, time, local, sent, seen, read); + this.sessionId = sessionId; this.name = name; this.role = role; this.accepted = accepted; } + public SessionId getSessionId() { + return sessionId; + } + public String getName() { return name; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java new file mode 100644 index 000000000..e61c676f5 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java @@ -0,0 +1,10 @@ +package org.briarproject.briar.api.messaging; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +@NotNullByDefault +public interface Nameable { + + String getName(); + +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java new file mode 100644 index 000000000..3fa593242 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java @@ -0,0 +1,57 @@ +package org.briarproject.briar.api.messaging; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.api.client.SessionId; + +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +@Immutable +@NotNullByDefault +public class PrivateRequest extends PrivateMessageHeader { + + private final SessionId sessionId; + private final O object; + @Nullable + private final String message; + private final boolean answered, exists; + + public PrivateRequest(MessageId messageId, GroupId groupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, O object, @Nullable String message, + boolean answered, boolean exists) { + super(messageId, groupId, time, local, sent, seen, read); + this.sessionId = sessionId; + this.object = object; + this.message = message; + this.answered = answered; + this.exists = exists; + } + + public SessionId getSessionId() { + return sessionId; + } + + public O getObject() { + return object; + } + + public String getName() { + return object.getName(); + } + + @Nullable + public String getMessage() { + return message; + } + + public boolean wasAnswered() { + return answered; + } + + public boolean doesExist() { + return exists; + } +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java index 1062d0ce1..f65903614 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java @@ -9,8 +9,8 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.privategroup.PrivateGroup; -import org.briarproject.briar.api.sharing.InvitationMessage; import java.util.Collection; @@ -77,7 +77,7 @@ public interface GroupInvitationManager extends ConversationClient { * Returns all private group invitation messages related to the given * contact. */ - Collection getInvitationMessages(ContactId c) + Collection getInvitationMessages(ContactId c) throws DbException; /** diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index e69ab0c3d..f7831f268 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -1,23 +1,22 @@ package org.briarproject.briar.api.privategroup.invitation; -import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.privategroup.PrivateGroup; -import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class GroupInvitationRequest extends InvitationRequest { +public class GroupInvitationRequest extends PrivateRequest { public GroupInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, PrivateGroup shareable, ContactId contactId, + SessionId sessionId, PrivateGroup shareable, @Nullable String message, boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, shareable, message, available, canBeOpened); diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java deleted file mode 100644 index 0af27b35b..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.briarproject.briar.api.sharing; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class InvitationMessage extends PrivateMessageHeader { - - private final SessionId sessionId; - - public InvitationMessage(MessageId id, GroupId groupId, long time, - boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId) { - super(id, groupId, time, local, sent, seen, read); - this.sessionId = sessionId; - } - - public SessionId getSessionId() { - return sessionId; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java deleted file mode 100644 index cb32a619e..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.briarproject.briar.api.sharing; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.SessionId; - -import javax.annotation.Nullable; -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class InvitationRequest - extends InvitationMessage { - - private final S shareable; - @Nullable - private final String message; - private final boolean available, canBeOpened; - - public InvitationRequest(MessageId id, GroupId groupId, long time, - boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, S shareable, - @Nullable String message, boolean available, boolean canBeOpened) { - super(id, groupId, time, local, sent, seen, read, sessionId); - this.shareable = shareable; - this.message = message; - this.available = available; - this.canBeOpened = canBeOpened; - } - - @Nullable - public String getMessage() { - return message; - } - - public boolean isAvailable() { - return available; - } - - public boolean canBeOpened() { - return canBeOpened; - } - - public S getShareable() { - return shareable; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java index 58b7d5390..f7afc699e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java @@ -4,13 +4,15 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public abstract class InvitationResponse extends InvitationMessage { +public abstract class InvitationResponse extends PrivateMessageHeader { + private final SessionId sessionId; private final GroupId shareableId; private final boolean accept; @@ -18,11 +20,16 @@ public abstract class InvitationResponse extends InvitationMessage { long time, boolean local, boolean sent, boolean seen, boolean read, SessionId sessionId, GroupId shareableId, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId); + super(id, groupId, time, local, sent, seen, read); + this.sessionId = sessionId; this.shareableId = shareableId; this.accept = accept; } + public SessionId getSessionId() { + return sessionId; + } + public boolean wasAccepted() { return accept; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java index dad36908d..a8287df20 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java @@ -2,12 +2,11 @@ package org.briarproject.briar.api.sharing; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.briar.api.messaging.Nameable; @NotNullByDefault -public interface Shareable { +public interface Shareable extends Nameable { GroupId getId(); - String getName(); - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java index b593d2fdf..6fefa49ad 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import java.util.Collection; @@ -39,7 +40,7 @@ public interface SharingManager * Returns all group sharing messages sent by the Contact * identified by contactId. */ - Collection getInvitationMessages( + Collection getInvitationMessages( ContactId contactId) throws DbException; /** diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java index 149124013..a7aeb9336 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java @@ -3,7 +3,7 @@ package org.briarproject.briar.api.sharing.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.concurrent.Immutable; @@ -15,10 +15,10 @@ public abstract class InvitationRequestReceivedEvent private final S shareable; private final ContactId contactId; - private final InvitationRequest request; + private final PrivateRequest request; protected InvitationRequestReceivedEvent(S shareable, ContactId contactId, - InvitationRequest request) { + PrivateRequest request) { this.shareable = shareable; this.contactId = contactId; this.request = request; @@ -28,7 +28,7 @@ public abstract class InvitationRequestReceivedEvent return contactId; } - public InvitationRequest getRequest() { + public PrivateRequest getRequest() { return request; } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 80fc87e8b..248882cea 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -26,6 +26,7 @@ import org.briarproject.bramble.api.transport.KeySetId; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; @@ -254,9 +255,11 @@ class IntroduceeProtocolEngine localAuthor.getId()); boolean contactExists = contactManager .contactExists(txn, m.getAuthor().getId(), localAuthor.getId()); - IntroductionRequest request = new IntroductionRequest(s.getSessionId(), - m.getMessageId(), m.getGroupId(), m.getTimestamp(), false, - false, false, false, m.getAuthor(), m.getMessage(), false, + Introduction introduction = + new Introduction(m.getAuthor(), s.getRole()); + IntroductionRequest request = new IntroductionRequest(m.getMessageId(), + m.getGroupId(), m.getTimestamp(), false, false, false, false, + s.getSessionId(), introduction, m.getMessage(), false, contactExists); IntroductionRequestReceivedEvent e = new IntroductionRequestReceivedEvent(c.getId(), request); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 268efb2b1..2dba9ab10 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -29,11 +29,12 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.introduction.IntroductionMessage; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.Role; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.client.ConversationClientImpl; import org.briarproject.briar.introduction.IntroducerSession.Introducee; @@ -398,9 +399,9 @@ class IntroductionManagerImpl extends ConversationClientImpl } @Override - public Collection getIntroductionMessages(ContactId c) + public Collection getIntroductionMessages(ContactId c) throws DbException { - List messages; + List messages; Transaction txn = db.startTransaction(true); try { Contact contact = db.getContact(txn, c); @@ -470,11 +471,11 @@ class IntroductionManagerImpl extends ConversationClientImpl boolean contactExists = contactManager .contactExists(txn, rm.getAuthor().getId(), localAuthor.getId()); - - return new IntroductionRequest(sessionId, m, contactGroupId, - meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), author, message, - !meta.isAvailableToAnswer(), contactExists); + Introduction introduction = new Introduction(author, role); + return new IntroductionRequest(m, contactGroupId, meta.getTimestamp(), + meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), + sessionId, introduction, message, !meta.isAvailableToAnswer(), + contactExists); } private IntroductionResponse parseInvitationResponse(GroupId contactGroupId, diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 16d85f6bd..bcc7d8993 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -26,6 +26,7 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.privategroup.PrivateGroupFactory; import org.briarproject.briar.api.privategroup.PrivateGroupManager; @@ -34,7 +35,6 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationMessage; import org.briarproject.briar.client.ConversationClientImpl; import java.util.ArrayList; @@ -368,9 +368,9 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } @Override - public Collection getInvitationMessages(ContactId c) + public Collection getInvitationMessages(ContactId c) throws DbException { - List messages; + List messages; Transaction txn = db.startTransaction(true); try { Contact contact = db.getContact(txn, c); @@ -422,7 +422,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl db.containsGroup(txn, invite.getPrivateGroupId()); return new GroupInvitationRequest(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), sessionId, pg, c, + status.isSeen(), meta.isRead(), sessionId, pg, invite.getMessage(), meta.isAvailableToAnswer(), canBeOpened); } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index a0e73d9b0..67690c80c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -331,7 +331,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { PrivateGroup pg, ContactId c) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationRequest(m.getId(), m.getContactGroupId(), - m.getTimestamp(), false, false, true, false, sessionId, pg, c, + m.getTimestamp(), false, false, true, false, sessionId, pg, m.getMessage(), true, false); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java index c7472a145..9063ebcbc 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java @@ -24,7 +24,7 @@ public class BlogInvitationFactoryImpl SessionId sessionId = new SessionId(m.getShareableId().getBytes()); return new BlogInvitationRequest(m.getId(), m.getContactGroupId(), m.getTimestamp(), local, sent, seen, read, sessionId, - m.getShareable(), c, m.getMessage(), available, canBeOpened); + m.getShareable(), m.getMessage(), available, canBeOpened); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 72a356193..696ce5143 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -18,7 +18,7 @@ import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.event.BlogInvitationRequestReceivedEvent; import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent; import org.briarproject.briar.api.client.MessageTracker; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.concurrent.Immutable; import javax.inject.Inject; @@ -50,7 +50,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationRequestReceivedEvent(InviteMessage m, ContactId contactId, boolean available, boolean canBeOpened) { - InvitationRequest request = invitationFactory + PrivateRequest request = invitationFactory .createInvitationRequest(false, false, true, false, m, contactId, available, canBeOpened); return new BlogInvitationRequestReceivedEvent(m.getShareable(), diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java index b71083524..758082933 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java @@ -24,7 +24,7 @@ public class ForumInvitationFactoryImpl SessionId sessionId = new SessionId(m.getShareableId().getBytes()); return new ForumInvitationRequest(m.getId(), m.getContactGroupId(), m.getTimestamp(), local, sent, seen, read, sessionId, - m.getShareable(), c, m.getMessage(), available, canBeOpened); + m.getShareable(), m.getMessage(), available, canBeOpened); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index 1b17e2f24..6ffad99d1 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -18,7 +18,7 @@ import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.forum.ForumManager; import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent; import org.briarproject.briar.api.forum.event.ForumInvitationResponseReceivedEvent; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.concurrent.Immutable; import javax.inject.Inject; @@ -52,7 +52,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationRequestReceivedEvent(InviteMessage m, ContactId contactId, boolean available, boolean canBeOpened) { - InvitationRequest request = invitationFactory + PrivateRequest request = invitationFactory .createInvitationRequest(false, false, true, false, m, contactId, available, canBeOpened); return new ForumInvitationRequestReceivedEvent(m.getShareable(), diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java index 3b990b247..361ab532f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java @@ -3,13 +3,13 @@ package org.briarproject.briar.sharing; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.Shareable; public interface InvitationFactory { - InvitationRequest createInvitationRequest(boolean local, boolean sent, + PrivateRequest createInvitationRequest(boolean local, boolean sent, boolean seen, boolean read, InviteMessage m, ContactId c, boolean available, boolean canBeOpened); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index 885422275..e15e37c17 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -26,8 +26,8 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationMessage; -import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.Shareable; import org.briarproject.briar.api.sharing.SharingInvitationItem; @@ -321,9 +321,9 @@ abstract class SharingManagerImpl } @Override - public Collection getInvitationMessages(ContactId c) + public Collection getInvitationMessages(ContactId c) throws DbException { - List messages; + List messages; Transaction txn = db.startTransaction(true); try { Contact contact = db.getContact(txn, c); @@ -360,7 +360,7 @@ abstract class SharingManagerImpl return messages; } - private InvitationRequest parseInvitationRequest(Transaction txn, + private PrivateRequest parseInvitationRequest(Transaction txn, ContactId c, MessageId m, MessageMetadata meta, MessageStatus status) throws DbException, FormatException { // Look up the invite message to get the details of the private group diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index b3161af64..0d6eaa27f 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -25,13 +25,13 @@ import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.introduction.IntroductionMessage; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.test.BriarIntegrationTest; import org.junit.Before; import org.junit.Test; @@ -608,10 +608,10 @@ public class IntroductionIntegrationTest // assert that introducees get notified about the existing contact IntroductionRequest ir1 = getIntroductionRequest(introductionManager1, contactId0From1); - assertTrue(ir1.contactExists()); + assertTrue(ir1.doesExist()); IntroductionRequest ir2 = getIntroductionRequest(introductionManager2, contactId0From2); - assertTrue(ir2.contactExists()); + assertTrue(ir2.doesExist()); // sync ACCEPT messages back to introducer sync1To0(1, true); @@ -1100,7 +1100,7 @@ public class IntroductionIntegrationTest } private void assertDefaultUiMessages() throws DbException { - Collection messages = + Collection messages = introductionManager0.getIntroductionMessages(contactId1From0); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); @@ -1122,8 +1122,8 @@ public class IntroductionIntegrationTest } private void assertMessagesAreAcked( - Collection messages) { - for (IntroductionMessage msg : messages) { + Collection messages) { + for (PrivateMessageHeader msg : messages) { if (msg.isLocal()) assertTrue(msg.isSeen()); } } @@ -1299,7 +1299,7 @@ public class IntroductionIntegrationTest private IntroductionRequest getIntroductionRequest( IntroductionManager manager, ContactId contactId) throws DbException { - for (IntroductionMessage im : manager + for (PrivateMessageHeader im : manager .getIntroductionMessages(contactId)) { if (im instanceof IntroductionRequest) { return (IntroductionRequest) im; diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index ffdb8e836..4f1e512d9 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.privategroup.GroupMessage; import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.privategroup.PrivateGroupManager; @@ -11,7 +12,6 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationMessage; import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.test.BriarIntegrationTest; import org.briarproject.briar.test.BriarIntegrationTestComponent; @@ -92,18 +92,18 @@ public class GroupInvitationIntegrationTest assertEquals(privateGroup0.getName(), item.getName()); assertFalse(item.isSubscribed()); - Collection messages = + Collection messages = groupInvitationManager1.getInvitationMessages(contactId0From1); assertEquals(1, messages.size()); GroupInvitationRequest request = (GroupInvitationRequest) messages.iterator().next(); assertEquals(msg, request.getMessage()); - assertEquals(author0, request.getShareable().getCreator()); + assertEquals(author0, request.getObject().getCreator()); assertEquals(timestamp, request.getTimestamp()); - assertEquals(privateGroup0.getName(), request.getShareable().getName()); + assertEquals(privateGroup0.getName(), request.getObject().getName()); assertFalse(request.isLocal()); assertFalse(request.isRead()); - assertFalse(request.canBeOpened()); + assertFalse(request.doesExist()); } @Test @@ -117,11 +117,11 @@ public class GroupInvitationIntegrationTest groupInvitationManager1 .respondToInvitation(contactId0From1, privateGroup0, false); - Collection messages = + Collection messages = groupInvitationManager1.getInvitationMessages(contactId0From1); assertEquals(2, messages.size()); boolean foundResponse = false; - for (InvitationMessage m : messages) { + for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; @@ -137,7 +137,7 @@ public class GroupInvitationIntegrationTest groupInvitationManager0.getInvitationMessages(contactId1From0); assertEquals(2, messages.size()); foundResponse = false; - for (InvitationMessage m : messages) { + for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; @@ -164,17 +164,17 @@ public class GroupInvitationIntegrationTest groupInvitationManager1 .respondToInvitation(contactId0From1, privateGroup0, true); - Collection messages = + Collection messages = groupInvitationManager1.getInvitationMessages(contactId0From1); assertEquals(2, messages.size()); boolean foundResponse = false; - for (InvitationMessage m : messages) { + for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; assertTrue(response.wasAccepted()); } else { - assertTrue(((GroupInvitationRequest) m).canBeOpened()); + assertTrue(((GroupInvitationRequest) m).doesExist()); } } assertTrue(foundResponse); @@ -185,7 +185,7 @@ public class GroupInvitationIntegrationTest groupInvitationManager0.getInvitationMessages(contactId1From0); assertEquals(2, messages.size()); foundResponse = false; - for (InvitationMessage m : messages) { + for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; InvitationResponse response = (GroupInvitationResponse) m; @@ -216,7 +216,7 @@ public class GroupInvitationIntegrationTest // 1 has one unread message Group g0 = groupInvitationManager1.getContactGroup(contact0From1); assertGroupCount(messageTracker1, g0.getId(), 1, 1, timestamp); - InvitationMessage m = + PrivateMessageHeader m = groupInvitationManager1.getInvitationMessages(contactId0From1) .iterator().next(); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index 79217f566..b24f62c7e 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -24,13 +24,13 @@ import org.briarproject.bramble.test.BrambleMockTestCase; import org.briarproject.bramble.test.TestUtils; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.privategroup.PrivateGroupFactory; import org.briarproject.briar.api.privategroup.PrivateGroupManager; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationMessage; import org.jmock.AbstractExpectations; import org.jmock.Expectations; import org.jmock.lib.legacy.ClassImposteriser; @@ -701,10 +701,10 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { oneOf(db).endTransaction(txn); }}); - Collection messages = + Collection messages = groupInvitationManager.getInvitationMessages(contactId); assertEquals(2, messages.size()); - for (InvitationMessage m : messages) { + for (PrivateMessageHeader m : messages) { assertEquals(contactGroup.getId(), m.getGroupId()); if (m.getId().equals(message.getId())) { assertTrue(m instanceof GroupInvitationRequest); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 48992747f..7251ec2c7 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -18,7 +18,7 @@ import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.BlogSharingManager; import org.briarproject.briar.api.blog.event.BlogInvitationRequestReceivedEvent; import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent; -import org.briarproject.briar.api.sharing.InvitationMessage; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.test.BriarIntegrationTest; import org.briarproject.briar.test.BriarIntegrationTestComponent; import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent; @@ -147,17 +147,17 @@ public class BlogSharingIntegrationTest assertTrue(blogManager1.getBlogs().contains(blog2)); // invitee has one invitation message from sharer - List list = new ArrayList<>( + List list = new ArrayList<>( blogSharingManager1.getInvitationMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message - for (InvitationMessage m : list) { + for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertFalse(invitation.isAvailable()); + assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), - invitation.getBlogAuthorName()); - assertFalse(invitation.getShareable().isRssFeed()); + invitation.getName()); + assertFalse(invitation.getObject().isRssFeed()); assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; @@ -218,17 +218,17 @@ public class BlogSharingIntegrationTest assertTrue(blogManager1.getBlogs().contains(rssBlog)); // invitee has one invitation message from sharer - List list = new ArrayList<>( + List list = new ArrayList<>( blogSharingManager1.getInvitationMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message - for (InvitationMessage m : list) { + for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertFalse(invitation.isAvailable()); + assertFalse(invitation.wasAnswered()); assertEquals(rssBlog.getAuthor().getName(), - invitation.getBlogAuthorName()); - assertTrue(invitation.getShareable().isRssFeed()); + invitation.getName()); + assertTrue(invitation.getObject().isRssFeed()); assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; @@ -277,16 +277,16 @@ public class BlogSharingIntegrationTest assertEquals(0, blogSharingManager1.getInvitations().size()); // invitee has one invitation message from sharer and one response - List list = new ArrayList<>( + List list = new ArrayList<>( blogSharingManager1.getInvitationMessages(contactId0From1)); assertEquals(2, list.size()); // check things are alright with the message - for (InvitationMessage m : list) { + for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertFalse(invitation.isAvailable()); + assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), - invitation.getBlogAuthorName()); + invitation.getName()); assertEquals(null, invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; @@ -382,7 +382,7 @@ public class BlogSharingIntegrationTest assertTrue(contacts.contains(contact0From1)); // make sure 1 knows that they have blog2 already - Collection messages = + Collection messages = blogSharingManager1.getInvitationMessages(contactId0From1); assertEquals(2, messages.size()); assertEquals(blog2, blogManager1.getBlog(blog2.getId())); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 7cb6d0bc6..acae3fb4c 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -22,7 +22,7 @@ import org.briarproject.briar.api.forum.ForumPostHeader; import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent; import org.briarproject.briar.api.forum.event.ForumInvitationResponseReceivedEvent; -import org.briarproject.briar.api.sharing.InvitationMessage; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.sharing.SharingInvitationItem; import org.briarproject.briar.test.BriarIntegrationTest; import org.briarproject.briar.test.BriarIntegrationTestComponent; @@ -131,18 +131,18 @@ public class ForumSharingIntegrationTest assertEquals(1, forumManager1.getForums().size()); // invitee has one invitation message from sharer - List list = new ArrayList<>( + List list = new ArrayList<>( forumSharingManager1.getInvitationMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the forum message - for (InvitationMessage m : list) { + for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; - assertFalse(invitation.isAvailable()); - assertEquals(forum0.getName(), invitation.getForumName()); + assertFalse(invitation.wasAnswered()); + assertEquals(forum0.getName(), invitation.getName()); assertEquals("Hi!", invitation.getMessage()); - assertTrue(invitation.canBeOpened()); + assertTrue(invitation.doesExist()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; @@ -188,17 +188,17 @@ public class ForumSharingIntegrationTest assertEquals(0, forumSharingManager1.getInvitations().size()); // invitee has one invitation message from sharer and one response - List list = new ArrayList<>( + List list = new ArrayList<>( forumSharingManager1.getInvitationMessages(contactId0From1)); assertEquals(2, list.size()); // check things are alright with the forum message - for (InvitationMessage m : list) { + for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; - assertFalse(invitation.isAvailable()); - assertEquals(forum0.getName(), invitation.getForumName()); + assertFalse(invitation.wasAnswered()); + assertEquals(forum0.getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); - assertFalse(invitation.canBeOpened()); + assertFalse(invitation.doesExist()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; assertFalse(response.wasAccepted()); @@ -742,7 +742,7 @@ public class ForumSharingIntegrationTest // get invitation MessageId for later MessageId invitationId = null; - for (InvitationMessage m : forumSharingManager1 + for (PrivateMessageHeader m : forumSharingManager1 .getInvitationMessages(contactId0From1)) { if (m instanceof ForumInvitationRequest) { invitationId = m.getId(); From ffeca8817fd5293fba9430e30013e0afd1ae78ad Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 4 Sep 2018 19:04:19 -0300 Subject: [PATCH 03/15] Prepare private message retrieval through ConversationManager --- .../android/contact/ConversationActivity.java | 10 ++-- .../api/introduction/IntroductionManager.java | 3 +- .../api/messaging/ConversationManager.java | 14 +++++ .../briar/api/messaging/MessagingManager.java | 3 +- .../invitation/GroupInvitationManager.java | 3 +- .../briar/api/sharing/SharingManager.java | 5 +- .../introduction/IntroductionManagerImpl.java | 24 ++++++--- .../messaging/ConversationManagerImpl.java | 20 +++++++ .../briar/messaging/MessagingManagerImpl.java | 25 ++++++--- .../GroupInvitationManagerImpl.java | 24 ++++++--- .../briar/sharing/SharingManagerImpl.java | 24 ++++++--- .../IntroductionIntegrationTest.java | 52 +++++++------------ .../GroupInvitationIntegrationTest.java | 12 ++--- .../GroupInvitationManagerImplTest.java | 2 +- .../sharing/BlogSharingIntegrationTest.java | 14 ++--- .../sharing/ForumSharingIntegrationTest.java | 14 ++--- 16 files changed, 155 insertions(+), 94 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index e881c82d8..f462f363d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -341,15 +341,15 @@ public class ConversationActivity extends BriarActivity try { long start = now(); Collection headers = - messagingManager.getMessageHeaders(contactId); + messagingManager.getMessages(contactId); Collection introductions = - introductionManager.getIntroductionMessages(contactId); + introductionManager.getMessages(contactId); Collection forumInvitations = - forumSharingManager.getInvitationMessages(contactId); + forumSharingManager.getMessages(contactId); Collection blogInvitations = - blogSharingManager.getInvitationMessages(contactId); + blogSharingManager.getMessages(contactId); Collection groupInvitations = - groupInvitationManager.getInvitationMessages(contactId); + groupInvitationManager.getMessages(contactId); List invitations = new ArrayList<>( forumInvitations.size() + blogInvitations.size() + groupInvitations.size()); diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java index 384dbb1ce..f7588a371 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java @@ -51,7 +51,8 @@ public interface IntroductionManager extends ConversationClient { /** * Returns all introduction messages for the given contact. */ - Collection getIntroductionMessages(ContactId contactId) + @Deprecated + Collection getMessages(ContactId contactId) throws DbException; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java index 8e8ddac0d..57c5b9fe6 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java @@ -10,6 +10,8 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.MessageTracker.GroupCount; +import java.util.Collection; + @NotNullByDefault public interface ConversationManager { @@ -19,6 +21,15 @@ public interface ConversationManager { */ void registerConversationClient(ConversationClient client); + /** + * Returns (the headers) of all messages in the given private conversation. + * + * Only {@link MessagingManager} returns only headers. + * The others also return the message body. + */ + Collection getMessages(ContactId c) + throws DbException; + /** * Returns the unified group count for all private conversation messages. */ @@ -29,6 +40,9 @@ public interface ConversationManager { Group getContactGroup(Contact c); + Collection getMessages(Transaction txn, + ContactId contactId) throws DbException; + GroupCount getGroupCount(Transaction txn, ContactId c) throws DbException; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java index f29d2c9e4..a6f52c3e4 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java @@ -46,7 +46,8 @@ public interface MessagingManager extends ConversationClient { /** * Returns the headers of all messages in the given private conversation. */ - Collection getMessageHeaders(ContactId c) + @Deprecated + Collection getMessages(ContactId c) throws DbException; /** diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java index f65903614..c00dcd030 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java @@ -77,7 +77,8 @@ public interface GroupInvitationManager extends ConversationClient { * Returns all private group invitation messages related to the given * contact. */ - Collection getInvitationMessages(ContactId c) + @Deprecated + Collection getMessages(ContactId c) throws DbException; /** diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java index 6fefa49ad..9f5da2627 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java @@ -40,8 +40,9 @@ public interface SharingManager * Returns all group sharing messages sent by the Contact * identified by contactId. */ - Collection getInvitationMessages( - ContactId contactId) throws DbException; + @Deprecated + Collection getMessages(ContactId contactId) + throws DbException; /** * Returns all invitations to groups. diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 2dba9ab10..818043442 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -399,17 +399,30 @@ class IntroductionManagerImpl extends ConversationClientImpl } @Override - public Collection getIntroductionMessages(ContactId c) + public Collection getMessages(ContactId c) throws DbException { - List messages; + Collection messages; Transaction txn = db.startTransaction(true); + try { + messages = getMessages(txn, c); + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return messages; + } + + @Override + public Collection getMessages(Transaction txn, + ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); GroupId contactGroupId = getContactGroup(contact).getId(); BdfDictionary query = messageParser.getMessagesVisibleInUiQuery(); Map results = clientHelper .getMessageMetadataAsDictionary(txn, contactGroupId, query); - messages = new ArrayList<>(results.size()); + List messages = + new ArrayList<>(results.size()); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = @@ -432,13 +445,10 @@ class IntroductionManagerImpl extends ConversationClientImpl status, ss.bdfSession, false)); } } - db.commitTransaction(txn); + return messages; } catch (FormatException e) { throw new DbException(e); - } finally { - db.endTransaction(txn); } - return messages; } private IntroductionRequest parseInvitationRequest(Transaction txn, diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java index 95aef43c6..f851b83f8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java @@ -7,7 +7,11 @@ import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.messaging.ConversationManager; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; @@ -33,6 +37,22 @@ class ConversationManagerImpl implements ConversationManager { throw new IllegalStateException("Client is already registered"); } + @Override + public Collection getMessages(ContactId c) + throws DbException { + List messages = new ArrayList<>(); + Transaction txn = db.startTransaction(true); + try { + for (ConversationClient client : clients) { + messages.addAll(client.getMessages(txn, c)); + } + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return messages; + } + @Override public GroupCount getGroupCount(ContactId contactId) throws DbException { int msgCount = 0, unreadCount = 0; diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java index 4ee791aea..8d06c9934 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java @@ -178,21 +178,31 @@ class MessagingManagerImpl extends ConversationClientImpl } @Override - public Collection getMessageHeaders(ContactId c) + public Collection getMessages(ContactId c) throws DbException { + Collection headers; + Transaction txn = db.startTransaction(true); + try { + headers = getMessages(txn, c); + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return headers; + } + + @Override + public Collection getMessages(Transaction txn, + ContactId c) throws DbException { Map metadata; Collection statuses; GroupId g; - Transaction txn = db.startTransaction(true); try { g = getContactGroup(db.getContact(txn, c)).getId(); metadata = clientHelper.getMessageMetadataAsDictionary(txn, g); statuses = db.getMessageStatus(txn, c, g); - db.commitTransaction(txn); } catch (FormatException e) { throw new DbException(e); - } finally { - db.endTransaction(txn); } Collection headers = new ArrayList<>(); for (MessageStatus s : statuses) { @@ -203,9 +213,8 @@ class MessagingManagerImpl extends ConversationClientImpl long timestamp = meta.getLong("timestamp"); boolean local = meta.getBoolean("local"); boolean read = meta.getBoolean("read"); - headers.add( - new PrivateMessageHeader(id, g, timestamp, local, read, - s.isSent(), s.isSeen())); + headers.add(new PrivateMessageHeader(id, g, timestamp, local, + read, s.isSent(), s.isSeen())); } catch (FormatException e) { throw new DbException(e); } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index bcc7d8993..8d4d2a7d7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -368,17 +368,30 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } @Override - public Collection getInvitationMessages(ContactId c) + public Collection getMessages(ContactId c) throws DbException { - List messages; + Collection messages; Transaction txn = db.startTransaction(true); + try { + messages = getMessages(txn, c); + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return messages; + } + + @Override + public Collection getMessages(Transaction txn, + ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); GroupId contactGroupId = getContactGroup(contact).getId(); BdfDictionary query = messageParser.getMessagesVisibleInUiQuery(); Map results = clientHelper .getMessageMetadataAsDictionary(txn, contactGroupId, query); - messages = new ArrayList<>(results.size()); + List messages = + new ArrayList<>(results.size()); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = @@ -398,13 +411,10 @@ class GroupInvitationManagerImpl extends ConversationClientImpl status, false)); } } - db.commitTransaction(txn); + return messages; } catch (FormatException e) { throw new DbException(e); - } finally { - db.endTransaction(txn); } - return messages; } private GroupInvitationRequest parseInvitationRequest(Transaction txn, diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index e15e37c17..de529ddf3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -321,17 +321,30 @@ abstract class SharingManagerImpl } @Override - public Collection getInvitationMessages(ContactId c) + public Collection getMessages(ContactId c) throws DbException { - List messages; + Collection messages; Transaction txn = db.startTransaction(true); + try { + messages = getMessages(txn, c); + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return messages; + } + + @Override + public Collection getMessages(Transaction txn, + ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); GroupId contactGroupId = getContactGroup(contact).getId(); BdfDictionary query = messageParser.getMessagesVisibleInUiQuery(); Map results = clientHelper .getMessageMetadataAsDictionary(txn, contactGroupId, query); - messages = new ArrayList<>(results.size()); + List messages = + new ArrayList<>(results.size()); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = @@ -351,13 +364,10 @@ abstract class SharingManagerImpl status, false)); } } - db.commitTransaction(txn); + return messages; } catch (FormatException e) { throw new DbException(e); - } finally { - db.endTransaction(txn); } - return messages; } private PrivateRequest parseInvitationRequest(Transaction txn, diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 0d6eaa27f..867a1ea47 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -298,21 +298,17 @@ public class IntroductionIntegrationTest Group g1 = introductionManager0.getContactGroup(introducee1); Group g2 = introductionManager0.getContactGroup(introducee2); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId1From0) - .size()); + introductionManager0.getMessages(contactId1From0).size()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId2From0) - .size()); + introductionManager0.getMessages(contactId2From0).size()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); assertEquals(2, - introductionManager1.getIntroductionMessages(contactId0From1) - .size()); + introductionManager1.getMessages(contactId0From1).size()); assertGroupCount(messageTracker1, g1.getId(), 2, 1); // introducee2 should also have the decline response of introducee1 assertEquals(3, - introductionManager2.getIntroductionMessages(contactId0From2) - .size()); + introductionManager2.getMessages(contactId0From2).size()); assertGroupCount(messageTracker2, g2.getId(), 3, 2); assertFalse(listener0.aborted); @@ -363,16 +359,13 @@ public class IntroductionIntegrationTest .contactExists(author1.getId(), author2.getId())); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId1From0) - .size()); + introductionManager0.getMessages(contactId1From0).size()); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId2From0) - .size()); + introductionManager0.getMessages(contactId2From0).size()); assertEquals(3, - introductionManager1.getIntroductionMessages(contactId0From1) - .size()); + introductionManager1.getMessages(contactId0From1).size()); assertEquals(3, - introductionManager2.getIntroductionMessages(contactId0From2) + introductionManager2.getMessages(contactId0From2) .size()); assertFalse(listener0.aborted); assertFalse(listener1.aborted); @@ -520,20 +513,16 @@ public class IntroductionIntegrationTest Group g1 = introductionManager0.getContactGroup(introducee1); Group g2 = introductionManager0.getContactGroup(introducee2); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId1From0) - .size()); + introductionManager0.getMessages(contactId1From0).size()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); assertEquals(2, - introductionManager0.getIntroductionMessages(contactId2From0) - .size()); + introductionManager0.getMessages(contactId2From0).size()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); assertEquals(3, - introductionManager1.getIntroductionMessages(contactId0From1) - .size()); + introductionManager1.getMessages(contactId0From1).size()); assertGroupCount(messageTracker1, g1.getId(), 3, 2); assertEquals(3, - introductionManager2.getIntroductionMessages(contactId0From2) - .size()); + introductionManager2.getMessages(contactId0From2).size()); assertGroupCount(messageTracker2, g2.getId(), 3, 2); assertFalse(listener0.aborted); @@ -557,8 +546,7 @@ public class IntroductionIntegrationTest assertFalse(listener1.requestReceived); // make really sure we don't have that request - assertTrue(introductionManager1.getIntroductionMessages(contactId0From1) - .isEmpty()); + assertTrue(introductionManager1.getMessages(contactId0From1).isEmpty()); // The message was invalid, so no abort message was sent assertFalse(listener0.aborted); @@ -1101,22 +1089,19 @@ public class IntroductionIntegrationTest private void assertDefaultUiMessages() throws DbException { Collection messages = - introductionManager0.getIntroductionMessages(contactId1From0); + introductionManager0.getMessages(contactId1From0); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager0.getIntroductionMessages( - contactId2From0); + messages = introductionManager0.getMessages(contactId2From0); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager1.getIntroductionMessages( - contactId0From1); + messages = introductionManager1.getMessages(contactId0From1); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager2.getIntroductionMessages( - contactId0From2); + messages = introductionManager2.getMessages(contactId0From2); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); } @@ -1299,8 +1284,7 @@ public class IntroductionIntegrationTest private IntroductionRequest getIntroductionRequest( IntroductionManager manager, ContactId contactId) throws DbException { - for (PrivateMessageHeader im : manager - .getIntroductionMessages(contactId)) { + for (PrivateMessageHeader im : manager.getMessages(contactId)) { if (im instanceof IntroductionRequest) { return (IntroductionRequest) im; } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 4f1e512d9..67d34d580 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -93,7 +93,7 @@ public class GroupInvitationIntegrationTest assertFalse(item.isSubscribed()); Collection messages = - groupInvitationManager1.getInvitationMessages(contactId0From1); + groupInvitationManager1.getMessages(contactId0From1); assertEquals(1, messages.size()); GroupInvitationRequest request = (GroupInvitationRequest) messages.iterator().next(); @@ -118,7 +118,7 @@ public class GroupInvitationIntegrationTest .respondToInvitation(contactId0From1, privateGroup0, false); Collection messages = - groupInvitationManager1.getInvitationMessages(contactId0From1); + groupInvitationManager1.getMessages(contactId0From1); assertEquals(2, messages.size()); boolean foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -134,7 +134,7 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); messages = - groupInvitationManager0.getInvitationMessages(contactId1From0); + groupInvitationManager0.getMessages(contactId1From0); assertEquals(2, messages.size()); foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -165,7 +165,7 @@ public class GroupInvitationIntegrationTest .respondToInvitation(contactId0From1, privateGroup0, true); Collection messages = - groupInvitationManager1.getInvitationMessages(contactId0From1); + groupInvitationManager1.getMessages(contactId0From1); assertEquals(2, messages.size()); boolean foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -182,7 +182,7 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); messages = - groupInvitationManager0.getInvitationMessages(contactId1From0); + groupInvitationManager0.getMessages(contactId1From0); assertEquals(2, messages.size()); foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -217,7 +217,7 @@ public class GroupInvitationIntegrationTest Group g0 = groupInvitationManager1.getContactGroup(contact0From1); assertGroupCount(messageTracker1, g0.getId(), 1, 1, timestamp); PrivateMessageHeader m = - groupInvitationManager1.getInvitationMessages(contactId0From1) + groupInvitationManager1.getMessages(contactId0From1) .iterator().next(); groupInvitationManager1 diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index b24f62c7e..7d5df8dde 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -702,7 +702,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { }}); Collection messages = - groupInvitationManager.getInvitationMessages(contactId); + groupInvitationManager.getMessages(contactId); assertEquals(2, messages.size()); for (PrivateMessageHeader m : messages) { assertEquals(contactGroup.getId(), m.getGroupId()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 7251ec2c7..11e52c033 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -148,7 +148,7 @@ public class BlogSharingIntegrationTest // invitee has one invitation message from sharer List list = new ArrayList<>( - blogSharingManager1.getInvitationMessages(contactId0From1)); + blogSharingManager1.getMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message for (PrivateMessageHeader m : list) { @@ -167,7 +167,7 @@ public class BlogSharingIntegrationTest } // sharer has own invitation message and response assertEquals(2, - blogSharingManager0.getInvitationMessages(contactId1From0) + blogSharingManager0.getMessages(contactId1From0) .size()); // blog can not be shared again assertFalse(blogSharingManager0.canBeShared(blog2.getId(), @@ -219,7 +219,7 @@ public class BlogSharingIntegrationTest // invitee has one invitation message from sharer List list = new ArrayList<>( - blogSharingManager1.getInvitationMessages(contactId0From1)); + blogSharingManager1.getMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message for (PrivateMessageHeader m : list) { @@ -237,7 +237,7 @@ public class BlogSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, blogSharingManager0.getInvitationMessages( + assertEquals(2, blogSharingManager0.getMessages( contactId1From0).size()); // blog can not be shared again assertFalse(blogSharingManager0.canBeShared(rssBlog.getId(), @@ -278,7 +278,7 @@ public class BlogSharingIntegrationTest // invitee has one invitation message from sharer and one response List list = new ArrayList<>( - blogSharingManager1.getInvitationMessages(contactId0From1)); + blogSharingManager1.getMessages(contactId0From1)); assertEquals(2, list.size()); // check things are alright with the message for (PrivateMessageHeader m : list) { @@ -296,7 +296,7 @@ public class BlogSharingIntegrationTest } // sharer has own invitation message and response assertEquals(2, - blogSharingManager0.getInvitationMessages(contactId1From0) + blogSharingManager0.getMessages(contactId1From0) .size()); // blog can be shared again assertTrue( @@ -383,7 +383,7 @@ public class BlogSharingIntegrationTest // make sure 1 knows that they have blog2 already Collection messages = - blogSharingManager1.getInvitationMessages(contactId0From1); + blogSharingManager1.getMessages(contactId0From1); assertEquals(2, messages.size()); assertEquals(blog2, blogManager1.getBlog(blog2.getId())); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index acae3fb4c..c5fba4522 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -132,7 +132,7 @@ public class ForumSharingIntegrationTest // invitee has one invitation message from sharer List list = new ArrayList<>( - forumSharingManager1.getInvitationMessages(contactId0From1)); + forumSharingManager1.getMessages(contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the forum message for (PrivateMessageHeader m : list) { @@ -152,7 +152,7 @@ public class ForumSharingIntegrationTest } // sharer has own invitation message and response assertEquals(2, - forumSharingManager0.getInvitationMessages(contactId1From0) + forumSharingManager0.getMessages(contactId1From0) .size()); // forum can not be shared again Contact c1 = contactManager0.getContact(contactId1From0); @@ -189,7 +189,7 @@ public class ForumSharingIntegrationTest // invitee has one invitation message from sharer and one response List list = new ArrayList<>( - forumSharingManager1.getInvitationMessages(contactId0From1)); + forumSharingManager1.getMessages(contactId0From1)); assertEquals(2, list.size()); // check things are alright with the forum message for (PrivateMessageHeader m : list) { @@ -207,7 +207,7 @@ public class ForumSharingIntegrationTest } // sharer has own invitation message and response assertEquals(2, - forumSharingManager0.getInvitationMessages(contactId1From0) + forumSharingManager0.getMessages(contactId1From0) .size()); // forum can be shared again Contact c1 = contactManager0.getContact(contactId1From0); @@ -485,9 +485,9 @@ public class ForumSharingIntegrationTest // and both have each other's invitations (and no response) assertEquals(2, forumSharingManager0 - .getInvitationMessages(contactId1From0).size()); + .getMessages(contactId1From0).size()); assertEquals(2, forumSharingManager1 - .getInvitationMessages(contactId0From1).size()); + .getMessages(contactId0From1).size()); // there are no more open invitations assertTrue(forumSharingManager0.getInvitations().isEmpty()); @@ -743,7 +743,7 @@ public class ForumSharingIntegrationTest // get invitation MessageId for later MessageId invitationId = null; for (PrivateMessageHeader m : forumSharingManager1 - .getInvitationMessages(contactId0From1)) { + .getMessages(contactId0From1)) { if (m instanceof ForumInvitationRequest) { invitationId = m.getId(); } From 61e18f104ef5a6f48efaab538ee5d8db61b6c6fe Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 5 Sep 2018 15:22:12 -0300 Subject: [PATCH 04/15] Unify all private message responses in one PrivateResponse class This also adds `Shareable`s to invitation response which is a precondition for #561 --- .../android/blog/BlogControllerImpl.java | 6 +- .../android/contact/ContactListFragment.java | 4 +- .../android/contact/ConversationActivity.java | 64 +++--------- .../android/contact/ConversationItem.java | 97 +++++++++---------- .../android/forum/ForumControllerImpl.java | 2 +- .../conversation/GroupControllerImpl.java | 2 +- .../api/blog/BlogInvitationResponse.java | 8 +- .../BlogInvitationResponseReceivedEvent.java | 3 +- .../api/forum/ForumInvitationResponse.java | 8 +- .../introduction/IntroductionResponse.java | 40 ++------ .../briar/api/messaging/PrivateResponse.java | 40 ++++++++ .../GroupInvitationResponseReceivedEvent.java | 7 +- .../invitation/GroupInvitationResponse.java | 9 +- .../briar/api/sharing/InvitationResponse.java | 41 -------- .../InvitationResponseReceivedEvent.java | 12 ++- .../introduction/AbstractProtocolEngine.java | 8 +- .../introduction/IntroductionManagerImpl.java | 7 +- .../invitation/CreatorProtocolEngine.java | 14 ++- .../GroupInvitationManagerImpl.java | 53 ++++++---- .../sharing/BlogInvitationFactoryImpl.java | 8 +- .../briar/sharing/BlogMessageParserImpl.java | 2 +- .../briar/sharing/BlogProtocolEngineImpl.java | 8 +- .../sharing/ForumInvitationFactoryImpl.java | 7 +- .../briar/sharing/ForumMessageParserImpl.java | 2 +- .../sharing/ForumProtocolEngineImpl.java | 8 +- .../briar/sharing/InvitationFactory.java | 7 +- .../briar/sharing/MessageParser.java | 2 + .../briar/sharing/MessageParserImpl.java | 3 - .../briar/sharing/ProtocolEngineImpl.java | 38 +++++--- .../briar/sharing/SharingManagerImpl.java | 45 +++++---- .../IntroductionIntegrationTest.java | 12 +-- .../invitation/CreatorProtocolEngineTest.java | 4 + .../GroupInvitationIntegrationTest.java | 51 ++++++++-- .../GroupInvitationManagerImplTest.java | 6 ++ .../sharing/BlogSharingIntegrationTest.java | 8 +- .../sharing/ForumSharingIntegrationTest.java | 10 +- .../briar/test/BriarIntegrationTest.java | 18 ++++ 37 files changed, 357 insertions(+), 307 deletions(-) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java index 6b29f6f44..d62a52c18 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java @@ -25,7 +25,7 @@ import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.BlogSharingManager; import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent; import org.briarproject.briar.api.blog.event.BlogPostAddedEvent; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.sharing.event.ContactLeftShareableEvent; import java.util.ArrayList; @@ -107,8 +107,8 @@ class BlogControllerImpl extends BaseControllerImpl } else if (e instanceof BlogInvitationResponseReceivedEvent) { BlogInvitationResponseReceivedEvent b = (BlogInvitationResponseReceivedEvent) e; - InvitationResponse r = b.getResponse(); - if (r.getShareableId().equals(groupId) && r.wasAccepted()) { + PrivateResponse r = b.getResponse(); + if (r.getObject().getId().equals(groupId) && r.wasAccepted()) { LOG.info("Blog invitation accepted"); onBlogInvitationAccepted(b.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 95e8c3067..dea7d542c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -44,8 +44,8 @@ import org.briarproject.briar.api.introduction.event.IntroductionResponseReceive import org.briarproject.briar.api.messaging.ConversationManager; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; -import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; @@ -277,7 +277,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { LOG.info("Invitation response received, updating item"); InvitationResponseReceivedEvent m = (InvitationResponseReceivedEvent) e; - InvitationResponse ir = m.getResponse(); + PrivateResponse ir = m.getResponse(); updateItem(m.getContactId(), ir); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index f462f363d..07270b460 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -71,9 +71,9 @@ import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; -import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; import org.thoughtcrime.securesms.components.util.FutureTaskListener; @@ -424,7 +424,7 @@ public class ConversationActivity extends BriarActivity item = ConversationItem .from(this, contactName, (PrivateRequest) i); } else { - InvitationResponse r = (InvitationResponse) i; + PrivateResponse r = (PrivateResponse) i; item = ConversationItem.from(this, contactName, r); } items.add(item); @@ -507,16 +507,16 @@ public class ConversationActivity extends BriarActivity (IntroductionRequestReceivedEvent) e; if (event.getContactId().equals(contactId)) { LOG.info("Introduction request received, adding..."); - IntroductionRequest ir = event.getIntroductionRequest(); - handleIntroductionRequest(ir); + PrivateRequest ir = event.getIntroductionRequest(); + handlePrivateRequest(ir); } } else if (e instanceof IntroductionResponseReceivedEvent) { IntroductionResponseReceivedEvent event = (IntroductionResponseReceivedEvent) e; if (event.getContactId().equals(contactId)) { LOG.info("Introduction response received, adding..."); - IntroductionResponse ir = event.getIntroductionResponse(); - handleIntroductionResponse(ir); + PrivateResponse ir = event.getIntroductionResponse(); + handlePrivateResponse(ir); } } else if (e instanceof InvitationRequestReceivedEvent) { InvitationRequestReceivedEvent event = @@ -524,15 +524,15 @@ public class ConversationActivity extends BriarActivity if (event.getContactId().equals(contactId)) { LOG.info("Invitation received, adding..."); PrivateRequest ir = event.getRequest(); - handleInvitationRequest(ir); + handlePrivateRequest(ir); } } else if (e instanceof InvitationResponseReceivedEvent) { InvitationResponseReceivedEvent event = (InvitationResponseReceivedEvent) e; if (event.getContactId().equals(contactId)) { LOG.info("Invitation response received, adding..."); - InvitationResponse ir = event.getResponse(); - handleInvitationResponse(ir); + PrivateResponse ir = event.getResponse(); + handlePrivateResponse(ir); } } } @@ -546,7 +546,7 @@ public class ConversationActivity extends BriarActivity }); } - private void handleIntroductionRequest(IntroductionRequest m) { + private void handlePrivateRequest(PrivateRequest m) { getContactNameTask().addListener(new FutureTaskListener() { @Override public void onSuccess(String contactName) { @@ -565,7 +565,7 @@ public class ConversationActivity extends BriarActivity }); } - private void handleIntroductionResponse(IntroductionResponse m) { + private void handlePrivateResponse(PrivateResponse m) { getContactNameTask().addListener(new FutureTaskListener() { @Override public void onSuccess(String contactName) { @@ -584,46 +584,8 @@ public class ConversationActivity extends BriarActivity }); } - private void handleInvitationRequest(PrivateRequest m) { - getContactNameTask().addListener(new FutureTaskListener() { - @Override - public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed(() -> { - ConversationItem item = ConversationItem - .from(ConversationActivity.this, contactName, m); - addConversationItem(item); - }); - } - - @Override - public void onFailure(Throwable exception) { - runOnUiThreadUnlessDestroyed( - () -> handleDbException((DbException) exception)); - } - }); - } - - private void handleInvitationResponse(InvitationResponse m) { - getContactNameTask().addListener(new FutureTaskListener() { - @Override - public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed(() -> { - ConversationItem item = ConversationItem - .from(ConversationActivity.this, contactName, m); - addConversationItem(item); - }); - } - - @Override - public void onFailure(Throwable exception) { - runOnUiThreadUnlessDestroyed( - () -> handleDbException((DbException) exception)); - } - }); - } - - private void markMessages(Collection messageIds, - boolean sent, boolean seen) { + private void markMessages(Collection messageIds, boolean sent, + boolean seen) { runOnUiThreadUnlessDestroyed(() -> { adapter.incrementRevision(); Set messages = new HashSet<>(messageIds); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 6ee0505d4..0177bed10 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -17,9 +17,9 @@ import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.Nullable; @@ -87,46 +87,6 @@ abstract class ConversationItem { } } - static ConversationItem from(Context ctx, String contactName, - IntroductionResponse ir) { - if (ir.isLocal()) { - String text; - if (ir.wasAccepted()) { - text = ctx.getString( - R.string.introduction_response_accepted_sent, - ir.getName()); - text += "\n\n" + ctx.getString( - R.string.introduction_response_accepted_sent_info, - ir.getName()); - } else { - text = ctx.getString( - R.string.introduction_response_declined_sent, - ir.getName()); - } - return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); - } else { - String text; - if (ir.wasAccepted()) { - text = ctx.getString( - R.string.introduction_response_accepted_received, - contactName, ir.getName()); - } else { - if (ir.isIntroducer()) { - text = ctx.getString( - R.string.introduction_response_declined_received, - contactName, ir.getName()); - } else { - text = ctx.getString( - R.string.introduction_response_declined_received_by_introducee, - contactName, ir.getName()); - } - } - return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isRead()); - } - } - static ConversationItem from(Context ctx, String contactName, PrivateRequest ir) { if (ir.isLocal()) { @@ -196,7 +156,44 @@ abstract class ConversationItem { } static ConversationItem from(Context ctx, String contactName, - InvitationResponse ir) { + IntroductionResponse ir) { + if (ir.isLocal()) { + String text; + if (ir.wasAccepted()) { + text = ctx.getString( + R.string.introduction_response_accepted_sent, + ir.getObject().getName()); + text += "\n\n" + ctx.getString( + R.string.introduction_response_accepted_sent_info, + ir.getObject().getName()); + } else { + text = ctx.getString( + R.string.introduction_response_declined_sent, + ir.getObject().getName()); + } + return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), + text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); + } else { + @StringRes int res; + if (ir.wasAccepted()) { + res = R.string.introduction_response_accepted_received; + } else { + if (ir.getObject().isIntroducer()) { + res = R.string.introduction_response_declined_received; + } else { + res = + R.string.introduction_response_declined_received_by_introducee; + } + } + String text = + ctx.getString(res, contactName, ir.getObject().getName()); + return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), + text, null, ir.getTimestamp(), ir.isRead()); + } + } + + static ConversationItem from(Context ctx, String contactName, + PrivateResponse ir) { @StringRes int res; if (ir.isLocal()) { if (ir.wasAccepted()) { @@ -208,7 +205,7 @@ abstract class ConversationItem { res = R.string.groups_invitations_response_accepted_sent; } else { throw new IllegalArgumentException( - "Unknown InvitationResponse"); + "Unknown PrivateResponse"); } } else { if (ir instanceof ForumInvitationResponse) { @@ -219,7 +216,7 @@ abstract class ConversationItem { res = R.string.groups_invitations_response_declined_sent; } else { throw new IllegalArgumentException( - "Unknown InvitationResponse"); + "Unknown PrivateResponse"); } } String text = ctx.getString(res, contactName); @@ -235,7 +232,7 @@ abstract class ConversationItem { res = R.string.groups_invitations_response_accepted_received; } else { throw new IllegalArgumentException( - "Unknown InvitationResponse"); + "Unknown PrivateResponse"); } } else { if (ir instanceof ForumInvitationResponse) { @@ -246,7 +243,7 @@ abstract class ConversationItem { res = R.string.groups_invitations_response_declined_received; } else { throw new IllegalArgumentException( - "Unknown InvitationResponse"); + "Unknown PrivateResponse"); } } String text = ctx.getString(res, contactName); @@ -261,14 +258,12 @@ abstract class ConversationItem { * PrivateMessageHeader. **/ static ConversationItem from(Context ctx, PrivateMessageHeader h) { - if(h instanceof IntroductionRequest) { - return from(ctx, "", (IntroductionRequest) h); - } else if(h instanceof IntroductionResponse) { + if(h instanceof IntroductionResponse) { return from(ctx, "", (IntroductionResponse) h); } else if(h instanceof PrivateRequest) { return from(ctx, "", (PrivateRequest) h); - } else if(h instanceof InvitationResponse) { - return from(ctx, "", (InvitationResponse) h); + } else if(h instanceof PrivateResponse) { + return from(ctx, "", (PrivateResponse) h); } else { return from(h); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index 91d0cf596..ea8365c1a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -86,7 +86,7 @@ class ForumControllerImpl extends (ForumInvitationResponseReceivedEvent) e; ForumInvitationResponse r = (ForumInvitationResponse) f.getResponse(); - if (r.getShareableId().equals(getGroupId()) && r.wasAccepted()) { + if (r.getObject().getId().equals(getGroupId()) && r.wasAccepted()) { LOG.info("Forum invitation was accepted"); onForumInvitationAccepted(f.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index cc825d3b1..aa5d8c951 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -101,7 +101,7 @@ class GroupControllerImpl extends (GroupInvitationResponseReceivedEvent) e; GroupInvitationResponse r = (GroupInvitationResponse) g.getResponse(); - if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) { + if (getGroupId().equals(r.getObject().getId()) && r.wasAccepted()) { listener.runOnUiThreadUnlessDestroyed( () -> listener.onInvitationAccepted(g.getContactId())); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index 3183a37b0..b663e0a37 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -4,15 +4,15 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; @NotNullByDefault -public class BlogInvitationResponse extends InvitationResponse { +public class BlogInvitationResponse extends PrivateResponse { public BlogInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId blogId, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId, blogId, + SessionId sessionId, Blog blog, boolean accept) { + super(id, groupId, time, local, sent, seen, read, sessionId, blog, accept); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java index 0b9ae9005..ee9b22d1f 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java @@ -2,6 +2,7 @@ package org.briarproject.briar.api.blog.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; @@ -10,7 +11,7 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class BlogInvitationResponseReceivedEvent - extends InvitationResponseReceivedEvent { + extends InvitationResponseReceivedEvent { public BlogInvitationResponseReceivedEvent(ContactId contactId, BlogInvitationResponse response) { diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index 9c44bba71..302f4317a 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -4,18 +4,18 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class ForumInvitationResponse extends InvitationResponse { +public class ForumInvitationResponse extends PrivateResponse { public ForumInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId forumId, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId, forumId, + SessionId sessionId, Forum forum, boolean accept) { + super(id, groupId, time, local, sent, seen, read, sessionId, forum, accept); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 5ac474d57..f52fbe38b 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -4,45 +4,19 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateResponse; import javax.annotation.concurrent.Immutable; -import static org.briarproject.briar.api.introduction.Role.INTRODUCER; - @Immutable @NotNullByDefault -public class IntroductionResponse extends PrivateMessageHeader { +public class IntroductionResponse extends PrivateResponse { - private final SessionId sessionId; - private final String name; - private final Role role; - private final boolean accepted; - - public IntroductionResponse(SessionId sessionId, MessageId messageId, - GroupId groupId, Role role, long time, boolean local, boolean sent, - boolean seen, boolean read, String name, boolean accepted) { - super(messageId, groupId, time, local, sent, seen, read); - this.sessionId = sessionId; - this.name = name; - this.role = role; - this.accepted = accepted; - } - - public SessionId getSessionId() { - return sessionId; - } - - public String getName() { - return name; - } - - public boolean isIntroducer() { - return role == INTRODUCER; - } - - public boolean wasAccepted() { - return accepted; + public IntroductionResponse(MessageId messageId, GroupId groupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, Introduction introduction, boolean accepted) { + super(messageId, groupId, time, local, sent, seen, read, sessionId, + introduction, accepted); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java new file mode 100644 index 000000000..bb7754789 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java @@ -0,0 +1,40 @@ +package org.briarproject.briar.api.messaging; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.api.client.SessionId; + +import javax.annotation.concurrent.Immutable; + +@Immutable +@NotNullByDefault +public abstract class PrivateResponse + extends PrivateMessageHeader { + + private final SessionId sessionId; + private final O object; + private final boolean accepted; + + public PrivateResponse(MessageId id, GroupId groupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, O object, boolean accepted) { + super(id, groupId, time, local, sent, seen, read); + this.sessionId = sessionId; + this.object = object; + this.accepted = accepted; + } + + public SessionId getSessionId() { + return sessionId; + } + + public O getObject() { + return object; + } + + public boolean wasAccepted() { + return accepted; + } + +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java index 705c93074..e1af29e15 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java @@ -2,7 +2,8 @@ package org.briarproject.briar.api.privategroup.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; import javax.annotation.concurrent.Immutable; @@ -10,10 +11,10 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class GroupInvitationResponseReceivedEvent - extends InvitationResponseReceivedEvent { + extends InvitationResponseReceivedEvent { public GroupInvitationResponseReceivedEvent(ContactId contactId, - InvitationResponse response) { + PrivateResponse response) { super(contactId, response); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index 8531f502d..fb8dbf608 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -4,19 +4,20 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.privategroup.PrivateGroup; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class GroupInvitationResponse extends InvitationResponse { +public class GroupInvitationResponse extends PrivateResponse { public GroupInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, GroupId shareableId, boolean accept) { + SessionId sessionId, PrivateGroup privateGroup, boolean accept) { super(id, groupId, time, local, sent, seen, read, sessionId, - shareableId, accept); + privateGroup, accept); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java deleted file mode 100644 index f7afc699e..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.briarproject.briar.api.sharing; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class InvitationResponse extends PrivateMessageHeader { - - private final SessionId sessionId; - private final GroupId shareableId; - private final boolean accept; - - public InvitationResponse(MessageId id, GroupId groupId, - long time, boolean local, boolean sent, boolean seen, - boolean read, SessionId sessionId, GroupId shareableId, - boolean accept) { - super(id, groupId, time, local, sent, seen, read); - this.sessionId = sessionId; - this.shareableId = shareableId; - this.accept = accept; - } - - public SessionId getSessionId() { - return sessionId; - } - - public boolean wasAccepted() { - return accept; - } - - public GroupId getShareableId() { - return shareableId; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java index ac9ebce86..85e15462c 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java @@ -3,19 +3,21 @@ package org.briarproject.briar.api.sharing.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public abstract class InvitationResponseReceivedEvent extends Event { +public abstract class InvitationResponseReceivedEvent + extends Event { private final ContactId contactId; - private final InvitationResponse response; + private final PrivateResponse response; public InvitationResponseReceivedEvent(ContactId contactId, - InvitationResponse response) { + PrivateResponse response) { this.contactId = contactId; this.response = response; } @@ -24,7 +26,7 @@ public abstract class InvitationResponseReceivedEvent extends Event { return contactId; } - public InvitationResponse getResponse() { + public PrivateResponse getResponse() { return response; } } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 03b3486ad..424ea2f39 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -20,6 +20,7 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; @@ -147,12 +148,13 @@ abstract class AbstractProtocolEngine void broadcastIntroductionResponseReceivedEvent(Transaction txn, Session s, AuthorId sender, Author otherAuthor, AbstractIntroductionMessage m) throws DbException { + Introduction introduction = new Introduction(otherAuthor, s.getRole()); AuthorId localAuthorId = identityManager.getLocalAuthor(txn).getId(); Contact c = contactManager.getContact(txn, sender, localAuthorId); IntroductionResponse response = - new IntroductionResponse(s.getSessionId(), m.getMessageId(), - m.getGroupId(), s.getRole(), m.getTimestamp(), false, - false, false, false, otherAuthor.getName(), + new IntroductionResponse(m.getMessageId(), m.getGroupId(), + m.getTimestamp(), false, false, false, false, + s.getSessionId(), introduction, m instanceof AcceptMessage); IntroductionResponseReceivedEvent e = new IntroductionResponseReceivedEvent(c.getId(), response); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 818043442..76cd52b92 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -509,9 +509,10 @@ class IntroductionManagerImpl extends ConversationClientImpl sessionId = session.getSessionId(); author = session.getRemote().author; } else throw new AssertionError(); - return new IntroductionResponse(sessionId, m, contactGroupId, - role, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), author.getName(), accept); + Introduction introduction = new Introduction(author, role); + return new IntroductionResponse(m, contactGroupId, meta.getTimestamp(), + meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), + sessionId, introduction, accept); } private void removeSessionWithIntroducer(Transaction txn, diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index 057c3420f..be9c4d326 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -15,6 +15,7 @@ import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.privategroup.GroupMessageFactory; +import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.privategroup.PrivateGroupFactory; import org.briarproject.briar.api.privategroup.PrivateGroupManager; import org.briarproject.briar.api.privategroup.event.GroupInvitationResponseReceivedEvent; @@ -193,8 +194,10 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { setPrivateGroupVisibility(txn, s, SHARED); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); + PrivateGroup privateGroup = + privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent(contactId, - createInvitationResponse(m, contactId, true))); + createInvitationResponse(m, privateGroup, true))); // Move to the JOINED state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), sent.getId(), m.getId(), sent.getTimestamp(), @@ -215,8 +218,10 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { m.getTimestamp(), false); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); + PrivateGroup privateGroup = + privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent(contactId, - createInvitationResponse(m, contactId, false))); + createInvitationResponse(m, privateGroup, false))); // Move to the START state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -254,10 +259,11 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { } private GroupInvitationResponse createInvitationResponse( - GroupInvitationMessage m, ContactId c, boolean accept) { + GroupInvitationMessage m, PrivateGroup privateGroup, + boolean accept) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, sessionId, - m.getPrivateGroupId(), accept); + privateGroup, accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 8d4d2a7d7..15b82bdd6 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -353,7 +353,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl private S handleAction(Transaction txn, LocalAction type, S session, ProtocolEngine engine) - throws DbException, FormatException { + throws DbException { if (type == LocalAction.INVITE) { throw new IllegalArgumentException(); } else if (type == LocalAction.JOIN) { @@ -392,23 +392,36 @@ class GroupInvitationManagerImpl extends ConversationClientImpl .getMessageMetadataAsDictionary(txn, contactGroupId, query); List messages = new ArrayList<>(results.size()); + // get invite message first and remember private groups + Map privateGroups = new HashMap<>(); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = messageParser.parseMetadata(e.getValue()); - MessageStatus status = db.getMessageStatus(txn, c, m); MessageType type = meta.getMessageType(); - if (type == INVITE) { - messages.add(parseInvitationRequest(txn, c, contactGroupId, - m, meta, status)); - } else if (type == JOIN) { - messages.add( - parseInvitationResponse(c, contactGroupId, m, meta, - status, true)); + if (type != INVITE) continue; + MessageStatus status = db.getMessageStatus(txn, c, m); + GroupInvitationRequest invite = parseInvitationRequest(txn, + contactGroupId, m, meta, status); + messages.add(invite); + privateGroups.put(invite.getSessionId(), invite.getObject()); + } + for (Entry e : results.entrySet()) { + MessageId m = e.getKey(); + MessageMetadata meta = + messageParser.parseMetadata(e.getValue()); + MessageType type = meta.getMessageType(); + if (type == INVITE) continue; + MessageStatus status = db.getMessageStatus(txn, c, m); + SessionId sessionId = getSessionId(meta.getPrivateGroupId()); + PrivateGroup privateGroup = privateGroups.get(sessionId); + if (privateGroup == null) throw new AssertionError(); + if (type == JOIN) { + messages.add(parseInvitationResponse(contactGroupId, m, + meta, status, sessionId, privateGroup, true)); } else if (type == LEAVE) { - messages.add( - parseInvitationResponse(c, contactGroupId, m, meta, - status, false)); + messages.add(parseInvitationResponse(contactGroupId, m, + meta, status, sessionId, privateGroup, false)); } } return messages; @@ -418,9 +431,8 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } private GroupInvitationRequest parseInvitationRequest(Transaction txn, - ContactId c, GroupId contactGroupId, MessageId m, - MessageMetadata meta, MessageStatus status) - throws DbException, FormatException { + GroupId contactGroupId, MessageId m, MessageMetadata meta, + MessageStatus status) throws DbException, FormatException { SessionId sessionId = getSessionId(meta.getPrivateGroupId()); // Look up the invite message to get the details of the private group InviteMessage invite = messageParser.getInviteMessage(txn, m); @@ -436,15 +448,14 @@ class GroupInvitationManagerImpl extends ConversationClientImpl invite.getMessage(), meta.isAvailableToAnswer(), canBeOpened); } - private GroupInvitationResponse parseInvitationResponse(ContactId c, + private GroupInvitationResponse parseInvitationResponse( GroupId contactGroupId, MessageId m, MessageMetadata meta, - MessageStatus status, boolean accept) - throws DbException, FormatException { - SessionId sessionId = getSessionId(meta.getPrivateGroupId()); + MessageStatus status, SessionId sessionId, + PrivateGroup privateGroup, boolean accept) { return new GroupInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), sessionId, - meta.getPrivateGroupId(), accept); + status.isSeen(), meta.isRead(), sessionId, privateGroup, + accept); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java index 9063ebcbc..693f0947c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java @@ -30,10 +30,10 @@ public class BlogInvitationFactoryImpl @Override public BlogInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, GroupId shareableId, boolean accept) { - SessionId sessionId = new SessionId(shareableId.getBytes()); - return new BlogInvitationResponse(id, contactGroupId, time, local, - sent, seen, read, sessionId, shareableId, accept); + boolean seen, boolean read, Blog blog, boolean accept) { + SessionId sessionId = new SessionId(blog.getId().getBytes()); + return new BlogInvitationResponse(id, contactGroupId, time, local, sent, + seen, read, sessionId, blog, accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java index a2fc9d95d..9bb080bb2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java @@ -30,7 +30,7 @@ class BlogMessageParserImpl extends MessageParserImpl { } @Override - protected Blog createShareable(BdfList descriptor) throws FormatException { + public Blog createShareable(BdfList descriptor) throws FormatException { // Author, RSS BdfList authorList = descriptor.getList(0); boolean rssFeed = descriptor.getBoolean(1); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 696ce5143..8df04ab0c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -59,21 +59,21 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId) { + ContactId contactId, Blog shareable) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), true); + shareable, true); return new BlogInvitationResponseReceivedEvent(contactId, response); } @Override Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId) { + ContactId contactId, Blog shareable) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), true); + shareable, true); return new BlogInvitationResponseReceivedEvent(contactId, response); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java index 758082933..cb95c3759 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java @@ -30,11 +30,10 @@ public class ForumInvitationFactoryImpl @Override public ForumInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, GroupId shareableId, - boolean accept) { - SessionId sessionId = new SessionId(shareableId.getBytes()); + boolean seen, boolean read, Forum forum, boolean accept) { + SessionId sessionId = new SessionId(forum.getId().getBytes()); return new ForumInvitationResponse(id, contactGroupId, time, local, - sent, seen, read, sessionId, shareableId, accept); + sent, seen, read, sessionId, forum, accept); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumMessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumMessageParserImpl.java index 44ef0d821..76e5569ba 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumMessageParserImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumMessageParserImpl.java @@ -24,7 +24,7 @@ class ForumMessageParserImpl extends MessageParserImpl { } @Override - protected Forum createShareable(BdfList descriptor) throws FormatException { + public Forum createShareable(BdfList descriptor) throws FormatException { // Name, salt String name = descriptor.getString(0); byte[] salt = descriptor.getRaw(1); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index 6ffad99d1..383090150 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -61,21 +61,21 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId) { + ContactId contactId, Forum shareable) { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), true); + shareable, true); return new ForumInvitationResponseReceivedEvent(contactId, response); } @Override Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId) { + ContactId contactId, Forum shareable) { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - m.getShareableId(), true); + shareable, true); return new ForumInvitationResponseReceivedEvent(contactId, response); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java index 361ab532f..3ceb94d7c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java @@ -4,10 +4,10 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.sharing.Shareable; -public interface InvitationFactory { +public interface InvitationFactory> { PrivateRequest createInvitationRequest(boolean local, boolean sent, boolean seen, boolean read, InviteMessage m, ContactId c, @@ -15,7 +15,6 @@ public interface InvitationFactory { MessageMetadata parseMetadata(BdfDictionary meta) throws FormatException; + S createShareable(BdfList descriptor) throws FormatException; + InviteMessage getInviteMessage(Transaction txn, MessageId m) throws DbException, FormatException; diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java index 32659fe4f..4eaa98114 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java @@ -94,9 +94,6 @@ abstract class MessageParserImpl m.getGroupId(), shareable, message, m.getTimestamp()); } - protected abstract S createShareable(BdfList descriptor) - throws FormatException; - @Override public AcceptMessage parseAcceptMessage(Message m, BdfList body) throws FormatException { diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java index 0a672f578..f5f2eda20 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java @@ -113,13 +113,7 @@ abstract class ProtocolEngineImpl private Message sendInviteMessage(Transaction txn, Session s, @Nullable String message, long timestamp) throws DbException { - Group g = db.getGroup(txn, s.getShareableId()); - BdfList descriptor; - try { - descriptor = clientHelper.toList(g.getDescriptor()); - } catch (FormatException e) { - throw new DbException(e); // Invalid group descriptor - } + BdfList descriptor = getDescriptor(txn, s.getShareableId()); long localTimestamp = Math.max(timestamp, getLocalTimestamp(s)); Message m = messageEncoder.encodeInviteMessage(s.getContactGroupId(), localTimestamp, s.getLastLocalMessageId(), descriptor, message); @@ -373,7 +367,8 @@ abstract class ProtocolEngineImpl m.getTimestamp(), false); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - txn.attach(getInvitationResponseReceivedEvent(m, contactId)); + S shareable = getShareable(txn, s.getShareableId()); + txn.attach(getInvitationResponseReceivedEvent(m, contactId, shareable)); // Move to the next state return new Session(nextState, s.getContactGroupId(), s.getShareableId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -391,7 +386,7 @@ abstract class ProtocolEngineImpl } abstract Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId); + ContactId contactId, S shareable); @Override public Session onDeclineMessage(Transaction txn, Session s, @@ -431,7 +426,8 @@ abstract class ProtocolEngineImpl } // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - txn.attach(getInvitationResponseReceivedEvent(m, contactId)); + S shareable = getShareable(txn, s.getShareableId()); + txn.attach(getInvitationResponseReceivedEvent(m, contactId, shareable)); // Move to the next state return new Session(START, s.getContactGroupId(), s.getShareableId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -439,7 +435,7 @@ abstract class ProtocolEngineImpl } abstract Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId); + ContactId contactId, S shareable); @Override public Session onLeaveMessage(Transaction txn, Session s, @@ -530,6 +526,26 @@ abstract class ProtocolEngineImpl sent.getId(), null, 0, 0); } + private S getShareable(Transaction txn, GroupId groupId) + throws DbException { + BdfList descriptor = getDescriptor(txn, groupId); + try { + return messageParser.createShareable(descriptor); + } catch (FormatException e) { + throw new DbException(e); + } + } + + private BdfList getDescriptor(Transaction txn, GroupId groupId) + throws DbException { + Group g = db.getGroup(txn, groupId); + try { + return clientHelper.toList(g.getDescriptor()); + } catch (FormatException e) { + throw new DbException(e); // Invalid group descriptor + } + } + private void markInvitesUnavailableToAnswer(Transaction txn, Session s) throws DbException, FormatException { GroupId shareableId = s.getShareableId(); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index de529ddf3..8b9af66db 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -28,7 +28,7 @@ import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.sharing.InvitationResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.sharing.Shareable; import org.briarproject.briar.api.sharing.SharingInvitationItem; import org.briarproject.briar.api.sharing.SharingManager; @@ -345,23 +345,35 @@ abstract class SharingManagerImpl .getMessageMetadataAsDictionary(txn, contactGroupId, query); List messages = new ArrayList<>(results.size()); + // get invite messages first and remember shareables + Map shareables = new HashMap<>(); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = messageParser.parseMetadata(e.getValue()); - MessageStatus status = db.getMessageStatus(txn, c, m); MessageType type = meta.getMessageType(); - if (type == INVITE) { - messages.add( - parseInvitationRequest(txn, c, m, meta, status)); - } else if (type == ACCEPT) { - messages.add( - parseInvitationResponse(contactGroupId, m, meta, - status, true)); + if (type != INVITE) continue; + MessageStatus status = db.getMessageStatus(txn, c, m); + PrivateRequest invite = parseInvitationRequest(txn, c, m, + meta, status); + messages.add(invite); + shareables.put(invite.getObject().getId(), invite.getObject()); + } + for (Entry e : results.entrySet()) { + MessageId m = e.getKey(); + MessageMetadata meta = + messageParser.parseMetadata(e.getValue()); + MessageType type = meta.getMessageType(); + if (type == INVITE) continue; + MessageStatus status = db.getMessageStatus(txn, c, m); + S shareable = shareables.get(meta.getShareableId()); + if (shareable == null) throw new AssertionError(); + if (type == ACCEPT) { + messages.add(parseInvitationResponse(contactGroupId, m, + meta, status, shareable, true)); } else if (type == DECLINE) { - messages.add( - parseInvitationResponse(contactGroupId, m, meta, - status, false)); + messages.add(parseInvitationResponse(contactGroupId, m, + meta, status, shareable, false)); } } return messages; @@ -370,7 +382,7 @@ abstract class SharingManagerImpl } } - private PrivateRequest parseInvitationRequest(Transaction txn, + private PrivateRequest parseInvitationRequest(Transaction txn, ContactId c, MessageId m, MessageMetadata meta, MessageStatus status) throws DbException, FormatException { // Look up the invite message to get the details of the private group @@ -384,13 +396,12 @@ abstract class SharingManagerImpl meta.isAvailableToAnswer(), canBeOpened); } - private InvitationResponse parseInvitationResponse(GroupId contactGroupId, + private PrivateResponse parseInvitationResponse(GroupId contactGroupId, MessageId m, MessageMetadata meta, MessageStatus status, - boolean accept) { + S shareable, boolean accept) { return invitationFactory.createInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), meta.getShareableId(), - accept); + status.isSeen(), meta.isRead(), shareable, accept); } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 867a1ea47..c7dfdcb8f 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -159,7 +159,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response1Received); assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getName()); + listener0.getResponse().getObject().getName()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); // sync second ACCEPT message @@ -167,7 +167,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response2Received); assertEquals(introducee1.getAuthor().getName(), - listener0.getResponse().getName()); + listener0.getResponse().getObject().getName()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); // sync forwarded ACCEPT messages to introducees @@ -265,7 +265,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getName()); + listener0.getResponse().getObject().getName()); // sync second response sync2To0(1, true); @@ -282,7 +282,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getName()); + listener2.getResponse().getObject().getName()); // note how the introducer does not forward the second response, // because after the first decline the protocol finished @@ -351,7 +351,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(contact2From0.getAuthor().getName(), - listener1.getResponse().getName()); + listener1.getResponse().getObject().getName()); assertFalse(contactManager1 .contactExists(author2.getId(), author1.getId())); @@ -475,7 +475,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getName()); + listener2.getResponse().getObject().getName()); // assert that introducee2 is in correct state introduceeSession = getIntroduceeSession(c2); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java index 19e996e43..1fb0100d3 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java @@ -310,6 +310,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { oneOf(messageTracker) .trackMessage(txn, contactGroupId, inviteTimestamp + 1, false); + oneOf(privateGroupManager).getPrivateGroup(txn, privateGroupId); + will(returnValue(privateGroup)); }}); expectGetContactId(); expectSetPrivateGroupVisibility(SHARED); @@ -399,6 +401,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { oneOf(messageTracker) .trackMessage(txn, contactGroupId, inviteTimestamp + 1, false); + oneOf(privateGroupManager).getPrivateGroup(txn, privateGroupId); + will(returnValue(privateGroup)); }}); expectGetContactId(); CreatorSession newSession = diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 67d34d580..0d55b34f6 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -2,6 +2,7 @@ package org.briarproject.briar.privategroup.invitation; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.sync.Group; +import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.messaging.PrivateMessageHeader; @@ -12,7 +13,6 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.test.BriarIntegrationTest; import org.briarproject.briar.test.BriarIntegrationTestComponent; import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent; @@ -124,7 +124,8 @@ public class GroupInvitationIntegrationTest for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; - InvitationResponse response = (GroupInvitationResponse) m; + GroupInvitationResponse response = (GroupInvitationResponse) m; + assertEquals(privateGroup0, response.getObject()); assertTrue(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -140,7 +141,8 @@ public class GroupInvitationIntegrationTest for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; - InvitationResponse response = (GroupInvitationResponse) m; + GroupInvitationResponse response = (GroupInvitationResponse) m; + assertEquals(privateGroup0, response.getObject()); assertFalse(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -171,24 +173,27 @@ public class GroupInvitationIntegrationTest for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; - InvitationResponse response = (GroupInvitationResponse) m; + GroupInvitationResponse response = (GroupInvitationResponse) m; + assertEquals(privateGroup0, response.getObject()); assertTrue(response.wasAccepted()); } else { - assertTrue(((GroupInvitationRequest) m).doesExist()); + GroupInvitationRequest request = (GroupInvitationRequest) m; + assertEquals(privateGroup0, request.getObject()); + assertTrue(request.doesExist()); } } assertTrue(foundResponse); sync1To0(1, true); - messages = - groupInvitationManager0.getMessages(contactId1From0); + messages = groupInvitationManager0.getMessages(contactId1From0); assertEquals(2, messages.size()); foundResponse = false; for (PrivateMessageHeader m : messages) { if (m instanceof GroupInvitationResponse) { foundResponse = true; - InvitationResponse response = (GroupInvitationResponse) m; + GroupInvitationResponse response = (GroupInvitationResponse) m; + assertEquals(privateGroup0, response.getObject()); assertTrue(response.wasAccepted()); } } @@ -432,6 +437,36 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); } + @Test(expected = AssertionError.class) + public void testDeleteOnlyInvitationFails() throws Exception { + // send invitation + sendInvitation(clock.currentTimeMillis(), null); + sync0To1(1, true); + + // save MessageId of invitation + Collection messages = + groupInvitationManager1.getMessages(contactId0From1); + assertEquals(1, messages.size()); + MessageId inviteId = messages.iterator().next().getId(); + + // decline invitation + groupInvitationManager1 + .respondToInvitation(contactId0From1, privateGroup0, false); + + // we should have an invitation and a decline message + messages = groupInvitationManager1.getMessages(contactId0From1); + assertEquals(2, messages.size()); + + // delete only invitation + withinTransaction(db1, txn -> { + db1.deleteMessage(txn, inviteId); + db1.deleteMessageMetadata(txn, inviteId); + }); + + // This should fail + groupInvitationManager1.getMessages(contactId0From1); + } + private void sendInvitation(long timestamp, @Nullable String msg) throws DbException { byte[] signature = groupInvitationFactory.signInvitation(contact1From0, diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index 7d5df8dde..197785228 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -682,6 +682,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { contactGroup.getId(), query); will(returnValue(results)); // first message + oneOf(messageParser).parseMetadata(meta2); + will(returnValue(messageMetadata2)); oneOf(messageParser).parseMetadata(meta); will(returnValue(messageMetadata1)); oneOf(db).getMessageStatus(txn, contactId, message.getId()); @@ -695,6 +697,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { // second message oneOf(messageParser).parseMetadata(meta2); will(returnValue(messageMetadata2)); + oneOf(messageParser).parseMetadata(meta); + will(returnValue(messageMetadata1)); oneOf(db).getMessageStatus(txn, contactId, messageId2); // end transaction oneOf(db).commitTransaction(txn); @@ -709,9 +713,11 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { if (m.getId().equals(message.getId())) { assertTrue(m instanceof GroupInvitationRequest); assertEquals(time1, m.getTimestamp()); + assertEquals(pg, ((GroupInvitationRequest) m).getObject()); } else if (m.getId().equals(messageId2)) { assertTrue(m instanceof GroupInvitationResponse); assertEquals(time2, m.getTimestamp()); + assertEquals(pg, ((GroupInvitationResponse) m).getObject()); } else { throw new AssertionError(); } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 11e52c033..6663c6d86 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -154,6 +154,7 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; + assertEquals(blog2, invitation.getObject()); assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); @@ -161,6 +162,7 @@ public class BlogSharingIntegrationTest assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; + assertEquals(blog2, response.getObject()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -225,6 +227,7 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; + assertEquals(rssBlog, invitation.getObject()); assertFalse(invitation.wasAnswered()); assertEquals(rssBlog.getAuthor().getName(), invitation.getName()); @@ -232,6 +235,7 @@ public class BlogSharingIntegrationTest assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; + assertEquals(rssBlog, response.getObject()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -284,12 +288,14 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; + assertEquals(blog2, invitation.getObject()); assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; + assertEquals(blog2, response.getObject()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -612,7 +618,7 @@ public class BlogSharingIntegrationTest } } - private void listenToEvents(boolean accept) throws DbException { + private void listenToEvents(boolean accept) { listener0 = new SharerListener(); c0.getEventBus().addListener(listener0); listener1 = new InviteeListener(accept); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index c5fba4522..46db59820 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -137,15 +137,15 @@ public class ForumSharingIntegrationTest // check other things are alright with the forum message for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { - ForumInvitationRequest invitation = - (ForumInvitationRequest) m; + ForumInvitationRequest invitation = (ForumInvitationRequest) m; assertFalse(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); + assertEquals(forum0, invitation.getObject()); assertEquals("Hi!", invitation.getMessage()); assertTrue(invitation.doesExist()); } else { - ForumInvitationResponse response = - (ForumInvitationResponse) m; + ForumInvitationResponse response = (ForumInvitationResponse) m; + assertEquals(forum0, response.getObject()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -195,12 +195,14 @@ public class ForumSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; + assertEquals(forum0, invitation.getObject()); assertFalse(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); assertFalse(invitation.doesExist()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; + assertEquals(forum0, response.getObject()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index f10d94183..ab934de94 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.identity.AuthorFactory; @@ -376,4 +377,21 @@ public abstract class BriarIntegrationTest Date: Wed, 5 Sep 2018 15:57:40 -0300 Subject: [PATCH 05/15] Unify all events related to private messages --- .../AndroidNotificationManagerImpl.java | 17 --- .../android/blog/BlogControllerImpl.java | 2 +- .../android/contact/ContactListFragment.java | 32 ------ .../android/contact/ConversationActivity.java | 108 ++++++------------ .../android/forum/ForumControllerImpl.java | 3 +- .../conversation/GroupControllerImpl.java | 3 +- .../BlogInvitationRequestReceivedEvent.java | 10 +- .../BlogInvitationResponseReceivedEvent.java | 11 +- .../ForumInvitationRequestReceivedEvent.java | 10 +- .../ForumInvitationResponseReceivedEvent.java | 10 +- .../IntroductionRequestReceivedEvent.java | 24 +--- .../IntroductionResponseReceivedEvent.java | 23 +--- .../event/PrivateMessageReceivedEvent.java | 17 +-- .../GroupInvitationRequestReceivedEvent.java | 11 +- .../GroupInvitationResponseReceivedEvent.java | 13 +-- .../event/InvitationRequestReceivedEvent.java | 38 ------ .../InvitationResponseReceivedEvent.java | 32 ------ .../introduction/AbstractProtocolEngine.java | 2 +- .../IntroduceeProtocolEngine.java | 2 +- .../briar/messaging/MessagingManagerImpl.java | 4 +- .../invitation/CreatorProtocolEngine.java | 15 ++- .../invitation/InviteeProtocolEngine.java | 14 +-- .../briar/sharing/BlogProtocolEngineImpl.java | 7 +- .../sharing/ForumProtocolEngineImpl.java | 7 +- .../IntroductionIntegrationTest.java | 14 ++- .../sharing/BlogSharingIntegrationTest.java | 4 +- .../sharing/ForumSharingIntegrationTest.java | 4 +- 27 files changed, 122 insertions(+), 315 deletions(-) delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index a36ca358e..37e8d61d5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -41,13 +41,9 @@ import org.briarproject.briar.android.util.BriarNotificationBuilder; import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.blog.event.BlogPostAddedEvent; import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent; -import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; -import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; import java.util.Set; import java.util.concurrent.Callable; @@ -235,19 +231,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } else if (e instanceof BlogPostAddedEvent) { BlogPostAddedEvent b = (BlogPostAddedEvent) e; showBlogPostNotification(b.getGroupId()); - } else if (e instanceof IntroductionRequestReceivedEvent) { - ContactId c = ((IntroductionRequestReceivedEvent) e).getContactId(); - showContactNotification(c); - } else if (e instanceof IntroductionResponseReceivedEvent) { - ContactId c = - ((IntroductionResponseReceivedEvent) e).getContactId(); - showContactNotification(c); - } else if (e instanceof InvitationRequestReceivedEvent) { - ContactId c = ((InvitationRequestReceivedEvent) e).getContactId(); - showContactNotification(c); - } else if (e instanceof InvitationResponseReceivedEvent) { - ContactId c = ((InvitationResponseReceivedEvent) e).getContactId(); - showContactNotification(c); } else if (e instanceof IntroductionSucceededEvent) { showIntroductionNotification(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java index d62a52c18..7bd289a62 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java @@ -107,7 +107,7 @@ class BlogControllerImpl extends BaseControllerImpl } else if (e instanceof BlogInvitationResponseReceivedEvent) { BlogInvitationResponseReceivedEvent b = (BlogInvitationResponseReceivedEvent) e; - PrivateResponse r = b.getResponse(); + PrivateResponse r = b.getMessageHeader(); if (r.getObject().getId().equals(groupId) && r.wasAccepted()) { LOG.info("Blog invitation accepted"); onBlogInvitationAccepted(b.getContactId()); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index dea7d542c..fa79b0931 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -37,17 +37,9 @@ import org.briarproject.briar.android.keyagreement.ContactExchangeActivity; import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.client.MessageTracker.GroupCount; -import org.briarproject.briar.api.introduction.IntroductionRequest; -import org.briarproject.briar.api.introduction.IntroductionResponse; -import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; -import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.messaging.ConversationManager; import org.briarproject.briar.api.messaging.PrivateMessageHeader; -import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; import java.util.ArrayList; import java.util.List; @@ -255,30 +247,6 @@ public class ContactListFragment extends BaseFragment implements EventListener { PrivateMessageReceivedEvent p = (PrivateMessageReceivedEvent) e; PrivateMessageHeader h = p.getMessageHeader(); updateItem(p.getContactId(), h); - } else if (e instanceof IntroductionRequestReceivedEvent) { - LOG.info("Introduction request received, updating item"); - IntroductionRequestReceivedEvent m = - (IntroductionRequestReceivedEvent) e; - IntroductionRequest ir = m.getIntroductionRequest(); - updateItem(m.getContactId(), ir); - } else if (e instanceof IntroductionResponseReceivedEvent) { - LOG.info("Introduction response received, updating item"); - IntroductionResponseReceivedEvent m = - (IntroductionResponseReceivedEvent) e; - IntroductionResponse ir = m.getIntroductionResponse(); - updateItem(m.getContactId(), ir); - } else if (e instanceof InvitationRequestReceivedEvent) { - LOG.info("Invitation Request received, update item"); - InvitationRequestReceivedEvent m = - (InvitationRequestReceivedEvent) e; - PrivateRequest ir = m.getRequest(); - updateItem(m.getContactId(), ir); - } else if (e instanceof InvitationResponseReceivedEvent) { - LOG.info("Invitation response received, updating item"); - InvitationResponseReceivedEvent m = - (InvitationResponseReceivedEvent) e; - PrivateResponse ir = m.getResponse(); - updateItem(m.getContactId(), ir); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index 07270b460..a9f9898e7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -64,8 +64,6 @@ import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.introduction.IntroductionManager; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; -import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; -import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; @@ -74,8 +72,6 @@ import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; import org.thoughtcrime.securesms.components.util.FutureTaskListener; import org.thoughtcrime.securesms.components.util.ListenableFutureTask; @@ -474,9 +470,7 @@ public class ConversationActivity extends BriarActivity PrivateMessageReceivedEvent p = (PrivateMessageReceivedEvent) e; if (p.getContactId().equals(contactId)) { LOG.info("Message received, adding"); - PrivateMessageHeader h = p.getMessageHeader(); - addConversationItem(ConversationItem.from(h)); - loadMessageBody(h.getId()); + onNewPrivateMessage(p.getMessageHeader()); } } else if (e instanceof MessagesSentEvent) { MessagesSentEvent m = (MessagesSentEvent) e; @@ -502,38 +496,6 @@ public class ConversationActivity extends BriarActivity LOG.info("Contact disconnected"); displayContactOnlineStatus(); } - } else if (e instanceof IntroductionRequestReceivedEvent) { - IntroductionRequestReceivedEvent event = - (IntroductionRequestReceivedEvent) e; - if (event.getContactId().equals(contactId)) { - LOG.info("Introduction request received, adding..."); - PrivateRequest ir = event.getIntroductionRequest(); - handlePrivateRequest(ir); - } - } else if (e instanceof IntroductionResponseReceivedEvent) { - IntroductionResponseReceivedEvent event = - (IntroductionResponseReceivedEvent) e; - if (event.getContactId().equals(contactId)) { - LOG.info("Introduction response received, adding..."); - PrivateResponse ir = event.getIntroductionResponse(); - handlePrivateResponse(ir); - } - } else if (e instanceof InvitationRequestReceivedEvent) { - InvitationRequestReceivedEvent event = - (InvitationRequestReceivedEvent) e; - if (event.getContactId().equals(contactId)) { - LOG.info("Invitation received, adding..."); - PrivateRequest ir = event.getRequest(); - handlePrivateRequest(ir); - } - } else if (e instanceof InvitationResponseReceivedEvent) { - InvitationResponseReceivedEvent event = - (InvitationResponseReceivedEvent) e; - if (event.getContactId().equals(contactId)) { - LOG.info("Invitation response received, adding..."); - PrivateResponse ir = event.getResponse(); - handlePrivateResponse(ir); - } } } @@ -546,42 +508,44 @@ public class ConversationActivity extends BriarActivity }); } - private void handlePrivateRequest(PrivateRequest m) { - getContactNameTask().addListener(new FutureTaskListener() { - @Override - public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed(() -> { - ConversationItem item = ConversationItem - .from(ConversationActivity.this, contactName, m); - addConversationItem(item); - }); - } + private void onNewPrivateMessage(PrivateMessageHeader h) { + if (h instanceof PrivateRequest || h instanceof PrivateResponse) { + getContactNameTask().addListener(new FutureTaskListener() { + @Override + public void onSuccess(String contactName) { + runOnUiThreadUnlessDestroyed(() -> { + handlePrivateRequestAndResponse(h, contactName); + }); + } - @Override - public void onFailure(Throwable exception) { - runOnUiThreadUnlessDestroyed( - () -> handleDbException((DbException) exception)); - } - }); + @Override + public void onFailure(Throwable exception) { + runOnUiThreadUnlessDestroyed( + () -> handleDbException((DbException) exception)); + } + }); + } else { + addConversationItem(ConversationItem.from(h)); + loadMessageBody(h.getId()); + } } - private void handlePrivateResponse(PrivateResponse m) { - getContactNameTask().addListener(new FutureTaskListener() { - @Override - public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed(() -> { - ConversationItem item = ConversationItem - .from(ConversationActivity.this, contactName, m); - addConversationItem(item); - }); - } - - @Override - public void onFailure(Throwable exception) { - runOnUiThreadUnlessDestroyed( - () -> handleDbException((DbException) exception)); - } - }); + @UiThread + private void handlePrivateRequestAndResponse(PrivateMessageHeader h, + String contactName) { + ConversationItem item; + if (h instanceof PrivateRequest) { + PrivateRequest m = (PrivateRequest) h; + item = ConversationItem + .from(ConversationActivity.this, contactName, m); + } else if (h instanceof PrivateResponse) { + PrivateResponse m = (PrivateResponse) h; + item = ConversationItem + .from(ConversationActivity.this, contactName, m); + } else { + throw new AssertionError("Unknown PrivateMessageHeader"); + } + addConversationItem(item); } private void markMessages(Collection messageIds, boolean sent, diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index ea8365c1a..695d14f03 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -84,8 +84,7 @@ class ForumControllerImpl extends } else if (e instanceof ForumInvitationResponseReceivedEvent) { ForumInvitationResponseReceivedEvent f = (ForumInvitationResponseReceivedEvent) e; - ForumInvitationResponse r = - (ForumInvitationResponse) f.getResponse(); + ForumInvitationResponse r = f.getMessageHeader(); if (r.getObject().getId().equals(getGroupId()) && r.wasAccepted()) { LOG.info("Forum invitation was accepted"); onForumInvitationAccepted(f.getContactId()); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index aa5d8c951..ba5f87c42 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -99,8 +99,7 @@ class GroupControllerImpl extends } else if (e instanceof GroupInvitationResponseReceivedEvent) { GroupInvitationResponseReceivedEvent g = (GroupInvitationResponseReceivedEvent) e; - GroupInvitationResponse r = - (GroupInvitationResponse) g.getResponse(); + GroupInvitationResponse r = g.getMessageHeader(); if (getGroupId().equals(r.getObject().getId()) && r.wasAccepted()) { listener.runOnUiThreadUnlessDestroyed( () -> listener.onInvitationAccepted(g.getContactId())); diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java index ee90a2e12..699717407 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationRequestReceivedEvent.java @@ -4,18 +4,18 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class BlogInvitationRequestReceivedEvent extends - InvitationRequestReceivedEvent { + PrivateMessageReceivedEvent> { - public BlogInvitationRequestReceivedEvent(Blog blog, ContactId contactId, - PrivateRequest request) { - super(blog, contactId, request); + public BlogInvitationRequestReceivedEvent(PrivateRequest request, + ContactId contactId) { + super(request, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java index ee9b22d1f..28df8444a 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/event/BlogInvitationResponseReceivedEvent.java @@ -2,20 +2,19 @@ package org.briarproject.briar.api.blog.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.blog.BlogInvitationResponse; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class BlogInvitationResponseReceivedEvent - extends InvitationResponseReceivedEvent { + extends PrivateMessageReceivedEvent { - public BlogInvitationResponseReceivedEvent(ContactId contactId, - BlogInvitationResponse response) { - super(contactId, response); + public BlogInvitationResponseReceivedEvent(BlogInvitationResponse response, + ContactId contactId) { + super(response, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java index 7fe834892..673cdd2eb 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationRequestReceivedEvent.java @@ -4,18 +4,18 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.forum.Forum; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class ForumInvitationRequestReceivedEvent extends - InvitationRequestReceivedEvent { + PrivateMessageReceivedEvent> { - public ForumInvitationRequestReceivedEvent(Forum forum, ContactId contactId, - PrivateRequest request) { - super(forum, contactId, request); + public ForumInvitationRequestReceivedEvent(PrivateRequest request, + ContactId contactId) { + super(request, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationResponseReceivedEvent.java index 460ea3cab..13d3081e8 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumInvitationResponseReceivedEvent.java @@ -3,18 +3,18 @@ package org.briarproject.briar.api.forum.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.forum.ForumInvitationResponse; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class ForumInvitationResponseReceivedEvent extends - InvitationResponseReceivedEvent { + PrivateMessageReceivedEvent { - public ForumInvitationResponseReceivedEvent(ContactId contactId, - ForumInvitationResponse response) { - super(contactId, response); + public ForumInvitationResponseReceivedEvent( + ForumInvitationResponse response, ContactId contactId) { + super(response, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionRequestReceivedEvent.java index 9fe4871e2..a07a66cac 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionRequestReceivedEvent.java @@ -1,32 +1,20 @@ package org.briarproject.briar.api.introduction.event; import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class IntroductionRequestReceivedEvent extends Event { +public class IntroductionRequestReceivedEvent extends + PrivateMessageReceivedEvent { - private final ContactId contactId; - private final IntroductionRequest introductionRequest; - - public IntroductionRequestReceivedEvent(ContactId contactId, - IntroductionRequest introductionRequest) { - - this.contactId = contactId; - this.introductionRequest = introductionRequest; - } - - public ContactId getContactId() { - return contactId; - } - - public IntroductionRequest getIntroductionRequest() { - return introductionRequest; + public IntroductionRequestReceivedEvent( + IntroductionRequest introductionRequest, ContactId contactId) { + super(introductionRequest, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionResponseReceivedEvent.java index 2cd3d1c29..d1aeb1495 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/event/IntroductionResponseReceivedEvent.java @@ -1,31 +1,20 @@ package org.briarproject.briar.api.introduction.event; import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class IntroductionResponseReceivedEvent extends Event { +public class IntroductionResponseReceivedEvent extends + PrivateMessageReceivedEvent { - private final ContactId contactId; - private final IntroductionResponse introductionResponse; - - public IntroductionResponseReceivedEvent(ContactId contactId, - IntroductionResponse introductionResponse) { - - this.contactId = contactId; - this.introductionResponse = introductionResponse; + public IntroductionResponseReceivedEvent( + IntroductionResponse introductionResponse, ContactId contactId) { + super(introductionResponse, contactId); } - public ContactId getContactId() { - return contactId; - } - - public IntroductionResponse getIntroductionResponse() { - return introductionResponse; - } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/event/PrivateMessageReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/event/PrivateMessageReceivedEvent.java index d82bff8f6..584bdfe31 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/event/PrivateMessageReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/event/PrivateMessageReceivedEvent.java @@ -3,7 +3,6 @@ package org.briarproject.briar.api.messaging.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.Immutable; @@ -13,28 +12,22 @@ import javax.annotation.concurrent.Immutable; */ @Immutable @NotNullByDefault -public class PrivateMessageReceivedEvent extends Event { +public class PrivateMessageReceivedEvent + extends Event { - private final PrivateMessageHeader messageHeader; + private final H messageHeader; private final ContactId contactId; - private final GroupId groupId; - public PrivateMessageReceivedEvent(PrivateMessageHeader messageHeader, - ContactId contactId, GroupId groupId) { + public PrivateMessageReceivedEvent(H messageHeader, ContactId contactId) { this.messageHeader = messageHeader; this.contactId = contactId; - this.groupId = groupId; } - public PrivateMessageHeader getMessageHeader() { + public H getMessageHeader() { return messageHeader; } public ContactId getContactId() { return contactId; } - - public GroupId getGroupId() { - return groupId; - } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationRequestReceivedEvent.java index 6ce0ff1ac..2edd5f022 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationRequestReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationRequestReceivedEvent.java @@ -2,20 +2,19 @@ package org.briarproject.briar.api.privategroup.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.privategroup.PrivateGroup; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; -import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class GroupInvitationRequestReceivedEvent extends - InvitationRequestReceivedEvent { + PrivateMessageReceivedEvent { - public GroupInvitationRequestReceivedEvent(PrivateGroup group, - ContactId contactId, GroupInvitationRequest request) { - super(group, contactId, request); + public GroupInvitationRequestReceivedEvent(GroupInvitationRequest request, + ContactId contactId) { + super(request, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java index e1af29e15..bc016a890 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupInvitationResponseReceivedEvent.java @@ -2,19 +2,18 @@ package org.briarproject.briar.api.privategroup.event; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.privategroup.PrivateGroup; -import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent; +import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault public class GroupInvitationResponseReceivedEvent - extends InvitationResponseReceivedEvent { + extends PrivateMessageReceivedEvent { - public GroupInvitationResponseReceivedEvent(ContactId contactId, - PrivateResponse response) { - super(contactId, response); + public GroupInvitationResponseReceivedEvent( + GroupInvitationResponse response, ContactId contactId) { + super(response, contactId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java deleted file mode 100644 index a7aeb9336..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationRequestReceivedEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.briarproject.briar.api.sharing.event; - -import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.event.Event; -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.sharing.Shareable; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class InvitationRequestReceivedEvent - extends Event { - - private final S shareable; - private final ContactId contactId; - private final PrivateRequest request; - - protected InvitationRequestReceivedEvent(S shareable, ContactId contactId, - PrivateRequest request) { - this.shareable = shareable; - this.contactId = contactId; - this.request = request; - } - - public ContactId getContactId() { - return contactId; - } - - public PrivateRequest getRequest() { - return request; - } - - public S getShareable() { - return shareable; - } -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java deleted file mode 100644 index 85e15462c..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/event/InvitationResponseReceivedEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.briarproject.briar.api.sharing.event; - -import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.event.Event; -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.sharing.Shareable; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public abstract class InvitationResponseReceivedEvent - extends Event { - - private final ContactId contactId; - private final PrivateResponse response; - - public InvitationResponseReceivedEvent(ContactId contactId, - PrivateResponse response) { - this.contactId = contactId; - this.response = response; - } - - public ContactId getContactId() { - return contactId; - } - - public PrivateResponse getResponse() { - return response; - } -} diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 424ea2f39..bb944f6be 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -157,7 +157,7 @@ abstract class AbstractProtocolEngine s.getSessionId(), introduction, m instanceof AcceptMessage); IntroductionResponseReceivedEvent e = - new IntroductionResponseReceivedEvent(c.getId(), response); + new IntroductionResponseReceivedEvent(response, c.getId()); txn.attach(e); } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 248882cea..4f9997de9 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -262,7 +262,7 @@ class IntroduceeProtocolEngine s.getSessionId(), introduction, m.getMessage(), false, contactExists); IntroductionRequestReceivedEvent e = - new IntroductionRequestReceivedEvent(c.getId(), request); + new IntroductionRequestReceivedEvent(request, c.getId()); txn.attach(e); // Move to the AWAIT_RESPONSES state diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java index 8d06c9934..d5206aa1d 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java @@ -116,8 +116,8 @@ class MessagingManagerImpl extends ConversationClientImpl PrivateMessageHeader header = new PrivateMessageHeader( m.getId(), groupId, timestamp, local, read, false, false); ContactId contactId = getContactId(txn, groupId); - PrivateMessageReceivedEvent event = new PrivateMessageReceivedEvent( - header, contactId, groupId); + PrivateMessageReceivedEvent event = + new PrivateMessageReceivedEvent<>(header, contactId); txn.attach(event); messageTracker.trackIncomingMessage(txn, m); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index be9c4d326..b73bf186a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -69,8 +69,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { } @Override - public CreatorSession onJoinAction(Transaction txn, CreatorSession s) - throws DbException { + public CreatorSession onJoinAction(Transaction txn, CreatorSession s) { throw new UnsupportedOperationException(); // Invalid in this role } @@ -92,8 +91,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { } @Override - public CreatorSession onMemberAddedAction(Transaction txn, CreatorSession s) - throws DbException { + public CreatorSession onMemberAddedAction(Transaction txn, + CreatorSession s) { return s; // Ignored in this role } @@ -196,8 +195,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { ContactId contactId = getContactId(txn, m.getContactGroupId()); PrivateGroup privateGroup = privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); - txn.attach(new GroupInvitationResponseReceivedEvent(contactId, - createInvitationResponse(m, privateGroup, true))); + txn.attach(new GroupInvitationResponseReceivedEvent( + createInvitationResponse(m, privateGroup, true), contactId)); // Move to the JOINED state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), sent.getId(), m.getId(), sent.getTimestamp(), @@ -220,8 +219,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { ContactId contactId = getContactId(txn, m.getContactGroupId()); PrivateGroup privateGroup = privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); - txn.attach(new GroupInvitationResponseReceivedEvent(contactId, - createInvitationResponse(m, privateGroup, false))); + txn.attach(new GroupInvitationResponseReceivedEvent( + createInvitationResponse(m, privateGroup, false), contactId)); // Move to the START state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index 67690c80c..722b562b8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -56,8 +56,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { @Override public InviteeSession onInviteAction(Transaction txn, InviteeSession s, - @Nullable String message, long timestamp, byte[] signature) - throws DbException { + @Nullable String message, long timestamp, byte[] signature) { throw new UnsupportedOperationException(); // Invalid in this role } @@ -99,8 +98,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { } @Override - public InviteeSession onMemberAddedAction(Transaction txn, InviteeSession s) - throws DbException { + public InviteeSession onMemberAddedAction(Transaction txn, + InviteeSession s) { return s; // Ignored in this role } @@ -244,9 +243,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { // Broadcast an event PrivateGroup privateGroup = privateGroupFactory.createPrivateGroup( m.getGroupName(), m.getCreator(), m.getSalt()); - txn.attach( - new GroupInvitationRequestReceivedEvent(privateGroup, contactId, - createInvitationRequest(m, privateGroup, contactId))); + txn.attach(new GroupInvitationRequestReceivedEvent( + createInvitationRequest(m, privateGroup), contactId)); // Move to the INVITED state return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -328,7 +326,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { } private GroupInvitationRequest createInvitationRequest(InviteMessage m, - PrivateGroup pg, ContactId c) { + PrivateGroup pg) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationRequest(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, sessionId, pg, diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 8df04ab0c..aae6e5db2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -53,8 +53,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { PrivateRequest request = invitationFactory .createInvitationRequest(false, false, true, false, m, contactId, available, canBeOpened); - return new BlogInvitationRequestReceivedEvent(m.getShareable(), - contactId, request); + return new BlogInvitationRequestReceivedEvent(request, contactId); } @Override @@ -64,7 +63,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, shareable, true); - return new BlogInvitationResponseReceivedEvent(contactId, response); + return new BlogInvitationResponseReceivedEvent(response, contactId); } @Override @@ -74,7 +73,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, shareable, true); - return new BlogInvitationResponseReceivedEvent(contactId, response); + return new BlogInvitationResponseReceivedEvent(response, contactId); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index 383090150..081886d1b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -55,8 +55,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { PrivateRequest request = invitationFactory .createInvitationRequest(false, false, true, false, m, contactId, available, canBeOpened); - return new ForumInvitationRequestReceivedEvent(m.getShareable(), - contactId, request); + return new ForumInvitationRequestReceivedEvent(request, contactId); } @Override @@ -66,7 +65,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, shareable, true); - return new ForumInvitationResponseReceivedEvent(contactId, response); + return new ForumInvitationResponseReceivedEvent(response, contactId); } @Override @@ -76,7 +75,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, shareable, true); - return new ForumInvitationResponseReceivedEvent(contactId, response); + return new ForumInvitationResponseReceivedEvent(response, contactId); } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index c7dfdcb8f..b9cec1cc5 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -24,14 +24,16 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionManager; import org.briarproject.briar.api.introduction.IntroductionRequest; -import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent; import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.test.BriarIntegrationTest; import org.junit.Before; import org.junit.Test; @@ -1131,11 +1133,11 @@ public class IntroductionIntegrationTest protected volatile Event latestEvent; @SuppressWarnings("WeakerAccess") - IntroductionResponse getResponse() { + PrivateResponse getResponse() { assertTrue( latestEvent instanceof IntroductionResponseReceivedEvent); return ((IntroductionResponseReceivedEvent) latestEvent) - .getIntroductionResponse(); + .getResponse(); } } @@ -1163,7 +1165,7 @@ public class IntroductionIntegrationTest IntroductionRequestReceivedEvent introEvent = ((IntroductionRequestReceivedEvent) e); requestReceived = true; - IntroductionRequest ir = introEvent.getIntroductionRequest(); + PrivateRequest ir = introEvent.getRequest(); ContactId contactId = introEvent.getContactId(); sessionId = ir.getSessionId(); long time = clock.currentTimeMillis(); @@ -1200,11 +1202,11 @@ public class IntroductionIntegrationTest } } - private IntroductionRequest getRequest() { + private PrivateRequest getRequest() { assertTrue( latestEvent instanceof IntroductionRequestReceivedEvent); return ((IntroductionRequestReceivedEvent) latestEvent) - .getIntroductionRequest(); + .getRequest(); } } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 6663c6d86..68f44bc5d 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -559,7 +559,7 @@ public class BlogSharingIntegrationTest BlogInvitationRequestReceivedEvent event = (BlogInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); - Blog b = event.getShareable(); + Blog b = event.getRequest().getObject(); try { Contact c = contactManager0.getContact(contactId1From0); blogSharingManager0.respondToInvitation(b, c, true); @@ -595,7 +595,7 @@ public class BlogSharingIntegrationTest (BlogInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Blog b = event.getShareable(); + Blog b = event.getRequest().getObject(); try { eventWaiter.assertEquals(1, blogSharingManager1.getInvitations().size()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 46db59820..b956403f0 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -813,7 +813,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); requestReceived = true; - Forum f = event.getShareable(); + Forum f = event.getRequest().getObject(); try { if (respond) { Contact c = contactManager0.getContact(contactId1From0); @@ -851,7 +851,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Forum f = event.getShareable(); + Forum f = event.getRequest().getObject(); try { if (respond) { eventWaiter.assertEquals(1, From 7e32697696934a5ec39e30327d52e2aa647641d9 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 5 Sep 2018 18:02:20 -0300 Subject: [PATCH 06/15] Use ConversationManager to retrieve messages This removes the public method for retrieving messages from individual conversation clients and just leaves methods that require a transaction to be used by the ConversationManager only. --- .../android/contact/ConversationActivity.java | 77 ++++--------- .../android/contact/ConversationItem.java | 37 +++--- .../api/introduction/IntroductionManager.java | 10 -- .../api/messaging/ConversationManager.java | 6 +- .../briar/api/messaging/MessagingManager.java | 9 -- .../invitation/GroupInvitationManager.java | 9 -- .../briar/api/sharing/SharingManager.java | 9 -- .../introduction/IntroductionManagerImpl.java | 16 +-- .../messaging/ConversationManagerImpl.java | 4 +- .../briar/messaging/MessagingManagerImpl.java | 16 +-- .../GroupInvitationManagerImpl.java | 16 +-- .../briar/sharing/SharingManagerImpl.java | 16 +-- .../blog/BlogManagerIntegrationTest.java | 6 +- .../IntroductionIntegrationTest.java | 109 ++++++++++-------- .../PrivateGroupManagerIntegrationTest.java | 84 +++++--------- .../GroupInvitationIntegrationTest.java | 32 ++--- .../GroupInvitationManagerImplTest.java | 7 +- .../sharing/BlogSharingIntegrationTest.java | 38 +++--- .../sharing/ForumSharingIntegrationTest.java | 50 ++++---- .../briar/test/BriarIntegrationTest.java | 27 ++++- 20 files changed, 227 insertions(+), 351 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index a9f9898e7..e1ccf6a57 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -62,8 +62,8 @@ import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.messaging.ConversationManager; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; @@ -159,6 +159,8 @@ public class ConversationActivity extends BriarActivity @Inject volatile MessagingManager messagingManager; @Inject + volatile ConversationManager conversationManager; + @Inject volatile EventBus eventBus; @Inject volatile SettingsManager settingsManager; @@ -337,23 +339,9 @@ public class ConversationActivity extends BriarActivity try { long start = now(); Collection headers = - messagingManager.getMessages(contactId); - Collection introductions = - introductionManager.getMessages(contactId); - Collection forumInvitations = - forumSharingManager.getMessages(contactId); - Collection blogInvitations = - blogSharingManager.getMessages(contactId); - Collection groupInvitations = - groupInvitationManager.getMessages(contactId); - List invitations = new ArrayList<>( - forumInvitations.size() + blogInvitations.size() + - groupInvitations.size()); - invitations.addAll(forumInvitations); - invitations.addAll(blogInvitations); - invitations.addAll(groupInvitations); + conversationManager.getMessageHeaders(contactId); logDuration(LOG, "Loading messages", start); - displayMessages(revision, headers, introductions, invitations); + displayMessages(revision, headers); } catch (NoSuchContactException e) { finishOnUiThread(); } catch (DbException e) { @@ -363,15 +351,12 @@ public class ConversationActivity extends BriarActivity } private void displayMessages(int revision, - Collection headers, - Collection introductions, - Collection invitations) { + Collection headers) { runOnUiThreadUnlessDestroyed(() -> { if (revision == adapter.getRevision()) { adapter.incrementRevision(); textInputView.setSendButtonEnabled(true); - List items = createItems(headers, - introductions, invitations); + List items = createItems(headers); adapter.addAll(items); list.showData(); // Scroll to the bottom @@ -390,38 +375,24 @@ public class ConversationActivity extends BriarActivity */ @SuppressWarnings("ConstantConditions") private List createItems( - Collection headers, - Collection introductions, - Collection invitations) { - int size = - headers.size() + introductions.size() + invitations.size(); - List items = new ArrayList<>(size); + Collection headers) { + List items = new ArrayList<>(headers.size()); for (PrivateMessageHeader h : headers) { - ConversationItem item = ConversationItem.from(h); - String body = bodyCache.get(h.getId()); - if (body == null) loadMessageBody(h.getId()); - else item.setBody(body); - items.add(item); - } - for (PrivateMessageHeader m : introductions) { ConversationItem item; - if (m instanceof IntroductionRequest) { - IntroductionRequest i = (IntroductionRequest) m; + if (h instanceof IntroductionResponse) { + IntroductionResponse i = (IntroductionResponse) h; item = ConversationItem.from(this, contactName, i); - } else { - IntroductionResponse i = (IntroductionResponse) m; - item = ConversationItem.from(this, contactName, i); - } - items.add(item); - } - for (PrivateMessageHeader i : invitations) { - ConversationItem item; - if (i instanceof PrivateRequest) { - item = ConversationItem - .from(this, contactName, (PrivateRequest) i); - } else { - PrivateResponse r = (PrivateResponse) i; + } else if (h instanceof PrivateRequest) { + PrivateRequest r = (PrivateRequest) h; item = ConversationItem.from(this, contactName, r); + } else if (h instanceof PrivateResponse) { + PrivateResponse r = (PrivateResponse) h; + item = ConversationItem.from(this, contactName, r); + } else { + item = ConversationItem.from(h); + String body = bodyCache.get(h.getId()); + if (body == null) loadMessageBody(h.getId()); + else item.setBody(body); } items.add(item); } @@ -513,9 +484,9 @@ public class ConversationActivity extends BriarActivity getContactNameTask().addListener(new FutureTaskListener() { @Override public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed(() -> { - handlePrivateRequestAndResponse(h, contactName); - }); + runOnUiThreadUnlessDestroyed( + () -> handlePrivateRequestAndResponse(h, + contactName)); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 0177bed10..06afcf50b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -34,7 +34,8 @@ import static org.briarproject.briar.android.contact.ConversationRequestItem.Req @NotNullByDefault abstract class ConversationItem { - protected @Nullable String body; + @Nullable + protected String body; private final MessageId id; private final GroupId groupId; private final long time; @@ -105,7 +106,7 @@ abstract class ConversationItem { R.string.groups_invitations_invitation_sent, contactName, ir.getName()); } else { - throw new IllegalArgumentException("Unknown InvitationRequest"); + throw new IllegalArgumentException("Unknown PrivateRequest"); } return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(), ir.isSent(), @@ -145,7 +146,7 @@ abstract class ConversationItem { contactName, ir.getName()); type = GROUP; } else { - throw new IllegalArgumentException("Unknown InvitationRequest"); + throw new IllegalArgumentException("Unknown PrivateRequest"); } return new ConversationRequestItem(ir.getId(), ir.getGroupId(), type, ir.getSessionId(), text, @@ -229,22 +230,24 @@ abstract class ConversationItem { } else if (ir instanceof BlogInvitationResponse) { res = R.string.blogs_sharing_response_accepted_received; } else if (ir instanceof GroupInvitationResponse) { - res = R.string.groups_invitations_response_accepted_received; + res = + R.string.groups_invitations_response_accepted_received; } else { throw new IllegalArgumentException( "Unknown PrivateResponse"); } } else { - if (ir instanceof ForumInvitationResponse) { - res = R.string.forum_invitation_response_declined_received; - } else if (ir instanceof BlogInvitationResponse) { - res = R.string.blogs_sharing_response_declined_received; - } else if (ir instanceof GroupInvitationResponse) { - res = R.string.groups_invitations_response_declined_received; - } else { - throw new IllegalArgumentException( - "Unknown PrivateResponse"); - } + if (ir instanceof ForumInvitationResponse) { + res = R.string.forum_invitation_response_declined_received; + } else if (ir instanceof BlogInvitationResponse) { + res = R.string.blogs_sharing_response_declined_received; + } else if (ir instanceof GroupInvitationResponse) { + res = + R.string.groups_invitations_response_declined_received; + } else { + throw new IllegalArgumentException( + "Unknown PrivateResponse"); + } } String text = ctx.getString(res, contactName); return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), @@ -258,11 +261,11 @@ abstract class ConversationItem { * PrivateMessageHeader. **/ static ConversationItem from(Context ctx, PrivateMessageHeader h) { - if(h instanceof IntroductionResponse) { + if (h instanceof IntroductionResponse) { return from(ctx, "", (IntroductionResponse) h); - } else if(h instanceof PrivateRequest) { + } else if (h instanceof PrivateRequest) { return from(ctx, "", (PrivateRequest) h); - } else if(h instanceof PrivateResponse) { + } else if (h instanceof PrivateResponse) { return from(ctx, "", (PrivateResponse) h); } else { return from(h); diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java index f7588a371..b52273daf 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java @@ -7,9 +7,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.ClientId; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; - -import java.util.Collection; import javax.annotation.Nullable; @@ -48,11 +45,4 @@ public interface IntroductionManager extends ConversationClient { void respondToIntroduction(ContactId contactId, SessionId sessionId, long timestamp, boolean accept) throws DbException; - /** - * Returns all introduction messages for the given contact. - */ - @Deprecated - Collection getMessages(ContactId contactId) - throws DbException; - } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java index 57c5b9fe6..be2eeab2c 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java @@ -22,12 +22,12 @@ public interface ConversationManager { void registerConversationClient(ConversationClient client); /** - * Returns (the headers) of all messages in the given private conversation. + * Returns the headers of all messages in the given private conversation. * * Only {@link MessagingManager} returns only headers. * The others also return the message body. */ - Collection getMessages(ContactId c) + Collection getMessageHeaders(ContactId c) throws DbException; /** @@ -40,7 +40,7 @@ public interface ConversationManager { Group getContactGroup(Contact c); - Collection getMessages(Transaction txn, + Collection getMessageHeaders(Transaction txn, ContactId contactId) throws DbException; GroupCount getGroupCount(Transaction txn, ContactId c) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java index a6f52c3e4..47c4f66b0 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java @@ -8,8 +8,6 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; -import java.util.Collection; - @NotNullByDefault public interface MessagingManager extends ConversationClient { @@ -43,13 +41,6 @@ public interface MessagingManager extends ConversationClient { */ GroupId getConversationId(ContactId c) throws DbException; - /** - * Returns the headers of all messages in the given private conversation. - */ - @Deprecated - Collection getMessages(ContactId c) - throws DbException; - /** * Returns the body of the private message with the given ID. */ diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java index c00dcd030..913edbbc6 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java @@ -9,7 +9,6 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.privategroup.PrivateGroup; import java.util.Collection; @@ -73,14 +72,6 @@ public interface GroupInvitationManager extends ConversationClient { */ void revealRelationship(ContactId c, GroupId g) throws DbException; - /** - * Returns all private group invitation messages related to the given - * contact. - */ - @Deprecated - Collection getMessages(ContactId c) - throws DbException; - /** * Returns all private groups to which the user has been invited. */ diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java index 9f5da2627..64f4af762 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java @@ -7,7 +7,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.ConversationManager.ConversationClient; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; import java.util.Collection; @@ -36,14 +35,6 @@ public interface SharingManager void respondToInvitation(ContactId c, SessionId id, boolean accept) throws DbException; - /** - * Returns all group sharing messages sent by the Contact - * identified by contactId. - */ - @Deprecated - Collection getMessages(ContactId contactId) - throws DbException; - /** * Returns all invitations to groups. */ diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 76cd52b92..5b3c0d6d2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -399,21 +399,7 @@ class IntroductionManagerImpl extends ConversationClientImpl } @Override - public Collection getMessages(ContactId c) - throws DbException { - Collection messages; - Transaction txn = db.startTransaction(true); - try { - messages = getMessages(txn, c); - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); - } - return messages; - } - - @Override - public Collection getMessages(Transaction txn, + public Collection getMessageHeaders(Transaction txn, ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java index f851b83f8..9499ccad6 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java @@ -38,13 +38,13 @@ class ConversationManagerImpl implements ConversationManager { } @Override - public Collection getMessages(ContactId c) + public Collection getMessageHeaders(ContactId c) throws DbException { List messages = new ArrayList<>(); Transaction txn = db.startTransaction(true); try { for (ConversationClient client : clients) { - messages.addAll(client.getMessages(txn, c)); + messages.addAll(client.getMessageHeaders(txn, c)); } db.commitTransaction(txn); } finally { diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java index d5206aa1d..cf97a32b2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java @@ -178,21 +178,7 @@ class MessagingManagerImpl extends ConversationClientImpl } @Override - public Collection getMessages(ContactId c) - throws DbException { - Collection headers; - Transaction txn = db.startTransaction(true); - try { - headers = getMessages(txn, c); - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); - } - return headers; - } - - @Override - public Collection getMessages(Transaction txn, + public Collection getMessageHeaders(Transaction txn, ContactId c) throws DbException { Map metadata; Collection statuses; diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 15b82bdd6..a47bdca70 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -368,21 +368,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } @Override - public Collection getMessages(ContactId c) - throws DbException { - Collection messages; - Transaction txn = db.startTransaction(true); - try { - messages = getMessages(txn, c); - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); - } - return messages; - } - - @Override - public Collection getMessages(Transaction txn, + public Collection getMessageHeaders(Transaction txn, ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index 8b9af66db..12fb5f8b8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -321,21 +321,7 @@ abstract class SharingManagerImpl } @Override - public Collection getMessages(ContactId c) - throws DbException { - Collection messages; - Transaction txn = db.startTransaction(true); - try { - messages = getMessages(txn, c); - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); - } - return messages; - } - - @Override - public Collection getMessages(Transaction txn, + public Collection getMessageHeaders(Transaction txn, ContactId c) throws DbException { try { Contact contact = db.getContact(txn, c); diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java index a089eb0e0..49bba71d1 100644 --- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java @@ -1,6 +1,5 @@ package org.briarproject.briar.blog; -import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.sync.MessageId; @@ -63,10 +62,7 @@ public class BlogManagerIntegrationTest blog1 = blogFactory.createBlog(author1); rssBlog = blogFactory.createFeedBlog(rssAuthor); - Transaction txn = db0.startTransaction(false); - blogManager0.addBlog(txn, rssBlog); - db0.commitTransaction(txn); - db0.endTransaction(txn); + withinTransaction(db0, txn -> blogManager0.addBlog(txn, rssBlog)); } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index b9cec1cc5..dbafc3c3a 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -9,8 +9,8 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.data.BdfDictionary; import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.BdfList; +import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; -import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.identity.Author; @@ -299,18 +299,23 @@ public class IntroductionIntegrationTest Group g1 = introductionManager0.getContactGroup(introducee1); Group g2 = introductionManager0.getContactGroup(introducee2); - assertEquals(2, - introductionManager0.getMessages(contactId1From0).size()); + Collection messages = + withinTransactionReturns(db0, txn -> introductionManager0 + .getMessageHeaders(txn, contactId1From0)); + assertEquals(2, messages.size()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); - assertEquals(2, - introductionManager0.getMessages(contactId2From0).size()); + messages = withinTransactionReturns(db0, + txn -> introductionManager0.getMessageHeaders(txn, contactId2From0)); + assertEquals(2, messages.size()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); - assertEquals(2, - introductionManager1.getMessages(contactId0From1).size()); + messages = withinTransactionReturns(db1, + txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)); + assertEquals(2, messages.size()); assertGroupCount(messageTracker1, g1.getId(), 2, 1); // introducee2 should also have the decline response of introducee1 - assertEquals(3, - introductionManager2.getMessages(contactId0From2).size()); + messages = withinTransactionReturns(db2, + txn -> introductionManager2.getMessageHeaders(txn, contactId0From2)); + assertEquals(3, messages.size()); assertGroupCount(messageTracker2, g2.getId(), 3, 2); assertFalse(listener0.aborted); @@ -360,15 +365,19 @@ public class IntroductionIntegrationTest assertFalse(contactManager2 .contactExists(author1.getId(), author2.getId())); - assertEquals(2, - introductionManager0.getMessages(contactId1From0).size()); - assertEquals(2, - introductionManager0.getMessages(contactId2From0).size()); - assertEquals(3, - introductionManager1.getMessages(contactId0From1).size()); - assertEquals(3, - introductionManager2.getMessages(contactId0From2) - .size()); + Collection messages = + withinTransactionReturns(db0, txn -> introductionManager0 + .getMessageHeaders(txn, contactId1From0)); + assertEquals(2, messages.size()); + messages = withinTransactionReturns(db0, + txn -> introductionManager0.getMessageHeaders(txn, contactId2From0)); + assertEquals(2, messages.size()); + messages = withinTransactionReturns(db1, + txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)); + assertEquals(3,messages.size()); + messages = withinTransactionReturns(db2, + txn -> introductionManager2.getMessageHeaders(txn, contactId0From2)); + assertEquals(3, messages.size()); assertFalse(listener0.aborted); assertFalse(listener1.aborted); assertFalse(listener2.aborted); @@ -514,17 +523,21 @@ public class IntroductionIntegrationTest Group g1 = introductionManager0.getContactGroup(introducee1); Group g2 = introductionManager0.getContactGroup(introducee2); - assertEquals(2, - introductionManager0.getMessages(contactId1From0).size()); + assertEquals(2, withinTransactionReturns(db0, + txn -> introductionManager0.getMessageHeaders(txn, contactId1From0)) + .size()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); - assertEquals(2, - introductionManager0.getMessages(contactId2From0).size()); + assertEquals(2, withinTransactionReturns(db0, + txn -> introductionManager0.getMessageHeaders(txn, contactId2From0)) + .size()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); - assertEquals(3, - introductionManager1.getMessages(contactId0From1).size()); + assertEquals(3, withinTransactionReturns(db1, + txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)) + .size()); assertGroupCount(messageTracker1, g1.getId(), 3, 2); - assertEquals(3, - introductionManager2.getMessages(contactId0From2).size()); + assertEquals(3, withinTransactionReturns(db2, + txn -> introductionManager2.getMessageHeaders(txn, contactId0From2)) + .size()); assertGroupCount(messageTracker2, g2.getId(), 3, 2); assertFalse(listener0.aborted); @@ -548,7 +561,9 @@ public class IntroductionIntegrationTest assertFalse(listener1.requestReceived); // make really sure we don't have that request - assertTrue(introductionManager1.getMessages(contactId0From1).isEmpty()); + assertTrue(withinTransactionReturns(db1, + txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)) + .isEmpty()); // The message was invalid, so no abort message was sent assertFalse(listener0.aborted); @@ -596,11 +611,11 @@ public class IntroductionIntegrationTest sync0To2(1, true); // assert that introducees get notified about the existing contact - IntroductionRequest ir1 = - getIntroductionRequest(introductionManager1, contactId0From1); + IntroductionRequest ir1 = getIntroductionRequest(db1, + introductionManager1, contactId0From1); assertTrue(ir1.doesExist()); - IntroductionRequest ir2 = - getIntroductionRequest(introductionManager2, contactId0From2); + IntroductionRequest ir2 = getIntroductionRequest(db2, + introductionManager2, contactId0From2); assertTrue(ir2.doesExist()); // sync ACCEPT messages back to introducer @@ -981,8 +996,7 @@ public class IntroductionIntegrationTest AcceptMessage m = visitor.visit(message); // replace original response with modified one - Transaction txn = db0.startTransaction(false); - try { + withinTransaction(db0, txn -> { db0.removeMessage(txn, message.getMessageId()); Message msg = c0.getMessageEncoder() .encodeAcceptMessage(m.getGroupId(), m.getTimestamp(), @@ -1002,10 +1016,7 @@ public class IntroductionIntegrationTest session.getValue(), msg.getId()); c0.getClientHelper().mergeMessageMetadata(txn, session.getKey(), session.getValue()); - db0.commitTransaction(txn); - } finally { - db0.endTransaction(txn); - } + }); // sync second response sync2To0(1, true); @@ -1091,19 +1102,23 @@ public class IntroductionIntegrationTest private void assertDefaultUiMessages() throws DbException { Collection messages = - introductionManager0.getMessages(contactId1From0); + withinTransactionReturns(db0, txn -> introductionManager0 + .getMessageHeaders(txn, contactId1From0)); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager0.getMessages(contactId2From0); + messages = withinTransactionReturns(db0, + txn -> introductionManager0.getMessageHeaders(txn, contactId2From0)); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager1.getMessages(contactId0From1); + messages = withinTransactionReturns(db1, + txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); - messages = introductionManager2.getMessages(contactId0From2); + messages = withinTransactionReturns(db2, + txn -> introductionManager2.getMessageHeaders(txn, contactId0From2)); assertEquals(2, messages.size()); assertMessagesAreAcked(messages); } @@ -1137,7 +1152,7 @@ public class IntroductionIntegrationTest assertTrue( latestEvent instanceof IntroductionResponseReceivedEvent); return ((IntroductionResponseReceivedEvent) latestEvent) - .getResponse(); + .getMessageHeader(); } } @@ -1165,7 +1180,7 @@ public class IntroductionIntegrationTest IntroductionRequestReceivedEvent introEvent = ((IntroductionRequestReceivedEvent) e); requestReceived = true; - PrivateRequest ir = introEvent.getRequest(); + PrivateRequest ir = introEvent.getMessageHeader(); ContactId contactId = introEvent.getContactId(); sessionId = ir.getSessionId(); long time = clock.currentTimeMillis(); @@ -1206,7 +1221,7 @@ public class IntroductionIntegrationTest assertTrue( latestEvent instanceof IntroductionRequestReceivedEvent); return ((IntroductionRequestReceivedEvent) latestEvent) - .getRequest(); + .getMessageHeader(); } } @@ -1283,10 +1298,12 @@ public class IntroductionIntegrationTest } else throw new AssertionError("Not implemented"); } - private IntroductionRequest getIntroductionRequest( + private IntroductionRequest getIntroductionRequest(DatabaseComponent db, IntroductionManager manager, ContactId contactId) throws DbException { - for (PrivateMessageHeader im : manager.getMessages(contactId)) { + Collection messages = withinTransactionReturns(db, + txn -> manager.getMessageHeaders(txn, contactId)); + for (PrivateMessageHeader im : messages) { if (im instanceof IntroductionRequest) { return (IntroductionRequest) im; } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java index 943c4dabe..37ee56a41 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java @@ -2,7 +2,6 @@ package org.briarproject.briar.privategroup; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.data.BdfList; -import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestDatabaseModule; @@ -245,11 +244,8 @@ public class PrivateGroupManagerIntegrationTest groupManager0.getPreviousMsgId(groupId0)); // share the group with 1 - Transaction txn0 = db0.startTransaction(false); - db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), - SHARED); - db0.commitTransaction(txn0); - db0.endTransaction(txn0); + withinTransaction(db0, txn -> db0.setGroupVisibility(txn, + contactId1From0, privateGroup0.getId(), SHARED)); // author1 joins privateGroup0 with wrong timestamp joinTime = clock.currentTimeMillis(); @@ -266,11 +262,8 @@ public class PrivateGroupManagerIntegrationTest groupManager1.getPreviousMsgId(groupId0)); // share the group with 0 - Transaction txn1 = db1.startTransaction(false); - db1.setGroupVisibility(txn1, contactId0From1, privateGroup0.getId(), - SHARED); - db1.commitTransaction(txn1); - db1.endTransaction(txn1); + withinTransaction(db1, txn -> db1.setGroupVisibility(txn, + contactId0From1, privateGroup0.getId(), SHARED)); // sync join messages sync0To1(1, false); @@ -303,11 +296,8 @@ public class PrivateGroupManagerIntegrationTest groupManager0.getPreviousMsgId(groupId0)); // share the group with 1 - Transaction txn0 = db0.startTransaction(false); - db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), - SHARED); - db0.commitTransaction(txn0); - db0.endTransaction(txn0); + withinTransaction(db0, txn -> db0.setGroupVisibility(txn, + contactId1From0, privateGroup0.getId(), SHARED)); // author1 joins privateGroup0 with wrong signature in join message joinTime = clock.currentTimeMillis(); @@ -325,11 +315,8 @@ public class PrivateGroupManagerIntegrationTest groupManager1.getPreviousMsgId(groupId0)); // share the group with 0 - Transaction txn1 = db1.startTransaction(false); - db1.setGroupVisibility(txn1, contactId0From1, privateGroup0.getId(), - SHARED); - db1.commitTransaction(txn1); - db1.endTransaction(txn1); + withinTransaction(db1, txn -> db1.setGroupVisibility(txn, + contactId0From1, privateGroup0.getId(), SHARED)); // sync join messages sync0To1(1, false); @@ -404,11 +391,8 @@ public class PrivateGroupManagerIntegrationTest addGroup(); // share the group with 2 - Transaction txn0 = db0.startTransaction(false); - db0.setGroupVisibility(txn0, contactId2From0, privateGroup0.getId(), - SHARED); - db0.commitTransaction(txn0); - db0.endTransaction(txn0); + withinTransaction(db0, txn -> db0.setGroupVisibility(txn, + contactId2From0, privateGroup0.getId(), SHARED)); // author2 joins privateGroup0 long joinTime = clock.currentTimeMillis(); @@ -420,14 +404,12 @@ public class PrivateGroupManagerIntegrationTest GroupMessage joinMsg2 = groupMessageFactory .createJoinMessage(privateGroup0.getId(), joinTime, author2, inviteTime, creatorSignature); - Transaction txn2 = db2.startTransaction(false); - groupManager2.addPrivateGroup(txn2, privateGroup0, joinMsg2, false); - - // share the group with 0 - db2.setGroupVisibility(txn2, contactId0From1, privateGroup0.getId(), - SHARED); - db2.commitTransaction(txn2); - db2.endTransaction(txn2); + withinTransaction(db2, txn -> { + groupManager2.addPrivateGroup(txn, privateGroup0, joinMsg2, false); + // share the group with 0 + db2.setGroupVisibility(txn, + contactId0From1, privateGroup0.getId(), SHARED); // TODO contactId + }); // sync join messages sync2To0(1, true); @@ -458,16 +440,10 @@ public class PrivateGroupManagerIntegrationTest } // reveal contact relationship - Transaction txn1 = db1.startTransaction(false); - groupManager1 - .relationshipRevealed(txn1, groupId0, author2.getId(), false); - db1.commitTransaction(txn1); - db1.endTransaction(txn1); - txn2 = db2.startTransaction(false); - groupManager2 - .relationshipRevealed(txn2, groupId0, author1.getId(), true); - db2.commitTransaction(txn2); - db2.endTransaction(txn2); + withinTransaction(db1, txn -> groupManager1.relationshipRevealed(txn, + groupId0, author2.getId(), false)); + withinTransaction(db2, txn -> groupManager2.relationshipRevealed(txn, + groupId0, author1.getId(), true)); // assert that contact relationship is now revealed properly members1 = groupManager1.getMembers(groupId0); @@ -520,10 +496,8 @@ public class PrivateGroupManagerIntegrationTest assertFalse(groupManager1.isDissolved(groupId0)); // creator dissolves group - Transaction txn1 = db1.startTransaction(false); - groupManager1.markGroupDissolved(txn1, groupId0); - db1.commitTransaction(txn1); - db1.endTransaction(txn1); + withinTransaction(db1, + txn -> groupManager1.markGroupDissolved(txn, groupId0)); // group is dissolved now assertTrue(groupManager1.isDissolved(groupId0)); @@ -539,11 +513,8 @@ public class PrivateGroupManagerIntegrationTest groupManager0.getPreviousMsgId(groupId0)); // share the group with 1 - Transaction txn0 = db0.startTransaction(false); - db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), - SHARED); - db0.commitTransaction(txn0); - db0.endTransaction(txn0); + withinTransaction(db0, txn -> db0.setGroupVisibility(txn, + contactId1From0, privateGroup0.getId(), SHARED)); // author1 joins privateGroup0 joinTime = clock.currentTimeMillis(); @@ -558,11 +529,8 @@ public class PrivateGroupManagerIntegrationTest groupManager1.addPrivateGroup(privateGroup0, joinMsg1, false); // share the group with 0 - Transaction txn1 = db1.startTransaction(false); - db1.setGroupVisibility(txn1, contactId0From1, privateGroup0.getId(), - SHARED); - db1.commitTransaction(txn1); - db1.endTransaction(txn1); + withinTransaction(db1, txn -> db1.setGroupVisibility(txn, + contactId0From1, privateGroup0.getId(), SHARED)); assertEquals(joinMsg1.getMessage().getId(), groupManager1.getPreviousMsgId(groupId0)); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 0d55b34f6..bf60be53b 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -93,7 +93,8 @@ public class GroupInvitationIntegrationTest assertFalse(item.isSubscribed()); Collection messages = - groupInvitationManager1.getMessages(contactId0From1); + withinTransactionReturns(db1, txn -> groupInvitationManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(1, messages.size()); GroupInvitationRequest request = (GroupInvitationRequest) messages.iterator().next(); @@ -118,7 +119,8 @@ public class GroupInvitationIntegrationTest .respondToInvitation(contactId0From1, privateGroup0, false); Collection messages = - groupInvitationManager1.getMessages(contactId0From1); + withinTransactionReturns(db1, txn -> groupInvitationManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(2, messages.size()); boolean foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -134,8 +136,8 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); - messages = - groupInvitationManager0.getMessages(contactId1From0); + messages = withinTransactionReturns(db0, txn -> groupInvitationManager0 + .getMessageHeaders(txn, contactId1From0)); assertEquals(2, messages.size()); foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -167,7 +169,8 @@ public class GroupInvitationIntegrationTest .respondToInvitation(contactId0From1, privateGroup0, true); Collection messages = - groupInvitationManager1.getMessages(contactId0From1); + withinTransactionReturns(db1, txn -> groupInvitationManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(2, messages.size()); boolean foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -186,7 +189,8 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); - messages = groupInvitationManager0.getMessages(contactId1From0); + messages = withinTransactionReturns(db1, txn -> groupInvitationManager0 + .getMessageHeaders(txn, contactId1From0)); assertEquals(2, messages.size()); foundResponse = false; for (PrivateMessageHeader m : messages) { @@ -221,9 +225,9 @@ public class GroupInvitationIntegrationTest // 1 has one unread message Group g0 = groupInvitationManager1.getContactGroup(contact0From1); assertGroupCount(messageTracker1, g0.getId(), 1, 1, timestamp); - PrivateMessageHeader m = - groupInvitationManager1.getMessages(contactId0From1) - .iterator().next(); + PrivateMessageHeader m = withinTransactionReturns(db1, + txn -> groupInvitationManager1.getMessageHeaders(txn, contactId0From1) + .iterator().next()); groupInvitationManager1 .respondToInvitation(contactId0From1, privateGroup0, true); @@ -445,7 +449,8 @@ public class GroupInvitationIntegrationTest // save MessageId of invitation Collection messages = - groupInvitationManager1.getMessages(contactId0From1); + withinTransactionReturns(db1, txn -> groupInvitationManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(1, messages.size()); MessageId inviteId = messages.iterator().next().getId(); @@ -454,17 +459,18 @@ public class GroupInvitationIntegrationTest .respondToInvitation(contactId0From1, privateGroup0, false); // we should have an invitation and a decline message - messages = groupInvitationManager1.getMessages(contactId0From1); + messages = withinTransactionReturns(db1, txn -> groupInvitationManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(2, messages.size()); // delete only invitation withinTransaction(db1, txn -> { db1.deleteMessage(txn, inviteId); db1.deleteMessageMetadata(txn, inviteId); + // This should fail + groupInvitationManager1.getMessageHeaders(txn, contactId0From1); }); - // This should fail - groupInvitationManager1.getMessages(contactId0From1); } private void sendInvitation(long timestamp, @Nullable String msg) throws diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index 197785228..bd765a2b9 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -669,8 +669,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { invite.getCreator(), invite.getSalt()); context.checking(new Expectations() {{ - oneOf(db).startTransaction(true); - will(returnValue(txn)); oneOf(db).getContact(txn, contactId); will(returnValue(contact)); oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, @@ -700,13 +698,10 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { oneOf(messageParser).parseMetadata(meta); will(returnValue(messageMetadata1)); oneOf(db).getMessageStatus(txn, contactId, messageId2); - // end transaction - oneOf(db).commitTransaction(txn); - oneOf(db).endTransaction(txn); }}); Collection messages = - groupInvitationManager.getMessages(contactId); + groupInvitationManager.getMessageHeaders(txn, contactId); assertEquals(2, messages.size()); for (PrivateMessageHeader m : messages) { assertEquals(contactGroup.getId(), m.getGroupId()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 68f44bc5d..ad2b55538 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -27,9 +27,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import static org.briarproject.briar.api.blog.BlogSharingManager.CLIENT_ID; import static org.briarproject.briar.api.blog.BlogSharingManager.MAJOR_VERSION; @@ -147,8 +145,8 @@ public class BlogSharingIntegrationTest assertTrue(blogManager1.getBlogs().contains(blog2)); // invitee has one invitation message from sharer - List list = new ArrayList<>( - blogSharingManager1.getMessages(contactId0From1)); + Collection list = withinTransactionReturns(db1, + txn -> blogSharingManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message for (PrivateMessageHeader m : list) { @@ -168,9 +166,9 @@ public class BlogSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, - blogSharingManager0.getMessages(contactId1From0) - .size()); + assertEquals(2, withinTransactionReturns(db0, + txn -> blogSharingManager0.getMessageHeaders(txn, contactId1From0)) + .size()); // blog can not be shared again assertFalse(blogSharingManager0.canBeShared(blog2.getId(), contact1From0)); @@ -220,8 +218,8 @@ public class BlogSharingIntegrationTest assertTrue(blogManager1.getBlogs().contains(rssBlog)); // invitee has one invitation message from sharer - List list = new ArrayList<>( - blogSharingManager1.getMessages(contactId0From1)); + Collection list = withinTransactionReturns(db1, + txn -> blogSharingManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the message for (PrivateMessageHeader m : list) { @@ -241,8 +239,9 @@ public class BlogSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, blogSharingManager0.getMessages( - contactId1From0).size()); + assertEquals(2, withinTransactionReturns(db0, + txn -> blogSharingManager0.getMessageHeaders(txn, contactId1From0)) + .size()); // blog can not be shared again assertFalse(blogSharingManager0.canBeShared(rssBlog.getId(), contact1From0)); @@ -281,8 +280,8 @@ public class BlogSharingIntegrationTest assertEquals(0, blogSharingManager1.getInvitations().size()); // invitee has one invitation message from sharer and one response - List list = new ArrayList<>( - blogSharingManager1.getMessages(contactId0From1)); + Collection list = withinTransactionReturns(db1, + txn -> blogSharingManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, list.size()); // check things are alright with the message for (PrivateMessageHeader m : list) { @@ -301,9 +300,9 @@ public class BlogSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, - blogSharingManager0.getMessages(contactId1From0) - .size()); + assertEquals(2, withinTransactionReturns(db0, + txn -> blogSharingManager0.getMessageHeaders(txn, contactId1From0)) + .size()); // blog can be shared again assertTrue( blogSharingManager0.canBeShared(blog2.getId(), contact1From0)); @@ -389,7 +388,8 @@ public class BlogSharingIntegrationTest // make sure 1 knows that they have blog2 already Collection messages = - blogSharingManager1.getMessages(contactId0From1); + withinTransactionReturns(db1, txn -> blogSharingManager1 + .getMessageHeaders(txn, contactId0From1)); assertEquals(2, messages.size()); assertEquals(blog2, blogManager1.getBlog(blog2.getId())); @@ -559,7 +559,7 @@ public class BlogSharingIntegrationTest BlogInvitationRequestReceivedEvent event = (BlogInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); - Blog b = event.getRequest().getObject(); + Blog b = event.getMessageHeader().getObject(); try { Contact c = contactManager0.getContact(contactId1From0); blogSharingManager0.respondToInvitation(b, c, true); @@ -595,7 +595,7 @@ public class BlogSharingIntegrationTest (BlogInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Blog b = event.getRequest().getObject(); + Blog b = event.getMessageHeader().getObject(); try { eventWaiter.assertEquals(1, blogSharingManager1.getInvitations().size()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index b956403f0..2b13a1dc6 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -5,7 +5,6 @@ import net.jodah.concurrentunit.Waiter; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.data.BdfDictionary; import org.briarproject.bramble.api.db.DbException; -import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -32,9 +31,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import static junit.framework.Assert.assertNotNull; import static org.briarproject.bramble.util.StringUtils.getRandomString; @@ -131,8 +128,8 @@ public class ForumSharingIntegrationTest assertEquals(1, forumManager1.getForums().size()); // invitee has one invitation message from sharer - List list = new ArrayList<>( - forumSharingManager1.getMessages(contactId0From1)); + Collection list = withinTransactionReturns(db1, + txn -> forumSharingManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, list.size()); // check other things are alright with the forum message for (PrivateMessageHeader m : list) { @@ -151,9 +148,8 @@ public class ForumSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, - forumSharingManager0.getMessages(contactId1From0) - .size()); + assertEquals(2, withinTransactionReturns(db0, txn -> + forumSharingManager0.getMessageHeaders(txn, contactId1From0)).size()); // forum can not be shared again Contact c1 = contactManager0.getContact(contactId1From0); assertFalse(forumSharingManager0.canBeShared(forum0.getId(), c1)); @@ -188,8 +184,8 @@ public class ForumSharingIntegrationTest assertEquals(0, forumSharingManager1.getInvitations().size()); // invitee has one invitation message from sharer and one response - List list = new ArrayList<>( - forumSharingManager1.getMessages(contactId0From1)); + Collection list = withinTransactionReturns(db1, + txn -> forumSharingManager1.getMessageHeaders(txn, contactId0From1)); assertEquals(2, list.size()); // check things are alright with the forum message for (PrivateMessageHeader m : list) { @@ -208,9 +204,8 @@ public class ForumSharingIntegrationTest } } // sharer has own invitation message and response - assertEquals(2, - forumSharingManager0.getMessages(contactId1From0) - .size()); + assertEquals(2, withinTransactionReturns(db0, txn -> + forumSharingManager0.getMessageHeaders(txn, contactId1From0)).size()); // forum can be shared again Contact c1 = contactManager0.getContact(contactId1From0); assertTrue(forumSharingManager0.canBeShared(forum0.getId(), c1)); @@ -451,10 +446,7 @@ public class ForumSharingIntegrationTest listenToEvents(true); // invitee adds the same forum - Transaction txn = db1.startTransaction(false); - forumManager1.addForum(txn, forum0); - db1.commitTransaction(txn); - db1.endTransaction(txn); + withinTransaction(db1, txn -> forumManager1.addForum(txn, forum0)); // send invitation forumSharingManager0 @@ -486,10 +478,12 @@ public class ForumSharingIntegrationTest .contains(contact0From1)); // and both have each other's invitations (and no response) - assertEquals(2, forumSharingManager0 - .getMessages(contactId1From0).size()); - assertEquals(2, forumSharingManager1 - .getMessages(contactId0From1).size()); + assertEquals(2, withinTransactionReturns(db0, txn2 -> + forumSharingManager0.getMessageHeaders(txn2, contactId1From0)) + .size()); + assertEquals(2, withinTransactionReturns(db1, txn2 -> + forumSharingManager1.getMessageHeaders(txn2, contactId0From1)) + .size()); // there are no more open invitations assertTrue(forumSharingManager0.getInvitations().isEmpty()); @@ -564,10 +558,7 @@ public class ForumSharingIntegrationTest @Test public void testTwoContactsShareSameForum() throws Exception { // second sharer adds the same forum - Transaction txn = db2.startTransaction(false); - db2.addGroup(txn, forum0.getGroup()); - db2.commitTransaction(txn); - db2.endTransaction(txn); + withinTransaction(db2, txn -> db2.addGroup(txn, forum0.getGroup())); // add listeners listener0 = new SharerListener(); @@ -744,8 +735,9 @@ public class ForumSharingIntegrationTest // get invitation MessageId for later MessageId invitationId = null; - for (PrivateMessageHeader m : forumSharingManager1 - .getMessages(contactId0From1)) { + Collection list = withinTransactionReturns(db1, + txn -> forumSharingManager1.getMessageHeaders(txn, contactId0From1)); + for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { invitationId = m.getId(); } @@ -813,7 +805,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); requestReceived = true; - Forum f = event.getRequest().getObject(); + Forum f = event.getMessageHeader().getObject(); try { if (respond) { Contact c = contactManager0.getContact(contactId1From0); @@ -851,7 +843,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Forum f = event.getRequest().getObject(); + Forum f = event.getMessageHeader().getObject(); try { if (respond) { eventWaiter.assertEquals(1, diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index ab934de94..1d74f72e9 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -2,6 +2,7 @@ package org.briarproject.briar.test; import net.jodah.concurrentunit.Waiter; +import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.contact.Contact; @@ -380,18 +381,38 @@ public abstract class BriarIntegrationTest { + R execute(Transaction txn) throws DbException; + } + + protected R withinTransactionReturns(DatabaseComponent db, + TransactionResultScope scope) throws DbException { + Transaction txn = db.startTransaction(false); + R r; + try { + r = scope.execute(txn); + db.commitTransaction(txn); + } finally { + db.endTransaction(txn); + } + return r; + } + } From 183fe08565ce2104d5b142240dd78dcafccdb659 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 7 Sep 2018 11:37:13 -0300 Subject: [PATCH 07/15] Rename object to nameable --- .../android/blog/BlogControllerImpl.java | 2 +- .../android/contact/ConversationItem.java | 12 +++++------ .../android/forum/ForumControllerImpl.java | 2 +- .../conversation/GroupControllerImpl.java | 2 +- .../briar/api/messaging/PrivateRequest.java | 14 ++++++------- .../briar/api/messaging/PrivateResponse.java | 12 +++++------ .../GroupInvitationManagerImpl.java | 2 +- .../briar/sharing/SharingManagerImpl.java | 2 +- .../IntroductionIntegrationTest.java | 12 +++++------ .../GroupInvitationIntegrationTest.java | 14 ++++++------- .../GroupInvitationManagerImplTest.java | 4 ++-- .../sharing/BlogSharingIntegrationTest.java | 20 +++++++++---------- .../sharing/ForumSharingIntegrationTest.java | 12 +++++------ 13 files changed, 55 insertions(+), 55 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java index 7bd289a62..a17cdf732 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java @@ -108,7 +108,7 @@ class BlogControllerImpl extends BaseControllerImpl BlogInvitationResponseReceivedEvent b = (BlogInvitationResponseReceivedEvent) e; PrivateResponse r = b.getMessageHeader(); - if (r.getObject().getId().equals(groupId) && r.wasAccepted()) { + if (r.getNameable().getId().equals(groupId) && r.wasAccepted()) { LOG.info("Blog invitation accepted"); onBlogInvitationAccepted(b.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 06afcf50b..f3c43032a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -151,7 +151,7 @@ abstract class ConversationItem { return new ConversationRequestItem(ir.getId(), ir.getGroupId(), type, ir.getSessionId(), text, ir.getMessage(), ir.getTimestamp(), ir.isRead(), - ((Shareable) ir.getObject()).getId(), !ir.wasAnswered(), + ((Shareable) ir.getNameable()).getId(), !ir.wasAnswered(), ir.doesExist()); } } @@ -163,14 +163,14 @@ abstract class ConversationItem { if (ir.wasAccepted()) { text = ctx.getString( R.string.introduction_response_accepted_sent, - ir.getObject().getName()); + ir.getNameable().getName()); text += "\n\n" + ctx.getString( R.string.introduction_response_accepted_sent_info, - ir.getObject().getName()); + ir.getNameable().getName()); } else { text = ctx.getString( R.string.introduction_response_declined_sent, - ir.getObject().getName()); + ir.getNameable().getName()); } return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); @@ -179,7 +179,7 @@ abstract class ConversationItem { if (ir.wasAccepted()) { res = R.string.introduction_response_accepted_received; } else { - if (ir.getObject().isIntroducer()) { + if (ir.getNameable().isIntroducer()) { res = R.string.introduction_response_declined_received; } else { res = @@ -187,7 +187,7 @@ abstract class ConversationItem { } } String text = - ctx.getString(res, contactName, ir.getObject().getName()); + ctx.getString(res, contactName, ir.getNameable().getName()); return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), text, null, ir.getTimestamp(), ir.isRead()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index 695d14f03..42362e785 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -85,7 +85,7 @@ class ForumControllerImpl extends ForumInvitationResponseReceivedEvent f = (ForumInvitationResponseReceivedEvent) e; ForumInvitationResponse r = f.getMessageHeader(); - if (r.getObject().getId().equals(getGroupId()) && r.wasAccepted()) { + if (r.getNameable().getId().equals(getGroupId()) && r.wasAccepted()) { LOG.info("Forum invitation was accepted"); onForumInvitationAccepted(f.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index ba5f87c42..5038634be 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -100,7 +100,7 @@ class GroupControllerImpl extends GroupInvitationResponseReceivedEvent g = (GroupInvitationResponseReceivedEvent) e; GroupInvitationResponse r = g.getMessageHeader(); - if (getGroupId().equals(r.getObject().getId()) && r.wasAccepted()) { + if (getGroupId().equals(r.getNameable().getId()) && r.wasAccepted()) { listener.runOnUiThreadUnlessDestroyed( () -> listener.onInvitationAccepted(g.getContactId())); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java index 3fa593242..36deb5ec1 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java @@ -10,21 +10,21 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class PrivateRequest extends PrivateMessageHeader { +public class PrivateRequest extends PrivateMessageHeader { private final SessionId sessionId; - private final O object; + private final N nameable; @Nullable private final String message; private final boolean answered, exists; public PrivateRequest(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, O object, @Nullable String message, + SessionId sessionId, N nameable, @Nullable String message, boolean answered, boolean exists) { super(messageId, groupId, time, local, sent, seen, read); this.sessionId = sessionId; - this.object = object; + this.nameable = nameable; this.message = message; this.answered = answered; this.exists = exists; @@ -34,12 +34,12 @@ public class PrivateRequest extends PrivateMessageHeader { return sessionId; } - public O getObject() { - return object; + public N getNameable() { + return nameable; } public String getName() { - return object.getName(); + return nameable.getName(); } @Nullable diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java index bb7754789..60837e59c 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java @@ -9,19 +9,19 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public abstract class PrivateResponse +public abstract class PrivateResponse extends PrivateMessageHeader { private final SessionId sessionId; - private final O object; + private final N nameable; private final boolean accepted; public PrivateResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, O object, boolean accepted) { + SessionId sessionId, N nameable, boolean accepted) { super(id, groupId, time, local, sent, seen, read); this.sessionId = sessionId; - this.object = object; + this.nameable = nameable; this.accepted = accepted; } @@ -29,8 +29,8 @@ public abstract class PrivateResponse return sessionId; } - public O getObject() { - return object; + public N getNameable() { + return nameable; } public boolean wasAccepted() { diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index a47bdca70..20fc6c72a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -390,7 +390,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl GroupInvitationRequest invite = parseInvitationRequest(txn, contactGroupId, m, meta, status); messages.add(invite); - privateGroups.put(invite.getSessionId(), invite.getObject()); + privateGroups.put(invite.getSessionId(), invite.getNameable()); } for (Entry e : results.entrySet()) { MessageId m = e.getKey(); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index 12fb5f8b8..c0d5a7e25 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -343,7 +343,7 @@ abstract class SharingManagerImpl PrivateRequest invite = parseInvitationRequest(txn, c, m, meta, status); messages.add(invite); - shareables.put(invite.getObject().getId(), invite.getObject()); + shareables.put(invite.getNameable().getId(), invite.getNameable()); } for (Entry e : results.entrySet()) { MessageId m = e.getKey(); diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index dbafc3c3a..fb03924d0 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -161,7 +161,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response1Received); assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getObject().getName()); + listener0.getResponse().getNameable().getName()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); // sync second ACCEPT message @@ -169,7 +169,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response2Received); assertEquals(introducee1.getAuthor().getName(), - listener0.getResponse().getObject().getName()); + listener0.getResponse().getNameable().getName()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); // sync forwarded ACCEPT messages to introducees @@ -267,7 +267,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getObject().getName()); + listener0.getResponse().getNameable().getName()); // sync second response sync2To0(1, true); @@ -284,7 +284,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getObject().getName()); + listener2.getResponse().getNameable().getName()); // note how the introducer does not forward the second response, // because after the first decline the protocol finished @@ -358,7 +358,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(contact2From0.getAuthor().getName(), - listener1.getResponse().getObject().getName()); + listener1.getResponse().getNameable().getName()); assertFalse(contactManager1 .contactExists(author2.getId(), author1.getId())); @@ -486,7 +486,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getObject().getName()); + listener2.getResponse().getNameable().getName()); // assert that introducee2 is in correct state introduceeSession = getIntroduceeSession(c2); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index bf60be53b..70a14b9df 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -99,9 +99,9 @@ public class GroupInvitationIntegrationTest GroupInvitationRequest request = (GroupInvitationRequest) messages.iterator().next(); assertEquals(msg, request.getMessage()); - assertEquals(author0, request.getObject().getCreator()); + assertEquals(author0, request.getNameable().getCreator()); assertEquals(timestamp, request.getTimestamp()); - assertEquals(privateGroup0.getName(), request.getObject().getName()); + assertEquals(privateGroup0.getName(), request.getNameable().getName()); assertFalse(request.isLocal()); assertFalse(request.isRead()); assertFalse(request.doesExist()); @@ -127,7 +127,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getObject()); + assertEquals(privateGroup0, response.getNameable()); assertTrue(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -144,7 +144,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getObject()); + assertEquals(privateGroup0, response.getNameable()); assertFalse(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -177,11 +177,11 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getObject()); + assertEquals(privateGroup0, response.getNameable()); assertTrue(response.wasAccepted()); } else { GroupInvitationRequest request = (GroupInvitationRequest) m; - assertEquals(privateGroup0, request.getObject()); + assertEquals(privateGroup0, request.getNameable()); assertTrue(request.doesExist()); } } @@ -197,7 +197,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getObject()); + assertEquals(privateGroup0, response.getNameable()); assertTrue(response.wasAccepted()); } } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index bd765a2b9..de0c0193a 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -708,11 +708,11 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { if (m.getId().equals(message.getId())) { assertTrue(m instanceof GroupInvitationRequest); assertEquals(time1, m.getTimestamp()); - assertEquals(pg, ((GroupInvitationRequest) m).getObject()); + assertEquals(pg, ((GroupInvitationRequest) m).getNameable()); } else if (m.getId().equals(messageId2)) { assertTrue(m instanceof GroupInvitationResponse); assertEquals(time2, m.getTimestamp()); - assertEquals(pg, ((GroupInvitationResponse) m).getObject()); + assertEquals(pg, ((GroupInvitationResponse) m).getNameable()); } else { throw new AssertionError(); } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index ad2b55538..5cee8b9ad 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -152,15 +152,15 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertEquals(blog2, invitation.getObject()); + assertEquals(blog2, invitation.getNameable()); assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); - assertFalse(invitation.getObject().isRssFeed()); + assertFalse(invitation.getNameable().isRssFeed()); assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(blog2, response.getObject()); + assertEquals(blog2, response.getNameable()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -225,15 +225,15 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertEquals(rssBlog, invitation.getObject()); + assertEquals(rssBlog, invitation.getNameable()); assertFalse(invitation.wasAnswered()); assertEquals(rssBlog.getAuthor().getName(), invitation.getName()); - assertTrue(invitation.getObject().isRssFeed()); + assertTrue(invitation.getNameable().isRssFeed()); assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(rssBlog, response.getObject()); + assertEquals(rssBlog, response.getNameable()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -287,14 +287,14 @@ public class BlogSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; - assertEquals(blog2, invitation.getObject()); + assertEquals(blog2, invitation.getNameable()); assertFalse(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(blog2, response.getObject()); + assertEquals(blog2, response.getNameable()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -559,7 +559,7 @@ public class BlogSharingIntegrationTest BlogInvitationRequestReceivedEvent event = (BlogInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); - Blog b = event.getMessageHeader().getObject(); + Blog b = event.getMessageHeader().getNameable(); try { Contact c = contactManager0.getContact(contactId1From0); blogSharingManager0.respondToInvitation(b, c, true); @@ -595,7 +595,7 @@ public class BlogSharingIntegrationTest (BlogInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Blog b = event.getMessageHeader().getObject(); + Blog b = event.getMessageHeader().getNameable(); try { eventWaiter.assertEquals(1, blogSharingManager1.getInvitations().size()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 2b13a1dc6..f473ec0ac 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -137,12 +137,12 @@ public class ForumSharingIntegrationTest ForumInvitationRequest invitation = (ForumInvitationRequest) m; assertFalse(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); - assertEquals(forum0, invitation.getObject()); + assertEquals(forum0, invitation.getNameable()); assertEquals("Hi!", invitation.getMessage()); assertTrue(invitation.doesExist()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; - assertEquals(forum0, response.getObject()); + assertEquals(forum0, response.getNameable()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -191,14 +191,14 @@ public class ForumSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; - assertEquals(forum0, invitation.getObject()); + assertEquals(forum0, invitation.getNameable()); assertFalse(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); assertFalse(invitation.doesExist()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; - assertEquals(forum0, response.getObject()); + assertEquals(forum0, response.getNameable()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -805,7 +805,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; eventWaiter.assertEquals(contactId1From0, event.getContactId()); requestReceived = true; - Forum f = event.getMessageHeader().getObject(); + Forum f = event.getMessageHeader().getNameable(); try { if (respond) { Contact c = contactManager0.getContact(contactId1From0); @@ -843,7 +843,7 @@ public class ForumSharingIntegrationTest (ForumInvitationRequestReceivedEvent) e; requestReceived = true; if (!answer) return; - Forum f = event.getMessageHeader().getObject(); + Forum f = event.getMessageHeader().getNameable(); try { if (respond) { eventWaiter.assertEquals(1, From b78dfea95fc1c72712a63c37dda6c43853dea020 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 7 Sep 2018 13:17:56 -0300 Subject: [PATCH 08/15] Remove ListenableFutureTask and replace it with LiveData --- .../android/contact/ConversationActivity.java | 120 ++++++++---------- .../components/util/FutureTaskListener.java | 23 ---- .../components/util/ListenableFutureTask.java | 105 --------------- 3 files changed, 55 insertions(+), 193 deletions(-) delete mode 100644 briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java delete mode 100644 briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index e1ccf6a57..a086733b0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -1,8 +1,11 @@ package org.briarproject.briar.android.contact; +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.Observer; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; @@ -72,8 +75,6 @@ import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; -import org.thoughtcrime.securesms.components.util.FutureTaskListener; -import org.thoughtcrime.securesms.components.util.ListenableFutureTask; import java.util.ArrayList; import java.util.Collection; @@ -81,13 +82,10 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; -import javax.annotation.Nullable; import javax.inject.Inject; import de.hdodenhof.circleimageview.CircleImageView; @@ -141,18 +139,6 @@ public class ConversationActivity extends BriarActivity private BriarRecyclerView list; private TextInputView textInputView; - private final ListenableFutureTask contactNameTask = - new ListenableFutureTask<>(new Callable() { - @Override - public String call() throws Exception { - Contact c = contactManager.getContact(contactId); - contactName = c.getAuthor().getName(); - return c.getAuthor().getName(); - } - }); - private final AtomicBoolean contactNameTaskStarted = - new AtomicBoolean(false); - // Fields that are accessed from background threads must be volatile @Inject volatile ContactManager contactManager; @@ -177,11 +163,10 @@ public class ConversationActivity extends BriarActivity private volatile ContactId contactId; @Nullable - private volatile String contactName; - @Nullable private volatile AuthorId contactAuthorId; @Nullable private volatile GroupId messagingGroupId; + private MutableLiveData contactName = new MutableLiveData<>(); @SuppressWarnings("ConstantConditions") @Override @@ -292,7 +277,7 @@ public class ConversationActivity extends BriarActivity long start = now(); if (contactName == null || contactAuthorId == null) { Contact contact = contactManager.getContact(contactId); - contactName = contact.getAuthor().getName(); + contactName.postValue(contact.getAuthor().getName()); contactAuthorId = contact.getAuthor().getId(); } logDuration(LOG, "Loading contact", start); @@ -306,12 +291,13 @@ public class ConversationActivity extends BriarActivity }); } + // contactAuthorId and contactName are expected to be set private void displayContactDetails() { runOnUiThreadUnlessDestroyed(() -> { //noinspection ConstantConditions toolbarAvatar.setImageDrawable( new IdenticonDrawable(contactAuthorId.getBytes())); - toolbarTitle.setText(contactName); + toolbarTitle.setText(contactName.getValue()); }); } @@ -381,13 +367,13 @@ public class ConversationActivity extends BriarActivity ConversationItem item; if (h instanceof IntroductionResponse) { IntroductionResponse i = (IntroductionResponse) h; - item = ConversationItem.from(this, contactName, i); + item = ConversationItem.from(this, contactName.getValue(), i); } else if (h instanceof PrivateRequest) { PrivateRequest r = (PrivateRequest) h; - item = ConversationItem.from(this, contactName, r); + item = ConversationItem.from(this, contactName.getValue(), r); } else if (h instanceof PrivateResponse) { PrivateResponse r = (PrivateResponse) h; - item = ConversationItem.from(this, contactName, r); + item = ConversationItem.from(this, contactName.getValue(), r); } else { item = ConversationItem.from(h); String body = bodyCache.get(h.getId()); @@ -480,43 +466,42 @@ public class ConversationActivity extends BriarActivity } private void onNewPrivateMessage(PrivateMessageHeader h) { - if (h instanceof PrivateRequest || h instanceof PrivateResponse) { - getContactNameTask().addListener(new FutureTaskListener() { - @Override - public void onSuccess(String contactName) { - runOnUiThreadUnlessDestroyed( - () -> handlePrivateRequestAndResponse(h, - contactName)); - } - - @Override - public void onFailure(Throwable exception) { - runOnUiThreadUnlessDestroyed( - () -> handleDbException((DbException) exception)); - } - }); - } else { - addConversationItem(ConversationItem.from(h)); - loadMessageBody(h.getId()); - } - } - - @UiThread - private void handlePrivateRequestAndResponse(PrivateMessageHeader h, - String contactName) { - ConversationItem item; - if (h instanceof PrivateRequest) { - PrivateRequest m = (PrivateRequest) h; - item = ConversationItem - .from(ConversationActivity.this, contactName, m); - } else if (h instanceof PrivateResponse) { - PrivateResponse m = (PrivateResponse) h; - item = ConversationItem - .from(ConversationActivity.this, contactName, m); - } else { - throw new AssertionError("Unknown PrivateMessageHeader"); - } - addConversationItem(item); + runOnUiThreadUnlessDestroyed(() -> { + if (h instanceof PrivateRequest) { + contactName.observe(this, new Observer() { + @Override + public void onChanged(@Nullable String name) { + if (name == null) loadContactName(); + else { + PrivateRequest m = (PrivateRequest) h; + ConversationItem item = ConversationItem.from( + ConversationActivity.this, name, m); + addConversationItem(item); + contactName.removeObserver(this); + } + } + }); + if (contactName.getValue() == null) loadContactName(); + } else if (h instanceof PrivateResponse) { + contactName.observe(this, new Observer() { + @Override + public void onChanged(@Nullable String name) { + if (name == null) loadContactName(); + else { + PrivateResponse m = (PrivateResponse) h; + ConversationItem item = ConversationItem.from( + ConversationActivity.this, name, m); + addConversationItem(item); + contactName.removeObserver(this); + } + } + }); + if (contactName.getValue() == null) loadContactName(); + } else { + addConversationItem(ConversationItem.from(h)); + loadMessageBody(h.getId()); + } + }); } private void markMessages(Collection messageIds, boolean sent, @@ -804,10 +789,15 @@ public class ConversationActivity extends BriarActivity groupInvitationManager.respondToInvitation(contactId, id, accept); } - private ListenableFutureTask getContactNameTask() { - if (!contactNameTaskStarted.getAndSet(true)) - runOnDbThread(contactNameTask); - return contactNameTask; + private void loadContactName() { + runOnDbThread(() -> { + try { + Contact c = contactManager.getContact(contactId); + contactName.postValue(c.getAuthor().getName()); + } catch (DbException e) { + handleDbException(e); + } + }); } } diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java deleted file mode 100644 index 80da2eccf..000000000 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (C) 2014 Open Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.thoughtcrime.securesms.components.util; - -public interface FutureTaskListener { - void onSuccess(V result); - - void onFailure(Throwable error); -} diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java deleted file mode 100644 index 3d8303f07..000000000 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2014 Open Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.thoughtcrime.securesms.components.util; - -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; - -import javax.annotation.Nullable; - -public class ListenableFutureTask extends FutureTask { - - private final List> listeners = new LinkedList<>(); - - @Nullable - private final Object identifier; - - public ListenableFutureTask(Callable callable) { - this(callable, null); - } - - private ListenableFutureTask(Callable callable, - @Nullable Object identifier) { - super(callable); - this.identifier = identifier; - } - - public ListenableFutureTask(V result) { - this(result, null); - } - - private ListenableFutureTask(V result, @Nullable Object identifier) { - super(() -> result); - this.identifier = identifier; - this.run(); - } - - public synchronized void addListener(FutureTaskListener listener) { - if (this.isDone()) { - callback(listener); - } else { - this.listeners.add(listener); - } - } - - public synchronized void removeListener(FutureTaskListener listener) { - this.listeners.remove(listener); - } - - @Override - protected synchronized void done() { - callback(); - } - - private void callback() { - for (FutureTaskListener listener : listeners) { - callback(listener); - } - } - - private void callback(FutureTaskListener listener) { - if (listener != null) { - try { - listener.onSuccess(get()); - } catch (InterruptedException e) { - throw new AssertionError(e); - } catch (ExecutionException e) { - listener.onFailure(e); - } - } - } - - @Override - public boolean equals(Object other) { - if (other != null && other instanceof ListenableFutureTask && - this.identifier != null) { - return identifier.equals(other); - } else { - return super.equals(other); - } - } - - @Override - public int hashCode() { - if (identifier != null) return identifier.hashCode(); - else return super.hashCode(); - } - -} From fcf7cf72ea76dccff276015986a52c1f31a0b5a5 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 7 Sep 2018 16:43:45 +0100 Subject: [PATCH 09/15] Refactor doesExist() method. --- .../android/contact/ConversationItem.java | 8 ++++-- .../briar/api/blog/BlogInvitationRequest.java | 8 +++--- .../api/forum/ForumInvitationRequest.java | 8 +++--- .../api/introduction/IntroductionRequest.java | 10 +++++-- .../briar/api/messaging/PrivateRequest.java | 9 ++----- .../invitation/GroupInvitationRequest.java | 4 +-- .../briar/api/sharing/InvitationRequest.java | 27 +++++++++++++++++++ .../IntroductionIntegrationTest.java | 4 +-- .../GroupInvitationIntegrationTest.java | 4 +-- .../sharing/ForumSharingIntegrationTest.java | 4 +-- 10 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index f3c43032a..f650ac029 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -114,13 +114,14 @@ abstract class ConversationItem { } else { String text; RequestType type; + boolean canBeOpened; if (ir instanceof IntroductionRequest) { type = INTRODUCTION; if (ir.wasAnswered()) { text = ctx.getString( R.string.introduction_request_answered_received, contactName, ir.getName()); - } else if (ir.doesExist()) { + } else if (((IntroductionRequest) ir).isContact()) { text = ctx.getString( R.string.introduction_request_exists_received, contactName, ir.getName()); @@ -136,15 +137,18 @@ abstract class ConversationItem { text = ctx.getString(R.string.forum_invitation_received, contactName, ir.getName()); type = FORUM; + canBeOpened = ((ForumInvitationRequest) ir).canBeOpened(); } else if (ir instanceof BlogInvitationRequest) { text = ctx.getString(R.string.blogs_sharing_invitation_received, contactName, ir.getName()); type = BLOG; + canBeOpened = ((BlogInvitationRequest) ir).canBeOpened(); } else if (ir instanceof GroupInvitationRequest) { text = ctx.getString( R.string.groups_invitations_invitation_received, contactName, ir.getName()); type = GROUP; + canBeOpened = ((GroupInvitationRequest) ir).canBeOpened(); } else { throw new IllegalArgumentException("Unknown PrivateRequest"); } @@ -152,7 +156,7 @@ abstract class ConversationItem { ir.getGroupId(), type, ir.getSessionId(), text, ir.getMessage(), ir.getTimestamp(), ir.isRead(), ((Shareable) ir.getNameable()).getId(), !ir.wasAnswered(), - ir.doesExist()); + canBeOpened); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index 439a5b7c7..9c700727f 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -4,17 +4,17 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; @NotNullByDefault -public class BlogInvitationRequest extends PrivateRequest { +public class BlogInvitationRequest extends InvitationRequest { public BlogInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Blog blog, - @Nullable String message, boolean available, boolean canBeOpened) { + SessionId sessionId, Blog blog, @Nullable String message, + boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, blog, message, available, canBeOpened); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index 7721fd8b9..8d1028a9d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -4,19 +4,19 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class ForumInvitationRequest extends PrivateRequest { +public class ForumInvitationRequest extends InvitationRequest { public ForumInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Forum forum, - @Nullable String message, boolean available, boolean canBeOpened) { + SessionId sessionId, Forum forum, @Nullable String message, + boolean available, boolean canBeOpened) { super(id, groupId, time, local, sent, seen, read, sessionId, forum, message, available, canBeOpened); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index 6d67dec89..a0ef758ab 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -13,12 +13,18 @@ import javax.annotation.concurrent.Immutable; @NotNullByDefault public class IntroductionRequest extends PrivateRequest { + private final boolean contact; + public IntroductionRequest(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, SessionId sessionId, Introduction introduction, - @Nullable String message, boolean answered, boolean exists) { + @Nullable String message, boolean answered, boolean contact) { super(messageId, groupId, time, local, sent, seen, read, sessionId, - introduction, message, answered, exists); + introduction, message, answered); + this.contact = contact; } + public boolean isContact() { + return contact; + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java index 36deb5ec1..e8a98d91f 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java @@ -16,18 +16,17 @@ public class PrivateRequest extends PrivateMessageHeader { private final N nameable; @Nullable private final String message; - private final boolean answered, exists; + private final boolean answered; public PrivateRequest(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, SessionId sessionId, N nameable, @Nullable String message, - boolean answered, boolean exists) { + boolean answered) { super(messageId, groupId, time, local, sent, seen, read); this.sessionId = sessionId; this.nameable = nameable; this.message = message; this.answered = answered; - this.exists = exists; } public SessionId getSessionId() { @@ -50,8 +49,4 @@ public class PrivateRequest extends PrivateMessageHeader { public boolean wasAnswered() { return answered; } - - public boolean doesExist() { - return exists; - } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index f7831f268..8067def68 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -4,15 +4,15 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.privategroup.PrivateGroup; +import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class GroupInvitationRequest extends PrivateRequest { +public class GroupInvitationRequest extends InvitationRequest { public GroupInvitationRequest(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java new file mode 100644 index 000000000..e8ea62907 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java @@ -0,0 +1,27 @@ +package org.briarproject.briar.api.sharing; + +import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateRequest; + +import javax.annotation.Nullable; + +public abstract class InvitationRequest extends + PrivateRequest { + + private final boolean canBeOpened; + + public InvitationRequest(MessageId messageId, GroupId groupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, S object, @Nullable String message, + boolean answered, boolean canBeOpened) { + super(messageId, groupId, time, local, sent, seen, read, sessionId, + object, message, answered); + this.canBeOpened = canBeOpened; + } + + public boolean canBeOpened() { + return canBeOpened; + } +} diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index fb03924d0..c2090e10d 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -613,10 +613,10 @@ public class IntroductionIntegrationTest // assert that introducees get notified about the existing contact IntroductionRequest ir1 = getIntroductionRequest(db1, introductionManager1, contactId0From1); - assertTrue(ir1.doesExist()); + assertTrue(ir1.isContact()); IntroductionRequest ir2 = getIntroductionRequest(db2, introductionManager2, contactId0From2); - assertTrue(ir2.doesExist()); + assertTrue(ir2.isContact()); // sync ACCEPT messages back to introducer sync1To0(1, true); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 70a14b9df..8ee74d236 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -104,7 +104,7 @@ public class GroupInvitationIntegrationTest assertEquals(privateGroup0.getName(), request.getNameable().getName()); assertFalse(request.isLocal()); assertFalse(request.isRead()); - assertFalse(request.doesExist()); + assertFalse(request.canBeOpened()); } @Test @@ -182,7 +182,7 @@ public class GroupInvitationIntegrationTest } else { GroupInvitationRequest request = (GroupInvitationRequest) m; assertEquals(privateGroup0, request.getNameable()); - assertTrue(request.doesExist()); + assertTrue(request.canBeOpened()); } } assertTrue(foundResponse); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index f473ec0ac..40fed0491 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -139,7 +139,7 @@ public class ForumSharingIntegrationTest assertEquals(forum0.getName(), invitation.getName()); assertEquals(forum0, invitation.getNameable()); assertEquals("Hi!", invitation.getMessage()); - assertTrue(invitation.doesExist()); + assertTrue(invitation.canBeOpened()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; assertEquals(forum0, response.getNameable()); @@ -195,7 +195,7 @@ public class ForumSharingIntegrationTest assertFalse(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); - assertFalse(invitation.doesExist()); + assertFalse(invitation.canBeOpened()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; assertEquals(forum0, response.getNameable()); From d430b4fd2deba1609dd6536b0038f6cbe59b9938 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 7 Sep 2018 14:13:38 -0300 Subject: [PATCH 10/15] Move introduction role into IntroductionResponse --- .../briarproject/bramble/api}/Nameable.java | 2 +- .../bramble/api/identity/Author.java | 3 +- .../android/contact/ConversationItem.java | 2 +- .../briar/api/introduction/Introduction.java | 32 ------------------- .../api/introduction/IntroductionRequest.java | 9 +++--- .../introduction/IntroductionResponse.java | 16 ++++++++-- .../briar/api/messaging/PrivateRequest.java | 1 + .../briar/api/messaging/PrivateResponse.java | 1 + .../briar/api/sharing/Shareable.java | 2 +- .../introduction/AbstractProtocolEngine.java | 6 ++-- .../IntroduceeProtocolEngine.java | 5 +-- .../introduction/IntroductionManagerImpl.java | 7 ++-- .../IntroductionIntegrationTest.java | 10 +++--- 13 files changed, 34 insertions(+), 62 deletions(-) rename {briar-api/src/main/java/org/briarproject/briar/api/messaging => bramble-api/src/main/java/org/briarproject/bramble/api}/Nameable.java (74%) delete mode 100644 briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java b/bramble-api/src/main/java/org/briarproject/bramble/api/Nameable.java similarity index 74% rename from briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java rename to bramble-api/src/main/java/org/briarproject/bramble/api/Nameable.java index e61c676f5..8e6ad4981 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/Nameable.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/Nameable.java @@ -1,4 +1,4 @@ -package org.briarproject.briar.api.messaging; +package org.briarproject.bramble.api; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/identity/Author.java b/bramble-api/src/main/java/org/briarproject/bramble/api/identity/Author.java index 8a3682e6c..0df402c28 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/identity/Author.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/identity/Author.java @@ -1,5 +1,6 @@ package org.briarproject.bramble.api.identity; +import org.briarproject.bramble.api.Nameable; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.util.StringUtils; @@ -13,7 +14,7 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_K */ @Immutable @NotNullByDefault -public class Author { +public class Author implements Nameable { public enum Status { NONE, ANONYMOUS, UNKNOWN, UNVERIFIED, VERIFIED, OURSELVES diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index f650ac029..69ad16bd2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -183,7 +183,7 @@ abstract class ConversationItem { if (ir.wasAccepted()) { res = R.string.introduction_response_accepted_received; } else { - if (ir.getNameable().isIntroducer()) { + if (ir.isIntroducer()) { res = R.string.introduction_response_declined_received; } else { res = diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java deleted file mode 100644 index 0384d1971..000000000 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/Introduction.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.briarproject.briar.api.introduction; - -import org.briarproject.bramble.api.identity.Author; -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.api.messaging.Nameable; - -import javax.annotation.concurrent.Immutable; - -import static org.briarproject.briar.api.introduction.Role.INTRODUCER; - -@Immutable -@NotNullByDefault -public class Introduction implements Nameable { - - private final Author introducedAuthor; - private final Role ourRole; - - public Introduction(Author introducedAuthor, Role ourRole) { - this.introducedAuthor = introducedAuthor; - this.ourRole = ourRole; - } - - @Override - public String getName() { - return introducedAuthor.getName(); - } - - public boolean isIntroducer() { - return ourRole == INTRODUCER; - } - -} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index a0ef758ab..91d52c255 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.introduction; +import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -11,16 +12,16 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class IntroductionRequest extends PrivateRequest { +public class IntroductionRequest extends PrivateRequest { private final boolean contact; public IntroductionRequest(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Introduction introduction, - @Nullable String message, boolean answered, boolean contact) { + SessionId sessionId, Author author, @Nullable String message, + boolean answered, boolean contact) { super(messageId, groupId, time, local, sent, seen, read, sessionId, - introduction, message, answered); + author, message, answered); this.contact = contact; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index f52fbe38b..4a2c1eaa8 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.introduction; +import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -8,15 +9,24 @@ import org.briarproject.briar.api.messaging.PrivateResponse; import javax.annotation.concurrent.Immutable; +import static org.briarproject.briar.api.introduction.Role.INTRODUCER; + @Immutable @NotNullByDefault -public class IntroductionResponse extends PrivateResponse { +public class IntroductionResponse extends PrivateResponse { + + private final Role ourRole; public IntroductionResponse(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Introduction introduction, boolean accepted) { + SessionId sessionId, Author author, boolean accepted, Role role) { super(messageId, groupId, time, local, sent, seen, read, sessionId, - introduction, accepted); + author, accepted); + this.ourRole = role; + } + + public boolean isIntroducer() { + return ourRole == INTRODUCER; } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java index e8a98d91f..b980cea30 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.messaging; +import org.briarproject.bramble.api.Nameable; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java index 60837e59c..6de25a43e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.messaging; +import org.briarproject.bramble.api.Nameable; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java index a8287df20..4d43715f5 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/Shareable.java @@ -2,7 +2,7 @@ package org.briarproject.briar.api.sharing; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.briar.api.messaging.Nameable; +import org.briarproject.bramble.api.Nameable; @NotNullByDefault public interface Shareable extends Nameable { diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index bb944f6be..cb652122c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -20,7 +20,6 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; @@ -148,14 +147,13 @@ abstract class AbstractProtocolEngine void broadcastIntroductionResponseReceivedEvent(Transaction txn, Session s, AuthorId sender, Author otherAuthor, AbstractIntroductionMessage m) throws DbException { - Introduction introduction = new Introduction(otherAuthor, s.getRole()); AuthorId localAuthorId = identityManager.getLocalAuthor(txn).getId(); Contact c = contactManager.getContact(txn, sender, localAuthorId); IntroductionResponse response = new IntroductionResponse(m.getMessageId(), m.getGroupId(), m.getTimestamp(), false, false, false, false, - s.getSessionId(), introduction, - m instanceof AcceptMessage); + s.getSessionId(), otherAuthor, + m instanceof AcceptMessage, s.getRole()); IntroductionResponseReceivedEvent e = new IntroductionResponseReceivedEvent(response, c.getId()); txn.attach(e); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 4f9997de9..a0a871ac8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -26,7 +26,6 @@ import org.briarproject.bramble.api.transport.KeySetId; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; @@ -255,11 +254,9 @@ class IntroduceeProtocolEngine localAuthor.getId()); boolean contactExists = contactManager .contactExists(txn, m.getAuthor().getId(), localAuthor.getId()); - Introduction introduction = - new Introduction(m.getAuthor(), s.getRole()); IntroductionRequest request = new IntroductionRequest(m.getMessageId(), m.getGroupId(), m.getTimestamp(), false, false, false, false, - s.getSessionId(), introduction, m.getMessage(), false, + s.getSessionId(), m.getAuthor(), m.getMessage(), false, contactExists); IntroductionRequestReceivedEvent e = new IntroductionRequestReceivedEvent(request, c.getId()); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 5b3c0d6d2..7b27091fb 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -29,7 +29,6 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionManager; import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionResponse; @@ -467,10 +466,9 @@ class IntroductionManagerImpl extends ConversationClientImpl boolean contactExists = contactManager .contactExists(txn, rm.getAuthor().getId(), localAuthor.getId()); - Introduction introduction = new Introduction(author, role); return new IntroductionRequest(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), - sessionId, introduction, message, !meta.isAvailableToAnswer(), + sessionId, author, message, !meta.isAvailableToAnswer(), contactExists); } @@ -495,10 +493,9 @@ class IntroductionManagerImpl extends ConversationClientImpl sessionId = session.getSessionId(); author = session.getRemote().author; } else throw new AssertionError(); - Introduction introduction = new Introduction(author, role); return new IntroductionResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), - sessionId, introduction, accept); + sessionId, author, accept, role); } private void removeSessionWithIntroducer(Transaction txn, diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index c2090e10d..ebb377e25 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -24,16 +24,14 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.introduction.Introduction; import org.briarproject.briar.api.introduction.IntroductionManager; import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent; import org.briarproject.briar.api.messaging.PrivateMessageHeader; -import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.test.BriarIntegrationTest; import org.junit.Before; import org.junit.Test; @@ -1148,7 +1146,7 @@ public class IntroductionIntegrationTest protected volatile Event latestEvent; @SuppressWarnings("WeakerAccess") - PrivateResponse getResponse() { + IntroductionResponse getResponse() { assertTrue( latestEvent instanceof IntroductionResponseReceivedEvent); return ((IntroductionResponseReceivedEvent) latestEvent) @@ -1180,7 +1178,7 @@ public class IntroductionIntegrationTest IntroductionRequestReceivedEvent introEvent = ((IntroductionRequestReceivedEvent) e); requestReceived = true; - PrivateRequest ir = introEvent.getMessageHeader(); + IntroductionRequest ir = introEvent.getMessageHeader(); ContactId contactId = introEvent.getContactId(); sessionId = ir.getSessionId(); long time = clock.currentTimeMillis(); @@ -1217,7 +1215,7 @@ public class IntroductionIntegrationTest } } - private PrivateRequest getRequest() { + private IntroductionRequest getRequest() { assertTrue( latestEvent instanceof IntroductionRequestReceivedEvent); return ((IntroductionRequestReceivedEvent) latestEvent) From 86f650503be0ca62b88d5fa39d16c424ea17303a Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 7 Sep 2018 16:03:20 -0300 Subject: [PATCH 11/15] Re-introduce InvitationResponse This was done, so private responses don't need to include a Nameable already. Retreiving a nameable is tricky and requires a data migration, so we just don't do it now. --- .../android/blog/BlogControllerImpl.java | 6 +- .../android/contact/ConversationItem.java | 8 +-- .../android/forum/ForumControllerImpl.java | 2 +- .../conversation/GroupControllerImpl.java | 2 +- .../api/blog/BlogInvitationResponse.java | 10 ++-- .../api/forum/ForumInvitationResponse.java | 10 ++-- .../introduction/IntroductionResponse.java | 12 +++- .../briar/api/messaging/PrivateResponse.java | 12 +--- .../invitation/GroupInvitationResponse.java | 9 ++- .../briar/api/sharing/InvitationResponse.java | 23 ++++++++ .../introduction/AbstractProtocolEngine.java | 4 +- .../introduction/IntroductionManagerImpl.java | 2 +- .../invitation/CreatorProtocolEngine.java | 14 ++--- .../GroupInvitationManagerImpl.java | 36 ++++-------- .../sharing/BlogInvitationFactoryImpl.java | 6 +- .../briar/sharing/BlogProtocolEngineImpl.java | 8 +-- .../sharing/ForumInvitationFactoryImpl.java | 6 +- .../sharing/ForumProtocolEngineImpl.java | 11 ++-- .../briar/sharing/InvitationFactory.java | 10 ++-- .../briar/sharing/ProtocolEngineImpl.java | 58 +++++++------------ .../briar/sharing/SharingManagerImpl.java | 36 ++++-------- .../IntroductionIntegrationTest.java | 12 ++-- .../invitation/CreatorProtocolEngineTest.java | 4 -- .../GroupInvitationIntegrationTest.java | 41 ++----------- .../GroupInvitationManagerImplTest.java | 7 +-- .../sharing/BlogSharingIntegrationTest.java | 6 +- .../sharing/ForumSharingIntegrationTest.java | 4 +- 27 files changed, 144 insertions(+), 215 deletions(-) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java index a17cdf732..1b7058503 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java @@ -21,11 +21,11 @@ import org.briarproject.briar.android.controller.ActivityLifecycleController; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.blog.Blog; +import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.BlogSharingManager; import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent; import org.briarproject.briar.api.blog.event.BlogPostAddedEvent; -import org.briarproject.briar.api.messaging.PrivateResponse; import org.briarproject.briar.api.sharing.event.ContactLeftShareableEvent; import java.util.ArrayList; @@ -107,8 +107,8 @@ class BlogControllerImpl extends BaseControllerImpl } else if (e instanceof BlogInvitationResponseReceivedEvent) { BlogInvitationResponseReceivedEvent b = (BlogInvitationResponseReceivedEvent) e; - PrivateResponse r = b.getMessageHeader(); - if (r.getNameable().getId().equals(groupId) && r.wasAccepted()) { + BlogInvitationResponse r = b.getMessageHeader(); + if (r.getShareableId().equals(groupId) && r.wasAccepted()) { LOG.info("Blog invitation accepted"); onBlogInvitationAccepted(b.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 69ad16bd2..ab17c158d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -167,14 +167,14 @@ abstract class ConversationItem { if (ir.wasAccepted()) { text = ctx.getString( R.string.introduction_response_accepted_sent, - ir.getNameable().getName()); + ir.getIntroducedAuthor().getName()); text += "\n\n" + ctx.getString( R.string.introduction_response_accepted_sent_info, - ir.getNameable().getName()); + ir.getIntroducedAuthor().getName()); } else { text = ctx.getString( R.string.introduction_response_declined_sent, - ir.getNameable().getName()); + ir.getIntroducedAuthor().getName()); } return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); @@ -191,7 +191,7 @@ abstract class ConversationItem { } } String text = - ctx.getString(res, contactName, ir.getNameable().getName()); + ctx.getString(res, contactName, ir.getIntroducedAuthor().getName()); return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), text, null, ir.getTimestamp(), ir.isRead()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index 42362e785..9abe8a137 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -85,7 +85,7 @@ class ForumControllerImpl extends ForumInvitationResponseReceivedEvent f = (ForumInvitationResponseReceivedEvent) e; ForumInvitationResponse r = f.getMessageHeader(); - if (r.getNameable().getId().equals(getGroupId()) && r.wasAccepted()) { + if (r.getShareableId().equals(getGroupId()) && r.wasAccepted()) { LOG.info("Forum invitation was accepted"); onForumInvitationAccepted(f.getContactId()); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index 5038634be..35a318265 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -100,7 +100,7 @@ class GroupControllerImpl extends GroupInvitationResponseReceivedEvent g = (GroupInvitationResponseReceivedEvent) e; GroupInvitationResponse r = g.getMessageHeader(); - if (getGroupId().equals(r.getNameable().getId()) && r.wasAccepted()) { + if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) { listener.runOnUiThreadUnlessDestroyed( () -> listener.onInvitationAccepted(g.getContactId())); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index b663e0a37..cf3ac3ac8 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -4,16 +4,16 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.sharing.InvitationResponse; @NotNullByDefault -public class BlogInvitationResponse extends PrivateResponse { +public class BlogInvitationResponse extends InvitationResponse { public BlogInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Blog blog, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId, blog, - accept); + SessionId sessionId, boolean accept, GroupId shareableId) { + super(id, groupId, time, local, sent, seen, read, sessionId, + accept, shareableId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index 302f4317a..d0536ca91 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -4,19 +4,19 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.sharing.InvitationResponse; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class ForumInvitationResponse extends PrivateResponse { +public class ForumInvitationResponse extends InvitationResponse { public ForumInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Forum forum, boolean accept) { - super(id, groupId, time, local, sent, seen, read, sessionId, forum, - accept); + SessionId sessionId, boolean accept, GroupId shareableId) { + super(id, groupId, time, local, sent, seen, read, sessionId, + accept, shareableId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 4a2c1eaa8..6ff9d8830 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -13,18 +13,24 @@ import static org.briarproject.briar.api.introduction.Role.INTRODUCER; @Immutable @NotNullByDefault -public class IntroductionResponse extends PrivateResponse { +public class IntroductionResponse extends PrivateResponse { + private final Author introducedAuthor; private final Role ourRole; public IntroductionResponse(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, Author author, boolean accepted, Role role) { + SessionId sessionId, boolean accepted, Author author, Role role) { super(messageId, groupId, time, local, sent, seen, read, sessionId, - author, accepted); + accepted); + this.introducedAuthor = author; this.ourRole = role; } + public Author getIntroducedAuthor() { + return introducedAuthor; + } + public boolean isIntroducer() { return ourRole == INTRODUCER; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java index 6de25a43e..01c74faed 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateResponse.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.messaging; -import org.briarproject.bramble.api.Nameable; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; @@ -10,19 +9,16 @@ import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public abstract class PrivateResponse - extends PrivateMessageHeader { +public abstract class PrivateResponse extends PrivateMessageHeader { private final SessionId sessionId; - private final N nameable; private final boolean accepted; public PrivateResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, N nameable, boolean accepted) { + SessionId sessionId, boolean accepted) { super(id, groupId, time, local, sent, seen, read); this.sessionId = sessionId; - this.nameable = nameable; this.accepted = accepted; } @@ -30,10 +26,6 @@ public abstract class PrivateResponse return sessionId; } - public N getNameable() { - return nameable; - } - public boolean wasAccepted() { return accepted; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index fb8dbf608..4b260eb62 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -4,20 +4,19 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.privategroup.PrivateGroup; +import org.briarproject.briar.api.sharing.InvitationResponse; import javax.annotation.concurrent.Immutable; @Immutable @NotNullByDefault -public class GroupInvitationResponse extends PrivateResponse { +public class GroupInvitationResponse extends InvitationResponse { public GroupInvitationResponse(MessageId id, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, - SessionId sessionId, PrivateGroup privateGroup, boolean accept) { + SessionId sessionId, boolean accept, GroupId shareableId) { super(id, groupId, time, local, sent, seen, read, sessionId, - privateGroup, accept); + accept, shareableId); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java new file mode 100644 index 000000000..826c2b81f --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java @@ -0,0 +1,23 @@ +package org.briarproject.briar.api.sharing; + +import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateResponse; + +public abstract class InvitationResponse extends PrivateResponse { + + private final GroupId shareableId; + + public InvitationResponse(MessageId id, GroupId groupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + SessionId sessionId, boolean accepted, GroupId shareableId) { + super(id, groupId, time, local, sent, seen, read, sessionId, accepted); + this.shareableId = shareableId; + } + + public GroupId getShareableId() { + return shareableId; + } + +} diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index cb652122c..68d8d61c4 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -152,8 +152,8 @@ abstract class AbstractProtocolEngine IntroductionResponse response = new IntroductionResponse(m.getMessageId(), m.getGroupId(), m.getTimestamp(), false, false, false, false, - s.getSessionId(), otherAuthor, - m instanceof AcceptMessage, s.getRole()); + s.getSessionId(), m instanceof AcceptMessage, + otherAuthor, s.getRole()); IntroductionResponseReceivedEvent e = new IntroductionResponseReceivedEvent(response, c.getId()); txn.attach(e); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 7b27091fb..50c6fefcb 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -495,7 +495,7 @@ class IntroductionManagerImpl extends ConversationClientImpl } else throw new AssertionError(); return new IntroductionResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(), - sessionId, author, accept, role); + sessionId, accept, author, role); } private void removeSessionWithIntroducer(Transaction txn, diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index b73bf186a..579282ca0 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -15,7 +15,6 @@ import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.privategroup.GroupMessageFactory; -import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.privategroup.PrivateGroupFactory; import org.briarproject.briar.api.privategroup.PrivateGroupManager; import org.briarproject.briar.api.privategroup.event.GroupInvitationResponseReceivedEvent; @@ -193,10 +192,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { setPrivateGroupVisibility(txn, s, SHARED); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - PrivateGroup privateGroup = - privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent( - createInvitationResponse(m, privateGroup, true), contactId)); + createInvitationResponse(m, true), contactId)); // Move to the JOINED state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), sent.getId(), m.getId(), sent.getTimestamp(), @@ -217,10 +214,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { m.getTimestamp(), false); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - PrivateGroup privateGroup = - privateGroupManager.getPrivateGroup(txn, m.getPrivateGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent( - createInvitationResponse(m, privateGroup, false), contactId)); + createInvitationResponse(m, false), contactId)); // Move to the START state return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -258,11 +253,10 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { } private GroupInvitationResponse createInvitationResponse( - GroupInvitationMessage m, PrivateGroup privateGroup, - boolean accept) { + GroupInvitationMessage m, boolean accept) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, sessionId, - privateGroup, accept); + accept, m.getPrivateGroupId()); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 20fc6c72a..1082ec2cf 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -378,36 +378,21 @@ class GroupInvitationManagerImpl extends ConversationClientImpl .getMessageMetadataAsDictionary(txn, contactGroupId, query); List messages = new ArrayList<>(results.size()); - // get invite message first and remember private groups - Map privateGroups = new HashMap<>(); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = messageParser.parseMetadata(e.getValue()); - MessageType type = meta.getMessageType(); - if (type != INVITE) continue; MessageStatus status = db.getMessageStatus(txn, c, m); - GroupInvitationRequest invite = parseInvitationRequest(txn, - contactGroupId, m, meta, status); - messages.add(invite); - privateGroups.put(invite.getSessionId(), invite.getNameable()); - } - for (Entry e : results.entrySet()) { - MessageId m = e.getKey(); - MessageMetadata meta = - messageParser.parseMetadata(e.getValue()); MessageType type = meta.getMessageType(); - if (type == INVITE) continue; - MessageStatus status = db.getMessageStatus(txn, c, m); - SessionId sessionId = getSessionId(meta.getPrivateGroupId()); - PrivateGroup privateGroup = privateGroups.get(sessionId); - if (privateGroup == null) throw new AssertionError(); - if (type == JOIN) { + if (type == INVITE) { + messages.add(parseInvitationRequest(txn, contactGroupId, m, + meta, status)); + } else if (type == JOIN) { messages.add(parseInvitationResponse(contactGroupId, m, - meta, status, sessionId, privateGroup, true)); + meta, status, true)); } else if (type == LEAVE) { messages.add(parseInvitationResponse(contactGroupId, m, - meta, status, sessionId, privateGroup, false)); + meta, status, false)); } } return messages; @@ -436,12 +421,13 @@ class GroupInvitationManagerImpl extends ConversationClientImpl private GroupInvitationResponse parseInvitationResponse( GroupId contactGroupId, MessageId m, MessageMetadata meta, - MessageStatus status, SessionId sessionId, - PrivateGroup privateGroup, boolean accept) { + MessageStatus status, boolean accept) { + SessionId sessionId = getSessionId(meta.getPrivateGroupId()); return new GroupInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), sessionId, privateGroup, - accept); + status.isSeen(), meta.isRead(), sessionId, accept, + meta.getPrivateGroupId() + ); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java index 693f0947c..780f2b7a1 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java @@ -30,10 +30,10 @@ public class BlogInvitationFactoryImpl @Override public BlogInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, Blog blog, boolean accept) { - SessionId sessionId = new SessionId(blog.getId().getBytes()); + boolean seen, boolean read, boolean accept, GroupId shareableId) { + SessionId sessionId = new SessionId(shareableId.getBytes()); return new BlogInvitationResponse(id, contactGroupId, time, local, sent, - seen, read, sessionId, blog, accept); + seen, read, sessionId, accept, shareableId); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index aae6e5db2..26c093a49 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -58,21 +58,21 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId, Blog shareable) { + ContactId contactId) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - shareable, true); + true, m.getShareableId()); return new BlogInvitationResponseReceivedEvent(response, contactId); } @Override Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId, Blog shareable) { + ContactId contactId) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - shareable, true); + true, m.getShareableId()); return new BlogInvitationResponseReceivedEvent(response, contactId); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java index cb95c3759..4259c5cb2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java @@ -30,10 +30,10 @@ public class ForumInvitationFactoryImpl @Override public ForumInvitationResponse createInvitationResponse(MessageId id, GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, Forum forum, boolean accept) { - SessionId sessionId = new SessionId(forum.getId().getBytes()); + boolean seen, boolean read, boolean accept, GroupId shareableId) { + SessionId sessionId = new SessionId(shareableId.getBytes()); return new ForumInvitationResponse(id, contactGroupId, time, local, - sent, seen, read, sessionId, forum, accept); + sent, seen, read, sessionId, accept, shareableId); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index 081886d1b..bdd03a5d6 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -31,8 +31,7 @@ import static org.briarproject.briar.api.forum.ForumManager.MAJOR_VERSION; class ForumProtocolEngineImpl extends ProtocolEngineImpl { private final ForumManager forumManager; - private final InvitationFactory - invitationFactory; + private final InvitationFactory invitationFactory; @Inject ForumProtocolEngineImpl(DatabaseComponent db, @@ -60,21 +59,21 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { @Override Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId, Forum shareable) { + ContactId contactId) { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - shareable, true); + true, m.getShareableId()); return new ForumInvitationResponseReceivedEvent(response, contactId); } @Override Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId, Forum shareable) { + ContactId contactId) { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - shareable, true); + true, m.getShareableId()); return new ForumInvitationResponseReceivedEvent(response, contactId); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java index 3ceb94d7c..086f44ae3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/InvitationFactory.java @@ -4,17 +4,17 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.Shareable; -public interface InvitationFactory> { +public interface InvitationFactory { PrivateRequest createInvitationRequest(boolean local, boolean sent, boolean seen, boolean read, InviteMessage m, ContactId c, boolean available, boolean canBeOpened); - I createInvitationResponse(MessageId id, - GroupId contactGroupId, long time, boolean local, boolean sent, - boolean seen, boolean read, S shareable, boolean accept); + R createInvitationResponse(MessageId id, GroupId contactGroupId, long time, + boolean local, boolean sent, boolean seen, boolean read, + boolean accept, GroupId shareableId); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java index f5f2eda20..8b20cdb10 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java @@ -113,7 +113,13 @@ abstract class ProtocolEngineImpl private Message sendInviteMessage(Transaction txn, Session s, @Nullable String message, long timestamp) throws DbException { - BdfList descriptor = getDescriptor(txn, s.getShareableId()); + Group g = db.getGroup(txn, s.getShareableId()); + BdfList descriptor; + try { + descriptor = clientHelper.toList(g.getDescriptor()); + } catch (FormatException e) { + throw new DbException(e); // Invalid group descriptor + } long localTimestamp = Math.max(timestamp, getLocalTimestamp(s)); Message m = messageEncoder.encodeInviteMessage(s.getContactGroupId(), localTimestamp, s.getLastLocalMessageId(), descriptor, message); @@ -287,7 +293,7 @@ abstract class ProtocolEngineImpl if (m.getTimestamp() <= s.getInviteTimestamp()) return abortWithMessage(txn, s); // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Mark the invite message visible in the UI and (un)available to answer markMessageVisibleInUi(txn, m.getId()); @@ -311,7 +317,7 @@ abstract class ProtocolEngineImpl if (m.getTimestamp() <= s.getInviteTimestamp()) return abortWithMessage(txn, s); // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Mark the invite message visible in the UI and unavailable to answer markMessageVisibleInUi(txn, m.getId()); @@ -358,7 +364,7 @@ abstract class ProtocolEngineImpl if (m.getTimestamp() <= s.getInviteTimestamp()) return abortWithMessage(txn, s); // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Mark the response visible in the UI markMessageVisibleInUi(txn, m.getId()); @@ -367,8 +373,7 @@ abstract class ProtocolEngineImpl m.getTimestamp(), false); // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - S shareable = getShareable(txn, s.getShareableId()); - txn.attach(getInvitationResponseReceivedEvent(m, contactId, shareable)); + txn.attach(getInvitationResponseReceivedEvent(m, contactId)); // Move to the next state return new Session(nextState, s.getContactGroupId(), s.getShareableId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -386,7 +391,7 @@ abstract class ProtocolEngineImpl } abstract Event getInvitationResponseReceivedEvent(AcceptMessage m, - ContactId contactId, S shareable); + ContactId contactId); @Override public Session onDeclineMessage(Transaction txn, Session s, @@ -411,7 +416,7 @@ abstract class ProtocolEngineImpl if (m.getTimestamp() <= s.getInviteTimestamp()) return abortWithMessage(txn, s); // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Mark the response visible in the UI markMessageVisibleInUi(txn, m.getId()); @@ -426,8 +431,7 @@ abstract class ProtocolEngineImpl } // Broadcast an event ContactId contactId = getContactId(txn, m.getContactGroupId()); - S shareable = getShareable(txn, s.getShareableId()); - txn.attach(getInvitationResponseReceivedEvent(m, contactId, shareable)); + txn.attach(getInvitationResponseReceivedEvent(m, contactId)); // Move to the next state return new Session(START, s.getContactGroupId(), s.getShareableId(), s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(), @@ -435,7 +439,7 @@ abstract class ProtocolEngineImpl } abstract Event getInvitationResponseReceivedEvent(DeclineMessage m, - ContactId contactId, S shareable); + ContactId contactId); @Override public Session onLeaveMessage(Transaction txn, Session s, @@ -459,7 +463,7 @@ abstract class ProtocolEngineImpl private Session onRemoteLeaveWhenInvited(Transaction txn, Session s, LeaveMessage m) throws DbException, FormatException { // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Mark any invite messages in the session unavailable to answer markInvitesUnavailableToAnswer(txn, s); @@ -472,7 +476,7 @@ abstract class ProtocolEngineImpl private Session onRemoteLeaveWhenLocalLeft(Transaction txn, Session s, LeaveMessage m) throws DbException, FormatException { // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Move to the next state return new Session(START, s.getContactGroupId(), s.getShareableId(), @@ -483,7 +487,7 @@ abstract class ProtocolEngineImpl private Session onRemoteLeaveWhenSharing(Transaction txn, Session s, LeaveMessage m) throws DbException, FormatException { // The dependency, if any, must be the last remote message - if (!isValidDependency(s, m.getPreviousMessageId())) + if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Broadcast event informing that contact left ContactId contactId = getContactId(txn, s.getContactGroupId()); @@ -526,26 +530,6 @@ abstract class ProtocolEngineImpl sent.getId(), null, 0, 0); } - private S getShareable(Transaction txn, GroupId groupId) - throws DbException { - BdfList descriptor = getDescriptor(txn, groupId); - try { - return messageParser.createShareable(descriptor); - } catch (FormatException e) { - throw new DbException(e); - } - } - - private BdfList getDescriptor(Transaction txn, GroupId groupId) - throws DbException { - Group g = db.getGroup(txn, groupId); - try { - return clientHelper.toList(g.getDescriptor()); - } catch (FormatException e) { - throw new DbException(e); // Invalid group descriptor - } - } - private void markInvitesUnavailableToAnswer(Transaction txn, Session s) throws DbException, FormatException { GroupId shareableId = s.getShareableId(); @@ -639,11 +623,11 @@ abstract class ProtocolEngineImpl return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); } - private boolean isValidDependency(Session session, + private boolean isInvalidDependency(Session session, @Nullable MessageId dependency) { MessageId expected = session.getLastRemoteMessageId(); - if (dependency == null) return expected == null; - return expected != null && dependency.equals(expected); + if (dependency == null) return expected != null; + return expected == null || !dependency.equals(expected); } private long getLocalTimestamp(Session session) { diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index c0d5a7e25..d37807953 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -28,7 +28,7 @@ import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.sharing.InvitationResponse; import org.briarproject.briar.api.sharing.Shareable; import org.briarproject.briar.api.sharing.SharingInvitationItem; import org.briarproject.briar.api.sharing.SharingManager; @@ -329,37 +329,23 @@ abstract class SharingManagerImpl BdfDictionary query = messageParser.getMessagesVisibleInUiQuery(); Map results = clientHelper .getMessageMetadataAsDictionary(txn, contactGroupId, query); - List messages = + Collection messages = new ArrayList<>(results.size()); - // get invite messages first and remember shareables - Map shareables = new HashMap<>(); for (Entry e : results.entrySet()) { MessageId m = e.getKey(); MessageMetadata meta = messageParser.parseMetadata(e.getValue()); - MessageType type = meta.getMessageType(); - if (type != INVITE) continue; MessageStatus status = db.getMessageStatus(txn, c, m); - PrivateRequest invite = parseInvitationRequest(txn, c, m, - meta, status); - messages.add(invite); - shareables.put(invite.getNameable().getId(), invite.getNameable()); - } - for (Entry e : results.entrySet()) { - MessageId m = e.getKey(); - MessageMetadata meta = - messageParser.parseMetadata(e.getValue()); MessageType type = meta.getMessageType(); - if (type == INVITE) continue; - MessageStatus status = db.getMessageStatus(txn, c, m); - S shareable = shareables.get(meta.getShareableId()); - if (shareable == null) throw new AssertionError(); - if (type == ACCEPT) { + if (type == INVITE) { + messages.add(parseInvitationRequest(txn, c, m, + meta, status)); + } else if (type == ACCEPT) { messages.add(parseInvitationResponse(contactGroupId, m, - meta, status, shareable, true)); + meta, status, true)); } else if (type == DECLINE) { messages.add(parseInvitationResponse(contactGroupId, m, - meta, status, shareable, false)); + meta, status, false)); } } return messages; @@ -382,12 +368,12 @@ abstract class SharingManagerImpl meta.isAvailableToAnswer(), canBeOpened); } - private PrivateResponse parseInvitationResponse(GroupId contactGroupId, + private InvitationResponse parseInvitationResponse(GroupId contactGroupId, MessageId m, MessageMetadata meta, MessageStatus status, - S shareable, boolean accept) { + boolean accept) { return invitationFactory.createInvitationResponse(m, contactGroupId, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), shareable, accept); + status.isSeen(), meta.isRead(), accept, meta.getShareableId()); } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index ebb377e25..f8d198452 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -159,7 +159,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response1Received); assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getNameable().getName()); + listener0.getResponse().getIntroducedAuthor().getName()); assertGroupCount(messageTracker0, g1.getId(), 2, 1); // sync second ACCEPT message @@ -167,7 +167,7 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response2Received); assertEquals(introducee1.getAuthor().getName(), - listener0.getResponse().getNameable().getName()); + listener0.getResponse().getIntroducedAuthor().getName()); assertGroupCount(messageTracker0, g2.getId(), 2, 1); // sync forwarded ACCEPT messages to introducees @@ -265,7 +265,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct assertEquals(introducee2.getAuthor().getName(), - listener0.getResponse().getNameable().getName()); + listener0.getResponse().getIntroducedAuthor().getName()); // sync second response sync2To0(1, true); @@ -282,7 +282,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getNameable().getName()); + listener2.getResponse().getIntroducedAuthor().getName()); // note how the introducer does not forward the second response, // because after the first decline the protocol finished @@ -356,7 +356,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(contact2From0.getAuthor().getName(), - listener1.getResponse().getNameable().getName()); + listener1.getResponse().getIntroducedAuthor().getName()); assertFalse(contactManager1 .contactExists(author2.getId(), author1.getId())); @@ -484,7 +484,7 @@ public class IntroductionIntegrationTest // assert that the name on the decline event is correct eventWaiter.await(TIMEOUT, 1); assertEquals(introducee1.getAuthor().getName(), - listener2.getResponse().getNameable().getName()); + listener2.getResponse().getIntroducedAuthor().getName()); // assert that introducee2 is in correct state introduceeSession = getIntroduceeSession(c2); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java index 1fb0100d3..19e996e43 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java @@ -310,8 +310,6 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { oneOf(messageTracker) .trackMessage(txn, contactGroupId, inviteTimestamp + 1, false); - oneOf(privateGroupManager).getPrivateGroup(txn, privateGroupId); - will(returnValue(privateGroup)); }}); expectGetContactId(); expectSetPrivateGroupVisibility(SHARED); @@ -401,8 +399,6 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { oneOf(messageTracker) .trackMessage(txn, contactGroupId, inviteTimestamp + 1, false); - oneOf(privateGroupManager).getPrivateGroup(txn, privateGroupId); - will(returnValue(privateGroup)); }}); expectGetContactId(); CreatorSession newSession = diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 8ee74d236..37b376af7 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -2,7 +2,6 @@ package org.briarproject.briar.privategroup.invitation; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.sync.Group; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.messaging.PrivateMessageHeader; @@ -127,7 +126,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getNameable()); + assertEquals(privateGroup0.getId(), response.getShareableId()); assertTrue(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -144,7 +143,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getNameable()); + assertEquals(privateGroup0.getId(), response.getShareableId()); assertFalse(response.isLocal()); assertFalse(response.wasAccepted()); } @@ -177,7 +176,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getNameable()); + assertEquals(privateGroup0.getId(), response.getShareableId()); assertTrue(response.wasAccepted()); } else { GroupInvitationRequest request = (GroupInvitationRequest) m; @@ -197,7 +196,7 @@ public class GroupInvitationIntegrationTest if (m instanceof GroupInvitationResponse) { foundResponse = true; GroupInvitationResponse response = (GroupInvitationResponse) m; - assertEquals(privateGroup0, response.getNameable()); + assertEquals(privateGroup0.getId(), response.getShareableId()); assertTrue(response.wasAccepted()); } } @@ -441,38 +440,6 @@ public class GroupInvitationIntegrationTest sync1To0(1, true); } - @Test(expected = AssertionError.class) - public void testDeleteOnlyInvitationFails() throws Exception { - // send invitation - sendInvitation(clock.currentTimeMillis(), null); - sync0To1(1, true); - - // save MessageId of invitation - Collection messages = - withinTransactionReturns(db1, txn -> groupInvitationManager1 - .getMessageHeaders(txn, contactId0From1)); - assertEquals(1, messages.size()); - MessageId inviteId = messages.iterator().next().getId(); - - // decline invitation - groupInvitationManager1 - .respondToInvitation(contactId0From1, privateGroup0, false); - - // we should have an invitation and a decline message - messages = withinTransactionReturns(db1, txn -> groupInvitationManager1 - .getMessageHeaders(txn, contactId0From1)); - assertEquals(2, messages.size()); - - // delete only invitation - withinTransaction(db1, txn -> { - db1.deleteMessage(txn, inviteId); - db1.deleteMessageMetadata(txn, inviteId); - // This should fail - groupInvitationManager1.getMessageHeaders(txn, contactId0From1); - }); - - } - private void sendInvitation(long timestamp, @Nullable String msg) throws DbException { byte[] signature = groupInvitationFactory.signInvitation(contact1From0, diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index de0c0193a..e9a19ae7f 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -680,8 +680,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { contactGroup.getId(), query); will(returnValue(results)); // first message - oneOf(messageParser).parseMetadata(meta2); - will(returnValue(messageMetadata2)); oneOf(messageParser).parseMetadata(meta); will(returnValue(messageMetadata1)); oneOf(db).getMessageStatus(txn, contactId, message.getId()); @@ -695,8 +693,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { // second message oneOf(messageParser).parseMetadata(meta2); will(returnValue(messageMetadata2)); - oneOf(messageParser).parseMetadata(meta); - will(returnValue(messageMetadata1)); oneOf(db).getMessageStatus(txn, contactId, messageId2); }}); @@ -712,7 +708,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { } else if (m.getId().equals(messageId2)) { assertTrue(m instanceof GroupInvitationResponse); assertEquals(time2, m.getTimestamp()); - assertEquals(pg, ((GroupInvitationResponse) m).getNameable()); + assertEquals(pg.getId(), + ((GroupInvitationResponse) m).getShareableId()); } else { throw new AssertionError(); } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 5cee8b9ad..3c95794e0 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -160,7 +160,7 @@ public class BlogSharingIntegrationTest assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(blog2, response.getNameable()); + assertEquals(blog2.getId(), response.getShareableId()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -233,7 +233,7 @@ public class BlogSharingIntegrationTest assertEquals("Hi!", invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(rssBlog, response.getNameable()); + assertEquals(rssBlog.getId(), response.getShareableId()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -294,7 +294,7 @@ public class BlogSharingIntegrationTest assertEquals(null, invitation.getMessage()); } else { BlogInvitationResponse response = (BlogInvitationResponse) m; - assertEquals(blog2, response.getNameable()); + assertEquals(blog2.getId(), response.getShareableId()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 40fed0491..9f72d1b04 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -142,7 +142,7 @@ public class ForumSharingIntegrationTest assertTrue(invitation.canBeOpened()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; - assertEquals(forum0, response.getNameable()); + assertEquals(forum0.getId(), response.getShareableId()); assertTrue(response.wasAccepted()); assertTrue(response.isLocal()); } @@ -198,7 +198,7 @@ public class ForumSharingIntegrationTest assertFalse(invitation.canBeOpened()); } else { ForumInvitationResponse response = (ForumInvitationResponse) m; - assertEquals(forum0, response.getNameable()); + assertEquals(forum0.getId(), response.getShareableId()); assertFalse(response.wasAccepted()); assertTrue(response.isLocal()); } From 9be83c3cc751cc5cb520d57fed3beaff36d737f0 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 7 Sep 2018 17:45:52 -0300 Subject: [PATCH 12/15] Refactor ConversationItem creation --- .../android/contact/ContactListFragment.java | 2 +- .../android/contact/ConversationActivity.java | 14 +- .../android/contact/ConversationItem.java | 220 ++---------------- .../contact/ConversationNoticeInItem.java | 64 +++++ .../contact/ConversationNoticeOutItem.java | 83 ++++++- .../contact/ConversationRequestItem.java | 85 +++++-- 6 files changed, 240 insertions(+), 228 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index fa79b0931..a3ca713b8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -256,7 +256,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { int position = adapter.findItemPosition(c); ContactListItem item = adapter.getItemAt(position); if (item != null) { - ConversationItem i = ConversationItem.from(getContext(), h); + ConversationItem i = ConversationItem.from(getContext(), "", h); item.addMessage(i); adapter.updateItemAt(position, item); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index a086733b0..c8d74b707 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -65,7 +65,6 @@ import org.briarproject.briar.api.client.ProtocolStateException; import org.briarproject.briar.api.client.SessionId; import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.ConversationManager; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; @@ -365,15 +364,8 @@ public class ConversationActivity extends BriarActivity List items = new ArrayList<>(headers.size()); for (PrivateMessageHeader h : headers) { ConversationItem item; - if (h instanceof IntroductionResponse) { - IntroductionResponse i = (IntroductionResponse) h; - item = ConversationItem.from(this, contactName.getValue(), i); - } else if (h instanceof PrivateRequest) { - PrivateRequest r = (PrivateRequest) h; - item = ConversationItem.from(this, contactName.getValue(), r); - } else if (h instanceof PrivateResponse) { - PrivateResponse r = (PrivateResponse) h; - item = ConversationItem.from(this, contactName.getValue(), r); + if (h instanceof PrivateRequest || h instanceof PrivateResponse) { + item = ConversationItem.from(this, contactName.getValue(), h); } else { item = ConversationItem.from(h); String body = bodyCache.get(h.getId()); @@ -703,7 +695,7 @@ public class ConversationActivity extends BriarActivity @UiThread @Override public void respondToRequest(ConversationRequestItem item, boolean accept) { - item.setAnswered(true); + item.setAnswered(); int position = adapter.findItemPosition(item); if (position != INVALID_POSITION) { adapter.notifyItemChanged(position, item); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index ab17c158d..671f7c6d2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -2,34 +2,17 @@ package org.briarproject.briar.android.contact; import android.content.Context; import android.support.annotation.LayoutRes; -import android.support.annotation.StringRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.R; -import org.briarproject.briar.android.contact.ConversationRequestItem.RequestType; -import org.briarproject.briar.api.blog.BlogInvitationRequest; -import org.briarproject.briar.api.blog.BlogInvitationResponse; -import org.briarproject.briar.api.forum.ForumInvitationRequest; -import org.briarproject.briar.api.forum.ForumInvitationResponse; -import org.briarproject.briar.api.introduction.IntroductionRequest; -import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.PrivateMessageHeader; import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.BLOG; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.FORUM; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.GROUP; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION; - @NotThreadSafe @NotNullByDefault abstract class ConversationItem { @@ -89,190 +72,37 @@ abstract class ConversationItem { } static ConversationItem from(Context ctx, String contactName, - PrivateRequest ir) { - if (ir.isLocal()) { - String text; - if (ir instanceof IntroductionRequest) { - text = ctx.getString(R.string.introduction_request_sent, - contactName, ir.getName()); - } else if (ir instanceof ForumInvitationRequest) { - text = ctx.getString(R.string.forum_invitation_sent, - ir.getName(), contactName); - } else if (ir instanceof BlogInvitationRequest) { - text = ctx.getString(R.string.blogs_sharing_invitation_sent, - ir.getName(), contactName); - } else if (ir instanceof GroupInvitationRequest) { - text = ctx.getString( - R.string.groups_invitations_invitation_sent, - contactName, ir.getName()); - } else { - throw new IllegalArgumentException("Unknown PrivateRequest"); - } - return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), - text, ir.getMessage(), ir.getTimestamp(), ir.isSent(), - ir.isSeen()); + PrivateMessageHeader h) { + if (h.isLocal()) { + return fromLocal(ctx, contactName, h); } else { - String text; - RequestType type; - boolean canBeOpened; - if (ir instanceof IntroductionRequest) { - type = INTRODUCTION; - if (ir.wasAnswered()) { - text = ctx.getString( - R.string.introduction_request_answered_received, - contactName, ir.getName()); - } else if (((IntroductionRequest) ir).isContact()) { - text = ctx.getString( - R.string.introduction_request_exists_received, - contactName, ir.getName()); - } else { - text = ctx.getString(R.string.introduction_request_received, - contactName, ir.getName()); - } - return new ConversationRequestItem(ir.getId(), - ir.getGroupId(), type, ir.getSessionId(), text, - ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, - ir.wasAnswered(), false); - } else if (ir instanceof ForumInvitationRequest) { - text = ctx.getString(R.string.forum_invitation_received, - contactName, ir.getName()); - type = FORUM; - canBeOpened = ((ForumInvitationRequest) ir).canBeOpened(); - } else if (ir instanceof BlogInvitationRequest) { - text = ctx.getString(R.string.blogs_sharing_invitation_received, - contactName, ir.getName()); - type = BLOG; - canBeOpened = ((BlogInvitationRequest) ir).canBeOpened(); - } else if (ir instanceof GroupInvitationRequest) { - text = ctx.getString( - R.string.groups_invitations_invitation_received, - contactName, ir.getName()); - type = GROUP; - canBeOpened = ((GroupInvitationRequest) ir).canBeOpened(); - } else { - throw new IllegalArgumentException("Unknown PrivateRequest"); - } - return new ConversationRequestItem(ir.getId(), - ir.getGroupId(), type, ir.getSessionId(), text, - ir.getMessage(), ir.getTimestamp(), ir.isRead(), - ((Shareable) ir.getNameable()).getId(), !ir.wasAnswered(), - canBeOpened); + return fromRemote(ctx, contactName, h); } } - static ConversationItem from(Context ctx, String contactName, - IntroductionResponse ir) { - if (ir.isLocal()) { - String text; - if (ir.wasAccepted()) { - text = ctx.getString( - R.string.introduction_response_accepted_sent, - ir.getIntroducedAuthor().getName()); - text += "\n\n" + ctx.getString( - R.string.introduction_response_accepted_sent_info, - ir.getIntroducedAuthor().getName()); - } else { - text = ctx.getString( - R.string.introduction_response_declined_sent, - ir.getIntroducedAuthor().getName()); - } - return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); - } else { - @StringRes int res; - if (ir.wasAccepted()) { - res = R.string.introduction_response_accepted_received; - } else { - if (ir.isIntroducer()) { - res = R.string.introduction_response_declined_received; - } else { - res = - R.string.introduction_response_declined_received_by_introducee; - } - } - String text = - ctx.getString(res, contactName, ir.getIntroducedAuthor().getName()); - return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isRead()); - } - } - - static ConversationItem from(Context ctx, String contactName, - PrivateResponse ir) { - @StringRes int res; - if (ir.isLocal()) { - if (ir.wasAccepted()) { - if (ir instanceof ForumInvitationResponse) { - res = R.string.forum_invitation_response_accepted_sent; - } else if (ir instanceof BlogInvitationResponse) { - res = R.string.blogs_sharing_response_accepted_sent; - } else if (ir instanceof GroupInvitationResponse) { - res = R.string.groups_invitations_response_accepted_sent; - } else { - throw new IllegalArgumentException( - "Unknown PrivateResponse"); - } - } else { - if (ir instanceof ForumInvitationResponse) { - res = R.string.forum_invitation_response_declined_sent; - } else if (ir instanceof BlogInvitationResponse) { - res = R.string.blogs_sharing_response_declined_sent; - } else if (ir instanceof GroupInvitationResponse) { - res = R.string.groups_invitations_response_declined_sent; - } else { - throw new IllegalArgumentException( - "Unknown PrivateResponse"); - } - } - String text = ctx.getString(res, contactName); - return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen()); - } else { - if (ir.wasAccepted()) { - if (ir instanceof ForumInvitationResponse) { - res = R.string.forum_invitation_response_accepted_received; - } else if (ir instanceof BlogInvitationResponse) { - res = R.string.blogs_sharing_response_accepted_received; - } else if (ir instanceof GroupInvitationResponse) { - res = - R.string.groups_invitations_response_accepted_received; - } else { - throw new IllegalArgumentException( - "Unknown PrivateResponse"); - } - } else { - if (ir instanceof ForumInvitationResponse) { - res = R.string.forum_invitation_response_declined_received; - } else if (ir instanceof BlogInvitationResponse) { - res = R.string.blogs_sharing_response_declined_received; - } else if (ir instanceof GroupInvitationResponse) { - res = - R.string.groups_invitations_response_declined_received; - } else { - throw new IllegalArgumentException( - "Unknown PrivateResponse"); - } - } - String text = ctx.getString(res, contactName); - return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), - text, null, ir.getTimestamp(), ir.isRead()); - } - } - - /** - * This method should not be used to display the resulting ConversationItem - * in the UI, but only to update list information based on the - * PrivateMessageHeader. - **/ - static ConversationItem from(Context ctx, PrivateMessageHeader h) { - if (h instanceof IntroductionResponse) { - return from(ctx, "", (IntroductionResponse) h); - } else if (h instanceof PrivateRequest) { - return from(ctx, "", (PrivateRequest) h); + private static ConversationItem fromLocal(Context ctx, String contactName, + PrivateMessageHeader h) { + if (h instanceof PrivateRequest) { + PrivateRequest r = (PrivateRequest) h; + return new ConversationNoticeOutItem(ctx, contactName, r); } else if (h instanceof PrivateResponse) { - return from(ctx, "", (PrivateResponse) h); + PrivateResponse r = (PrivateResponse) h; + return new ConversationNoticeOutItem(ctx, contactName, r); } else { - return from(h); + return new ConversationMessageOutItem(h); + } + } + + private static ConversationItem fromRemote(Context ctx, String contactName, + PrivateMessageHeader h) { + if (h instanceof PrivateRequest) { + PrivateRequest r = (PrivateRequest) h; + return new ConversationRequestItem(ctx, contactName, r); + } else if (h instanceof PrivateResponse) { + PrivateResponse r = (PrivateResponse) h; + return new ConversationNoticeInItem(ctx, contactName, r); + } else { + return new ConversationMessageInItem(h); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java index efbc6e4f7..2873ad64c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java @@ -1,11 +1,18 @@ package org.briarproject.briar.android.contact; +import android.content.Context; import android.support.annotation.LayoutRes; +import android.support.annotation.StringRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; +import org.briarproject.briar.api.blog.BlogInvitationResponse; +import org.briarproject.briar.api.forum.ForumInvitationResponse; +import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -24,6 +31,13 @@ class ConversationNoticeInItem extends ConversationItem { this.msgText = msgText; } + public ConversationNoticeInItem(Context ctx, String contactName, + PrivateResponse r) { + super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), + r.getTimestamp(), r.isRead()); + this.msgText = null; + } + @Nullable String getMsgText() { return msgText; @@ -40,4 +54,54 @@ class ConversationNoticeInItem extends ConversationItem { return R.layout.list_item_conversation_notice_in; } + private static String getText(Context ctx, String contactName, + PrivateResponse r) { + if (r.wasAccepted()) { + if (r instanceof IntroductionResponse) { + IntroductionResponse ir = (IntroductionResponse) r; + return ctx.getString( + R.string.introduction_response_accepted_received, + contactName, ir.getIntroducedAuthor().getName()); + } else if (r instanceof ForumInvitationResponse) { + return ctx.getString( + R.string.forum_invitation_response_accepted_received, + contactName); + } else if (r instanceof BlogInvitationResponse) { + return ctx.getString( + R.string.blogs_sharing_response_accepted_received, + contactName); + } else if (r instanceof GroupInvitationResponse) { + return ctx.getString( + R.string.groups_invitations_response_accepted_received, + contactName); + } + } else { + if (r instanceof IntroductionResponse) { + IntroductionResponse ir = (IntroductionResponse) r; + @StringRes int res; + if (ir.isIntroducer()) { + res = R.string.introduction_response_declined_received; + } else { + res = + R.string.introduction_response_declined_received_by_introducee; + } + return ctx.getString(res, contactName, + ir.getIntroducedAuthor().getName()); + } else if (r instanceof ForumInvitationResponse) { + return ctx.getString( + R.string.forum_invitation_response_declined_received, + contactName); + } else if (r instanceof BlogInvitationResponse) { + return ctx.getString( + R.string.blogs_sharing_response_declined_received, + contactName); + } else if (r instanceof GroupInvitationResponse) { + return ctx.getString( + R.string.groups_invitations_response_declined_received, + contactName); + } + } + throw new IllegalArgumentException("Unknown PrivateResponse"); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java index 637c928b9..6831671af 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java @@ -1,11 +1,20 @@ package org.briarproject.briar.android.contact; +import android.content.Context; import android.support.annotation.LayoutRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; +import org.briarproject.briar.api.blog.BlogInvitationRequest; +import org.briarproject.briar.api.blog.BlogInvitationResponse; +import org.briarproject.briar.api.forum.ForumInvitationRequest; +import org.briarproject.briar.api.forum.ForumInvitationResponse; +import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.messaging.PrivateResponse; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -17,11 +26,18 @@ class ConversationNoticeOutItem extends ConversationOutItem { @Nullable private final String msgText; - ConversationNoticeOutItem(MessageId id, GroupId groupId, - String text, @Nullable String msgText, long time, - boolean sent, boolean seen) { - super(id, groupId, text, time, sent, seen); - this.msgText = msgText; + ConversationNoticeOutItem(Context ctx, String contactName, + PrivateRequest r) { + super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), + r.getTimestamp(), r.isSent(), r.isSeen()); + this.msgText = r.getMessage(); + } + + ConversationNoticeOutItem(Context ctx, String contactName, + PrivateResponse r) { + super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), + r.getTimestamp(), r.isSent(), r.isSeen()); + this.msgText = null; } @Nullable @@ -35,4 +51,57 @@ class ConversationNoticeOutItem extends ConversationOutItem { return R.layout.list_item_conversation_notice_out; } + private static String getText(Context ctx, String contactName, + PrivateRequest r) { + if (r instanceof IntroductionRequest) { + return ctx.getString(R.string.introduction_request_sent, + contactName, r.getName()); + } else if (r instanceof ForumInvitationRequest) { + return ctx.getString(R.string.forum_invitation_sent, + r.getName(), contactName); + } else if (r instanceof BlogInvitationRequest) { + return ctx.getString(R.string.blogs_sharing_invitation_sent, + r.getName(), contactName); + } else if (r instanceof GroupInvitationRequest) { + return ctx.getString(R.string.groups_invitations_invitation_sent, + contactName, r.getName()); + } + throw new IllegalArgumentException("Unknown PrivateRequest"); + } + + private static String getText(Context ctx, String contactName, + PrivateResponse ir) { + if (ir.wasAccepted()) { + if (ir instanceof IntroductionResponse) { + String name = ((IntroductionResponse) ir).getIntroducedAuthor() + .getName(); + return ctx.getString( + R.string.introduction_response_accepted_sent, + name) + "\n\n" + ctx.getString( + R.string.introduction_response_accepted_sent_info, + name); + } else if (ir instanceof ForumInvitationResponse) { + return ctx.getString(R.string.forum_invitation_response_accepted_sent, contactName); + } else if (ir instanceof BlogInvitationResponse) { + return ctx.getString(R.string.blogs_sharing_response_accepted_sent, contactName); + } else if (ir instanceof GroupInvitationResponse) { + return ctx.getString(R.string.groups_invitations_response_accepted_sent, contactName); + } + } else { + if (ir instanceof IntroductionResponse) { + String name = ((IntroductionResponse) ir).getIntroducedAuthor() + .getName(); + return ctx.getString( + R.string.introduction_response_declined_sent, name); + } else if (ir instanceof ForumInvitationResponse) { + return ctx.getString(R.string.forum_invitation_response_declined_sent, contactName); + } else if (ir instanceof BlogInvitationResponse) { + return ctx.getString(R.string.blogs_sharing_response_declined_sent, contactName); + } else if (ir instanceof GroupInvitationResponse) { + return ctx.getString(R.string.groups_invitations_response_declined_sent, contactName); + } + } + throw new IllegalArgumentException("Unknown PrivateResponse"); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java index b11a00c60..e61ebec22 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java @@ -1,16 +1,28 @@ package org.briarproject.briar.android.contact; +import android.content.Context; import android.support.annotation.LayoutRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; +import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.forum.ForumInvitationRequest; +import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.messaging.PrivateRequest; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; +import org.briarproject.briar.api.sharing.InvitationRequest; +import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.BLOG; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.FORUM; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.GROUP; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION; + @NotThreadSafe @NotNullByDefault class ConversationRequestItem extends ConversationNoticeInItem { @@ -24,17 +36,20 @@ class ConversationRequestItem extends ConversationNoticeInItem { private final boolean canBeOpened; private boolean answered; - ConversationRequestItem(MessageId id, GroupId groupId, - RequestType requestType, SessionId sessionId, String text, - @Nullable String msgText, long time, boolean read, - @Nullable GroupId requestedGroupId, boolean answered, - boolean canBeOpened) { - super(id, groupId, text, msgText, time, read); - this.requestType = requestType; - this.sessionId = sessionId; - this.requestedGroupId = requestedGroupId; - this.answered = answered; - this.canBeOpened = canBeOpened; + ConversationRequestItem(Context ctx, String contactName, + PrivateRequest r) { + super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), + r.getMessage(), r.getTimestamp(), r.isRead()); + this.requestType = getType(r); + this.sessionId = r.getSessionId(); + this.answered = r.wasAnswered(); + if (r instanceof InvitationRequest) { + this.requestedGroupId = ((Shareable) r.getNameable()).getId(); + this.canBeOpened = ((InvitationRequest) r).canBeOpened(); + } else { + this.requestedGroupId = null; + this.canBeOpened = false; + } } RequestType getRequestType() { @@ -54,8 +69,8 @@ class ConversationRequestItem extends ConversationNoticeInItem { return answered; } - void setAnswered(boolean answered) { - this.answered = answered; + void setAnswered() { + this.answered = true; } public boolean canBeOpened() { @@ -68,4 +83,46 @@ class ConversationRequestItem extends ConversationNoticeInItem { return R.layout.list_item_conversation_request; } + private static String getText(Context ctx, String contactName, + PrivateRequest r) { + if (r instanceof IntroductionRequest) { + if (r.wasAnswered()) { + return ctx.getString( + R.string.introduction_request_answered_received, + contactName, r.getName()); + } else if (((IntroductionRequest) r).isContact()) { + return ctx.getString( + R.string.introduction_request_exists_received, + contactName, r.getName()); + } else { + return ctx.getString(R.string.introduction_request_received, + contactName, r.getName()); + } + } else if (r instanceof ForumInvitationRequest) { + return ctx.getString(R.string.forum_invitation_received, + contactName, r.getName()); + } else if (r instanceof BlogInvitationRequest) { + return ctx.getString(R.string.blogs_sharing_invitation_received, + contactName, r.getName()); + } else if (r instanceof GroupInvitationRequest) { + return ctx.getString( + R.string.groups_invitations_invitation_received, + contactName, r.getName()); + } + throw new IllegalArgumentException("Unknown PrivateRequest"); + } + + private static RequestType getType(PrivateRequest r) { + if (r instanceof IntroductionRequest) { + return INTRODUCTION; + } else if (r instanceof ForumInvitationRequest) { + return FORUM; + } else if (r instanceof BlogInvitationRequest) { + return BLOG; + } else if (r instanceof GroupInvitationRequest) { + return GROUP; + } + throw new IllegalArgumentException("Unknown PrivateRequest"); + } + } From 4b325f797bbbdc0257fdbdf86e6f2ce770e9b86b Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 18 Sep 2018 11:26:12 +0100 Subject: [PATCH 13/15] Combine LiveData observers, avoid redundant loads. --- .../android/contact/ConversationActivity.java | 69 +++++++------------ 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index c8d74b707..381cd5f92 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -129,6 +129,7 @@ public class ConversationActivity extends BriarActivity Executor cryptoExecutor; private final Map bodyCache = new ConcurrentHashMap<>(); + private final MutableLiveData contactName = new MutableLiveData<>(); private ConversationAdapter adapter; private Toolbar toolbar; @@ -165,7 +166,6 @@ public class ConversationActivity extends BriarActivity private volatile AuthorId contactAuthorId; @Nullable private volatile GroupId messagingGroupId; - private MutableLiveData contactName = new MutableLiveData<>(); @SuppressWarnings("ConstantConditions") @Override @@ -274,7 +274,7 @@ public class ConversationActivity extends BriarActivity runOnDbThread(() -> { try { long start = now(); - if (contactName == null || contactAuthorId == null) { + if (contactAuthorId == null) { Contact contact = contactManager.getContact(contactId); contactName.postValue(contact.getAuthor().getName()); contactAuthorId = contact.getAuthor().getId(); @@ -459,36 +459,22 @@ public class ConversationActivity extends BriarActivity private void onNewPrivateMessage(PrivateMessageHeader h) { runOnUiThreadUnlessDestroyed(() -> { - if (h instanceof PrivateRequest) { - contactName.observe(this, new Observer() { - @Override - public void onChanged(@Nullable String name) { - if (name == null) loadContactName(); - else { - PrivateRequest m = (PrivateRequest) h; - ConversationItem item = ConversationItem.from( - ConversationActivity.this, name, m); - addConversationItem(item); - contactName.removeObserver(this); + if (h instanceof PrivateRequest || h instanceof PrivateResponse) { + String cName = contactName.getValue(); + if (cName == null) { + // Wait for the contact name to be loaded + contactName.observe(this, new Observer() { + @Override + public void onChanged(@Nullable String cName) { + if (cName != null) { + onNewPrivateRequestOrResponse(h, cName); + contactName.removeObserver(this); + } } - } - }); - if (contactName.getValue() == null) loadContactName(); - } else if (h instanceof PrivateResponse) { - contactName.observe(this, new Observer() { - @Override - public void onChanged(@Nullable String name) { - if (name == null) loadContactName(); - else { - PrivateResponse m = (PrivateResponse) h; - ConversationItem item = ConversationItem.from( - ConversationActivity.this, name, m); - addConversationItem(item); - contactName.removeObserver(this); - } - } - }); - if (contactName.getValue() == null) loadContactName(); + }); + } else { + onNewPrivateRequestOrResponse(h, cName); + } } else { addConversationItem(ConversationItem.from(h)); loadMessageBody(h.getId()); @@ -496,6 +482,12 @@ public class ConversationActivity extends BriarActivity }); } + @UiThread + private void onNewPrivateRequestOrResponse(PrivateMessageHeader h, + String cName) { + addConversationItem(ConversationItem.from(this, cName, h)); + } + private void markMessages(Collection messageIds, boolean sent, boolean seen) { runOnUiThreadUnlessDestroyed(() -> { @@ -550,7 +542,8 @@ public class ConversationActivity extends BriarActivity //noinspection ConstantConditions init in loadGroupId() storeMessage(privateMessageFactory.createPrivateMessage( messagingGroupId, timestamp, body), body); - } catch (FormatException e) {throw new RuntimeException(e); + } catch (FormatException e) { + throw new RuntimeException(e); } }); } @@ -780,16 +773,4 @@ public class ConversationActivity extends BriarActivity throws DbException { groupInvitationManager.respondToInvitation(contactId, id, accept); } - - private void loadContactName() { - runOnDbThread(() -> { - try { - Contact c = contactManager.getContact(contactId); - contactName.postValue(c.getAuthor().getName()); - } catch (DbException e) { - handleDbException(e); - } - }); - } - } From 2309e7321641b1fe255deb1dc30fe8b6cd536296 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 18 Sep 2018 09:39:11 -0300 Subject: [PATCH 14/15] Fix bug where available invitations were marked answered Now an invitiation was answered when it is no longer available --- .../briarproject/briar/api/sharing/InvitationRequest.java | 4 ++-- .../invitation/GroupInvitationIntegrationTest.java | 2 ++ .../briar/sharing/BlogSharingIntegrationTest.java | 6 +++--- .../briar/sharing/ForumSharingIntegrationTest.java | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java index e8ea62907..7cf456eb6 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java @@ -15,9 +15,9 @@ public abstract class InvitationRequest extends public InvitationRequest(MessageId messageId, GroupId groupId, long time, boolean local, boolean sent, boolean seen, boolean read, SessionId sessionId, S object, @Nullable String message, - boolean answered, boolean canBeOpened) { + boolean available, boolean canBeOpened) { super(messageId, groupId, time, local, sent, seen, read, sessionId, - object, message, answered); + object, message, !available); this.canBeOpened = canBeOpened; } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 37b376af7..5ae80caf5 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -104,6 +104,7 @@ public class GroupInvitationIntegrationTest assertFalse(request.isLocal()); assertFalse(request.isRead()); assertFalse(request.canBeOpened()); + assertFalse(request.wasAnswered()); } @Test @@ -181,6 +182,7 @@ public class GroupInvitationIntegrationTest } else { GroupInvitationRequest request = (GroupInvitationRequest) m; assertEquals(privateGroup0, request.getNameable()); + assertTrue(request.wasAnswered()); assertTrue(request.canBeOpened()); } } diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index 3c95794e0..44a1d3995 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -153,7 +153,7 @@ public class BlogSharingIntegrationTest if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertEquals(blog2, invitation.getNameable()); - assertFalse(invitation.wasAnswered()); + assertTrue(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); assertFalse(invitation.getNameable().isRssFeed()); @@ -226,7 +226,7 @@ public class BlogSharingIntegrationTest if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertEquals(rssBlog, invitation.getNameable()); - assertFalse(invitation.wasAnswered()); + assertTrue(invitation.wasAnswered()); assertEquals(rssBlog.getAuthor().getName(), invitation.getName()); assertTrue(invitation.getNameable().isRssFeed()); @@ -288,7 +288,7 @@ public class BlogSharingIntegrationTest if (m instanceof BlogInvitationRequest) { BlogInvitationRequest invitation = (BlogInvitationRequest) m; assertEquals(blog2, invitation.getNameable()); - assertFalse(invitation.wasAnswered()); + assertTrue(invitation.wasAnswered()); assertEquals(blog2.getAuthor().getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 9f72d1b04..682b6d1a0 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -135,7 +135,7 @@ public class ForumSharingIntegrationTest for (PrivateMessageHeader m : list) { if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; - assertFalse(invitation.wasAnswered()); + assertTrue(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); assertEquals(forum0, invitation.getNameable()); assertEquals("Hi!", invitation.getMessage()); @@ -192,7 +192,7 @@ public class ForumSharingIntegrationTest if (m instanceof ForumInvitationRequest) { ForumInvitationRequest invitation = (ForumInvitationRequest) m; assertEquals(forum0, invitation.getNameable()); - assertFalse(invitation.wasAnswered()); + assertTrue(invitation.wasAnswered()); assertEquals(forum0.getName(), invitation.getName()); assertEquals(null, invitation.getMessage()); assertFalse(invitation.canBeOpened()); From 7d479063a9db92daa462720b4c6a91b3c00307d7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 18 Sep 2018 10:09:59 -0300 Subject: [PATCH 15/15] ConversationManager: Address review issues --- .../contact/ConversationNoticeOutItem.java | 24 +++++++-------- .../invitation/CreatorProtocolEngine.java | 2 +- .../briar/sharing/BlogProtocolEngineImpl.java | 6 ++-- .../sharing/ForumProtocolEngineImpl.java | 2 +- .../IntroductionIntegrationTest.java | 11 ++++--- .../PrivateGroupManagerIntegrationTest.java | 2 +- .../sharing/ForumSharingIntegrationTest.java | 29 +++++++++++++------ 7 files changed, 45 insertions(+), 31 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java index 6831671af..b5b22203b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java @@ -70,34 +70,34 @@ class ConversationNoticeOutItem extends ConversationOutItem { } private static String getText(Context ctx, String contactName, - PrivateResponse ir) { - if (ir.wasAccepted()) { - if (ir instanceof IntroductionResponse) { - String name = ((IntroductionResponse) ir).getIntroducedAuthor() + PrivateResponse r) { + if (r.wasAccepted()) { + if (r instanceof IntroductionResponse) { + String name = ((IntroductionResponse) r).getIntroducedAuthor() .getName(); return ctx.getString( R.string.introduction_response_accepted_sent, name) + "\n\n" + ctx.getString( R.string.introduction_response_accepted_sent_info, name); - } else if (ir instanceof ForumInvitationResponse) { + } else if (r instanceof ForumInvitationResponse) { return ctx.getString(R.string.forum_invitation_response_accepted_sent, contactName); - } else if (ir instanceof BlogInvitationResponse) { + } else if (r instanceof BlogInvitationResponse) { return ctx.getString(R.string.blogs_sharing_response_accepted_sent, contactName); - } else if (ir instanceof GroupInvitationResponse) { + } else if (r instanceof GroupInvitationResponse) { return ctx.getString(R.string.groups_invitations_response_accepted_sent, contactName); } } else { - if (ir instanceof IntroductionResponse) { - String name = ((IntroductionResponse) ir).getIntroducedAuthor() + if (r instanceof IntroductionResponse) { + String name = ((IntroductionResponse) r).getIntroducedAuthor() .getName(); return ctx.getString( R.string.introduction_response_declined_sent, name); - } else if (ir instanceof ForumInvitationResponse) { + } else if (r instanceof ForumInvitationResponse) { return ctx.getString(R.string.forum_invitation_response_declined_sent, contactName); - } else if (ir instanceof BlogInvitationResponse) { + } else if (r instanceof BlogInvitationResponse) { return ctx.getString(R.string.blogs_sharing_response_declined_sent, contactName); - } else if (ir instanceof GroupInvitationResponse) { + } else if (r instanceof GroupInvitationResponse) { return ctx.getString(R.string.groups_invitations_response_declined_sent, contactName); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index 579282ca0..4ca049b42 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -256,7 +256,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { GroupInvitationMessage m, boolean accept) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationResponse(m.getId(), m.getContactGroupId(), - m.getTimestamp(), false, false, true, false, sessionId, + m.getTimestamp(), false, false, false, false, sessionId, accept, m.getPrivateGroupId()); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 26c093a49..2ebaf2a10 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -61,7 +61,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { ContactId contactId) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), - m.getTimestamp(), false, false, true, false, + m.getTimestamp(), false, false, false, false, true, m.getShareableId()); return new BlogInvitationResponseReceivedEvent(response, contactId); } @@ -71,8 +71,8 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { ContactId contactId) { BlogInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), - m.getTimestamp(), false, false, true, false, - true, m.getShareableId()); + m.getTimestamp(), false, false, false, false, + false, m.getShareableId()); return new BlogInvitationResponseReceivedEvent(response, contactId); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index bdd03a5d6..f4b5b627f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -73,7 +73,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { ForumInvitationResponse response = invitationFactory .createInvitationResponse(m.getId(), m.getContactGroupId(), m.getTimestamp(), false, false, true, false, - true, m.getShareableId()); + false, m.getShareableId()); return new ForumInvitationResponseReceivedEvent(response, contactId); } diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index f8d198452..e366a627b 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -368,13 +368,16 @@ public class IntroductionIntegrationTest .getMessageHeaders(txn, contactId1From0)); assertEquals(2, messages.size()); messages = withinTransactionReturns(db0, - txn -> introductionManager0.getMessageHeaders(txn, contactId2From0)); + txn -> introductionManager0 + .getMessageHeaders(txn, contactId2From0)); assertEquals(2, messages.size()); messages = withinTransactionReturns(db1, - txn -> introductionManager1.getMessageHeaders(txn, contactId0From1)); - assertEquals(3,messages.size()); + txn -> introductionManager1 + .getMessageHeaders(txn, contactId0From1)); + assertEquals(3, messages.size()); messages = withinTransactionReturns(db2, - txn -> introductionManager2.getMessageHeaders(txn, contactId0From2)); + txn -> introductionManager2 + .getMessageHeaders(txn, contactId0From2)); assertEquals(3, messages.size()); assertFalse(listener0.aborted); assertFalse(listener1.aborted); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java index 37ee56a41..c376c30e1 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java @@ -408,7 +408,7 @@ public class PrivateGroupManagerIntegrationTest groupManager2.addPrivateGroup(txn, privateGroup0, joinMsg2, false); // share the group with 0 db2.setGroupVisibility(txn, - contactId0From1, privateGroup0.getId(), SHARED); // TODO contactId + contactId0From2, privateGroup0.getId(), SHARED); }); // sync join messages diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java index 682b6d1a0..4e87aaa73 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java @@ -478,11 +478,11 @@ public class ForumSharingIntegrationTest .contains(contact0From1)); // and both have each other's invitations (and no response) - assertEquals(2, withinTransactionReturns(db0, txn2 -> - forumSharingManager0.getMessageHeaders(txn2, contactId1From0)) + assertEquals(2, withinTransactionReturns(db0, txn -> + forumSharingManager0.getMessageHeaders(txn, contactId1From0)) .size()); - assertEquals(2, withinTransactionReturns(db1, txn2 -> - forumSharingManager1.getMessageHeaders(txn2, contactId0From1)) + assertEquals(2, withinTransactionReturns(db1, txn -> + forumSharingManager1.getMessageHeaders(txn, contactId0From1)) .size()); // there are no more open invitations @@ -561,11 +561,11 @@ public class ForumSharingIntegrationTest withinTransaction(db2, txn -> db2.addGroup(txn, forum0.getGroup())); // add listeners - listener0 = new SharerListener(); + listener0 = new SharerListener(true); c0.getEventBus().addListener(listener0); listener1 = new InviteeListener(true, false); c1.getEventBus().addListener(listener1); - listener2 = new SharerListener(); + listener2 = new SharerListener(true); c2.getEventBus().addListener(listener2); // send invitation @@ -790,13 +790,22 @@ public class ForumSharingIntegrationTest @NotNullByDefault private class SharerListener implements EventListener { + private final boolean accept; private volatile boolean requestReceived = false; private volatile boolean responseReceived = false; + private SharerListener(boolean accept) { + this.accept = accept; + } + @Override public void eventOccurred(Event e) { if (e instanceof ForumInvitationResponseReceivedEvent) { + ForumInvitationResponseReceivedEvent event = + (ForumInvitationResponseReceivedEvent) e; responseReceived = true; + eventWaiter.assertEquals(accept, + event.getMessageHeader().wasAccepted()); eventWaiter.resume(); } // this is only needed for tests where a forum is re-shared @@ -868,17 +877,19 @@ public class ForumSharingIntegrationTest ForumInvitationResponseReceivedEvent event = (ForumInvitationResponseReceivedEvent) e; eventWaiter.assertEquals(contactId0From1, event.getContactId()); + eventWaiter.assertEquals(accept, + event.getMessageHeader().wasAccepted()); eventWaiter.resume(); } } } - private void listenToEvents(boolean accept) throws DbException { - listener0 = new SharerListener(); + private void listenToEvents(boolean accept) { + listener0 = new SharerListener(accept); c0.getEventBus().addListener(listener0); listener1 = new InviteeListener(accept); c1.getEventBus().addListener(listener1); - listener2 = new SharerListener(); + listener2 = new SharerListener(accept); c2.getEventBus().addListener(listener2); }