mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +00:00
Fix some situations where MessageTable actions were doubled.
This commit is contained in:
@@ -144,10 +144,8 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull Pair<RecipientId, Long> getGroupAddedBy(long threadId, long lastQuitChecked) {
|
private @NonNull Pair<RecipientId, Long> getGroupAddedBy(long threadId, long lastQuitChecked) {
|
||||||
MessageTable mmsDatabase = SignalDatabase.messages();
|
long latestQuit = SignalDatabase.messages().getLatestGroupQuitTimestamp(threadId, lastQuitChecked);
|
||||||
MessageTable smsDatabase = SignalDatabase.messages();
|
RecipientId id = SignalDatabase.messages().getOldestGroupUpdateSender(threadId, latestQuit);
|
||||||
long latestQuit = mmsDatabase.getLatestGroupQuitTimestamp(threadId, lastQuitChecked);
|
|
||||||
RecipientId id = smsDatabase.getOldestGroupUpdateSender(threadId, latestQuit);
|
|
||||||
|
|
||||||
return new Pair<>(id, latestQuit);
|
return new Pair<>(id, latestQuit);
|
||||||
}
|
}
|
||||||
@@ -189,9 +187,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
public @NonNull List<MessageRecord> getMessagesAfterVoiceNoteInclusive(long messageId, long limit) throws NoSuchMessageException {
|
public @NonNull List<MessageRecord> getMessagesAfterVoiceNoteInclusive(long messageId, long limit) throws NoSuchMessageException {
|
||||||
MessageRecord origin = SignalDatabase.messages().getMessageRecord(messageId);
|
MessageRecord origin = SignalDatabase.messages().getMessageRecord(messageId);
|
||||||
List<MessageRecord> mms = SignalDatabase.messages().getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
List<MessageRecord> mms = SignalDatabase.messages().getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
||||||
List<MessageRecord> sms = SignalDatabase.messages().getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
|
||||||
|
|
||||||
mms.addAll(sms);
|
|
||||||
Collections.sort(mms, Comparator.comparingLong(DisplayRecord::getDateReceived));
|
Collections.sort(mms, Comparator.comparingLong(DisplayRecord::getDateReceived));
|
||||||
|
|
||||||
return Stream.of(mms).limit(limit).toList();
|
return Stream.of(mms).limit(limit).toList();
|
||||||
@@ -395,10 +391,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkMessageExists(@NonNull MessageRecord messageRecord) {
|
public boolean checkMessageExists(@NonNull MessageRecord messageRecord) {
|
||||||
MessageTable db = messageRecord.isMms() ? SignalDatabase.messages()
|
try (Cursor cursor = SignalDatabase.messages().getMessageCursor(messageRecord.getId())) {
|
||||||
: SignalDatabase.messages();
|
|
||||||
|
|
||||||
try (Cursor cursor = db.getMessageCursor(messageRecord.getId())) {
|
|
||||||
return cursor != null && cursor.getCount() > 0;
|
return cursor != null && cursor.getCount() > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -460,10 +453,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getSecureMessageCountForInsights() {
|
public int getSecureMessageCountForInsights() {
|
||||||
int count = SignalDatabase.messages().getSecureMessageCountForInsights();
|
return SignalDatabase.messages().getSecureMessageCountForInsights();
|
||||||
count += SignalDatabase.messages().getSecureMessageCountForInsights();
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasMeaningfulMessage(long threadId) {
|
public boolean hasMeaningfulMessage(long threadId) {
|
||||||
@@ -471,8 +461,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SignalDatabase.messages().hasMeaningfulMessage(threadId) ||
|
return SignalDatabase.messages().hasMeaningfulMessage(threadId);
|
||||||
SignalDatabase.messages().hasMeaningfulMessage(threadId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getThreadId(MessageId messageId) {
|
public long getThreadId(MessageId messageId) {
|
||||||
@@ -645,12 +634,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
* Doesn't do any transactions or updates, so we can re-use the method safely.
|
* Doesn't do any transactions or updates, so we can re-use the method safely.
|
||||||
*/
|
*/
|
||||||
private @NonNull Set<MessageUpdate> incrementReceiptCountInternal(SyncMessageId syncMessageId, long timestamp, MessageTable.ReceiptType receiptType, @NonNull MessageTable.MessageQualifier messageQualifier) {
|
private @NonNull Set<MessageUpdate> incrementReceiptCountInternal(SyncMessageId syncMessageId, long timestamp, MessageTable.ReceiptType receiptType, @NonNull MessageTable.MessageQualifier messageQualifier) {
|
||||||
Set<MessageUpdate> messageUpdates = new HashSet<>();
|
return SignalDatabase.messages().incrementReceiptCount(syncMessageId, timestamp, receiptType, messageQualifier);
|
||||||
|
|
||||||
messageUpdates.addAll(SignalDatabase.messages().incrementReceiptCount(syncMessageId, timestamp, receiptType, messageQualifier));
|
|
||||||
messageUpdates.addAll(SignalDatabase.messages().incrementReceiptCount(syncMessageId, timestamp, receiptType, messageQualifier));
|
|
||||||
|
|
||||||
return messageUpdates;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateViewedStories(@NonNull Set<SyncMessageId> syncMessageIds) {
|
public void updateViewedStories(@NonNull Set<SyncMessageId> syncMessageIds) {
|
||||||
@@ -729,29 +713,22 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
public Collection<SyncMessageId> setTimestampReadFromSyncMessage(@NonNull List<ReadMessage> readMessages, long proposedExpireStarted, @NonNull Map<Long, Long> threadToLatestRead) {
|
public Collection<SyncMessageId> setTimestampReadFromSyncMessage(@NonNull List<ReadMessage> readMessages, long proposedExpireStarted, @NonNull Map<Long, Long> threadToLatestRead) {
|
||||||
SQLiteDatabase db = getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
|
|
||||||
List<Pair<Long, Long>> expiringText = new LinkedList<>();
|
List<Pair<Long, Long>> expiringMessages = new LinkedList<>();
|
||||||
List<Pair<Long, Long>> expiringMedia = new LinkedList<>();
|
Set<Long> updatedThreads = new HashSet<>();
|
||||||
Set<Long> updatedThreads = new HashSet<>();
|
Collection<SyncMessageId> unhandled = new LinkedList<>();
|
||||||
Collection<SyncMessageId> unhandled = new LinkedList<>();
|
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
try {
|
try {
|
||||||
for (ReadMessage readMessage : readMessages) {
|
for (ReadMessage readMessage : readMessages) {
|
||||||
RecipientId authorId = Recipient.externalPush(readMessage.getSender()).getId();
|
RecipientId authorId = Recipient.externalPush(readMessage.getSender()).getId();
|
||||||
TimestampReadResult textResult = SignalDatabase.messages().setTimestampReadFromSyncMessage(new SyncMessageId(authorId, readMessage.getTimestamp()),
|
TimestampReadResult result = SignalDatabase.messages().setTimestampReadFromSyncMessage(new SyncMessageId(authorId, readMessage.getTimestamp()),
|
||||||
proposedExpireStarted,
|
proposedExpireStarted,
|
||||||
threadToLatestRead);
|
threadToLatestRead);
|
||||||
TimestampReadResult mediaResult = SignalDatabase.messages().setTimestampReadFromSyncMessage(new SyncMessageId(authorId, readMessage.getTimestamp()),
|
|
||||||
proposedExpireStarted,
|
|
||||||
threadToLatestRead);
|
|
||||||
|
|
||||||
expiringText.addAll(textResult.expiring);
|
expiringMessages.addAll(result.expiring);
|
||||||
expiringMedia.addAll(mediaResult.expiring);
|
updatedThreads.addAll(result.threads);
|
||||||
|
|
||||||
updatedThreads.addAll(textResult.threads);
|
if (result.threads.isEmpty()) {
|
||||||
updatedThreads.addAll(mediaResult.threads);
|
|
||||||
|
|
||||||
if (textResult.threads.isEmpty() && mediaResult.threads.isEmpty()) {
|
|
||||||
unhandled.add(new SyncMessageId(authorId, readMessage.getTimestamp()));
|
unhandled.add(new SyncMessageId(authorId, readMessage.getTimestamp()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -766,12 +743,7 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
db.endTransaction();
|
db.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Pair<Long, Long> expiringMessage : expiringText) {
|
for (Pair<Long, Long> expiringMessage : expiringMessages) {
|
||||||
ApplicationDependencies.getExpiringMessageManager()
|
|
||||||
.scheduleDeletion(expiringMessage.first(), false, proposedExpireStarted, expiringMessage.second());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Pair<Long, Long> expiringMessage : expiringMedia) {
|
|
||||||
ApplicationDependencies.getExpiringMessageManager()
|
ApplicationDependencies.getExpiringMessageManager()
|
||||||
.scheduleDeletion(expiringMessage.first(), true, proposedExpireStarted, expiringMessage.second());
|
.scheduleDeletion(expiringMessage.first(), true, proposedExpireStarted, expiringMessage.second());
|
||||||
}
|
}
|
||||||
@@ -817,7 +789,6 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
boolean timestampMatches = cursor.getLong(0) == receivedTimestamp;
|
boolean timestampMatches = cursor.getLong(0) == receivedTimestamp;
|
||||||
boolean recipientIdMatches = recipientId.equals(RecipientId.from(cursor.getLong(1)));
|
boolean recipientIdMatches = recipientId.equals(RecipientId.from(cursor.getLong(1)));
|
||||||
|
|
||||||
|
|
||||||
if (timestampMatches && (recipientIdMatches || isOwnNumber)) {
|
if (timestampMatches && (recipientIdMatches || isOwnNumber)) {
|
||||||
if (CursorUtil.requireBoolean(cursor, MmsSmsColumns.REMOTE_DELETED)) {
|
if (CursorUtil.requireBoolean(cursor, MmsSmsColumns.REMOTE_DELETED)) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -886,9 +857,8 @@ public class MmsSmsTable extends DatabaseTable {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNotifiedTimestamp(long timestamp, @NonNull List<Long> smsIds, @NonNull List<Long> mmsIds) {
|
public void setNotifiedTimestamp(long timestamp, @NonNull List<Long> messageIds) {
|
||||||
SignalDatabase.messages().setNotifiedTimestamp(timestamp, smsIds);
|
SignalDatabase.messages().setNotifiedTimestamp(timestamp, messageIds);
|
||||||
SignalDatabase.messages().setNotifiedTimestamp(timestamp, mmsIds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
|
public int deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
|
||||||
|
|||||||
@@ -211,16 +211,8 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier {
|
|||||||
ServiceUtil.getNotificationManager(context).cancelOrphanedNotifications(context, state, stickyThreads.map { it.value.notificationId }.toSet())
|
ServiceUtil.getNotificationManager(context).cancelOrphanedNotifications(context, state, stickyThreads.map { it.value.notificationId }.toSet())
|
||||||
updateBadge(context, state.messageCount)
|
updateBadge(context, state.messageCount)
|
||||||
|
|
||||||
val smsIds: MutableList<Long> = mutableListOf()
|
val messageIds: List<Long> = state.notificationItems.map { it.id }
|
||||||
val mmsIds: MutableList<Long> = mutableListOf()
|
SignalDatabase.mmsSms.setNotifiedTimestamp(System.currentTimeMillis(), messageIds)
|
||||||
for (item: NotificationItem in state.notificationItems) {
|
|
||||||
if (item.isMms) {
|
|
||||||
mmsIds.add(item.id)
|
|
||||||
} else {
|
|
||||||
smsIds.add(item.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SignalDatabase.mmsSms.setNotifiedTimestamp(System.currentTimeMillis(), smsIds, mmsIds)
|
|
||||||
|
|
||||||
Log.i(TAG, "threads: ${state.threadCount} messages: ${state.messageCount}")
|
Log.i(TAG, "threads: ${state.threadCount} messages: ${state.messageCount}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user