Utility func to sync all mes data to swipe

4ab54016ad73af005e71ac019931bff3033d7ccd

Wolfsblvt <wolfsblvt@gmail.com>

2 files changed, +46 -11Showing whitespace changes
public/script.js+44 -9
@@ -6086,17 +6086,52 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes,
60866086 return { type, getMessage };
60876087}
60886088
6089-export function syncCurrentSwipeInfoExtras() {
6089+/**
6090+ * Syncs the current message and all its data into the swipe data at the given message ID (or the last message if no ID is given).
6091+ *
6092+ * If the swipe data is invalid in some way, this function will exit out without doing anything.
6093+ * @param {number?} [messageId=null] - The ID of the message to sync with the swipe data. If no ID is given, the last message is used.
6094+ * @returns {boolean} Whether the message was successfully synced
6095+ */
6096+export function syncMesToSwipe(messageId = null) {
60906097 if (!chat.length) {
60916098 return false;
60926099 }
6093- const currentMessage = chat[chat.length - 1];
6100+
6094- if (currentMessage && Array.isArray(currentMessage.swipe_info) && typeof currentMessage.swipe_id === 'number') {
6101+ const targetMessageId = messageId ?? chat.length - 1;
6095- const swipeInfo = currentMessage.swipe_info[currentMessage.swipe_id];
6102+ if (chat.length > targetMessageId) {
6096- if (swipeInfo && typeof swipeInfo === 'object') {
6103+ console.warn(`[syncMesToSwipe] Invalid message ID: ${messageId}`);
6097- swipeInfo.extra = structuredClone(currentMessage.extra);
6104+ return false;
60986105 }
6106+
6107+ const targetMessage = chat[targetMessageId];
6108+
6109+ // No swipe data there yet, exit out
6110+ if (typeof targetMessage.swipe_id !== 'number') {
6111+ return false;
60996112 }
6113+ // If swipes structure is invalid, exit out (for now?)
6114+ if (!Array.isArray(targetMessage.swipe_info) || !Array.isArray(targetMessage.swipes)) {
6115+ return false;
6116+ }
6117+ // If the swipe is not present yet, exit out (will likely be copied later)
6118+ if (!targetMessage.swipes[targetMessage.swipe_id] || !targetMessage.swipe_info[targetMessage.swipe_id]) {
6119+ return false;
6120+ }
6121+
6122+ const targetSwipeInfo = targetMessage.swipe_info[targetMessage.swipe_id];
6123+ if (typeof targetSwipeInfo !== 'object') {
6124+ return false;
6125+ }
6126+
6127+ targetMessage.swipes[targetMessage.swipe_id] = targetMessage.mes;
6128+
6129+ targetSwipeInfo.send_date = targetMessage.send_date;
6130+ targetSwipeInfo.gen_started = targetMessage.gen_started;
6131+ targetSwipeInfo.gen_finished = targetMessage.gen_finished;
6132+ targetSwipeInfo.extra = structuredClone(targetMessage.extra);
6133+
6134+ return true;
61006135}
61016136
61026137function saveImageToMessage(img, mes) {
@@ -8568,7 +8603,7 @@ function swipe_left() { // when we swipe left..but no generation.
85688603 }
85698604
85708605 // Make sure ad-hoc changes to extras are saved before swiping away
85718606 syncCurrentSwipeInfoExtrassyncMesToSwipe();
85728607
85738608 const swipe_duration = 120;
85748609 const swipe_range = '700px';
@@ -8706,7 +8741,7 @@ const swipe_right = () => {
87068741 }
87078742
87088743 // Make sure ad-hoc changes to extras are saved before swiping away
87098744 syncCurrentSwipeInfoExtrassyncMesToSwipe();
87108745
87118746 const swipe_duration = 200;
87128747 const swipe_range = 700;
public/scripts/slash-commands.js+2 -2
@@ -42,7 +42,7 @@ import {
4242 showMoreMessages,
4343 stopGeneration,
4444 substituteParams,
4545 syncCurrentSwipeInfoExtrassyncMesToSwipe,
4646 system_avatar,
4747 system_message_types,
4848 this_chid,
@@ -2921,7 +2921,7 @@ async function addSwipeCallback(args, value) {
29212921
29222922 if (isTrueBoolean(args.switch)) {
29232923 // Make sure ad-hoc changes to extras are saved before swiping away
29242924 syncCurrentSwipeInfoExtrassyncMesToSwipe();
29252925 lastMessage.swipe_id = newSwipeId;
29262926 lastMessage.mes = lastMessage.swipes[newSwipeId];
29272927 lastMessage.extra = structuredClone(lastMessage.swipe_info?.[newSwipeId]?.extra ?? lastMessage.extra ?? {});