Remove isMms from MessageId.

main
Greyson Parrelli 2022-12-14 21:45:52 -05:00
rodzic 60ae883df6
commit 3850c9c89d
33 zmienionych plików z 103 dodań i 172 usunięć

Wyświetl plik

@ -173,7 +173,7 @@ public class FullBackupExporter extends FullBackupBase {
if (table.equals(MessageTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringMmsMessage, null, count, estimatedCount, cancellationSignal);
} else if (table.equals(ReactionTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID), CursorUtil.requireBoolean(cursor, ReactionTable.IS_MMS))), null, count, estimatedCount, cancellationSignal);
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID))), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(MentionTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, CursorUtil.requireLong(cursor, MentionTable.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(GroupReceiptTable.TABLE_NAME)) {

Wyświetl plik

@ -40,7 +40,7 @@ class ViewGiftRepository {
}
val messageObserver = DatabaseObserver.MessageObserver {
if (it.mms && messageId == it.id) {
if (messageId == it.id) {
refresh()
}
}

Wyświetl plik

@ -264,7 +264,7 @@ public class VoiceNotePlaybackService extends MediaBrowserServiceCompat {
ApplicationDependencies.getJobManager().add(new SendViewedReceiptJob(markedMessageInfo.getThreadId(),
recipientId,
markedMessageInfo.getSyncMessageId().getTimetamp(),
new MessageId(messageId, true)));
new MessageId(messageId)));
MultiDeviceViewedUpdateJob.enqueue(Collections.singletonList(markedMessageInfo.getSyncMessageId()));
}
});

Wyświetl plik

