Remove unnecessary information from private message classes

This commit is contained in:
Torsten Grote
2018-09-04 15:57:52 -03:00
parent 817df9c75a
commit 2d9345c018
34 changed files with 137 additions and 214 deletions

View File

@@ -36,7 +36,6 @@ import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.keyagreement.ContactExchangeActivity; import org.briarproject.briar.android.keyagreement.ContactExchangeActivity;
import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.api.android.AndroidNotificationManager; 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.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionRequest;
import org.briarproject.briar.api.introduction.IntroductionResponse; 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(() -> { runOnUiThreadUnlessDestroyed(() -> {
adapter.incrementRevision(); adapter.incrementRevision();
int position = adapter.findItemPosition(c); int position = adapter.findItemPosition(c);

View File

@@ -11,7 +11,6 @@ import org.briarproject.briar.R;
import org.briarproject.briar.android.contact.ConversationRequestItem.RequestType; import org.briarproject.briar.android.contact.ConversationRequestItem.RequestType;
import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.blog.BlogInvitationRequest;
import org.briarproject.briar.api.blog.BlogInvitationResponse; 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.ForumInvitationRequest;
import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.forum.ForumInvitationResponse;
import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.introduction.IntroductionRequest;
@@ -92,7 +91,7 @@ abstract class ConversationItem {
if (ir.isLocal()) { if (ir.isLocal()) {
String text = ctx.getString(R.string.introduction_request_sent, String text = ctx.getString(R.string.introduction_request_sent,
contactName, ir.getName()); contactName, ir.getName());
return new ConversationNoticeOutItem(ir.getMessageId(), return new ConversationNoticeOutItem(ir.getId(),
ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(), ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(),
ir.isSent(), ir.isSeen()); ir.isSent(), ir.isSeen());
} else { } else {
@@ -109,7 +108,7 @@ abstract class ConversationItem {
text = ctx.getString(R.string.introduction_request_received, text = ctx.getString(R.string.introduction_request_received,
contactName, ir.getName()); contactName, ir.getName());
} }
return new ConversationRequestItem(ir.getMessageId(), return new ConversationRequestItem(ir.getId(),
ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text, ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text,
ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, ir.getMessage(), ir.getTimestamp(), ir.isRead(), null,
ir.wasAnswered(), false); ir.wasAnswered(), false);
@@ -132,9 +131,8 @@ abstract class ConversationItem {
R.string.introduction_response_declined_sent, R.string.introduction_response_declined_sent,
ir.getName()); ir.getName());
} }
return new ConversationNoticeOutItem(ir.getMessageId(), return new ConversationNoticeOutItem(ir.getId(), ir.getGroupId(),
ir.getGroupId(), text, null, ir.getTimestamp(), ir.isSent(), text, null, ir.getTimestamp(), ir.isSent(), ir.isSeen());
ir.isSeen());
} else { } else {
String text; String text;
if (ir.wasAccepted()) { if (ir.wasAccepted()) {
@@ -152,9 +150,8 @@ abstract class ConversationItem {
contactName, ir.getName()); contactName, ir.getName());
} }
} }
return new ConversationNoticeInItem(ir.getMessageId(), return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(),
ir.getGroupId(), text, null, ir.getTimestamp(), text, null, ir.getTimestamp(), ir.isRead());
ir.isRead());
} }
} }
@@ -272,12 +269,10 @@ abstract class ConversationItem {
/** /**
* This method should not be used to display the resulting ConversationItem * This method should not be used to display the resulting ConversationItem
* in the UI, but only to update list information based on the * in the UI, but only to update list information based on the
* BaseMessageHeader. * PrivateMessageHeader.
**/ **/
static ConversationItem from(Context ctx, BaseMessageHeader h) { static ConversationItem from(Context ctx, PrivateMessageHeader h) {
if (h instanceof PrivateMessageHeader) { if(h instanceof IntroductionRequest) {
return from((PrivateMessageHeader) h);
} else if(h instanceof IntroductionRequest) {
return from(ctx, "", (IntroductionRequest) h); return from(ctx, "", (IntroductionRequest) h);
} else if(h instanceof IntroductionResponse) { } else if(h instanceof IntroductionResponse) {
return from(ctx, "", (IntroductionResponse) h); return from(ctx, "", (IntroductionResponse) h);
@@ -286,7 +281,7 @@ abstract class ConversationItem {
} else if(h instanceof InvitationResponse) { } else if(h instanceof InvitationResponse) {
return from(ctx, "", (InvitationResponse) h); return from(ctx, "", (InvitationResponse) h);
} else { } else {
throw new IllegalArgumentException("Unknown message header"); return from(h);
} }
} }

View File

@@ -88,7 +88,7 @@ class ForumControllerImpl extends
(ForumInvitationResponse) f.getResponse(); (ForumInvitationResponse) f.getResponse();
if (r.getShareableId().equals(getGroupId()) && r.wasAccepted()) { if (r.getShareableId().equals(getGroupId()) && r.wasAccepted()) {
LOG.info("Forum invitation was accepted"); LOG.info("Forum invitation was accepted");
onForumInvitationAccepted(r.getContactId()); onForumInvitationAccepted(f.getContactId());
} }
} else if (e instanceof ContactLeftShareableEvent) { } else if (e instanceof ContactLeftShareableEvent) {
ContactLeftShareableEvent c = (ContactLeftShareableEvent) e; ContactLeftShareableEvent c = (ContactLeftShareableEvent) e;

View File

@@ -103,7 +103,7 @@ class GroupControllerImpl extends
(GroupInvitationResponse) g.getResponse(); (GroupInvitationResponse) g.getResponse();
if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) { if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) {
listener.runOnUiThreadUnlessDestroyed( listener.runOnUiThreadUnlessDestroyed(
() -> listener.onInvitationAccepted(r.getContactId())); () -> listener.onInvitationAccepted(g.getContactId()));
} }
} else if (e instanceof GroupDissolvedEvent) { } else if (e instanceof GroupDissolvedEvent) {
GroupDissolvedEvent g = (GroupDissolvedEvent) e; GroupDissolvedEvent g = (GroupDissolvedEvent) e;

View File

@@ -17,7 +17,7 @@ public class BlogInvitationRequest extends InvitationRequest<Blog> {
SessionId sessionId, Blog blog, ContactId contactId, SessionId sessionId, Blog blog, ContactId contactId,
@Nullable String message, boolean available, boolean canBeOpened) { @Nullable String message, boolean available, boolean canBeOpened) {
super(id, groupId, time, local, sent, seen, read, sessionId, blog, super(id, groupId, time, local, sent, seen, read, sessionId, blog,
contactId, message, available, canBeOpened); message, available, canBeOpened);
} }
public String getBlogAuthorName() { public String getBlogAuthorName() {

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.api.blog; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -12,10 +11,9 @@ public class BlogInvitationResponse extends InvitationResponse {
public BlogInvitationResponse(MessageId id, GroupId groupId, long time, public BlogInvitationResponse(MessageId id, GroupId groupId, long time,
boolean local, boolean sent, boolean seen, boolean read, boolean local, boolean sent, boolean seen, boolean read,
SessionId sessionId, GroupId blogId, ContactId contactId, SessionId sessionId, GroupId blogId, boolean accept) {
boolean accept) {
super(id, groupId, time, local, sent, seen, read, sessionId, blogId, super(id, groupId, time, local, sent, seen, read, sessionId, blogId,
contactId, accept); accept);
} }
} }

View File

@@ -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;
}
}

View File

@@ -19,7 +19,7 @@ public class ForumInvitationRequest extends InvitationRequest<Forum> {
SessionId sessionId, Forum forum, ContactId contactId, SessionId sessionId, Forum forum, ContactId contactId,
@Nullable String message, boolean available, boolean canBeOpened) { @Nullable String message, boolean available, boolean canBeOpened) {
super(id, groupId, time, local, sent, seen, read, sessionId, forum, super(id, groupId, time, local, sent, seen, read, sessionId, forum,
contactId, message, available, canBeOpened); message, available, canBeOpened);
} }
public String getForumName() { public String getForumName() {

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.api.forum; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -15,10 +14,9 @@ public class ForumInvitationResponse extends InvitationResponse {
public ForumInvitationResponse(MessageId id, GroupId groupId, long time, public ForumInvitationResponse(MessageId id, GroupId groupId, long time,
boolean local, boolean sent, boolean seen, boolean read, boolean local, boolean sent, boolean seen, boolean read,
SessionId sessionId, GroupId forumId, ContactId contactId, SessionId sessionId, GroupId forumId, boolean accept) {
boolean accept) {
super(id, groupId, time, local, sent, seen, read, sessionId, forumId, super(id, groupId, time, local, sent, seen, read, sessionId, forumId,
contactId, accept); accept);
} }
} }

View File

@@ -3,41 +3,26 @@ package org.briarproject.briar.api.introduction;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; 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.client.SessionId;
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import static org.briarproject.briar.api.introduction.Role.INTRODUCER;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class IntroductionMessage extends BaseMessageHeader { public abstract class IntroductionMessage extends PrivateMessageHeader {
private final SessionId sessionId; private final SessionId sessionId;
private final MessageId messageId;
private final Role role;
IntroductionMessage(SessionId sessionId, MessageId messageId, 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) { boolean seen, boolean read) {
super(messageId, groupId, time, local, sent, seen, read); super(messageId, groupId, time, local, sent, seen, read);
this.sessionId = sessionId; this.sessionId = sessionId;
this.messageId = messageId;
this.role = role;
} }
public SessionId getSessionId() { public SessionId getSessionId() {
return sessionId; return sessionId;
} }
public MessageId getMessageId() {
return messageId;
}
public boolean isIntroducer() {
return role == INTRODUCER;
}
} }

