From 71196e3494e3119668418fedf14f5eeeb4ee94da Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Thu, 11 Aug 2016 12:19:10 -0300
Subject: [PATCH] Let clients decide whether to share messages or not

---
 .../src/org/briarproject/api/clients/ClientHelper.java   | 6 ++++++
 .../src/org/briarproject/blogs/BlogManagerImpl.java      | 2 ++
 .../src/org/briarproject/clients/ClientHelperImpl.java   | 6 ++++++
 .../src/org/briarproject/forum/ForumManagerImpl.java     | 2 ++
 .../src/org/briarproject/sync/ValidationManagerImpl.java | 2 --
 .../src/org/briarproject/blogs/BlogManagerImplTest.java  | 1 +
 .../org/briarproject/sync/ValidationManagerImplTest.java | 9 ---------
 7 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/briar-api/src/org/briarproject/api/clients/ClientHelper.java b/briar-api/src/org/briarproject/api/clients/ClientHelper.java
index ea479a7f6e..a3524d2767 100644
--- a/briar-api/src/org/briarproject/api/clients/ClientHelper.java
+++ b/briar-api/src/org/briarproject/api/clients/ClientHelper.java
@@ -69,6 +69,12 @@ public interface ClientHelper {
 	void mergeMessageMetadata(Transaction txn, MessageId m,
 			BdfDictionary metadata) throws DbException, FormatException;
 
+	/**
+	 * Marks the given message as shared or unshared with other contacts.
+	 */
+	void setMessageShared(Transaction txn, Message m, boolean shared)
+			throws DbException;
+
 	byte[] toByteArray(BdfDictionary dictionary) throws FormatException;
 
 	byte[] toByteArray(BdfList list) throws FormatException;
diff --git a/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java b/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
index cc84d7dd2a..0b99f74cb2 100644
--- a/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
+++ b/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
@@ -162,6 +162,8 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 	protected void incomingMessage(Transaction txn, Message m, BdfList list,
 			BdfDictionary meta) throws DbException, FormatException {
 
+		clientHelper.setMessageShared(txn, m, true);
+
 		GroupId groupId = m.getGroupId();
 		BlogPostHeader h = getPostHeaderFromMetadata(txn, m.getId(), meta);
 		BlogPostAddedEvent event =
diff --git a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java b/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
index 61ac38c40d..00778b6b6d 100644
--- a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
+++ b/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
@@ -239,6 +239,12 @@ class ClientHelperImpl implements ClientHelper {
 		db.mergeMessageMetadata(txn, m, metadataEncoder.encode(metadata));
 	}
 
+	@Override
+	public void setMessageShared(Transaction txn, Message m, boolean shared)
+			throws DbException {
+		db.setMessageShared(txn, m, shared);
+	}
+
 	@Override
 	public byte[] toByteArray(BdfDictionary dictionary) throws FormatException {
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
diff --git a/briar-core/src/org/briarproject/forum/ForumManagerImpl.java b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
index 2574ee80da..84f28dbf99 100644
--- a/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
+++ b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
@@ -78,6 +78,8 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 	protected void incomingMessage(Transaction txn, Message m, BdfList body,
 			BdfDictionary meta) throws DbException, FormatException {
 
+		clientHelper.setMessageShared(txn, m, true);
+
 		ForumPostHeader post = getForumPostHeader(txn, m.getId(), meta);
 		ForumPostReceivedEvent event =
 				new ForumPostReceivedEvent(post, m.getGroupId());
diff --git a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
index d767311c91..86cd80d73a 100644
--- a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
+++ b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
@@ -358,8 +358,6 @@ class ValidationManagerImpl implements ValidationManager, Service,
 							throw new InvalidMessageException(
 									"Deleted by Client");
 						}
-
-						db.setMessageShared(txn, m, true);
 						db.setMessageState(txn, m, c, DELIVERED);
 
 						// deliver pending dependents
diff --git a/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java b/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
index efaf20650c..4663b16a09 100644
--- a/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
@@ -192,6 +192,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 		);
 
 		context.checking(new Expectations() {{
+			oneOf(clientHelper).setMessageShared(txn, message, true);
 			oneOf(identityManager)
 					.getAuthorStatus(txn, blog1.getAuthor().getId());
 			will(returnValue(VERIFIED));
diff --git a/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java b/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java
index d7ad56c100..a46a027c77 100644
--- a/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java
@@ -119,7 +119,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Async delivery
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn2b));
-			oneOf(db).setMessageShared(txn2b, message, true);
 			// Call the hook for the first message
 			oneOf(hook).incomingMessage(txn2b, message, metadata);
 			oneOf(db).getRawMessage(txn2b, messageId);
@@ -209,7 +208,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver message in a new transaction
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn3));
-			oneOf(db).setMessageShared(txn3, message, true);
 			oneOf(db).setMessageState(txn3, message, clientId, DELIVERED);
 			oneOf(hook).incomingMessage(txn3, message, metadata);
 			oneOf(db).getRawMessage(txn3, messageId);
@@ -233,7 +231,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver the dependent in a new transaction
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn5));
-			oneOf(db).setMessageShared(txn5, message1, true);
 			oneOf(db).setMessageState(txn5, message1, clientId, DELIVERED);
 			oneOf(hook).incomingMessage(txn5, message1, metadata);
 			oneOf(db).getRawMessage(txn5, messageId1);
@@ -299,7 +296,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver the pending message
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn3));
-			oneOf(db).setMessageShared(txn3, message, true);
 			oneOf(db).setMessageState(txn3, message, clientId, DELIVERED);
 			oneOf(hook).incomingMessage(txn3, message, metadata);
 			oneOf(db).getRawMessage(txn3, messageId);
@@ -499,7 +495,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// async delivery
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn2));
-			oneOf(db).setMessageShared(txn2, message, true);
 			// Call the hook
 			oneOf(hook).incomingMessage(txn2, message, metadata);
 			oneOf(db).getRawMessage(txn2, messageId);
@@ -627,7 +622,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// async delivery
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn2));
-			oneOf(db).setMessageShared(txn2, message, true);
 			// Call the hook
 			oneOf(hook).incomingMessage(txn2, message, metadata);
 			oneOf(db).getRawMessage(txn2, messageId);
@@ -761,7 +755,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver first message
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn2));
-			oneOf(db).setMessageShared(txn2, message, true);
 			oneOf(hook).incomingMessage(txn2, message, metadata);
 			oneOf(db).getRawMessage(txn2, messageId);
 			will(returnValue(raw));
@@ -784,7 +777,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver the pending message
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn4));
-			oneOf(db).setMessageShared(txn4, message1, true);
 			oneOf(hook).incomingMessage(txn4, message1, metadata);
 			oneOf(db).getRawMessage(txn4, messageId1);
 			will(returnValue(raw));
@@ -842,7 +834,6 @@ public class ValidationManagerImplTest extends BriarTestCase {
 			// Deliver first message
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn2));
-			oneOf(db).setMessageShared(txn2, message, true);
 			oneOf(hook).incomingMessage(txn2, message, metadata);
 			oneOf(db).getRawMessage(txn2, messageId);
 			will(returnValue(raw));
-- 
GitLab