fix: the message time and jump to message queries are more optimized
This commit is contained in:
parent
ddb4e24318
commit
9cdacf7244
|
@ -27,11 +27,11 @@ import org.thoughtcrime.securesms.conversation.v2.messages.ControlMessageView
|
|||
import org.thoughtcrime.securesms.conversation.v2.messages.VisibleMessageView
|
||||
import org.thoughtcrime.securesms.conversation.v2.messages.VisibleMessageViewDelegate
|
||||
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase.Reader
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests
|
||||
import org.thoughtcrime.securesms.preferences.PrivacySettingsActivity
|
||||
import kotlin.math.min
|
||||
|
||||
class ConversationAdapter(
|
||||
context: Context,
|
||||
|
@ -238,17 +238,17 @@ class ConversationAdapter(
|
|||
for (i in 0 until itemCount) {
|
||||
if (isReversed) {
|
||||
cursor.moveToPosition(i)
|
||||
val message = messageDB.readerFor(cursor).current
|
||||
if (message.isOutgoing || message.dateSent <= lastSeenTimestamp) {
|
||||
val (outgoing, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||
if (outgoing || dateSent <= lastSeenTimestamp) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
else {
|
||||
val index = ((itemCount - 1) - i)
|
||||
cursor.moveToPosition(index)
|
||||
val message = messageDB.readerFor(cursor).current
|
||||
if (message.isOutgoing || message.dateSent <= lastSeenTimestamp) {
|
||||
return Math.min(itemCount - 1, (index + 1))
|
||||
val (outgoing, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||
if (outgoing || dateSent <= lastSeenTimestamp) {
|
||||
return min(itemCount - 1, (index + 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -260,8 +260,8 @@ class ConversationAdapter(
|
|||
if (timestamp <= 0L || cursor == null || !isActiveCursor) return null
|
||||
for (i in 0 until itemCount) {
|
||||
cursor.moveToPosition(i)
|
||||
val message = messageDB.readerFor(cursor).current
|
||||
if (message.dateSent == timestamp) { return i }
|
||||
val (_, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||
if (dateSent == timestamp) { return i }
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package org.thoughtcrime.securesms.database;
|
||||
|
||||
import static org.thoughtcrime.securesms.database.MmsDatabase.MESSAGE_BOX;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
|
||||
|
@ -25,6 +27,7 @@ import androidx.annotation.Nullable;
|
|||
import net.zetetic.database.sqlcipher.SQLiteDatabase;
|
||||
import net.zetetic.database.sqlcipher.SQLiteQueryBuilder;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.session.libsession.utilities.Address;
|
||||
import org.session.libsession.utilities.Util;
|
||||
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
|
||||
|
@ -36,6 +39,8 @@ import java.io.Closeable;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import kotlin.Pair;
|
||||
|
||||
public class MmsSmsDatabase extends Database {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
@ -512,6 +517,23 @@ public class MmsSmsDatabase extends Database {
|
|||
return new Reader(cursor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Pair<Boolean, Long> timestampAndDirectionForCurrent(@NotNull Cursor cursor) {
|
||||
int sentColumn = cursor.getColumnIndex(MmsSmsColumns.NORMALIZED_DATE_SENT);
|
||||
String msgType = cursor.getString(cursor.getColumnIndexOrThrow(TRANSPORT));
|
||||
long sentTime = cursor.getLong(sentColumn);
|
||||
long type = 0;
|
||||
if (MmsSmsDatabase.MMS_TRANSPORT.equals(msgType)) {
|
||||
int typeIndex = cursor.getColumnIndex(MESSAGE_BOX);
|
||||
type = cursor.getLong(typeIndex);
|
||||
} else if (MmsSmsDatabase.SMS_TRANSPORT.equals(msgType)) {
|
||||
int typeIndex = cursor.getColumnIndex(SmsDatabase.TYPE);
|
||||
type = cursor.getLong(typeIndex);
|
||||
}
|
||||
|
||||
return new Pair<Boolean, Long>(MmsSmsColumns.Types.isOutgoingMessageType(type), sentTime);
|
||||
}
|
||||
|
||||
public class Reader implements Closeable {
|
||||
|
||||
private final Cursor cursor;
|
||||
|
|
|
@ -220,7 +220,7 @@ object ConfigurationMessageUtilities {
|
|||
continue
|
||||
}
|
||||
contact.lastRead = current.lastSeen
|
||||
contact.unread = false // TODO: make the forced unread work at DB level
|
||||
contact.unread = false
|
||||
convoConfig.set(contact)
|
||||
current = reader.next
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue