fix(chat): preserve locked message content on unlock
This commit is contained in:
@@ -10,7 +10,6 @@ export class ChatLocalMessageStore {
|
||||
|
||||
async markMessageUnlocked(
|
||||
messageId: string,
|
||||
content: string,
|
||||
lockDetail?: ChatLockDetailData,
|
||||
): Promise<Result<void>> {
|
||||
return Result.wrap(async () => {
|
||||
@@ -21,11 +20,10 @@ export class ChatLocalMessageStore {
|
||||
|
||||
let changed = false;
|
||||
const updatedMessages = localResult.data.map((message) => {
|
||||
if (message.id !== messageId) return message;
|
||||
if (!shouldMarkMessageUnlocked(message, messageId)) return message;
|
||||
changed = true;
|
||||
return ChatMessage.from({
|
||||
...message.toJson(),
|
||||
content,
|
||||
lockDetail: lockDetail ?? {
|
||||
...message.lockDetail,
|
||||
locked: false,
|
||||
@@ -106,3 +104,17 @@ export class ChatLocalMessageStore {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function shouldMarkMessageUnlocked(
|
||||
message: ChatMessage,
|
||||
messageId: string,
|
||||
): boolean {
|
||||
if (message.id !== messageId) return false;
|
||||
if (message.role !== "assistant") return false;
|
||||
if (message.lockDetail.locked !== true) return false;
|
||||
return (
|
||||
Boolean(message.image.url) ||
|
||||
message.lockDetail.reason === "private_message" ||
|
||||
message.lockDetail.reason === "voice_message"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -66,12 +66,10 @@ export class ChatRepository implements IChatRepository {
|
||||
/** 把本地缓存中的单条锁定消息标记为已解锁。 */
|
||||
async markPrivateMessageUnlockedInLocal(
|
||||
messageId: string,
|
||||
content: string,
|
||||
lockDetail?: ChatLockDetailData,
|
||||
): Promise<Result<void>> {
|
||||
return this.localMessages.markMessageUnlocked(
|
||||
messageId,
|
||||
content,
|
||||
lockDetail,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -51,7 +51,6 @@ export interface IChatRepository {
|
||||
/** 把本地缓存中的单条锁定消息标记为已解锁。 */
|
||||
markPrivateMessageUnlockedInLocal(
|
||||
messageId: string,
|
||||
content: string,
|
||||
lockDetail?: ChatLockDetailData,
|
||||
): Promise<Result<void>>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user