SHA256
НЕ ПРОВЕРЕНО: DM-вложения, upload файлов и ревизии личных сообщений
This commit is contained in:
+45
-16
@@ -1,5 +1,5 @@
|
||||
import { AuthService } from './services/auth-service.js';
|
||||
import { listStoredMessages, putStoredMessage, clearStoredMessages } from './services/message-store.js';
|
||||
import { listStoredMessages, putStoredMessage, deleteStoredMessage, clearStoredMessages } from './services/message-store.js';
|
||||
import { SOLANA_ENDPOINT_DEFAULT } from './solana-programs.js';
|
||||
import {
|
||||
DEFAULT_SHINE_SERVER_HTTP,
|
||||
@@ -378,15 +378,22 @@ function persistMessageRecord(chatId, row) {
|
||||
baseKey: String(row.baseKey || ''),
|
||||
messageType: Number(row.messageType || 0),
|
||||
rawBlobB64: String(row.rawBlobB64 || ''),
|
||||
revisionTimeMs: Number(row.revisionTimeMs || 0),
|
||||
unread: Boolean(row.unread),
|
||||
firstTick: Boolean(row.firstTick),
|
||||
secondTick: Boolean(row.secondTick),
|
||||
readReceiptSent: Boolean(row.readReceiptSent),
|
||||
refBaseKey: String(row.refBaseKey || ''),
|
||||
attachments: Array.isArray(row.attachments) ? row.attachments : [],
|
||||
ts: resolvedTs > 0 ? resolvedTs : Date.now(),
|
||||
}).catch(() => {});
|
||||
}
|
||||
|
||||
function removeStoredMessageRecord(messageKey) {
|
||||
if (!messageKey) return;
|
||||
void deleteStoredMessage(messageKey).catch(() => {});
|
||||
}
|
||||
|
||||
export async function hydrateMessagesFromStore() {
|
||||
try {
|
||||
const rows = await listStoredMessages();
|
||||
@@ -407,11 +414,13 @@ export async function hydrateMessagesFromStore() {
|
||||
baseKey: String(row.baseKey || ''),
|
||||
messageType: Number(row.messageType || 0),
|
||||
rawBlobB64: String(row.rawBlobB64 || ''),
|
||||
revisionTimeMs: Number(row.revisionTimeMs || 0),
|
||||
unread: Boolean(row.unread),
|
||||
firstTick: Boolean(row.firstTick),
|
||||
secondTick: Boolean(row.secondTick),
|
||||
readReceiptSent: Boolean(row.readReceiptSent),
|
||||
refBaseKey: String(row.refBaseKey || ''),
|
||||
attachments: Array.isArray(row.attachments) ? row.attachments : [],
|
||||
createdAtMs: Number(row.ts || 0),
|
||||
});
|
||||
});
|
||||
@@ -565,25 +574,45 @@ export function addSignedMessageToChat({
|
||||
unread = false,
|
||||
rawBlobB64 = '',
|
||||
refBaseKey = '',
|
||||
revisionTimeMs = 0,
|
||||
attachments = [],
|
||||
deleted = false,
|
||||
} = {}) {
|
||||
const id = String(messageKey || '').trim();
|
||||
if (!chatId || !id) return false;
|
||||
if (state.knownMessageKeys[id]) return false;
|
||||
state.knownMessageKeys[id] = true;
|
||||
const list = getChatMessages(chatId);
|
||||
const existingIndex = list.findIndex((row) => String(row?.messageKey || '').trim() === id);
|
||||
const existing = existingIndex >= 0 ? list[existingIndex] : null;
|
||||
|
||||
const row = {
|
||||
from: from === 'out' ? 'out' : 'in',
|
||||
text: String(text || ''),
|
||||
messageKey: id,
|
||||
baseKey: String(baseKey || ''),
|
||||
messageType: Number(messageType || 0),
|
||||
rawBlobB64: String(rawBlobB64 || ''),
|
||||
unread: Boolean(unread),
|
||||
refBaseKey: String(refBaseKey || ''),
|
||||
firstTick: from === 'out',
|
||||
secondTick: false,
|
||||
};
|
||||
getChatMessages(chatId).push(row);
|
||||
if (deleted) {
|
||||
if (existingIndex >= 0) {
|
||||
list.splice(existingIndex, 1);
|
||||
removeStoredMessageRecord(id);
|
||||
sortChatMessagesInPlace(chatId);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
state.knownMessageKeys[id] = true;
|
||||
const row = existing || {};
|
||||
row.from = from === 'out' ? 'out' : 'in';
|
||||
row.text = String(text || '');
|
||||
row.messageKey = id;
|
||||
row.baseKey = String(baseKey || '');
|
||||
row.messageType = Number(messageType || 0);
|
||||
row.rawBlobB64 = String(rawBlobB64 || '');
|
||||
row.revisionTimeMs = Number(revisionTimeMs || 0);
|
||||
row.attachments = Array.isArray(attachments) ? attachments : [];
|
||||
row.unread = row.from === 'in' ? Boolean(unread) : false;
|
||||
row.refBaseKey = String(refBaseKey || '');
|
||||
row.firstTick = row.from === 'out';
|
||||
row.secondTick = Boolean(existing?.secondTick);
|
||||
row.readReceiptSent = Boolean(existing?.readReceiptSent);
|
||||
|
||||
if (existingIndex < 0) {
|
||||
list.push(row);
|
||||
}
|
||||
sortChatMessagesInPlace(chatId);
|
||||
persistMessageRecord(chatId, row);
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user