mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 17:29:32 +01:00
Remove isMms from MessageId.
This commit is contained in:
@@ -259,7 +259,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
|
||||
messageValues += ContentValues().apply {
|
||||
put(MessageTable.PAYLOAD_ID, payloadId)
|
||||
put(MessageTable.MESSAGE_ID, messageId.id)
|
||||
put(MessageTable.IS_MMS, if (messageId.mms) 1 else 0)
|
||||
put(MessageTable.IS_MMS, 0)
|
||||
}
|
||||
}
|
||||
SqlUtil.buildBulkInsert(MessageTable.TABLE_NAME, arrayOf(MessageTable.PAYLOAD_ID, MessageTable.MESSAGE_ID, MessageTable.IS_MMS), messageValues)
|
||||
@@ -292,8 +292,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
|
||||
while (messageCursor.moveToNext()) {
|
||||
messageIds.add(
|
||||
MessageId(
|
||||
id = CursorUtil.requireLong(messageCursor, MessageTable.MESSAGE_ID),
|
||||
mms = CursorUtil.requireBoolean(messageCursor, MessageTable.IS_MMS)
|
||||
id = CursorUtil.requireLong(messageCursor, MessageTable.MESSAGE_ID)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -454,7 +454,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(id, false));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(id));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners();
|
||||
}
|
||||
|
||||
@@ -498,7 +498,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent);
|
||||
StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE));
|
||||
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null));
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null));
|
||||
}
|
||||
|
||||
return results;
|
||||
@@ -536,7 +536,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
long dateSent = CursorUtil.requireLong(cursor, DATE_SENT);
|
||||
SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent);
|
||||
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null));
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null));
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(VIEWED_RECEIPT_COUNT, 1);
|
||||
@@ -575,7 +575,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent);
|
||||
StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE));
|
||||
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null));
|
||||
results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null));
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(VIEWED_RECEIPT_COUNT, 1);
|
||||
@@ -1327,7 +1327,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
RecipientId rowRecipientId = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(RECIPIENT_ID)));
|
||||
|
||||
if (Recipient.self().getId().equals(authorId) || rowRecipientId.equals(authorId)) {
|
||||
return new MessageId(CursorUtil.requireLong(cursor, ID), true);
|
||||
return new MessageId(CursorUtil.requireLong(cursor, ID));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1700,7 +1700,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
|
||||
SignalDatabase.groupReceipts().update(ourRecipientId, id, status, timestamp);
|
||||
|
||||
messageUpdates.add(new MessageUpdate(threadId, new MessageId(id, true)));
|
||||
messageUpdates.add(new MessageUpdate(threadId, new MessageId(id)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1855,13 +1855,13 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
public void markAsForcedSms(long messageId) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, Types.PUSH_MESSAGE_BIT, Types.MESSAGE_FORCE_SMS_BIT, Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
}
|
||||
|
||||
public void markAsRateLimited(long messageId) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, 0, Types.MESSAGE_RATE_LIMITED_BIT, Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
}
|
||||
|
||||
public void clearRateLimitStatus(@NonNull Collection<Long> ids) {
|
||||
@@ -1883,27 +1883,27 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
public void markAsPendingInsecureSmsFallback(long messageId) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_PENDING_INSECURE_SMS_FALLBACK, Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
}
|
||||
|
||||
public void markAsSending(long messageId) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENDING_TYPE, Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners();
|
||||
}
|
||||
|
||||
public void markAsSentFailed(long messageId) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_FAILED_TYPE, Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners();
|
||||
}
|
||||
|
||||
public void markAsSent(long messageId, boolean secure) {
|
||||
long threadId = getThreadIdForMessage(messageId);
|
||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE | (secure ? Types.PUSH_MESSAGE_BIT | Types.SECURE_MESSAGE_BIT : 0), Optional.of(threadId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners();
|
||||
}
|
||||
|
||||
@@ -1930,7 +1930,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
deletedAttachments = SignalDatabase.attachments().deleteAttachmentsForMessage(messageId);
|
||||
SignalDatabase.mentions().deleteMentionsForMessage(messageId);
|
||||
SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true);
|
||||
SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true));
|
||||
SignalDatabase.reactions().deleteReactions(new MessageId(messageId));
|
||||
deleteGroupStoryReplies(messageId);
|
||||
disassociateStoryQuotes(messageId);
|
||||
|
||||
@@ -1942,7 +1942,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners();
|
||||
|
||||
if (deletedAttachments) {
|
||||
@@ -1956,7 +1956,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
contentValues.put(MMS_STATUS, state);
|
||||
|
||||
database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {messageId + ""});
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
}
|
||||
|
||||
public void markAsInsecure(long messageId) {
|
||||
@@ -2035,7 +2035,6 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
|
||||
public @NonNull List<StoryType> getStoryTypes(@NonNull List<MessageId> messageIds) {
|
||||
List<Long> mmsMessages = messageIds.stream()
|
||||
.filter(MessageId::isMms)
|
||||
.map(MessageId::getId)
|
||||
.collect(java.util.stream.Collectors.toList());
|
||||
|
||||
@@ -2056,7 +2055,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
}
|
||||
|
||||
return messageIds.stream().map(id -> {
|
||||
if (id.isMms() && storyTypes.containsKey(id.getId())) {
|
||||
if (storyTypes.containsKey(id.getId())) {
|
||||
return storyTypes.get(id.getId());
|
||||
} else {
|
||||
return StoryType.NONE;
|
||||
@@ -2096,7 +2095,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE));
|
||||
|
||||
if (!recipientId.equals(releaseChannelId)) {
|
||||
result.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), expirationInfo));
|
||||
result.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), expirationInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2698,7 +2697,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
}
|
||||
|
||||
if (updated) {
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId));
|
||||
notifyConversationListeners(threadId);
|
||||
}
|
||||
}
|
||||
@@ -2863,7 +2862,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
|
||||
if (!message.getStoryType().isStory()) {
|
||||
if (message.getOutgoingQuote() == null) {
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageInsertObservers(threadId, new MessageId(messageId, true));
|
||||
ApplicationDependencies.getDatabaseObserver().notifyMessageInsertObservers(threadId, new MessageId(messageId));
|
||||
} else {
|
||||
ApplicationDependencies.getDatabaseObserver().notifyConversationListeners(threadId);
|
||||
}
|
||||
@@ -3702,7 +3701,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi
|
||||
|
||||
long id = CursorExtensionsKt.readToSingleLong(cursor, -1);
|
||||
if (id != -1) {
|
||||
return new MessageId(id, TABLE_NAME.equals(MessageTable.TABLE_NAME));
|
||||
return new MessageId(id);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -277,10 +277,6 @@ public class MmsSmsTable extends DatabaseTable {
|
||||
}
|
||||
|
||||
public MessageId getRootOfQuoteChain(@NonNull MessageId id) {
|
||||
if (!id.isMms()) {
|
||||
return id;
|
||||
}
|
||||
|
||||
MmsMessageRecord targetMessage;
|
||||
try {
|
||||
targetMessage = (MmsMessageRecord) SignalDatabase.messages().getMessageRecord(id.getId());
|
||||
@@ -302,7 +298,7 @@ public class MmsSmsTable extends DatabaseTable {
|
||||
try (Reader reader = new Reader(queryTables(PROJECTION, query, null, "1", false))) {
|
||||
MessageRecord record;
|
||||
if ((record = reader.getNext()) != null) {
|
||||
return getRootOfQuoteChain(new MessageId(record.getId(), record.isMms()));
|
||||
return getRootOfQuoteChain(new MessageId(record.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,7 +308,7 @@ public class MmsSmsTable extends DatabaseTable {
|
||||
public List<MessageRecord> getAllMessagesThatQuote(@NonNull MessageId id) {
|
||||
MessageRecord targetMessage;
|
||||
try {
|
||||
targetMessage = id.isMms() ? SignalDatabase.messages().getMessageRecord(id.getId()) : SignalDatabase.messages().getMessageRecord(id.getId());
|
||||
targetMessage = SignalDatabase.messages().getMessageRecord(id.getId());
|
||||
} catch (NoSuchMessageException e) {
|
||||
throw new IllegalArgumentException("Invalid message ID!");
|
||||
}
|
||||
@@ -327,7 +323,7 @@ public class MmsSmsTable extends DatabaseTable {
|
||||
MessageRecord record;
|
||||
while ((record = reader.getNext()) != null) {
|
||||
records.add(record);
|
||||
records.addAll(getAllMessagesThatQuote(new MessageId(record.getId(), record.isMms())));
|
||||
records.addAll(getAllMessagesThatQuote(new MessageId(record.getId())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -442,11 +438,7 @@ public class MmsSmsTable extends DatabaseTable {
|
||||
}
|
||||
|
||||
public long getThreadId(MessageId messageId) {
|
||||
if (messageId.isMms()) {
|
||||
return SignalDatabase.messages().getThreadIdForMessage(messageId.getId());
|
||||
} else {
|
||||
return SignalDatabase.messages().getThreadIdForMessage(messageId.getId());
|
||||
}
|
||||
return SignalDatabase.messages().getThreadIdForMessage(messageId.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -90,8 +90,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||
while (cursor.moveToNext()) {
|
||||
val reaction: ReactionRecord = readReaction(cursor)
|
||||
val messageId = MessageId(
|
||||
id = CursorUtil.requireLong(cursor, MESSAGE_ID),
|
||||
mms = CursorUtil.requireBoolean(cursor, IS_MMS)
|
||||
id = CursorUtil.requireLong(cursor, MESSAGE_ID)
|
||||
)
|
||||
|
||||
var reactionsList: MutableList<ReactionRecord>? = messageIdToReactions[messageId]
|
||||
@@ -114,7 +113,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||
try {
|
||||
val values = ContentValues().apply {
|
||||
put(MESSAGE_ID, messageId.id)
|
||||
put(IS_MMS, if (messageId.mms) 1 else 0)
|
||||
put(IS_MMS, 0)
|
||||
put(EMOJI, reaction.emoji)
|
||||
put(AUTHOR_ID, reaction.author.serialize())
|
||||
put(DATE_SENT, reaction.dateSent)
|
||||
@@ -122,12 +121,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||
}
|
||||
|
||||
writableDatabase.insert(TABLE_NAME, null, values)
|
||||
|
||||
if (messageId.mms) {
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false)
|
||||
} else {
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false)
|
||||
}
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false)
|
||||
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
} finally {
|
||||
@@ -140,16 +134,12 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||
fun deleteReaction(messageId: MessageId, recipientId: RecipientId) {
|
||||
writableDatabase.beginTransaction()
|
||||
try {
|
||||
val query = "$MESSAGE_ID = ? AND $IS_MMS = ? AND $AUTHOR_ID = ?"
|
||||
val args = SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0, recipientId)
|
||||
writableDatabase
|
||||
.delete(TABLE_NAME)
|
||||
.where("$MESSAGE_ID = ? AND $AUTHOR_ID = ?", messageId.id, recipientId)
|
||||
.run()
|
||||
|
||||
writableDatabase.delete(TABLE_NAME, query, args)
|
||||
|
||||
if (messageId.mms) {
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true)
|
||||
} else {
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true)
|
||||
}
|
||||
SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true)
|
||||
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
} finally {
|
||||
@@ -160,7 +150,10 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||
}
|
||||
|
||||
fun deleteReactions(messageId: MessageId) {
|
||||
writableDatabase.delete(TABLE_NAME, "$MESSAGE_ID = ? AND $IS_MMS = ?", SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0))
|
||||
writableDatabase
|
||||
.delete(TABLE_NAME)
|
||||
.where("$MESSAGE_ID = ?", messageId.id)
|
||||
.run()
|
||||
}
|
||||
|
||||
fun hasReaction(messageId: MessageId, reaction: ReactionRecord): Boolean {
|
||||
|
||||
@@ -184,7 +184,7 @@ class StorySendTable(context: Context, databaseHelper: SignalDatabase) : Databas
|
||||
null
|
||||
).use { cursor ->
|
||||
while (cursor.moveToNext()) {
|
||||
messageIds += MessageId(cursor.requireLong(MESSAGE_ID), true)
|
||||
messageIds += MessageId(cursor.requireLong(MESSAGE_ID))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,31 +4,14 @@ import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
/**
|
||||
* Represents a pair of values that can be used to find a message. Because we have two tables,
|
||||
* that means this has both the primary key and a boolean indicating which table it's in.
|
||||
* Represents the primary key in a [MessageId].
|
||||
*/
|
||||
@Parcelize
|
||||
data class MessageId(
|
||||
val id: Long,
|
||||
@get:JvmName("isMms") val mms: Boolean
|
||||
val id: Long
|
||||
) : Parcelable {
|
||||
fun serialize(): String {
|
||||
return "$id|$mms"
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as MessageId
|
||||
|
||||
if (id != other.id) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return id.hashCode()
|
||||
return "$id|true"
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -36,9 +19,9 @@ data class MessageId(
|
||||
* Returns null for invalid IDs. Useful when pulling a possibly-unset ID from a database, or something like that.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun fromNullable(id: Long, mms: Boolean): MessageId? {
|
||||
fun fromNullable(id: Long): MessageId? {
|
||||
return if (id > 0) {
|
||||
MessageId(id, mms)
|
||||
MessageId(id)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
@@ -47,7 +30,7 @@ data class MessageId(
|
||||
@JvmStatic
|
||||
fun deserialize(serialized: String): MessageId {
|
||||
val parts: List<String> = serialized.split("|")
|
||||
return MessageId(parts[0].toLong(), parts[1].toBoolean())
|
||||
return MessageId(parts[0].toLong())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import kotlin.math.abs
|
||||
sealed class ParentStoryId(protected val id: Long) {
|
||||
abstract fun serialize(): Long
|
||||
|
||||
fun asMessageId(): MessageId = MessageId(abs(id), true)
|
||||
fun asMessageId(): MessageId = MessageId(abs(id))
|
||||
fun isGroupReply() = serialize() > 0
|
||||
fun isDirectReply() = !isGroupReply()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user