Use db as SSOT for unread counter.

This commit is contained in:
Alex Hart
2022-07-27 10:35:13 -03:00
committed by Cody Henthorne
parent a7a5f2e8c6
commit e3e9f90094
9 changed files with 52 additions and 215 deletions

View File

@@ -78,6 +78,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
public abstract int getMessageCountForThread(long threadId);
public abstract int getMessageCountForThread(long threadId, long beforeTime);
public abstract boolean hasMeaningfulMessage(long threadId);
public abstract int getIncomingMeaningfulMessageCountSince(long threadId, long afterTime);
public abstract Optional<MmsNotificationInfo> getNotification(long messageId);
public abstract Cursor getExpirationStartedMessages();

View File

@@ -1068,6 +1068,22 @@ public class MmsDatabase extends MessageDatabase {
}
}
@Override
public int getIncomingMeaningfulMessageCountSince(long threadId, long afterTime) {
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.COUNT;
String where = THREAD_ID + " = ? AND " + STORY_TYPE + " = ? AND " + PARENT_STORY_ID + " <= ? AND " + DATE_RECEIVED + " >= ?";
String[] whereArgs = SqlUtil.buildArgs(threadId, 0, 0, afterTime);
try (Cursor cursor = db.query(TABLE_NAME, projection, where, whereArgs, null, null, null, "1")) {
if (cursor != null && cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return 0;
}
}
}
@Override
public void addFailures(long messageId, List<NetworkFailure> failure) {
try {

View File

@@ -398,6 +398,13 @@ public class MmsSmsDatabase extends Database {
return count;
}
public int getIncomingMeaningfulMessageCountSince(long threadId, long afterTime) {
int count = SignalDatabase.sms().getIncomingMeaningfulMessageCountSince(threadId, afterTime);
count += SignalDatabase.mms().getIncomingMeaningfulMessageCountSince(threadId, afterTime);
return count;
}
public int getMessageCountBeforeDate(long date) {
String selection = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " < " + date;

View File

@@ -276,6 +276,23 @@ public class SmsDatabase extends MessageDatabase {
}
}
@Override
public int getIncomingMeaningfulMessageCountSince(long threadId, long afterTime) {
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.COUNT;
SqlUtil.Query meaningfulMessagesQuery = buildMeaningfulMessagesQuery(threadId);
String where = meaningfulMessagesQuery.getWhere() + " AND " + DATE_RECEIVED + " >= ?";
String[] whereArgs = SqlUtil.appendArg(meaningfulMessagesQuery.getWhereArgs(), String.valueOf(afterTime));
try (Cursor cursor = db.query(TABLE_NAME, projection, where, whereArgs, null, null, null, "1")) {
if (cursor != null && cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return 0;
}
}
}
private @NonNull SqlUtil.Query buildMeaningfulMessagesQuery(long threadId) {
String query = THREAD_ID + " = ? AND (NOT " + TYPE + " & ? AND " + TYPE + " != ? AND " + TYPE + " != ? AND " + TYPE + " != ? AND " + TYPE + " & " + GROUP_V2_LEAVE_BITS + " != " + GROUP_V2_LEAVE_BITS + ")";
return SqlUtil.buildQuery(query, threadId, IGNORABLE_TYPESMASK_WHEN_COUNTING, Types.PROFILE_CHANGE_TYPE, Types.CHANGE_NUMBER_TYPE, Types.BOOST_REQUEST_TYPE);