View File

@@ -1,5 +1,6 @@
package org.briarproject.briar.api.introduction; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -10,25 +11,28 @@ import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class IntroductionRequest extends IntroductionResponse { public class IntroductionRequest extends IntroductionMessage {
private final Author introducedAuthor;
@Nullable @Nullable
private final String message; private final String message;
private final boolean answered, exists; private final boolean answered, exists;
public IntroductionRequest(SessionId sessionId, MessageId messageId, public IntroductionRequest(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, String name, boolean accepted, boolean seen, boolean read, Author introducedAuthor,
@Nullable String message, boolean answered, boolean exists) { @Nullable String message, boolean answered, boolean exists) {
super(sessionId, messageId, groupId, time, local, sent, seen, read);
super(sessionId, messageId, groupId, role, time, local, sent, seen, this.introducedAuthor = introducedAuthor;
read, name, accepted);
this.message = message; this.message = message;
this.answered = answered; this.answered = answered;
this.exists = exists; this.exists = exists;
} }
public String getName() {
return introducedAuthor.getName();
}
@Nullable @Nullable
public String getMessage() { public String getMessage() {
return message; return message;

View File

@@ -7,20 +7,22 @@ import org.briarproject.briar.api.client.SessionId;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import static org.briarproject.briar.api.introduction.Role.INTRODUCER;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class IntroductionResponse extends IntroductionMessage { public class IntroductionResponse extends IntroductionMessage {
private final String name; private final String name;
private final Role role;
private final boolean accepted; private final boolean accepted;
public IntroductionResponse(SessionId sessionId, MessageId messageId, public IntroductionResponse(SessionId sessionId, MessageId messageId,
GroupId groupId, Role role, long time, boolean local, boolean sent, GroupId groupId, Role role, long time, boolean local, boolean sent,
boolean seen, boolean read, String name, boolean accepted) { boolean seen, boolean read, String name, boolean accepted) {
super(sessionId, messageId, groupId, role, time, local, sent, seen, super(sessionId, messageId, groupId, time, local, sent, seen, read);
read);
this.name = name; this.name = name;
this.role = role;
this.accepted = accepted; this.accepted = accepted;
} }
@@ -28,6 +30,10 @@ public class IntroductionResponse extends IntroductionMessage {
return name; return name;
} }
public boolean isIntroducer() {
return role == INTRODUCER;
}
public boolean wasAccepted() { public boolean wasAccepted() {
return accepted; return accepted;
} }

View File

@@ -3,18 +3,55 @@ package org.briarproject.briar.api.messaging;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.api.client.BaseMessageHeader;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @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, public PrivateMessageHeader(MessageId id, GroupId groupId, long timestamp,
boolean local, boolean read, boolean sent, boolean seen) { 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;
} }
} }

View File

@@ -20,7 +20,7 @@ public class GroupInvitationRequest extends InvitationRequest<PrivateGroup> {
SessionId sessionId, PrivateGroup shareable, ContactId contactId, SessionId sessionId, PrivateGroup shareable, ContactId contactId,
@Nullable String message, boolean available, boolean canBeOpened) { @Nullable String message, boolean available, boolean canBeOpened) {
super(id, groupId, time, local, sent, seen, read, sessionId, shareable, super(id, groupId, time, local, sent, seen, read, sessionId, shareable,
contactId, message, available, canBeOpened); message, available, canBeOpened);
} }
} }

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.api.privategroup.invitation; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -15,10 +14,9 @@ public class GroupInvitationResponse extends InvitationResponse {
public GroupInvitationResponse(MessageId id, GroupId groupId, long time, public GroupInvitationResponse(MessageId id, GroupId groupId, long time,
boolean local, boolean sent, boolean seen, boolean read, boolean local, boolean sent, boolean seen, boolean read,
SessionId sessionId, GroupId shareableId, ContactId contactId, SessionId sessionId, GroupId shareableId, boolean accept) {
boolean accept) {
super(id, groupId, time, local, sent, seen, read, sessionId, super(id, groupId, time, local, sent, seen, read, sessionId,
shareableId, contactId, accept); shareableId, accept);
} }
} }

