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 ad2247b4d..75a1f3279 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 @@ -519,7 +519,7 @@ public class ConversationActivity extends BriarActivity try { //noinspection ConstantConditions init in loadGroupId() storeMessage(privateMessageFactory.createPrivateMessage( - messagingGroupId, timestamp, text), text); + messagingGroupId, timestamp, text, emptyList()), text); } catch (FormatException e) { throw new RuntimeException(e); } 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 0a9cffc19..d7f4997a7 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,6 +8,8 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient; +import java.nio.ByteBuffer; + @NotNullByDefault public interface MessagingManager extends ConversationClient { @@ -31,6 +33,12 @@ public interface MessagingManager extends ConversationClient { */ void addLocalMessage(PrivateMessage m) throws DbException; + /** + * Stores a local attachment message. + */ + AttachmentHeader addLocalAttachment(GroupId groupId, long timestamp, + String contentType, ByteBuffer data) throws DbException; + /** * Returns the ID of the contact with the given private conversation. */ diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java index 8fbcf11a8..f87f318cb 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java @@ -4,10 +4,13 @@ import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; +import java.util.List; + @NotNullByDefault public interface PrivateMessageFactory { PrivateMessage createPrivateMessage(GroupId groupId, long timestamp, - String text) throws FormatException; + String text, List attachments) + throws FormatException; } 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 d27a840b0..42d6f1e70 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 @@ -25,6 +25,7 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVer import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.conversation.ConversationMessageHeader; import org.briarproject.briar.api.messaging.Attachment; +import org.briarproject.briar.api.messaging.AttachmentHeader; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageHeader; @@ -150,6 +151,15 @@ class MessagingManagerImpl extends ConversationClientImpl } } + @Override + public AttachmentHeader addLocalAttachment(GroupId groupId, long timestamp, + String contentType, ByteBuffer data) { + // TODO add real implementation + byte[] b = new byte[MessageId.LENGTH]; + new Random().nextBytes(b); + return new AttachmentHeader(new MessageId(b), "image/png"); + } + private ContactId getContactId(Transaction txn, GroupId g) throws DbException { try { diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java index 9bb49d275..d2c592787 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java @@ -6,9 +6,12 @@ import org.briarproject.bramble.api.data.BdfList; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.Message; +import org.briarproject.briar.api.messaging.AttachmentHeader; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; +import java.util.List; + import javax.annotation.concurrent.Immutable; import javax.inject.Inject; @@ -28,7 +31,8 @@ class PrivateMessageFactoryImpl implements PrivateMessageFactory { @Override public PrivateMessage createPrivateMessage(GroupId groupId, long timestamp, - String text) throws FormatException { + String text, List attachments) + throws FormatException { // Validate the arguments if (utf8IsTooLong(text, MAX_PRIVATE_MESSAGE_TEXT_LENGTH)) throw new IllegalArgumentException(); diff --git a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java index f0d37a2c3..851b78f69 100644 --- a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java @@ -53,6 +53,7 @@ import java.util.logging.Logger; import javax.inject.Inject; +import static java.util.Collections.emptyList; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.plugin.BluetoothConstants.UUID_BYTES; @@ -327,7 +328,7 @@ public class TestDataCreatorImpl implements TestDataCreator { private void createPrivateMessage(GroupId groupId, String text, long timestamp, boolean local) throws DbException, FormatException { PrivateMessage m = privateMessageFactory - .createPrivateMessage(groupId, timestamp, text); + .createPrivateMessage(groupId, timestamp, text, emptyList()); BdfDictionary meta = new BdfDictionary(); meta.put("timestamp", timestamp); meta.put("local", local); diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java index d9a9733d6..e68510797 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import javax.inject.Inject; +import static java.util.Collections.emptyList; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH; import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES; @@ -58,7 +59,7 @@ public class MessageSizeIntegrationTest extends BriarTestCase { long timestamp = Long.MAX_VALUE; String text = getRandomString(MAX_PRIVATE_MESSAGE_TEXT_LENGTH); PrivateMessage message = privateMessageFactory.createPrivateMessage( - groupId, timestamp, text); + groupId, timestamp, text, emptyList()); // Check the size of the serialised message int length = message.getMessage().getRawLength(); assertTrue(length > UniqueId.LENGTH + 8 diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java index c17f3a35d..581a397ad 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java @@ -41,6 +41,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; +import static java.util.Collections.emptyList; import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH; import static org.briarproject.bramble.test.TestPluginConfigModule.MAX_LATENCY; import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID; @@ -121,7 +122,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { PrivateMessageFactory privateMessageFactory = device.getPrivateMessageFactory(); PrivateMessage message = privateMessageFactory.createPrivateMessage( - groupId, System.currentTimeMillis(), "Hi!"); + groupId, System.currentTimeMillis(), "Hi!", emptyList()); messagingManager.addLocalMessage(message); } diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt index 5d2ba863e..bb5085496 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt @@ -73,7 +73,7 @@ constructor( val group = messagingManager.getContactGroup(contact) val now = clock.currentTimeMillis() - val m = privateMessageFactory.createPrivateMessage(group.id, now, message) + val m = privateMessageFactory.createPrivateMessage(group.id, now, message, emptyList()) messagingManager.addLocalMessage(m) return ctx.json(m.output(contact.id, message)) diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt index 13cfb0d9a..0967a86f9 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt @@ -110,7 +110,8 @@ internal class MessagingControllerImplTest : ControllerTest() { privateMessageFactory.createPrivateMessage( group.id, timestamp, - text + text, + emptyList() ) } returns privateMessage every { messagingManager.addLocalMessage(privateMessage) } just runs