Prevent ephemeral message extra changes vanish upon swiping

0c9b301a57362df7c824cebf99cb3053fd40db85

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +23 -0Ignore whitespace
public/script.js+19 -0
@@ -6074,6 +6074,19 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes,
6074 return { type, getMessage };6074 return { type, getMessage };
6075}6075}
60766076
6077export function syncCurrentSwipeInfoExtras() {
6078 if (!chat.length) {
6079 return;
6080 }
6081 const currentMessage = chat[chat.length - 1];
6082 if (currentMessage && Array.isArray(currentMessage.swipe_info) && typeof currentMessage.swipe_id === 'number') {
6083 const swipeInfo = currentMessage.swipe_info[currentMessage.swipe_id];
6084 if (swipeInfo && typeof swipeInfo === 'object') {
6085 swipeInfo.extra = structuredClone(currentMessage.extra);
6086 }
6087 }
6088}
6089
6077function saveImageToMessage(img, mes) {6090function saveImageToMessage(img, mes) {
6078 if (mes && img.image) {6091 if (mes && img.image) {
6079 if (!mes.extra || typeof mes.extra !== 'object') {6092 if (!mes.extra || typeof mes.extra !== 'object') {
@@ -8501,6 +8514,9 @@ function swipe_left() { // when we swipe left..but no generation.
8501 streamingProcessor.onStopStreaming();8514 streamingProcessor.onStopStreaming();
8502 }8515 }
85038516
8517 // Make sure ad-hoc changes to extras are saved before swiping away
8518 syncCurrentSwipeInfoExtras();
8519
8504 const swipe_duration = 120;8520 const swipe_duration = 120;
8505 const swipe_range = '700px';8521 const swipe_range = '700px';
8506 chat[chat.length - 1]['swipe_id']--;8522 chat[chat.length - 1]['swipe_id']--;
@@ -8636,6 +8652,9 @@ const swipe_right = () => {
8636 return unblockGeneration();8652 return unblockGeneration();
8637 }8653 }
86388654
8655 // Make sure ad-hoc changes to extras are saved before swiping away
8656 syncCurrentSwipeInfoExtras();
8657
8639 const swipe_duration = 200;8658 const swipe_duration = 200;
8640 const swipe_range = 700;8659 const swipe_range = 700;
8641 //console.log(swipe_range);8660 //console.log(swipe_range);
public/scripts/slash-commands.js+4 -0
@@ -42,6 +42,7 @@ import {
42 showMoreMessages,42 showMoreMessages,
43 stopGeneration,43 stopGeneration,
44 substituteParams,44 substituteParams,
45 syncCurrentSwipeInfoExtras,
45 system_avatar,46 system_avatar,
46 system_message_types,47 system_message_types,
47 this_chid,48 this_chid,
@@ -2814,8 +2815,11 @@ async function addSwipeCallback(args, value) {
2814 const newSwipeId = lastMessage.swipes.length - 1;2815 const newSwipeId = lastMessage.swipes.length - 1;
28152816
2816 if (isTrueBoolean(args.switch)) {2817 if (isTrueBoolean(args.switch)) {
2818 // Make sure ad-hoc changes to extras are saved before swiping away
2819 syncCurrentSwipeInfoExtras();
2817 lastMessage.swipe_id = newSwipeId;2820 lastMessage.swipe_id = newSwipeId;
2818 lastMessage.mes = lastMessage.swipes[newSwipeId];2821 lastMessage.mes = lastMessage.swipes[newSwipeId];
2822 lastMessage.extra = structuredClone(lastMessage.swipe_info?.[newSwipeId]?.extra ?? lastMessage.extra ?? {});
2819 }2823 }
28202824
2821 await saveChatConditional();2825 await saveChatConditional();