View File

@@ -1,36 +1,28 @@
package org.briarproject.briar.api.sharing; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; 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.client.SessionId;
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class InvitationMessage extends BaseMessageHeader { public abstract class InvitationMessage extends PrivateMessageHeader {
private final SessionId sessionId; private final SessionId sessionId;
private final ContactId contactId;
public InvitationMessage(MessageId id, GroupId groupId, long time, public InvitationMessage(MessageId id, GroupId groupId, long time,
boolean local, boolean sent, boolean seen, boolean read, boolean local, boolean sent, boolean seen, boolean read,
SessionId sessionId, ContactId contactId) { SessionId sessionId) {
super(id, groupId, time, local, sent, seen, read); super(id, groupId, time, local, sent, seen, read);
this.sessionId = sessionId; this.sessionId = sessionId;
this.contactId = contactId;
} }
public SessionId getSessionId() { public SessionId getSessionId() {
return sessionId; return sessionId;
} }
public ContactId getContactId() {
return contactId;
}
} }

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.api.sharing; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -11,7 +10,8 @@ import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class InvitationRequest<S extends Shareable> extends InvitationMessage { public abstract class InvitationRequest<S extends Shareable>
extends InvitationMessage {
private final S shareable; private final S shareable;
@Nullable @Nullable
@@ -20,9 +20,9 @@ public class InvitationRequest<S extends Shareable> extends InvitationMessage {
public InvitationRequest(MessageId id, GroupId groupId, long time, public InvitationRequest(MessageId id, GroupId groupId, long time,
boolean local, boolean sent, boolean seen, boolean read, 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) { @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.shareable = shareable;
this.message = message; this.message = message;
this.available = available; this.available = available;

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.api.sharing; 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.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
@@ -10,7 +9,7 @@ import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class InvitationResponse extends InvitationMessage { public abstract class InvitationResponse extends InvitationMessage {
private final GroupId shareableId; private final GroupId shareableId;
private final boolean accept; private final boolean accept;
@@ -18,8 +17,8 @@ public class InvitationResponse extends InvitationMessage {
public InvitationResponse(MessageId id, GroupId groupId, public InvitationResponse(MessageId id, GroupId groupId,
long time, boolean local, boolean sent, boolean seen, long time, boolean local, boolean sent, boolean seen,
boolean read, SessionId sessionId, GroupId shareableId, boolean read, SessionId sessionId, GroupId shareableId,
ContactId contactId, boolean accept) { boolean accept) {
super(id, groupId, time, local, sent, seen, read, sessionId, contactId); super(id, groupId, time, local, sent, seen, read, sessionId);
this.shareableId = shareableId; this.shareableId = shareableId;
this.accept = accept; this.accept = accept;
} }

View File

@@ -1,7 +1,6 @@
package org.briarproject.briar.api.sharing; package org.briarproject.briar.api.sharing;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
@NotNullByDefault @NotNullByDefault
@@ -9,8 +8,6 @@ public interface Shareable {
GroupId getId(); GroupId getId();
Group getGroup();
String getName(); String getName();
} }

View File

@@ -41,7 +41,6 @@ import javax.inject.Inject;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.util.LogUtils.logException; 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_AUTH;
import static org.briarproject.briar.introduction.IntroduceeState.AWAIT_RESPONSES; import static org.briarproject.briar.introduction.IntroduceeState.AWAIT_RESPONSES;
import static org.briarproject.briar.introduction.IntroduceeState.LOCAL_ACCEPTED; import static org.briarproject.briar.introduction.IntroduceeState.LOCAL_ACCEPTED;
@@ -255,11 +254,10 @@ class IntroduceeProtocolEngine
localAuthor.getId()); localAuthor.getId());
boolean contactExists = contactManager boolean contactExists = contactManager
.contactExists(txn, m.getAuthor().getId(), localAuthor.getId()); .contactExists(txn, m.getAuthor().getId(), localAuthor.getId());
IntroductionRequest request = IntroductionRequest request = new IntroductionRequest(s.getSessionId(),
new IntroductionRequest(s.getSessionId(), m.getMessageId(), m.getMessageId(), m.getGroupId(), m.getTimestamp(), false,
m.getGroupId(), INTRODUCEE, m.getTimestamp(), false, false, false, false, m.getAuthor(), m.getMessage(), false,
false, false, false, m.getAuthor().getName(), false, contactExists);
m.getMessage(), false, contactExists);
IntroductionRequestReceivedEvent e = IntroductionRequestReceivedEvent e =
new IntroductionRequestReceivedEvent(c.getId(), request); new IntroductionRequestReceivedEvent(c.getId(), request);
txn.attach(e); txn.attach(e);

View File

@@ -472,10 +472,9 @@ class IntroductionManagerImpl extends ConversationClientImpl
localAuthor.getId()); localAuthor.getId());
return new IntroductionRequest(sessionId, m, contactGroupId, return new IntroductionRequest(sessionId, m, contactGroupId,
role, meta.getTimestamp(), meta.isLocal(), meta.getTimestamp(), meta.isLocal(), status.isSent(),
status.isSent(), status.isSeen(), meta.isRead(), status.isSeen(), meta.isRead(), author, message,
author.getName(), false, message, !meta.isAvailableToAnswer(), !meta.isAvailableToAnswer(), contactExists);
contactExists);
} }
private IntroductionResponse parseInvitationResponse(GroupId contactGroupId, private IntroductionResponse parseInvitationResponse(GroupId contactGroupId,

View File

@@ -258,6 +258,6 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
return new GroupInvitationResponse(m.getId(), m.getContactGroupId(), return new GroupInvitationResponse(m.getId(), m.getContactGroupId(),
m.getTimestamp(), false, false, true, false, sessionId, m.getTimestamp(), false, false, true, false, sessionId,
m.getPrivateGroupId(), c, accept); m.getPrivateGroupId(), accept);
} }
} }

View File

@@ -434,7 +434,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
return new GroupInvitationResponse(m, contactGroupId, return new GroupInvitationResponse(m, contactGroupId,
meta.getTimestamp(), meta.isLocal(), status.isSent(), meta.getTimestamp(), meta.isLocal(), status.isSent(),
status.isSeen(), meta.isRead(), sessionId, status.isSeen(), meta.isRead(), sessionId,
meta.getPrivateGroupId(), c, accept); meta.getPrivateGroupId(), accept);
} }
@Override @Override

View File

@@ -30,11 +30,10 @@ public class BlogInvitationFactoryImpl
@Override @Override
public BlogInvitationResponse createInvitationResponse(MessageId id, public BlogInvitationResponse createInvitationResponse(MessageId id,
GroupId contactGroupId, long time, boolean local, boolean sent, GroupId contactGroupId, long time, boolean local, boolean sent,
boolean seen, boolean read, GroupId shareableId, boolean seen, boolean read, GroupId shareableId, boolean accept) {
ContactId contactId, boolean accept) {
SessionId sessionId = new SessionId(shareableId.getBytes()); SessionId sessionId = new SessionId(shareableId.getBytes());
return new BlogInvitationResponse(id, contactGroupId, time, local, return new BlogInvitationResponse(id, contactGroupId, time, local,
sent, seen, read, sessionId, shareableId, contactId, accept); sent, seen, read, sessionId, shareableId, accept);
} }
} }

View File

@@ -63,7 +63,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl<Blog> {
BlogInvitationResponse response = invitationFactory BlogInvitationResponse response = invitationFactory
.createInvitationResponse(m.getId(), m.getContactGroupId(), .createInvitationResponse(m.getId(), m.getContactGroupId(),
m.getTimestamp(), false, false, true, false, m.getTimestamp(), false, false, true, false,
m.getShareableId(), contactId, true); m.getShareableId(), true);
return new BlogInvitationResponseReceivedEvent(contactId, response); return new BlogInvitationResponseReceivedEvent(contactId, response);
} }
@@ -73,7 +73,7 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl<Blog> {
BlogInvitationResponse response = invitationFactory BlogInvitationResponse response = invitationFactory
.createInvitationResponse(m.getId(), m.getContactGroupId(), .createInvitationResponse(m.getId(), m.getContactGroupId(),
m.getTimestamp(), false, false, true, false, m.getTimestamp(), false, false, true, false,
m.getShareableId(), contactId, true); m.getShareableId(), true);
return new BlogInvitationResponseReceivedEvent(contactId, response); return new BlogInvitationResponseReceivedEvent(contactId, response);
} }

View File

@@ -80,8 +80,8 @@ class BlogSharingManagerImpl extends SharingManagerImpl<Blog>
// Pre-share both blogs, if they have not been shared already // Pre-share both blogs, if they have not been shared already
try { try {
preShareShareable(txn, c, ourBlog); preShareGroup(txn, c, ourBlog.getGroup());
preShareShareable(txn, c, theirBlog); preShareGroup(txn, c, theirBlog.getGroup());
} catch (FormatException e) { } catch (FormatException e) {
throw new DbException(e); throw new DbException(e);
} }

