From a6de1f7144e482af3544351de451b1c821a55e9d Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Tue, 12 Jul 2016 12:28:41 +0000
Subject: [PATCH] Update conversation timestamps for outgoing messages

---
 .../clients/ReadableMessageManagerImpl.java          | 12 +++++++++---
 .../introduction/IntroductionManagerImpl.java        |  4 ++++
 .../briarproject/messaging/MessagingManagerImpl.java |  9 ++++++++-
 .../org/briarproject/sharing/SharingManagerImpl.java |  1 +
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java b/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java
index 5748d16b35..005fed579f 100644
--- a/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java
+++ b/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java
@@ -101,8 +101,7 @@ public abstract class ReadableMessageManagerImpl
 			BdfDictionary meta = new BdfDictionary();
 			meta.put(READ, read);
 			clientHelper.mergeMessageMetadata(txn, m, meta);
-			GroupId g = getContactGroup(db.getContact(txn, c)).getId();
-			updateGroupMetadata(txn, g, -1, local, wasRead, read);
+			updateContactMetadata(txn, c, -1, local, wasRead, read);
 			txn.setComplete();
 		} catch (FormatException e) {
 			throw new DbException(e);
@@ -111,7 +110,14 @@ public abstract class ReadableMessageManagerImpl
 		}
 	}
 
-	private void updateGroupMetadata(Transaction txn, GroupId groupId,
+	protected void updateContactMetadata(Transaction txn, ContactId contactId,
+			long timestamp, boolean local, boolean wasRead, boolean read)
+			throws DbException, FormatException {
+		GroupId g = getContactGroup(db.getContact(txn, contactId)).getId();
+		updateGroupMetadata(txn, g, timestamp, local, wasRead, read);
+	}
+
+	protected void updateGroupMetadata(Transaction txn, GroupId groupId,
 			long timestamp, boolean local, boolean wasRead, boolean read)
 			throws DbException, FormatException {
 		BdfDictionary groupMeta =
diff --git a/briar-core/src/org/briarproject/introduction/IntroductionManagerImpl.java b/briar-core/src/org/briarproject/introduction/IntroductionManagerImpl.java
index 6093d28665..c841b115f2 100644
--- a/briar-core/src/org/briarproject/introduction/IntroductionManagerImpl.java
+++ b/briar-core/src/org/briarproject/introduction/IntroductionManagerImpl.java
@@ -310,6 +310,8 @@ class IntroductionManagerImpl extends ReadableMessageManagerImpl
 		Transaction txn = db.startTransaction(false);
 		try {
 			introducerManager.makeIntroduction(txn, c1, c2, msg, timestamp);
+			updateContactMetadata(txn, c1.getId(), timestamp, true, true, true);
+			updateContactMetadata(txn, c2.getId(), timestamp, true, true, true);
 			txn.setComplete();
 		} finally {
 			db.endTransaction(txn);
@@ -329,6 +331,7 @@ class IntroductionManagerImpl extends ReadableMessageManagerImpl
 					getSessionState(txn, g.getId(), sessionId.getBytes());
 
 			introduceeManager.acceptIntroduction(txn, state, timestamp);
+			updateContactMetadata(txn, contactId, timestamp, true, true, true);
 			txn.setComplete();
 		} finally {
 			db.endTransaction(txn);
@@ -348,6 +351,7 @@ class IntroductionManagerImpl extends ReadableMessageManagerImpl
 					getSessionState(txn, g.getId(), sessionId.getBytes());
 
 			introduceeManager.declineIntroduction(txn, state, timestamp);
+			updateContactMetadata(txn, contactId, timestamp, true, true, true);
 			txn.setComplete();
 		} finally {
 			db.endTransaction(txn);
diff --git a/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java b/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java
index 741fbf4d77..17c9d6349d 100644
--- a/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java
+++ b/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java
@@ -116,6 +116,7 @@ class MessagingManagerImpl extends ReadableMessageManagerImpl
 
 	@Override
 	public void addLocalMessage(PrivateMessage m) throws DbException {
+		Transaction txn = db.startTransaction(false);
 		try {
 			BdfDictionary meta = new BdfDictionary();
 			meta.put(TIMESTAMP, m.getMessage().getTimestamp());
@@ -123,9 +124,15 @@ class MessagingManagerImpl extends ReadableMessageManagerImpl
 			meta.put("contentType", m.getContentType());
 			meta.put(LOCAL, true);
 			meta.put(READ, true);
-			clientHelper.addLocalMessage(m.getMessage(), CLIENT_ID, meta, true);
+			clientHelper.addLocalMessage(txn, m.getMessage(), CLIENT_ID, meta,
+					true);
+			updateGroupMetadata(txn, m.getMessage().getGroupId(),
+					m.getMessage().getTimestamp(), true, true, true);
+			txn.setComplete();
 		} catch (FormatException e) {
 			throw new RuntimeException(e);
+		} finally {
+			db.endTransaction(txn);
 		}
 	}
 
diff --git a/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java b/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
index ccea1b5438..b0ea5519ca 100644
--- a/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
+++ b/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
@@ -872,6 +872,7 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IM
 
 		messageQueueManager
 				.sendMessage(txn, group, timestamp, body, meta);
+		updateGroupMetadata(txn, m.getGroupId(), timestamp, true, true, true);
 	}
 
 	@Override
-- 
GitLab