diff --git a/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java b/briar-core/src/org/briarproject/clients/ReadableMessageManagerImpl.java index 5748d16b355daf04d0e502304deb95d2a88ffd15..005fed579f1ba10f1e838030299d1049ebe35577 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 6093d286658d65f1406e108ef81e49e649b3811c..c841b115f2f6f88cd464a8fa365080b1f318528f 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 741fbf4d77338583bb3f532fb38ac99e3af365d8..17c9d6349db328609a3d93da0e98740ed5e88e34 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 ccea1b5438876b47169d2e46cc75e11ed5789b48..b0ea5519caf046532c745295eb1990fdf468509a 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