View File

@@ -31,10 +31,10 @@ public class ForumInvitationFactoryImpl
public ForumInvitationResponse createInvitationResponse(MessageId id, public ForumInvitationResponse createInvitationResponse(MessageId id,
GroupId contactGroupId, long time, boolean local, boolean sent, GroupId contactGroupId, long time, boolean local, boolean sent,
boolean seen, boolean read, GroupId shareableId, boolean seen, boolean read, GroupId shareableId,
ContactId contactId, boolean accept) { boolean accept) {
SessionId sessionId = new SessionId(shareableId.getBytes()); SessionId sessionId = new SessionId(shareableId.getBytes());
return new ForumInvitationResponse(id, contactGroupId, time, local, return new ForumInvitationResponse(id, contactGroupId, time, local,
sent, seen, read, sessionId, shareableId, contactId, accept); sent, seen, read, sessionId, shareableId, accept);
} }
} }

View File

@@ -65,7 +65,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl<Forum> {
ForumInvitationResponse response = invitationFactory ForumInvitationResponse response = invitationFactory
.createInvitationResponse(m.getId(), m.getContactGroupId(), .createInvitationResponse(m.getId(), m.getContactGroupId(),
m.getTimestamp(), false, false, true, false, m.getTimestamp(), false, false, true, false,
m.getShareableId(), contactId, true); m.getShareableId(), true);
return new ForumInvitationResponseReceivedEvent(contactId, response); return new ForumInvitationResponseReceivedEvent(contactId, response);
} }
@@ -75,7 +75,7 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl<Forum> {
ForumInvitationResponse response = invitationFactory ForumInvitationResponse response = invitationFactory
.createInvitationResponse(m.getId(), m.getContactGroupId(), .createInvitationResponse(m.getId(), m.getContactGroupId(),
m.getTimestamp(), false, false, true, false, m.getTimestamp(), false, false, true, false,
m.getShareableId(), contactId, true); m.getShareableId(), true);
return new ForumInvitationResponseReceivedEvent(contactId, response); return new ForumInvitationResponseReceivedEvent(contactId, response);
} }

View File

@@ -16,6 +16,6 @@ public interface InvitationFactory<S extends Shareable, I extends InvitationResp
I createInvitationResponse(MessageId id, I createInvitationResponse(MessageId id,
GroupId contactGroupId, long time, boolean local, boolean sent, GroupId contactGroupId, long time, boolean local, boolean sent,
boolean seen, boolean read, GroupId shareableId, boolean seen, boolean read, GroupId shareableId,
ContactId contactId, boolean accept); boolean accept);
} }

View File