@ -167,8 +167,7 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
@Override
public @Nullable ConversationMessage load(@NonNull MessageId messageId) {
Stopwatch stopwatch = new Stopwatch("load(" + messageId + "), thread " + threadId);
MessageTable database = messageId.isMms() ? SignalDatabase.messages() : SignalDatabase.messages();
MessageRecord record = database.getMessageRecordOrNull(messageId.getId());
MessageRecord record = SignalDatabase.messages().getMessageRecordOrNull(messageId.getId());
if (record instanceof MediaMmsMessageRecord &&
((MediaMmsMessageRecord) record).getParentStoryId() != null &&
@ -180,12 +179,7 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
try {
if (record != null) {
List<Mention> mentions;
if (messageId.isMms()) {
mentions = SignalDatabase.mentions().getMentionsForMessage(messageId.getId());
} else {
mentions = Collections.emptyList();
}
List<Mention> mentions = SignalDatabase.mentions().getMentionsForMessage(messageId.getId());
stopwatch.split("mentions");
@ -194,11 +188,9 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
stopwatch.split("reactions");
if (messageId.isMms()) {
List<DatabaseAttachment> attachments = SignalDatabase.attachments().getAttachmentsForMessage(messageId.getId());
if (attachments.size() > 0) {
record = ((MediaMmsMessageRecord) record).withAttachments(context, attachments);
}
List<DatabaseAttachment> attachments = SignalDatabase.attachments().getAttachmentsForMessage(messageId.getId());
if (attachments.size() > 0) {
record = ((MediaMmsMessageRecord) record).withAttachments(context, attachments);
}
stopwatch.split("attachments");
@ -220,7 +212,7 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
@Override
public @NonNull MessageId getKey(@NonNull ConversationMessage conversationMessage) {
return new MessageId(conversationMessage.getMessageRecord().getId(), conversationMessage.getMessageRecord().isMms());
return new MessageId(conversationMessage.getMessageRecord().getId());
}
private static class MentionHelper {
@ -281,7 +273,7 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
private Map<MessageId, List<ReactionRecord>> messageIdToReactions = new HashMap<>();
public void add(MessageRecord record) {
messageIds.add(new MessageId(record.getId(), record.isMms()));
messageIds.add(new MessageId(record.getId()));
}
public void addAll(List<MessageRecord> records) {
@ -297,7 +289,7 @@ public class ConversationDataSource implements PagedDataSource<MessageId, Conver
public @NonNull List<MessageRecord> buildUpdatedModels(@NonNull List<MessageRecord> records) {
return records.stream()
.map(record -> {
MessageId messageId = new MessageId(record.getId(), record.isMms());
MessageId messageId = new MessageId(record.getId());
List<ReactionRecord> reactions = messageIdToReactions.get(messageId);
return recordWithReactions(record, reactions);

Wyświetl plik

@ -1758,7 +1758,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
if (getContext() != null && getActivity() != null) {
MessageQuotesBottomSheet.show(
getChildFragmentManager(),
new MessageId(messageRecord.getId(), messageRecord.isMms()),
new MessageId(messageRecord.getId()),
recipient.getId()
);
}

Wyświetl plik

@ -2502,9 +2502,9 @@ public class ConversationParentFragment extends Fragment
.orElse(null);
if (oldRecord != null && oldRecord.getEmoji().equals(emoji)) {
MessageSender.sendReactionRemoval(context, new MessageId(messageRecord.getId(), messageRecord.isMms()), oldRecord);
MessageSender.sendReactionRemoval(context, new MessageId(messageRecord.getId()), oldRecord);
} else {
MessageSender.sendNewReaction(context, new MessageId(messageRecord.getId(), messageRecord.isMms()), emoji);
MessageSender.sendNewReaction(context, new MessageId(messageRecord.getId()), emoji);
}
});
}
@ -2522,7 +2522,7 @@ public class ConversationParentFragment extends Fragment
reactionDelegate.hide();
SignalExecutors.BOUNDED.execute(() -> MessageSender.sendReactionRemoval(context,
new MessageId(messageRecord.getId(), messageRecord.isMms()),
new MessageId(messageRecord.getId()),
oldRecord));
} else {
reactionDelegate.hideForReactWithAny();

Wyświetl plik

@ -96,7 +96,7 @@ class MessageQuotesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() {
messageAdapter.submitList(messages) {
if (firstRender) {
val targetMessageId = MessageId.deserialize(arguments?.getString(KEY_MESSAGE_ID, null) ?: throw IllegalArgumentException())
val targetMessagePosition = messages.indexOfFirst { it.messageRecord.id == targetMessageId.id && it.messageRecord.isMms == targetMessageId.mms }
val targetMessagePosition = messages.indexOfFirst { it.messageRecord.id == targetMessageId.id }
(list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(targetMessagePosition, 100)

Wyświetl plik

@ -48,11 +48,7 @@ class MessageQuotesRepository {
private fun getMessagesInQuoteChainSync(application: Application, messageId: MessageId): List<ConversationMessage> {
val rootMessageId: MessageId = SignalDatabase.mmsSms.getRootOfQuoteChain(messageId)
var originalRecord: MessageRecord? = if (rootMessageId.mms) {
SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id)
} else {
SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id)
}
var originalRecord: MessageRecord? = SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id)
if (originalRecord == null) {
return emptyList()

Wyświetl plik

@ -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)
)
)
}

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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());
}
/**

Wyświetl plik

@ -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 {

Wyświetl plik

@ -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))
}
}

Wyświetl plik

@ -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())
}
}
}

Wyświetl plik

@ -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()

Wyświetl plik

@ -167,7 +167,7 @@ class SignalSmsExportReader(
val sender: String = if (record.isOutgoing) Recipient.self().smsExportAddress() else record.individualRecipient.smsExportAddress()
return ExportableMessage.Mms(
id = MessageId(record.id, record.isMms),
id = MessageId(record.id),
exportState = mapExportState(exportState),
addresses = addresses,
dateReceived = record.dateReceived.milliseconds,
@ -186,7 +186,7 @@ class SignalSmsExportReader(
readExportableMmsMessageFromRecord(record, exportState)
} else {
ExportableMessage.Sms(
id = MessageId(record.id, record.isMms),
id = MessageId(record.id),
exportState = mapExportState(exportState),
address = record.recipient.smsExportAddress(),
dateReceived = record.dateReceived.milliseconds,

Wyświetl plik

@ -215,7 +215,7 @@ public final class PushDistributionListSendJob extends PushSendJob {
Log.d(TAG, "[" + messageId + "] Sending a story message with a manifest of size " + manifestCollection.size());
return GroupSendUtil.sendStoryMessage(context, message.getRecipient().requireDistributionListId(), destinations, isRecipientUpdate, new MessageId(messageId, true), message.getSentTimeMillis(), storyMessage, manifestCollection);
return GroupSendUtil.sendStoryMessage(context, message.getRecipient().requireDistributionListId(), destinations, isRecipientUpdate, new MessageId(messageId), message.getSentTimeMillis(), storyMessage, manifestCollection);
} catch (ServerRejectedException e) {
throw new UndeliverableMessageException(e);
}

Wyświetl plik

@ -274,7 +274,7 @@ public final class PushGroupSendJob extends PushSendJob {
throw new UndeliverableMessageException("No attachment on non-text story.");
}
return GroupSendUtil.sendGroupStoryMessage(context, groupId.requireV2(), destinations, isRecipientUpdate, new MessageId(messageId, true), message.getSentTimeMillis(), storyMessage);
return GroupSendUtil.sendGroupStoryMessage(context, groupId.requireV2(), destinations, isRecipientUpdate, new MessageId(messageId), message.getSentTimeMillis(), storyMessage);
} else {
throw new UndeliverableMessageException("No group found! " + groupId);
}
@ -296,7 +296,7 @@ public final class PushGroupSendJob extends PushSendJob {
.withExpiration(groupRecipient.getExpiresInSeconds())
.asGroupMessage(group)
.build();
return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), null, destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId, true), groupDataMessage, message.isUrgent(), false);
return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), null, destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId), groupDataMessage, message.isUrgent(), false);
} else {
throw new UndeliverableMessageException("Messages can no longer be sent to V1 groups!");
}
@ -355,7 +355,7 @@ public final class PushGroupSendJob extends PushSendJob {
destinations,
isRecipientUpdate,
ContentHint.RESENDABLE,
new MessageId(messageId, true),
new MessageId(messageId),
groupMessageBuilder.build(),
message.isUrgent(),
message.getStoryType().isStory() || message.getParentStoryId() != null);

Wyświetl plik

@ -261,12 +261,12 @@ public class PushMediaSendJob extends PushSendJob {
if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) {
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
SendMessageResult result = messageSender.sendSyncMessage(mediaMessage);
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true), false);
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false);
return syncAccess.isPresent();
} else {
SendMessageResult result = messageSender.sendDataMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, IndividualSendEvents.EMPTY, message.isUrgent(), messageRecipient.needsPniSignature());
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true), message.isUrgent());
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), message.isUrgent());
if (messageRecipient.needsPniSignature()) {
SignalDatabase.pendingPniSignatureMessages().insertIfNecessary(messageRecipient.getId(), message.getSentTimeMillis(), result);

Wyświetl plik

@ -44,7 +44,6 @@ public class ReactionSendJob extends BaseJob {
private static final String TAG = Log.tag(ReactionSendJob.class);
private static final String KEY_MESSAGE_ID = "message_id";
private static final String KEY_IS_MMS = "is_mms";
private static final String KEY_REACTION_EMOJI = "reaction_emoji";
private static final String KEY_REACTION_AUTHOR = "reaction_author";
private static final String KEY_REACTION_DATE_SENT = "reaction_date_sent";
@ -67,8 +66,7 @@ public class ReactionSendJob extends BaseJob {
boolean remove)
throws NoSuchMessageException
{
MessageRecord message = messageId.isMms() ? SignalDatabase.messages().getMessageRecord(messageId.getId())
: SignalDatabase.messages().getSmsMessage(messageId.getId());
MessageRecord message = SignalDatabase.messages().getMessageRecord(messageId.getId());
Recipient conversationRecipient = SignalDatabase.threads().getRecipientForThreadId(message.getThreadId());
@ -116,7 +114,6 @@ public class ReactionSendJob extends BaseJob {
@Override
public @NonNull Data serialize() {
return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId.getId())
.putBoolean(KEY_IS_MMS, messageId.isMms())
.putString(KEY_REACTION_EMOJI, reaction.getEmoji())
.putString(KEY_REACTION_AUTHOR, reaction.getAuthor().serialize())
.putLong(KEY_REACTION_DATE_SENT, reaction.getDateSent())
@ -139,14 +136,7 @@ public class ReactionSendJob extends BaseJob {
}
ReactionTable reactionTable = SignalDatabase.reactions();
MessageRecord message;
if (messageId.isMms()) {
message = SignalDatabase.messages().getMessageRecord(messageId.getId());
} else {
message = SignalDatabase.messages().getSmsMessage(messageId.getId());
}
MessageRecord message = SignalDatabase.messages().getMessageRecord(messageId.getId());
Recipient targetAuthor = message.isOutgoing() ? Recipient.self() : message.getIndividualRecipient();
long targetSentTimestamp = message.getDateSent();
@ -273,7 +263,6 @@ public class ReactionSendJob extends BaseJob {
public @NonNull
ReactionSendJob create(@NonNull Parameters parameters, @NonNull Data data) {
long messageId = data.getLong(KEY_MESSAGE_ID);
boolean isMms = data.getBoolean(KEY_IS_MMS);
List<RecipientId> recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS));
int initialRecipientCount = data.getInt(KEY_INITIAL_RECIPIENT_COUNT);
ReactionRecord reaction = new ReactionRecord(data.getString(KEY_REACTION_EMOJI),
@ -282,7 +271,7 @@ public class ReactionSendJob extends BaseJob {
data.getLong(KEY_REACTION_DATE_RECEIVED));
boolean remove = data.getBoolean(KEY_REMOVE);
return new ReactionSendJob(new MessageId(messageId, isMms), recipients, initialRecipientCount, reaction, remove, parameters);
return new ReactionSendJob(new MessageId(messageId), recipients, initialRecipientCount, reaction, remove, parameters);
}
}
}

Wyświetl plik

@ -229,7 +229,7 @@ public class RemoteDeleteSendJob extends BaseJob {
destinations,
false,
ContentHint.RESENDABLE,
new MessageId(messageId, isMms),
new MessageId(messageId),
dataMessage,
true,
isForStory);

Wyświetl plik

@ -37,7 +37,7 @@ public final class MessageDetailsRepository {
private final Context context = ApplicationDependencies.getApplication();
@NonNull LiveData<MessageRecord> getMessageRecord(Long messageId) {
return new MessageRecordLiveData(new MessageId(messageId, true));
return new MessageRecordLiveData(new MessageId(messageId));
}
@NonNull LiveData<MessageDetails> getMessageDetails(@Nullable MessageRecord messageRecord) {
@ -56,9 +56,7 @@ public final class MessageDetailsRepository {
return Observable.<MessageDetails>create(emitter -> {
DatabaseObserver.MessageObserver messageObserver = mId -> {
try {
MessageRecord messageRecord = messageId.isMms() ? SignalDatabase.messages().getMessageRecord(messageId.getId())
: SignalDatabase.messages().getMessageRecord(messageId.getId());
MessageRecord messageRecord = SignalDatabase.messages().getMessageRecord(messageId.getId());
MessageDetails messageDetails = getRecipientDeliveryStatusesInternal(messageRecord);
emitter.onNext(messageDetails);

Wyświetl plik

@ -34,13 +34,8 @@ final class MessageRecordLiveData extends LiveData<MessageRecord> {
@WorkerThread
private synchronized void retrieveMessageRecordActual() {
retrieve(messageId.isMms() ? SignalDatabase.messages() : SignalDatabase.messages());
}
@WorkerThread
private synchronized void retrieve(MessageTable messageDatabase) {
try {
MessageRecord record = messageDatabase.getMessageRecord(messageId.getId());
MessageRecord record = SignalDatabase.messages().getMessageRecord(messageId.getId());
if (record.isPaymentNotification()) {
record = SignalDatabase.payments().updateMessageWithPayment(record);

Wyświetl plik

@ -471,7 +471,7 @@ public final class MessageContentProcessor {
Optional<InsertResult> insertResult = SignalDatabase.messages().insertSecureDecryptedMessageInbox(mediaMessage, -1);
smsMessageId.ifPresent(smsId -> SignalDatabase.messages().deleteMessage(smsId));
if (insertResult.isPresent()) {
messageId = new MessageId(insertResult.get().getMessageId(), true);
messageId = new MessageId(insertResult.get().getMessageId());
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId()));
}
} catch (PaymentTable.PublicKeyConflictException e) {
@ -762,7 +762,7 @@ public final class MessageContentProcessor {
SecurityEvent.broadcastSecurityUpdateEvent(context);
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId()));
return new MessageId(insertResult.get().getMessageId(), true);
return new MessageId(insertResult.get().getMessageId());
} else {
return null;
}
@ -875,7 +875,7 @@ public final class MessageContentProcessor {
}
if (insertResult.isPresent()) {
return new MessageId(insertResult.get().getMessageId(), true);
return new MessageId(insertResult.get().getMessageId());
}
} catch (MmsException e) {
throw new StorageFailedException(e, content.getSender().getIdentifier(), content.getSenderDevice());
@ -948,7 +948,7 @@ public final class MessageContentProcessor {
}
if (insertResult.isPresent()) {
return new MessageId(insertResult.get().getMessageId(), true);
return new MessageId(insertResult.get().getMessageId());
}
} catch (MmsException e) {
throw new StorageFailedException(e, content.getSender().getIdentifier(), content.getSenderDevice());
@ -1003,7 +1003,7 @@ public final class MessageContentProcessor {
return null;
}
MessageId targetMessageId = new MessageId(targetMessage.getId(), targetMessage.isMms());
MessageId targetMessageId = new MessageId(targetMessage.getId());
if (reaction.isRemove()) {
SignalDatabase.reactions().deleteReaction(targetMessageId, senderRecipient.getId());
@ -1014,7 +1014,7 @@ public final class MessageContentProcessor {
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false);
}
return new MessageId(targetMessage.getId(), targetMessage.isMms());
return new MessageId(targetMessage.getId());
}
private @Nullable MessageId handleRemoteDelete(@NonNull SignalServiceContent content, @NonNull SignalServiceDataMessage message, @NonNull Recipient senderRecipient) {
@ -1031,7 +1031,7 @@ public final class MessageContentProcessor {
db.deleteRemotelyDeletedStory(targetMessage.getId());
}
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false);
return new MessageId(targetMessage.getId(), targetMessage.isMms());
return new MessageId(targetMessage.getId());
} else if (targetMessage == null) {
warn(String.valueOf(content.getTimestamp()), "[handleRemoteDelete] Could not find matching message! timestamp: " + delete.getTargetSentTimestamp() + " author: " + senderRecipient.getId());
if (!processingEarlyContent) {
@ -1684,7 +1684,7 @@ public final class MessageContentProcessor {
}
if (parentStoryId.isDirectReply()) {
return MessageId.fromNullable(insertResult.get().getMessageId(), true);
return MessageId.fromNullable(insertResult.get().getMessageId());
} else {
return null;
}
@ -1784,7 +1784,7 @@ public final class MessageContentProcessor {
}
if (parentStoryId.isDirectReply()) {
return MessageId.fromNullable(insertResult.get().getMessageId(), true);
return MessageId.fromNullable(insertResult.get().getMessageId());
} else {
return null;
}
@ -1855,7 +1855,7 @@ public final class MessageContentProcessor {
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId()));
TrimThreadJob.enqueueAsync(insertResult.get().getThreadId());
return new MessageId(insertResult.get().getMessageId(), true);
return new MessageId(insertResult.get().getMessageId());
} else {
return null;
}
@ -1945,7 +1945,7 @@ public final class MessageContentProcessor {
ApplicationDependencies.getViewOnceMessageManager().scheduleIfNecessary();
}
return new MessageId(insertResult.get().getMessageId(), true);
return new MessageId(insertResult.get().getMessageId());
} else {
return null;
}
@ -2400,7 +2400,7 @@ public final class MessageContentProcessor {
if (insertResult.isPresent()) {
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId()));
return new MessageId(insertResult.get().getMessageId(), false);
return new MessageId(insertResult.get().getMessageId());
} else {
return null;
}
@ -2867,12 +2867,7 @@ public final class MessageContentProcessor {
private @Nullable MessageRecord findRetryReceiptRelatedMessage(@NonNull Context context, @Nullable MessageLogEntry messageLogEntry, long sentTimestamp) {
if (messageLogEntry != null && messageLogEntry.hasRelatedMessage()) {
MessageId relatedMessage = messageLogEntry.getRelatedMessages().get(0);
if (relatedMessage.isMms()) {
return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId());
} else {
return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId());
}
return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId());
} else {
return SignalDatabase.mmsSms().getMessageFor(sentTimestamp, Recipient.self().getId());
}

Wyświetl plik

@ -53,7 +53,7 @@ object NotificationStateProvider {
messages += NotificationMessage(
messageRecord = record,
reactions = if (hasUnreadReactions) SignalDatabase.reactions.getReactions(MessageId(record.id, record.isMms)) else emptyList(),
reactions = if (hasUnreadReactions) SignalDatabase.reactions.getReactions(MessageId(record.id)) else emptyList(),
threadRecipient = threadRecipient,
thread = conversationId,
stickyThread = stickyThreads.containsKey(conversationId),

Wyświetl plik

@ -49,7 +49,7 @@ object NotificationThumbnails {
return NotificationItem.ThumbnailInfo(thumbnailSlide.publicUri, thumbnailSlide.contentType)
}
val messageId = MessageId(notificationItem.id, notificationItem.isMms)
val messageId = MessageId(notificationItem.id)
val thumbnail: CachedThumbnail? = synchronized(thumbnailCache) { thumbnailCache[messageId] }
if (thumbnail != null) {
@ -110,7 +110,7 @@ object NotificationThumbnails {
}
fun removeAllExcept(notificationItems: List<NotificationItem>) {
val currentMessages = notificationItems.map { MessageId(it.id, it.isMms) }
val currentMessages = notificationItems.map { MessageId(it.id) }
synchronized(thumbnailCache) {
thumbnailCache.keys.removeIf { !currentMessages.contains(it) }
}

Wyświetl plik

@ -101,7 +101,7 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
setUpRecipientsRecyclerView();
setUpTabMediator(view, savedInstanceState);
MessageId messageId = new MessageId(requireArguments().getLong(ARGS_MESSAGE_ID), requireArguments().getBoolean(ARGS_IS_MMS));
MessageId messageId = new MessageId(requireArguments().getLong(ARGS_MESSAGE_ID));
setUpViewModel(messageId);
}

Wyświetl plik

@ -54,7 +54,7 @@ public final class ReactWithAnyEmojiViewModel extends ViewModel {
this.searchResults = BehaviorSubject.createDefault(new EmojiSearchResult());
this.selectedKey = BehaviorSubject.createDefault(getStartingKey());
Observable<List<ReactWithAnyEmojiPage>> emojiPages = new ReactionsRepository().getReactions(new MessageId(messageId, isMms))
Observable<List<ReactWithAnyEmojiPage>> emojiPages = new ReactionsRepository().getReactions(new MessageId(messageId))
.map(repository::getEmojiPageModels);
Observable<MappingModelList> emojiList = emojiPages.map(pages -> {
@ -111,7 +111,7 @@ public final class ReactWithAnyEmojiViewModel extends ViewModel {
void onEmojiSelected(@NonNull String emoji) {
if (messageId > 0) {
SignalStore.emojiValues().setPreferredVariation(emoji);
repository.addEmojiToMessage(emoji, new MessageId(messageId, isMms));
repository.addEmojiToMessage(emoji, new MessageId(messageId));
}
}

Wyświetl plik

@ -83,7 +83,7 @@ object SafetyNumberBottomSheet {
val args = SafetyNumberBottomSheetArgs(
untrustedRecipients = messageRecord.identityKeyMismatches.map { it.getRecipientId(context) },
destinations = getDestinationFromRecord(messageRecord),
messageId = MessageId(messageRecord.id, messageRecord.isMms)
messageId = MessageId(messageRecord.id)
)
return SheetFactory(args)

Wyświetl plik

@ -22,7 +22,7 @@ class StoryInfoViewModel(storyId: Long, repository: MessageDetailsRepository = M
val state: Flowable<StoryInfoState> = store.stateFlowable.observeOn(AndroidSchedulers.mainThread())
init {
disposables += store.update(repository.getMessageDetails(MessageId(storyId, true)).toFlowable(BackpressureStrategy.LATEST)) { messageDetails, storyInfoState ->
disposables += store.update(repository.getMessageDetails(MessageId(storyId)).toFlowable(BackpressureStrategy.LATEST)) { messageDetails, storyInfoState ->
storyInfoState.copy(
messageDetails = messageDetails
)

Wyświetl plik

@ -99,7 +99,7 @@ open class StoryViewerPageRepository(context: Context, private val storyViewStat
val recipient = Recipient.resolved(recipientId)
val messageUpdateObserver = DatabaseObserver.MessageObserver {
if (it.mms && it.id == recordId) {
if (it.id == recordId) {
try {
val messageRecord = SignalDatabase.messages.getMessageRecord(recordId)
if (messageRecord.isRemoteDelete) {
@ -185,7 +185,7 @@ open class StoryViewerPageRepository(context: Context, private val storyViewStat
markedMessageInfo.threadId,
storyPost.sender.id,
markedMessageInfo.syncMessageId.timetamp,
MessageId(storyPost.id, true)
MessageId(storyPost.id)
)
)
MultiDeviceViewedUpdateJob.enqueue(listOf(markedMessageInfo.syncMessageId))

Wyświetl plik

@ -7,7 +7,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
sealed class ReplyBody(val messageRecord: MessageRecord) {
val key: MessageId = MessageId(messageRecord.id, true)
val key: MessageId = MessageId(messageRecord.id)
val sender: Recipient = if (messageRecord.isOutgoing) Recipient.self() else messageRecord.individualRecipient.resolve()
val sentAtMillis: Long = messageRecord.dateSent

Wyświetl plik

@ -107,7 +107,7 @@ public class MarkReadReceiverTest {
private MessageTable.MarkedMessageInfo createMarkedMessageInfo(long threadId, @NonNull RecipientId recipientId) {
return new MessageTable.MarkedMessageInfo(threadId,
new MessageTable.SyncMessageId(recipientId, 0),
new MessageId(1, true),
new MessageId(1),
new MessageTable.ExpirationInfo(0, 0, 0, false));
}
}