Prevent ephemeral message extra changes vanish upon swiping

0c9b301a57362df7c824cebf99cb3053fd40db85

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

2 files changed, +23 -0Showing whitespace changes
public/script.js+19 -0
@@ -6074,6 +6074,19 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes,
60746074 return { type, getMessage };
60756075}
60766076
6077+export 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+
60776090function saveImageToMessage(img, mes) {
60786091 if (mes && img.image) {
60796092 if (!mes.extra || typeof mes.extra !== 'object') {
@@ -8501,6 +8514,9 @@ function swipe_left() { // when we swipe left..but no generation.
85018514 streamingProcessor.onStopStreaming();
85028515 }
85038516
8517+ // Make sure ad-hoc changes to extras are saved before swiping away
8518+ syncCurrentSwipeInfoExtras();
8519+
85048520 const swipe_duration = 120;
85058521 const swipe_range = '700px';
85068522 chat[chat.length - 1]['swipe_id']--;
@@ -8636,6 +8652,9 @@ const swipe_right = () => {
86368652 return unblockGeneration();
86378653 }
86388654
8655+ // Make sure ad-hoc changes to extras are saved before swiping away
8656+ syncCurrentSwipeInfoExtras();
8657+
86398658 const swipe_duration = 200;
86408659 const swipe_range = 700;
86418660 //console.log(swipe_range);
public/scripts/slash-commands.js+4 -0
@@ -42,6 +42,7 @@ import {
4242 showMoreMessages,
4343 stopGeneration,
4444 substituteParams,
45+ syncCurrentSwipeInfoExtras,
4546 system_avatar,
4647 system_message_types,
4748 this_chid,
@@ -2814,8 +2815,11 @@ async function addSwipeCallback(args, value) {
28142815 const newSwipeId = lastMessage.swipes.length - 1;
28152816
28162817 if (isTrueBoolean(args.switch)) {
2818+ // Make sure ad-hoc changes to extras are saved before swiping away
2819+ syncCurrentSwipeInfoExtras();
28172820 lastMessage.swipe_id = newSwipeId;
28182821 lastMessage.mes = lastMessage.swipes[newSwipeId];
2822+ lastMessage.extra = structuredClone(lastMessage.swipe_info?.[newSwipeId]?.extra ?? lastMessage.extra ?? {});
28192823 }
28202824
28212825 await saveChatConditional();