Reduce db operations when updating thread snippet.

This commit is contained in:
Clark 2023-05-12 12:10:14 -04:00 committed by Greyson Parrelli
parent 7c37f929a5
commit fe8b2cb761
3 changed files with 24 additions and 17 deletions

View file

@ -1084,7 +1084,10 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
values.putNull(ORIGINAL_MESSAGE_ID)
}
val messageId = writableDatabase.insert(TABLE_NAME, null, values)
writableDatabase.beginTransaction()
val messageId: Long
try {
messageId = writableDatabase.insert(TABLE_NAME, null, values)
if (messageId < 0) {
Log.w(TAG, "Failed to insert text message (${message.sentTimestampMillis}, ${message.authorId}, ThreadId::$threadId)! Likely a duplicate.")
return Optional.empty()
@ -1094,15 +1097,19 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
threads.incrementUnread(threadId, 1, 0)
}
if (message.subscriptionId != -1) {
recipients.setDefaultSubscriptionId(recipient.id, message.subscriptionId)
}
writableDatabase.setTransactionSuccessful()
} finally {
writableDatabase.endTransaction()
}
if (!silent) {
ThreadUpdateJob.enqueue(threadId)
TrimThreadJob.enqueueAsync(threadId)
}
if (message.subscriptionId != -1) {
recipients.setDefaultSubscriptionId(recipient.id, message.subscriptionId)
}
if (notifyObservers) {
notifyConversationListeners(threadId)
}

View file

@ -1386,8 +1386,8 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
val meaningfulMessages = messages.hasMeaningfulMessage(threadId)
val isPinned = getPinnedThreadIds().contains(threadId)
val shouldDelete = allowDeletion && !isPinned && !messages.containsStories(threadId)
val isPinned by lazy { getPinnedThreadIds().contains(threadId) }
val shouldDelete by lazy { allowDeletion && !isPinned && !messages.containsStories(threadId) }
if (!meaningfulMessages) {
if (shouldDelete) {

View file

@ -888,10 +888,10 @@ public class Recipient {
}
public boolean isUnknownGroup() {
boolean noMetadata = (groupAvatarId.isEmpty() || groupAvatarId.get() == - 1) && (groupName == null || groupName.isEmpty());
boolean noMembers = participantIds.isEmpty() || (participantIds.size() == 1 && participantIds.contains(Recipient.self().id));
return noMetadata && noMembers;
if ((groupAvatarId.isPresent() && groupAvatarId.get() != - 1) || (groupName != null && !groupName.isEmpty())) {
return false;
}
return participantIds.isEmpty() || (participantIds.size() == 1 && participantIds.contains(Recipient.self().id));
}
public boolean isInactiveGroup() {