diff --git a/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java b/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java index bd9cee321..45c2ecb56 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java @@ -47,8 +47,8 @@ public interface MessageTracker { throws DbException; /** - * Loads the stored message id for the respective group id or returns null - * if none is available. + * Loads the stored message id for the respective group id or returns null + * if none is available. */ @Nullable MessageId loadStoredMessageId(GroupId g) throws DbException; @@ -64,6 +64,16 @@ public interface MessageTracker { */ void setReadFlag(GroupId g, MessageId m, boolean read) throws DbException; + /** + * Resets the {@link GroupCount} to the given msgCount and unreadCount. + * The latestMsgTime will be set to the current time. + *
+ * Such reset is needed when recalculating the counts
+ * after deleting messages from a group.
+ */
+ void resetGroupCount(Transaction txn, GroupId g, int msgCount,
+ int unreadCount) throws DbException;
+
class GroupCount {
private final int msgCount, unreadCount;
diff --git a/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java b/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java
index 9d12c5aba..4ba35c020 100644
--- a/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java
@@ -31,15 +31,6 @@ public abstract class ConversationClientImpl extends BdfIncomingMessageHook
this.messageTracker = messageTracker;
}
- /**
- * Initializes the group count with zero messages,
- * but uses the current time as latest message time for sorting.
- */
- protected void initializeGroupCount(Transaction txn, GroupId g)
- throws DbException {
- messageTracker.initializeGroupCount(txn, g);
- }
-
@Override
public GroupCount getGroupCount(Transaction txn, ContactId contactId)
throws DbException {
diff --git a/briar-core/src/main/java/org/briarproject/briar/client/MessageTrackerImpl.java b/briar-core/src/main/java/org/briarproject/briar/client/MessageTrackerImpl.java
index ef3fcb702..08a94985a 100644
--- a/briar-core/src/main/java/org/briarproject/briar/client/MessageTrackerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/client/MessageTrackerImpl.java
@@ -169,4 +169,12 @@ class MessageTrackerImpl implements MessageTracker {
}
}
+ @Override
+ public void resetGroupCount(Transaction txn, GroupId g, int msgCount,
+ int unreadCount) throws DbException {
+ long now = clock.currentTimeMillis();
+ GroupCount groupCount = new GroupCount(msgCount, unreadCount, now);
+ storeGroupCount(txn, g, groupCount);
+ }
+
}
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
index f7083956b..128f73445 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
@@ -603,7 +603,9 @@ class IntroductionManagerImpl extends ConversationClientImpl
for (MessageStatus status : db.getMessageStatus(txn, c, g)) {
if (!status.isSeen()) notAcked.add(status.getMessageId());
}
- return deleteCompletedSessions(txn, sessions, notAcked);
+ boolean allDeleted = deleteCompletedSessions(txn, sessions, notAcked);
+ recalculateGroupCount(txn, g);
+ return allDeleted;
}
private DeletableSession getDeletableSession(Transaction txn,
@@ -671,6 +673,31 @@ class IntroductionManagerImpl extends ConversationClientImpl
}
}
+ private void recalculateGroupCount(Transaction txn, GroupId g)
+ throws DbException {
+ BdfDictionary query = messageParser.getMessagesVisibleInUiQuery();
+ Map