Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ sealed interface MessageContent {

data class QuoteReference(
val quotedMessageId: String,
val quotedMessageConversationId: ConversationId? = null,
/**
* The hash of the text of the quoted message
*/
Expand All @@ -104,6 +105,7 @@ sealed interface MessageContent {
other as QuoteReference

if (quotedMessageId != other.quotedMessageId) return false
if (quotedMessageConversationId != other.quotedMessageConversationId) return false
if (quotedMessageSha256 != null) {
if (other.quotedMessageSha256 == null) return false
if (!quotedMessageSha256.contentEquals(other.quotedMessageSha256)) return false
Expand All @@ -114,6 +116,7 @@ sealed interface MessageContent {

override fun hashCode(): Int {
var result = quotedMessageId.hashCode()
result = 31 * result + (quotedMessageConversationId?.hashCode() ?: 0)
result = 31 * result + (quotedMessageSha256?.contentHashCode() ?: 0)
return result
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ data class MessageDraft(
val editMessageId: String?,
val quotedMessageId: String?,
val selectedMentionList: List<MessageMention>,
val quotedMessageConversationId: ConversationId? = null,
val isMultipartEdit: Boolean = false,
)
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ SELECT
MessageDraft.text AS messageDraftText,
MessageDraft.edit_message_id AS messageDraftEditMessageId,
MessageDraft.quoted_message_id AS messageDraftQuotedMessageId,
MessageDraft.quoted_message_conversation_id AS messageDraftQuotedMessageConversationId,
MessageDraft.mention_list AS messageDraftMentionList,
-- last message
Message.id AS lastMessageId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,20 @@ WITH selfdelete_message_id AS (
FROM local_db.Message
WHERE local_db.Message.expire_after_millis IS NOT NULL
)
INSERT INTO MessageTextContent
INSERT INTO MessageTextContent(
message_id,
conversation_id,
text_body,
quoted_message_id,
quoted_message_conversation_id,
is_quote_verified,
is_quoting_self
)
SELECT local_db.MessageTextContent.message_id,
local_db.MessageTextContent.conversation_id,
local_db.MessageTextContent.text_body,
local_db.MessageTextContent.quoted_message_id,
local_db.MessageTextContent.quoted_message_conversation_id,
local_db.MessageTextContent.is_quote_verified,
local_db.MessageTextContent.is_quoting_self
FROM local_db.MessageTextContent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ IFNULL(
'[]'
) AS mentions,
TextContent.quoted_message_id AS quotedMessageId,
TextContent.quoted_message_conversation_id AS quotedMessageConversationId,
QuotedMessage.sender_user_id AS quotedSenderId,
TextContent.is_quote_verified AS isQuoteVerified,
QuotedSender.name AS quotedSenderName,
Expand Down Expand Up @@ -166,11 +167,19 @@ LEFT JOIN MessageRecipientFailure AS FailedRecipientsWithNoClients ON Message.id
LEFT JOIN MessageRecipientFailure AS FailedRecipientsDeliveryFailed ON Message.id = FailedRecipientsDeliveryFailed.message_id AND Message.conversation_id = FailedRecipientsDeliveryFailed.conversation_id AND FailedRecipientsDeliveryFailed.recipient_failure_type = 'MESSAGE_DELIVERY_FAILED'

-- joins for quoted messages
LEFT JOIN Message AS QuotedMessage ON QuotedMessage.id = TextContent.quoted_message_id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN Message AS QuotedMessage
ON QuotedMessage.id = TextContent.quoted_message_id
AND QuotedMessage.conversation_id = COALESCE(TextContent.quoted_message_conversation_id, TextContent.conversation_id)
LEFT JOIN User AS QuotedSender ON QuotedMessage.sender_user_id = QuotedSender.qualified_id
LEFT JOIN MessageTextContent AS QuotedTextContent ON QuotedTextContent.message_id = QuotedMessage.id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN MessageAssetContent AS QuotedAssetContent ON QuotedAssetContent.message_id = QuotedMessage.id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN MessageConversationLocationContent AS QuotedLocationContent ON QuotedLocationContent.message_id = QuotedMessage.id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN MessageTextContent AS QuotedTextContent
ON QuotedTextContent.message_id = QuotedMessage.id
AND QuotedTextContent.conversation_id = QuotedMessage.conversation_id
LEFT JOIN MessageAssetContent AS QuotedAssetContent
ON QuotedAssetContent.message_id = QuotedMessage.id
AND QuotedAssetContent.conversation_id = QuotedMessage.conversation_id
LEFT JOIN MessageConversationLocationContent AS QuotedLocationContent
ON QuotedLocationContent.message_id = QuotedMessage.id
AND QuotedLocationContent.conversation_id = QuotedMessage.conversation_id
-- end joins for quoted messages
LEFT JOIN MessageConversationLocationContent AS ConversationLocationContent ON Message.id = ConversationLocationContent.message_id AND Message.conversation_id = ConversationLocationContent.conversation_id
LEFT JOIN SelfUser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,30 @@ CREATE TABLE MessageDraft (
edit_message_id TEXT,
quoted_message_id TEXT,
mention_list TEXT AS List<Mention> NOT NULL,
quoted_message_conversation_id TEXT AS QualifiedIDEntity,

FOREIGN KEY (conversation_id) REFERENCES Conversation(qualified_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_message_id, conversation_id) REFERENCES Message(id, conversation_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (quoted_message_id, conversation_id) REFERENCES Message(id, conversation_id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (conversation_id)
);

deleteDraft:
DELETE FROM MessageDraft WHERE conversation_id = ?;

upsertDraft:
INSERT INTO MessageDraft(conversation_id, text, edit_message_id, quoted_message_id, mention_list)
VALUES( ?, ?, ?, ?, ?)
INSERT INTO MessageDraft(conversation_id, text, edit_message_id, quoted_message_id, quoted_message_conversation_id, mention_list)
VALUES( ?, ?, ?, ?, ?, ?)
ON CONFLICT(conversation_id) DO UPDATE SET
text = excluded.text,
edit_message_id = excluded.edit_message_id,
quoted_message_id = excluded.quoted_message_id,
quoted_message_conversation_id = excluded.quoted_message_conversation_id,
mention_list = excluded.mention_list
WHERE -- execute the update only if any of the fields changed
MessageDraft.text != excluded.text
OR MessageDraft.edit_message_id IS NOT excluded.edit_message_id
OR MessageDraft.quoted_message_id IS NOT excluded.quoted_message_id
OR MessageDraft.quoted_message_conversation_id IS NOT excluded.quoted_message_conversation_id
OR MessageDraft.mention_list != excluded.mention_list;

getDraft:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ CREATE TABLE MessageTextContent (
quoted_message_id TEXT,
is_quote_verified INTEGER AS Boolean,
is_quoting_self INTEGER AS Boolean NOT NULL,
quoted_message_conversation_id TEXT AS QualifiedIDEntity,

FOREIGN KEY (message_id, conversation_id) REFERENCES Message(id, conversation_id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (message_id, conversation_id)
Expand Down Expand Up @@ -295,8 +296,22 @@ INSERT OR IGNORE INTO MessageMention(message_id, conversation_id, start, length,
VALUES (?, ?, ?, ?, ?);

insertMessageTextContent:
INSERT OR IGNORE INTO MessageTextContent(message_id, conversation_id, text_body, quoted_message_id, is_quote_verified, is_quoting_self)
VALUES(:message_id, :conversation_id, :text_body, :quoted_message_id, :is_quote_verified,
INSERT OR IGNORE INTO MessageTextContent(
message_id,
conversation_id,
text_body,
quoted_message_id,
quoted_message_conversation_id,
is_quote_verified,
is_quoting_self
)
VALUES(
:message_id,
:conversation_id,
:text_body,
:quoted_message_id,
:quoted_message_conversation_id,
:is_quote_verified,
CASE WHEN
:quoted_message_id IS NULL
THEN 0
Expand All @@ -305,9 +320,9 @@ CASE WHEN
(SELECT (Message.sender_user_id == SelfUser.id)
FROM Message
LEFT JOIN SelfUser
WHERE
Message.id = :quoted_message_id AND
conversation_id = :conversation_id),
WHERE
Message.id = :quoted_message_id AND
Message.conversation_id = COALESCE(CAST(:quoted_message_conversation_id AS TEXT), :conversation_id)),
0 ))END);

insertMessageRestrictedAssetContent:
Expand Down
Loading
Loading