@@ -156,29 +156,29 @@ abstract class SharingManagerImpl<S extends Shareable>
} }
/** /**
* 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. * and the Contact c in state SHARING.
* If a session already exists, this does nothing. * 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 { throws DbException, FormatException {
// Return if a session already exists with the contact // Return if a session already exists with the contact
GroupId contactGroupId = getContactGroup(c).getId(); GroupId contactGroupId = getContactGroup(c).getId();
StoredSession existingSession = getSession(txn, contactGroupId, StoredSession existingSession = getSession(txn, contactGroupId,
getSessionId(shareable.getId())); getSessionId(g.getId()));
if (existingSession != null) return; if (existingSession != null) return;
// Add the shareable // Add the shareable's group
db.addGroup(txn, shareable.getGroup()); db.addGroup(txn, g);
// Apply the client's visibility // Apply the client's visibility
Visibility client = clientVersioningManager.getClientVisibility(txn, Visibility client = clientVersioningManager.getClientVisibility(txn,
c.getId(), getShareableClientId(), getShareableMajorVersion()); 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 // Initialize session in sharing state
Session session = new Session(SHARING, contactGroupId, Session session = new Session(SHARING, contactGroupId, g.getId(),
shareable.getId(), null, null, 0, 0); null, null, 0, 0);
MessageId storageId = createStorageId(txn, contactGroupId); MessageId storageId = createStorageId(txn, contactGroupId);
storeSession(txn, storageId, session); storeSession(txn, storageId, session);
} }
@@ -343,11 +343,11 @@ abstract class SharingManagerImpl<S extends Shareable>
parseInvitationRequest(txn, c, m, meta, status)); parseInvitationRequest(txn, c, m, meta, status));
} else if (type == ACCEPT) { } else if (type == ACCEPT) {
messages.add( messages.add(
parseInvitationResponse(c, contactGroupId, m, meta, parseInvitationResponse(contactGroupId, m, meta,
status, true)); status, true));
} else if (type == DECLINE) { } else if (type == DECLINE) {
messages.add( messages.add(
parseInvitationResponse(c, contactGroupId, m, meta, parseInvitationResponse(contactGroupId, m, meta,
status, false)); status, false));
} }
} }
@@ -374,13 +374,12 @@ abstract class SharingManagerImpl<S extends Shareable>
meta.isAvailableToAnswer(), canBeOpened); meta.isAvailableToAnswer(), canBeOpened);
} }
private InvitationResponse parseInvitationResponse(ContactId c, private InvitationResponse parseInvitationResponse(GroupId contactGroupId,
GroupId contactGroupId, MessageId m, MessageMetadata meta, MessageId m, MessageMetadata meta, MessageStatus status,
MessageStatus status, boolean accept) boolean accept) {
throws DbException, FormatException {
return invitationFactory.createInvitationResponse(m, contactGroupId, return invitationFactory.createInvitationResponse(m, contactGroupId,
meta.getTimestamp(), meta.isLocal(), status.isSent(), meta.getTimestamp(), meta.isLocal(), status.isSent(),
status.isSeen(), meta.isRead(), meta.getShareableId(), c, status.isSeen(), meta.isRead(), meta.getShareableId(),
accept); accept);
} }

View File

@@ -100,7 +100,6 @@ public class GroupInvitationIntegrationTest
assertEquals(msg, request.getMessage()); assertEquals(msg, request.getMessage());
assertEquals(author0, request.getShareable().getCreator()); assertEquals(author0, request.getShareable().getCreator());
assertEquals(timestamp, request.getTimestamp()); assertEquals(timestamp, request.getTimestamp());
assertEquals(contactId0From1, request.getContactId());
assertEquals(privateGroup0.getName(), request.getShareable().getName()); assertEquals(privateGroup0.getName(), request.getShareable().getName());
assertFalse(request.isLocal()); assertFalse(request.isLocal());
assertFalse(request.isRead()); assertFalse(request.isRead());
@@ -126,7 +125,6 @@ public class GroupInvitationIntegrationTest
if (m instanceof GroupInvitationResponse) { if (m instanceof GroupInvitationResponse) {
foundResponse = true; foundResponse = true;
InvitationResponse response = (GroupInvitationResponse) m; InvitationResponse response = (GroupInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
assertFalse(response.wasAccepted()); assertFalse(response.wasAccepted());
} }
@@ -143,7 +141,6 @@ public class GroupInvitationIntegrationTest
if (m instanceof GroupInvitationResponse) { if (m instanceof GroupInvitationResponse) {
foundResponse = true; foundResponse = true;
InvitationResponse response = (GroupInvitationResponse) m; InvitationResponse response = (GroupInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertFalse(response.isLocal()); assertFalse(response.isLocal());
assertFalse(response.wasAccepted()); assertFalse(response.wasAccepted());
} }

View File

@@ -706,7 +706,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
assertEquals(2, messages.size()); assertEquals(2, messages.size());
for (InvitationMessage m : messages) { for (InvitationMessage m : messages) {
assertEquals(contactGroup.getId(), m.getGroupId()); assertEquals(contactGroup.getId(), m.getGroupId());
assertEquals(contactId, m.getContactId());
if (m.getId().equals(message.getId())) { if (m.getId().equals(message.getId())) {
assertTrue(m instanceof GroupInvitationRequest); assertTrue(m instanceof GroupInvitationRequest);
assertEquals(time1, m.getTimestamp()); assertEquals(time1, m.getTimestamp());

View File

@@ -153,18 +153,14 @@ public class BlogSharingIntegrationTest
// check other things are alright with the message // check other things are alright with the message
for (InvitationMessage m : list) { for (InvitationMessage m : list) {
if (m instanceof BlogInvitationRequest) { if (m instanceof BlogInvitationRequest) {
BlogInvitationRequest invitation = BlogInvitationRequest invitation = (BlogInvitationRequest) m;
(BlogInvitationRequest) m;
assertFalse(invitation.isAvailable()); assertFalse(invitation.isAvailable());
assertEquals(blog2.getAuthor().getName(), assertEquals(blog2.getAuthor().getName(),
invitation.getBlogAuthorName()); invitation.getBlogAuthorName());
assertFalse(invitation.getShareable().isRssFeed()); assertFalse(invitation.getShareable().isRssFeed());
assertEquals(contactId1From0, invitation.getContactId());
assertEquals("Hi!", invitation.getMessage()); assertEquals("Hi!", invitation.getMessage());
} else { } else {
BlogInvitationResponse response = BlogInvitationResponse response = (BlogInvitationResponse) m;
(BlogInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertTrue(response.wasAccepted()); assertTrue(response.wasAccepted());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
} }
@@ -228,18 +224,14 @@ public class BlogSharingIntegrationTest
// check other things are alright with the message // check other things are alright with the message
for (InvitationMessage m : list) { for (InvitationMessage m : list) {
if (m instanceof BlogInvitationRequest) { if (m instanceof BlogInvitationRequest) {
BlogInvitationRequest invitation = BlogInvitationRequest invitation = (BlogInvitationRequest) m;
(BlogInvitationRequest) m;
assertFalse(invitation.isAvailable()); assertFalse(invitation.isAvailable());
assertEquals(rssBlog.getAuthor().getName(), assertEquals(rssBlog.getAuthor().getName(),
invitation.getBlogAuthorName()); invitation.getBlogAuthorName());
assertTrue(invitation.getShareable().isRssFeed()); assertTrue(invitation.getShareable().isRssFeed());
assertEquals(contactId1From0, invitation.getContactId());
assertEquals("Hi!", invitation.getMessage()); assertEquals("Hi!", invitation.getMessage());
} else { } else {
BlogInvitationResponse response = BlogInvitationResponse response = (BlogInvitationResponse) m;
(BlogInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertTrue(response.wasAccepted()); assertTrue(response.wasAccepted());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
} }
@@ -291,17 +283,13 @@ public class BlogSharingIntegrationTest
// check things are alright with the message // check things are alright with the message
for (InvitationMessage m : list) { for (InvitationMessage m : list) {
if (m instanceof BlogInvitationRequest) { if (m instanceof BlogInvitationRequest) {
BlogInvitationRequest invitation = BlogInvitationRequest invitation = (BlogInvitationRequest) m;
(BlogInvitationRequest) m;
assertFalse(invitation.isAvailable()); assertFalse(invitation.isAvailable());
assertEquals(blog2.getAuthor().getName(), assertEquals(blog2.getAuthor().getName(),
invitation.getBlogAuthorName()); invitation.getBlogAuthorName());
assertEquals(contactId1From0, invitation.getContactId());
assertEquals(null, invitation.getMessage()); assertEquals(null, invitation.getMessage());
} else { } else {
BlogInvitationResponse response = BlogInvitationResponse response = (BlogInvitationResponse) m;
(BlogInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertFalse(response.wasAccepted()); assertFalse(response.wasAccepted());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
} }

View File

@@ -141,13 +141,11 @@ public class ForumSharingIntegrationTest
(ForumInvitationRequest) m; (ForumInvitationRequest) m;
assertFalse(invitation.isAvailable()); assertFalse(invitation.isAvailable());
assertEquals(forum0.getName(), invitation.getForumName()); assertEquals(forum0.getName(), invitation.getForumName());
assertEquals(contactId1From0, invitation.getContactId());
assertEquals("Hi!", invitation.getMessage()); assertEquals("Hi!", invitation.getMessage());
assertTrue(invitation.canBeOpened()); assertTrue(invitation.canBeOpened());
} else { } else {
ForumInvitationResponse response = ForumInvitationResponse response =
(ForumInvitationResponse) m; (ForumInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertTrue(response.wasAccepted()); assertTrue(response.wasAccepted());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
} }
@@ -196,17 +194,13 @@ public class ForumSharingIntegrationTest
// check things are alright with the forum message // check things are alright with the forum message
for (InvitationMessage m : list) { for (InvitationMessage m : list) {
if (m instanceof ForumInvitationRequest) { if (m instanceof ForumInvitationRequest) {
ForumInvitationRequest invitation = ForumInvitationRequest invitation = (ForumInvitationRequest) m;
(ForumInvitationRequest) m;
assertFalse(invitation.isAvailable()); assertFalse(invitation.isAvailable());
assertEquals(forum0.getName(), invitation.getForumName()); assertEquals(forum0.getName(), invitation.getForumName());
assertEquals(contactId1From0, invitation.getContactId());
assertEquals(null, invitation.getMessage()); assertEquals(null, invitation.getMessage());
assertFalse(invitation.canBeOpened()); assertFalse(invitation.canBeOpened());
} else { } else {
ForumInvitationResponse response = ForumInvitationResponse response = (ForumInvitationResponse) m;
(ForumInvitationResponse) m;
assertEquals(contactId0From1, response.getContactId());
assertFalse(response.wasAccepted()); assertFalse(response.wasAccepted());
assertTrue(response.isLocal()); assertTrue(response.isLocal());
} }