Don't change left pane preview or order when someone leaves group
This commit is contained in:
parent
1356625391
commit
be9721c72d
5 changed files with 121 additions and 45 deletions
|
@ -1031,27 +1031,37 @@ async function getNewerMessagesByConversation(
|
|||
|
||||
return new MessageCollection(handleMessageJSON(messages));
|
||||
}
|
||||
async function getLastConversationActivity(
|
||||
conversationId: string,
|
||||
options: {
|
||||
Message: typeof MessageModel;
|
||||
}
|
||||
): Promise<MessageModel | undefined> {
|
||||
const { Message } = options;
|
||||
const result = await channels.getLastConversationActivity(conversationId);
|
||||
async function getLastConversationActivity({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
Message,
|
||||
}: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
Message: typeof MessageModel;
|
||||
}): Promise<MessageModel | undefined> {
|
||||
const result = await channels.getLastConversationActivity({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
});
|
||||
if (result) {
|
||||
return new Message(result);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
async function getLastConversationPreview(
|
||||
conversationId: string,
|
||||
options: {
|
||||
Message: typeof MessageModel;
|
||||
}
|
||||
): Promise<MessageModel | undefined> {
|
||||
const { Message } = options;
|
||||
const result = await channels.getLastConversationPreview(conversationId);
|
||||
async function getLastConversationPreview({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
Message,
|
||||
}: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
Message: typeof MessageModel;
|
||||
}): Promise<MessageModel | undefined> {
|
||||
const result = await channels.getLastConversationPreview({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
});
|
||||
if (result) {
|
||||
return new Message(result);
|
||||
}
|
||||
|
|
|
@ -225,12 +225,14 @@ export type ServerInterface = DataInterface & {
|
|||
conversationId: string,
|
||||
options?: { limit?: number; receivedAt?: number; sentAt?: number }
|
||||
) => Promise<Array<MessageTypeUnhydrated>>;
|
||||
getLastConversationActivity: (
|
||||
conversationId: string
|
||||
) => Promise<MessageType | undefined>;
|
||||
getLastConversationPreview: (
|
||||
conversationId: string
|
||||
) => Promise<MessageType | undefined>;
|
||||
getLastConversationActivity: (options: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
}) => Promise<MessageType | undefined>;
|
||||
getLastConversationPreview: (options: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
}) => Promise<MessageType | undefined>;
|
||||
getNextExpiringMessage: () => Promise<MessageType>;
|
||||
getNextTapToViewMessageToAgeOut: () => Promise<MessageType>;
|
||||
getOutgoingWithoutExpiresAt: () => Promise<Array<MessageType>>;
|
||||
|
@ -323,18 +325,16 @@ export type ClientInterface = DataInterface & {
|
|||
MessageCollection: typeof MessageModelCollectionType;
|
||||
}
|
||||
) => Promise<MessageModelCollectionType>;
|
||||
getLastConversationActivity: (
|
||||
conversationId: string,
|
||||
options: {
|
||||
Message: typeof MessageModel;
|
||||
}
|
||||
) => Promise<MessageModel | undefined>;
|
||||
getLastConversationPreview: (
|
||||
conversationId: string,
|
||||
options: {
|
||||
Message: typeof MessageModel;
|
||||
}
|
||||
) => Promise<MessageModel | undefined>;
|
||||
getLastConversationActivity: (options: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
Message: typeof MessageModel;
|
||||
}) => Promise<MessageModel | undefined>;
|
||||
getLastConversationPreview: (options: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
Message: typeof MessageModel;
|
||||
}) => Promise<MessageModel | undefined>;
|
||||
getNextExpiringMessage: (options: {
|
||||
Message: typeof MessageModel;
|
||||
}) => Promise<MessageModel | null>;
|
||||
|
|
|
@ -2795,19 +2795,44 @@ async function getNewestMessageForConversation(conversationId: string) {
|
|||
return row;
|
||||
}
|
||||
|
||||
async function getLastConversationActivity(
|
||||
conversationId: string
|
||||
): Promise<MessageType | null> {
|
||||
async function getLastConversationActivity({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
}: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
}): Promise<MessageType | null> {
|
||||
const db = getInstance();
|
||||
const row = await db.get(
|
||||
`SELECT * FROM messages WHERE
|
||||
conversationId = $conversationId AND
|
||||
(type IS NULL OR type NOT IN ('profile-change', 'verified-change', 'message-history-unsynced', 'keychange', 'group-v1-migration')) AND
|
||||
(json_extract(json, '$.expirationTimerUpdate.fromSync') IS NULL OR json_extract(json, '$.expirationTimerUpdate.fromSync') != 1)
|
||||
(type IS NULL
|
||||
OR
|
||||
type NOT IN (
|
||||
'profile-change',
|
||||
'verified-change',
|
||||
'message-history-unsynced',
|
||||
'keychange',
|
||||
'group-v1-migration'
|
||||
)
|
||||
) AND
|
||||
(
|
||||
json_extract(json, '$.expirationTimerUpdate.fromSync') IS NULL
|
||||
OR
|
||||
json_extract(json, '$.expirationTimerUpdate.fromSync') != 1
|
||||
) AND NOT
|
||||
(
|
||||
type = 'group-v2-change' AND
|
||||
json_extract(json, '$.groupV2Change.from') != $ourConversationId AND
|
||||
json_extract(json, '$.groupV2Change.details.length') = 1 AND
|
||||
json_extract(json, '$.groupV2Change.details[0].type') != 'member-remove' AND
|
||||
json_extract(json, '$.groupV2Change.details[0].conversationId') != $ourConversationId
|
||||
)
|
||||
ORDER BY received_at DESC, sent_at DESC
|
||||
LIMIT 1;`,
|
||||
{
|
||||
$conversationId: conversationId,
|
||||
$ourConversationId: ourConversationId,
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -2817,18 +2842,39 @@ async function getLastConversationActivity(
|
|||
|
||||
return jsonToObject(row.json);
|
||||
}
|
||||
async function getLastConversationPreview(
|
||||
conversationId: string
|
||||
): Promise<MessageType | null> {
|
||||
async function getLastConversationPreview({
|
||||
conversationId,
|
||||
ourConversationId,
|
||||
}: {
|
||||
conversationId: string;
|
||||
ourConversationId: string;
|
||||
}): Promise<MessageType | null> {
|
||||
const db = getInstance();
|
||||
const row = await db.get(
|
||||
`SELECT * FROM messages WHERE
|
||||
conversationId = $conversationId AND
|
||||
(type IS NULL OR type NOT IN ('profile-change', 'verified-change', 'message-history-unsynced', 'group-v1-migration'))
|
||||
(
|
||||
type IS NULL
|
||||
OR
|
||||
type NOT IN (
|
||||
'profile-change',
|
||||
'verified-change',
|
||||
'message-history-unsynced',
|
||||
'group-v1-migration'
|
||||
)
|
||||
) AND NOT
|
||||
(
|
||||
type = 'group-v2-change' AND
|
||||
json_extract(json, '$.groupV2Change.from') != $ourConversationId AND
|
||||
json_extract(json, '$.groupV2Change.details.length') = 1 AND
|
||||
json_extract(json, '$.groupV2Change.details[0].type') != 'member-remove' AND
|
||||
json_extract(json, '$.groupV2Change.details[0].conversationId') != $ourConversationId
|
||||
)
|
||||
ORDER BY received_at DESC, sent_at DESC
|
||||
LIMIT 1;`,
|
||||
{
|
||||
$conversationId: conversationId,
|
||||
$ourConversationId: ourConversationId,
|
||||
}
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue