Add a ConversationItemReceivedEvent

This commit is contained in:
str4d
2016-06-10 05:18:26 +00:00
parent 7a3bd86522
commit 1e8784efe9
7 changed files with 133 additions and 138 deletions

View File

@@ -14,6 +14,14 @@ import org.briarproject.api.conversation.ConversationMessageItem;
import org.briarproject.api.db.DatabaseExecutor;
import org.briarproject.api.db.DbException;
import org.briarproject.api.db.NoSuchMessageException;
import org.briarproject.api.event.ConversationItemReceivedEvent;
import org.briarproject.api.event.Event;
import org.briarproject.api.event.EventBus;
import org.briarproject.api.event.EventListener;
import org.briarproject.api.event.ForumInvitationReceivedEvent;
import org.briarproject.api.event.IntroductionRequestReceivedEvent;
import org.briarproject.api.event.IntroductionResponseReceivedEvent;
import org.briarproject.api.event.PrivateMessageReceivedEvent;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumSharingManager;
import org.briarproject.api.introduction.IntroductionManager;
@@ -41,7 +49,8 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
public class ConversationManagerImpl implements ConversationManager {
public class ConversationManagerImpl implements ConversationManager,
EventListener {
static final ClientId CLIENT_ID = new ClientId(StringUtils.fromHexString(
"05313ec596871e5305181220488fc9c0"
@@ -51,6 +60,7 @@ public class ConversationManagerImpl implements ConversationManager {
Logger.getLogger(ConversationManagerImpl.class.getName());
private final Executor dbExecutor;
private final EventBus eventBus;
private final ForumSharingManager forumSharingManager;
private final IntroductionManager introductionManager;
private final MessagingManager messagingManager;
@@ -60,13 +70,16 @@ public class ConversationManagerImpl implements ConversationManager {
@Inject
ConversationManagerImpl(@DatabaseExecutor Executor dbExecutor,
ForumSharingManager forumSharingManager,
EventBus eventBus, ForumSharingManager forumSharingManager,
IntroductionManager introductionManager,
MessagingManager messagingManager) {
this.dbExecutor = dbExecutor;
this.eventBus = eventBus;
this.forumSharingManager = forumSharingManager;
this.introductionManager = introductionManager;
this.messagingManager = messagingManager;
eventBus.addListener(this);
}
@Override
@@ -74,12 +87,6 @@ public class ConversationManagerImpl implements ConversationManager {
return CLIENT_ID;
}
@Override
public boolean isWrappedClient(ClientId clientId) {
return clientId.equals(introductionManager.getClientId()) ||
clientId.equals(forumSharingManager.getClientId());
}
@Override
public ConversationItem addLocalMessage(PrivateMessage m, byte[] body)
throws DbException {
@@ -218,4 +225,57 @@ public class ConversationManagerImpl implements ConversationManager {
forumSharingManager.setReadFlag(c, id, local, read);
}
}
@Override
public void eventOccurred(Event e) {
if (e instanceof PrivateMessageReceivedEvent) {
PrivateMessageReceivedEvent p = (PrivateMessageReceivedEvent) e;
PrivateMessageHeader h = p.getMessageHeader();
ConversationItem m = ConversationMessageItemImpl.from(h);
loadMessageContent((Partial) m);
try {
ContactId c = getContactId(p.getGroupId());
eventBus.broadcast(new ConversationItemReceivedEvent(m, c));
} catch (DbException dbe) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, dbe.toString(), dbe);
}
} else if (e instanceof IntroductionRequestReceivedEvent) {
IntroductionRequestReceivedEvent event =
(IntroductionRequestReceivedEvent) e;
IntroductionRequest ir = event.getIntroductionRequest();
ConversationItem item =
ConversationIntroductionRequestItemImpl.from(ir);
eventBus.broadcast(
new ConversationItemReceivedEvent(item,
event.getContactId()));
} else if (e instanceof IntroductionResponseReceivedEvent) {
IntroductionResponseReceivedEvent event =
(IntroductionResponseReceivedEvent) e;
IntroductionResponse ir = event.getIntroductionResponse();
ConversationItem item =
ConversationIntroductionResponseItemImpl.from(ir);
eventBus.broadcast(new ConversationItemReceivedEvent(item,
event.getContactId()));
} else if (e instanceof ForumInvitationReceivedEvent) {
ForumInvitationReceivedEvent event =
(ForumInvitationReceivedEvent) e;
try {
Collection<ForumInvitationMessage> msgs = forumSharingManager
.getInvitationMessages(event.getContactId());
for (ForumInvitationMessage i : msgs) {
if (i.getForumName().equals(event.getForum().getName())) {
ConversationItem item =
ConversationForumInvitationItemImpl.from(i);
eventBus.broadcast(
new ConversationItemReceivedEvent(item,
event.getContactId()));
}
}
} catch (DbException dbe) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, dbe.toString(), dbe);
}
}
}
}