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.VisibleMessageView
|
||||||
import org.thoughtcrime.securesms.conversation.v2.messages.VisibleMessageViewDelegate
|
import org.thoughtcrime.securesms.conversation.v2.messages.VisibleMessageViewDelegate
|
||||||
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter
|
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase.Reader
|
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||||
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests
|
import org.thoughtcrime.securesms.mms.GlideRequests
|
||||||
import org.thoughtcrime.securesms.preferences.PrivacySettingsActivity
|
import org.thoughtcrime.securesms.preferences.PrivacySettingsActivity
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
class ConversationAdapter(
|
class ConversationAdapter(
|
||||||
context: Context,
|
context: Context,
|
||||||
|
@ -238,17 +238,17 @@ class ConversationAdapter(
|
||||||
for (i in 0 until itemCount) {
|
for (i in 0 until itemCount) {
|
||||||
if (isReversed) {
|
if (isReversed) {
|
||||||
cursor.moveToPosition(i)
|
cursor.moveToPosition(i)
|
||||||
val message = messageDB.readerFor(cursor).current
|
val (outgoing, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||||
if (message.isOutgoing || message.dateSent <= lastSeenTimestamp) {
|
if (outgoing || dateSent <= lastSeenTimestamp) {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val index = ((itemCount - 1) - i)
|
val index = ((itemCount - 1) - i)
|
||||||
cursor.moveToPosition(index)
|
cursor.moveToPosition(index)
|
||||||
val message = messageDB.readerFor(cursor).current
|
val (outgoing, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||||
if (message.isOutgoing || message.dateSent <= lastSeenTimestamp) {
|
if (outgoing || dateSent <= lastSeenTimestamp) {
|
||||||
return Math.min(itemCount - 1, (index + 1))
|
return min(itemCount - 1, (index + 1))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,8 +260,8 @@ class ConversationAdapter(
|
||||||
if (timestamp <= 0L || cursor == null || !isActiveCursor) return null
|
if (timestamp <= 0L || cursor == null || !isActiveCursor) return null
|
||||||
for (i in 0 until itemCount) {
|
for (i in 0 until itemCount) {
|
||||||
cursor.moveToPosition(i)
|
cursor.moveToPosition(i)
|
||||||
val message = messageDB.readerFor(cursor).current
|
val (_, dateSent) = messageDB.timestampAndDirectionForCurrent(cursor)
|
||||||
if (message.dateSent == timestamp) { return i }
|
if (dateSent == timestamp) { return i }
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
*/
|
*/
|
||||||
package org.thoughtcrime.securesms.database;
|
package org.thoughtcrime.securesms.database;
|
||||||
|
|
||||||
|
import static org.thoughtcrime.securesms.database.MmsDatabase.MESSAGE_BOX;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
@ -25,6 +27,7 @@ import androidx.annotation.Nullable;
|
||||||
import net.zetetic.database.sqlcipher.SQLiteDatabase;
|
import net.zetetic.database.sqlcipher.SQLiteDatabase;
|
||||||
import net.zetetic.database.sqlcipher.SQLiteQueryBuilder;
|
import net.zetetic.database.sqlcipher.SQLiteQueryBuilder;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.session.libsession.utilities.Address;
|
import org.session.libsession.utilities.Address;
|
||||||
import org.session.libsession.utilities.Util;
|
import org.session.libsession.utilities.Util;
|
||||||
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
|
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
|
||||||
|
@ -36,6 +39,8 @@ import java.io.Closeable;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import kotlin.Pair;
|
||||||
|
|
||||||
public class MmsSmsDatabase extends Database {
|
public class MmsSmsDatabase extends Database {
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
@ -512,6 +517,23 @@ public class MmsSmsDatabase extends Database {
|
||||||
return new Reader(cursor);
|
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 {
|
public class Reader implements Closeable {
|
||||||
|
|
||||||
private final Cursor cursor;
|
private final Cursor cursor;
|
||||||
|
|
|
@ -220,7 +220,7 @@ object ConfigurationMessageUtilities {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
contact.lastRead = current.lastSeen
|
contact.lastRead = current.lastSeen
|
||||||
contact.unread = false // TODO: make the forced unread work at DB level
|
contact.unread = false
|
||||||
convoConfig.set(contact)
|
convoConfig.set(contact)
|
||||||
current = reader.next
|
current = reader.next
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue