From 28da23c9c3717b4dec4892c6bb477c5740d5165d Mon Sep 17 00:00:00 2001 From: Bo26fhmC5M <88071760+Bo26fhmC5M@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:05:35 +0900 Subject: [PATCH] feat: add HypaV2 to V3 conversion in HypaV3 modal --- src/lib/Others/HypaV3Modal.svelte | 112 +++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/src/lib/Others/HypaV3Modal.svelte b/src/lib/Others/HypaV3Modal.svelte index 87ec2471..686707a2 100644 --- a/src/lib/Others/HypaV3Modal.svelte +++ b/src/lib/Others/HypaV3Modal.svelte @@ -11,7 +11,11 @@ } from "lucide-svelte"; import { tick } from "svelte"; import TextAreaInput from "../../lib/UI/GUI/TextAreaInput.svelte"; - import { alertConfirm, showHypaV3Alert } from "../../ts/alert"; + import { + alertConfirm, + alertNormalWait, + showHypaV3Alert, + } from "../../ts/alert"; import { DBState, alertStore, @@ -337,6 +341,80 @@ } } + function isHypaV2ConversionPossible(): boolean { + const char = DBState.db.characters[$selectedCharID]; + const chat = char.chats[DBState.db.characters[$selectedCharID].chatPage]; + + return chat.hypaV3Data?.summaries?.length === 0 && chat.hypaV2Data !== null; + } + + function convertHypaV2ToV3(): { success: boolean; error?: string } { + try { + const char = DBState.db.characters[$selectedCharID]; + const chat = char.chats[DBState.db.characters[$selectedCharID].chatPage]; + const hypaV2Data = chat.hypaV2Data; + + if (chat.hypaV3Data?.summaries?.length > 0) { + return { + success: false, + error: "HypaV3 data already exists.", + }; + } + + if (!hypaV2Data) { + return { + success: false, + error: "HypaV2 data not found.", + }; + } + + if (hypaV2Data.mainChunks.length === 0) { + return { + success: false, + error: "No main chunks found.", + }; + } + + for (let i = 0; i < hypaV2Data.mainChunks.length; i++) { + const mainChunk = hypaV2Data.mainChunks[i]; + + if (!Array.isArray(mainChunk.chatMemos)) { + return { + success: false, + error: `Chunk ${i}'s chatMemos is not an array.`, + }; + } + + if (mainChunk.chatMemos.length === 0) { + return { + success: false, + error: `Chunk ${i}'s chatMemos is empty.`, + }; + } + } + + const newHypaV3Data = { + summaries: hypaV2Data.mainChunks.map((mainChunk) => ({ + text: mainChunk.text, + chatMemos: [...mainChunk.chatMemos], + isImportant: false, + })), + lastSelectedSummaries: [], + }; + + chat.hypaV3Data = newHypaV3Data; + + return { + success: true, + }; + } catch (error) { + return { + success: false, + error: `Error occurred: ${error.message}`, + }; + } + } + type DualActionParams = { onMainAction?: () => void; onAlternativeAction?: () => void; @@ -479,7 +557,37 @@