Change DataBase inside svelte to DBState for performance

This commit is contained in:
kwaroran
2024-10-23 23:46:32 +09:00
parent a9f1819044
commit 2044d9b63b
122 changed files with 1372 additions and 1424 deletions

View File

@@ -1,7 +1,7 @@
<script>
import { onMount, createEventDispatcher } from 'svelte';
import { EditIcon, LanguagesIcon } from "lucide-svelte";
import { DataBase } from "../../ts/storage/database";
import { DataBase, DBState } from "../../ts/storage/database.svelte";
import CodeMirror from 'codemirror';
import 'codemirror/lib/codemirror.css';
@@ -9,7 +9,7 @@
let { value = $bindable(), translate = $bindable() } = $props();
const dispatch = createEventDispatcher();
let toggleTranslate = $state(!$DataBase.useAutoTranslateInput);
let toggleTranslate = $state(!DBState.db.useAutoTranslateInput);
let velement = $state(), veditor = $state();
let telement = $state(), teditor = $state();
let _value = $state(value);
@@ -111,7 +111,7 @@
</script>
<div class="flex flex-1 items-end ml-2 mr-2">
{#if $DataBase.useAutoTranslateInput}
{#if DBState.db.useAutoTranslateInput}
<button
onclick={toggleTranslateText}
class="mr-2 bg-textcolor2 flex justify-center items-center text-gray-100 w-12 h-12 rounded-md hover:bg-green-500 transition-colors">

View File

@@ -1,7 +1,7 @@
<script lang="ts">
import { get } from 'svelte/store';
import { FileAudioIcon, PlusIcon } from "lucide-svelte";
import { DataBase, setDatabase, type character, type groupChat } from "src/ts/storage/database";
import { DataBase, setDatabase, type character, type groupChat } from "src/ts/storage/database.svelte";
import { getFileSrc, saveAsset } from "src/ts/storage/globalApi";
import { selectMultipleFile } from "src/ts/util";
interface Props {

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import { ParseMarkdown, risuChatParser } from "src/ts/parser";
import { DataBase, type Database, type character, type groupChat } from "src/ts/storage/database";
import { DataBase, type Database, type character, type groupChat } from "src/ts/storage/database.svelte";
import { moduleBackgroundEmbedding, ReloadGUIPointer, selectedCharID } from "src/ts/stores";
import { onDestroy } from "svelte";

View File

@@ -4,7 +4,7 @@
import AutoresizeArea from "../UI/GUI/TextAreaResizable.svelte";
import { alertConfirm, alertError, alertRequestData } from "../../ts/alert";
import { language } from "../../lang";
import { DataBase, type MessageGenerationInfo } from "../../ts/storage/database";
import { DBState, type MessageGenerationInfo } from "../../ts/storage/database.svelte";
import { HideIconStore, ReloadGUIPointer, selectedCharID } from "../../ts/stores";
import { translateHTML } from "../../ts/translator/translator";
import { risuChatParser } from "src/ts/process/scripts";
@@ -19,7 +19,7 @@
import { onDestroy, onMount } from "svelte";
let translating = $state(false)
try {
translating = get(DataBase).autoTranslate
translating = DBState.db.autoTranslate
} catch (error) {}
let editMode = $state(false)
let statusMessage:string = $state('')
@@ -56,46 +56,46 @@
}: Props = $props();
let msgDisplay = $state('')
let translated = $state(get(DataBase).autoTranslate)
let translated = $state(DBState.db.autoTranslate)
async function rm(e:MouseEvent, rec?:boolean){
if(e.shiftKey){
let msg = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msg = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
msg = msg.slice(0, idx)
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msg
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msg
return
}
const rm = $DataBase.askRemoval ? await alertConfirm(language.removeChat) : true
const rm = DBState.db.askRemoval ? await alertConfirm(language.removeChat) : true
if(rm){
if($DataBase.instantRemove || rec){
if(DBState.db.instantRemove || rec){
const r = await alertConfirm(language.instantRemoveConfirm)
let msg = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msg = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
if(!r){
msg = msg.slice(0, idx)
}
else{
msg.splice(idx, 1)
}
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msg
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msg
}
else{
let msg = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msg = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
msg.splice(idx, 1)
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msg
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msg
}
}
}
async function edit(){
let msg = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msg = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
msg[idx].data = message
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msg
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msg
}
function getCbsCondition(){
const cbsConditions:CbsConditions = {
firstmsg: firstMessage ?? false,
chatRole: $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]?.message?.[idx]?.role ?? null,
chatRole: DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage]?.message?.[idx]?.role ?? null,
}
return cbsConditions
}
@@ -130,14 +130,14 @@
lastChatId = chatID
translateText = false
try {
translated = get(DataBase).autoTranslate
translated = DBState.db.autoTranslate
if(translated){
translateText = true
}
} catch (error) {}
}
if(translateText){
if(!$DataBase.legacyTranslation){
if(!DBState.db.legacyTranslation){
const marked = await ParseMarkdown(data, charArg, 'pretranslate', chatID, getCbsCondition())
translating = true
const translated = await postTranslationParse(await translateHTML(marked, false, charArg, chatID))
@@ -192,12 +192,12 @@
unsubscribers.forEach(u => u())
})
</script>
<div class="flex max-w-full justify-center risu-chat" style={isLastMemory ? `border-top:${$DataBase.memoryLimitThickness}px solid rgba(98, 114, 164, 0.7);` : ''}>
<div class="flex max-w-full justify-center risu-chat" style={isLastMemory ? `border-top:${DBState.db.memoryLimitThickness}px solid rgba(98, 114, 164, 0.7);` : ''}>
<div class="text-textcolor mt-1 ml-4 mr-4 mb-1 p-2 bg-transparent flex-grow border-t-gray-900 border-opacity-30 border-transparent flexium items-start max-w-full" >
{#if !blankMessage && !$HideIconStore}
{#if $DataBase.characters[$selectedCharID]?.chaId === "§playground"}
<div class="shadow-lg border-textcolor2 border mt-2 flex justify-center items-center text-textcolor2" style={`height:${$DataBase.iconsize * 3.5 / 100}rem;width:${$DataBase.iconsize * 3.5 / 100}rem;min-width:${$DataBase.iconsize * 3.5 / 100}rem`}
class:rounded-md={!$DataBase.roundIcons} class:rounded-full={$DataBase.roundIcons}>
{#if DBState.db.characters[$selectedCharID]?.chaId === "§playground"}
<div class="shadow-lg border-textcolor2 border mt-2 flex justify-center items-center text-textcolor2" style={`height:${DBState.db.iconsize * 3.5 / 100}rem;width:${DBState.db.iconsize * 3.5 / 100}rem;min-width:${DBState.db.iconsize * 3.5 / 100}rem`}
class:rounded-md={!DBState.db.roundIcons} class:rounded-full={DBState.db.roundIcons}>
{#if name === 'assistant'}
<BotIcon />
{:else}
@@ -206,27 +206,27 @@
</div>
{:else}
{#await img}
<div class="shadow-lg bg-textcolor2 mt-2" style={`height:${$DataBase.iconsize * 3.5 / 100}rem;width:${$DataBase.iconsize * 3.5 / 100}rem;min-width:${$DataBase.iconsize * 3.5 / 100}rem`}
class:rounded-md={!$DataBase.roundIcons} class:rounded-full={$DataBase.roundIcons}></div>
<div class="shadow-lg bg-textcolor2 mt-2" style={`height:${DBState.db.iconsize * 3.5 / 100}rem;width:${DBState.db.iconsize * 3.5 / 100}rem;min-width:${DBState.db.iconsize * 3.5 / 100}rem`}
class:rounded-md={!DBState.db.roundIcons} class:rounded-full={DBState.db.roundIcons}></div>
{:then m}
{#if largePortrait && (!$DataBase.roundIcons)}
<div class="shadow-lg bg-textcolor2 mt-2" style={m + `height:${$DataBase.iconsize * 3.5 / 100 / 0.75}rem;width:${$DataBase.iconsize * 3.5 / 100}rem;min-width:${$DataBase.iconsize * 3.5 / 100}rem`}
class:rounded-md={!$DataBase.roundIcons} class:rounded-full={$DataBase.roundIcons}></div>
{#if largePortrait && (!DBState.db.roundIcons)}
<div class="shadow-lg bg-textcolor2 mt-2" style={m + `height:${DBState.db.iconsize * 3.5 / 100 / 0.75}rem;width:${DBState.db.iconsize * 3.5 / 100}rem;min-width:${DBState.db.iconsize * 3.5 / 100}rem`}
class:rounded-md={!DBState.db.roundIcons} class:rounded-full={DBState.db.roundIcons}></div>
{:else}
<div class="shadow-lg bg-textcolor2 mt-2" style={m + `height:${$DataBase.iconsize * 3.5 / 100}rem;width:${$DataBase.iconsize * 3.5 / 100}rem;min-width:${$DataBase.iconsize * 3.5 / 100}rem`}
class:rounded-md={!$DataBase.roundIcons} class:rounded-full={$DataBase.roundIcons}></div>
<div class="shadow-lg bg-textcolor2 mt-2" style={m + `height:${DBState.db.iconsize * 3.5 / 100}rem;width:${DBState.db.iconsize * 3.5 / 100}rem;min-width:${DBState.db.iconsize * 3.5 / 100}rem`}
class:rounded-md={!DBState.db.roundIcons} class:rounded-full={DBState.db.roundIcons}></div>
{/if}
{/await}
{/if}
{/if}
<span class="flex flex-col ml-4 w-full max-w-full min-w-0">
<div class="flexium items-center chat">
{#if $DataBase.characters[$selectedCharID]?.chaId === "§playground" && !blankMessage}
{#if DBState.db.characters[$selectedCharID]?.chaId === "§playground" && !blankMessage}
<span class="chat text-xl border-darkborderc flex items-center">
<span>{name === 'assistant' ? 'Assistant' : 'User'}</span>
<button class="ml-2 text-textcolor2 hover:text-textcolor" onclick={() => {
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[idx].role = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[idx].role === 'char' ? 'user' : 'char'
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[idx].role = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[idx].role === 'char' ? 'user' : 'char'
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage] = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage]
}}><ArrowLeftRightIcon size="18" /></button>
</span>
{:else if !blankMessage && !$HideIconStore}
@@ -234,7 +234,7 @@
{/if}
<div class="flex-grow flex items-center justify-end text-textcolor2">
<span class="text-xs">{statusMessage}</span>
{#if $DataBase.useChatCopy && !blankMessage}
{#if DBState.db.useChatCopy && !blankMessage}
<button class="ml-2 hover:text-green-500 transition-colors" onclick={()=>{
window.navigator.clipboard.writeText(msgDisplay).then(() => {
setStatusMessage(language.copied)
@@ -244,7 +244,7 @@
</button>
{/if}
{#if idx > -1}
{#if $DataBase.characters[$selectedCharID].type !== 'group' && $DataBase.characters[$selectedCharID].ttsMode !== 'none' && ($DataBase.characters[$selectedCharID].ttsMode)}
{#if DBState.db.characters[$selectedCharID].type !== 'group' && DBState.db.characters[$selectedCharID].ttsMode !== 'none' && (DBState.db.characters[$selectedCharID].ttsMode)}
<button class="ml-2 hover:text-green-500 transition-colors" onclick={()=>{
return sayTTS(null, message)
}}>
@@ -269,7 +269,7 @@
</button>
{/if}
{/if}
{#if $DataBase.translator !== '' && !blankMessage}
{#if DBState.db.translator !== '' && !blankMessage}
<button class={"ml-2 cursor-pointer hover:text-green-500 transition-colors " + (translated ? 'text-green-400':'')} class:translating={translating} onclick={async () => {
translated = !translated
}}>
@@ -277,7 +277,7 @@
</button>
{/if}
{#if rerollIcon || altGreeting}
{#if $DataBase.swipe || altGreeting}
{#if DBState.db.swipe || altGreeting}
<button class="ml-2 hover:text-green-500 transition-colors" onclick={unReroll}>
<ArrowLeft size={22}/>
</button>
@@ -292,7 +292,7 @@
{/if}
</div>
</div>
{#if messageGenerationInfo && $DataBase.requestInfoInsideChat}
{#if messageGenerationInfo && DBState.db.requestInfoInsideChat}
<div>
<button class="text-sm p-1 text-textcolor2 border-darkborderc float-end mr-2 my-2
hover:ring-darkbutton hover:ring rounded-md hover:text-textcolor transition-all flex justify-center items-center"
@@ -321,12 +321,12 @@
{:else}
<!-- svelte-ignore a11y_click_events_have_key_events -->
<span class="text chat chattext prose minw-0" class:prose-invert={$ColorSchemeTypeStore} onclick={() => {
if($DataBase.clickToEdit && idx > -1){
if(DBState.db.clickToEdit && idx > -1){
editMode = true
}
}}
style:font-size="{0.875 * ($DataBase.zoomsize / 100)}rem"
style:line-height="{($DataBase.lineHeight ?? 1.25) * ($DataBase.zoomsize / 100)}rem"
style:font-size="{0.875 * (DBState.db.zoomsize / 100)}rem"
style:line-height="{(DBState.db.lineHeight ?? 1.25) * (DBState.db.zoomsize / 100)}rem"
>
{#key $ReloadGUIPointer}
{#await markParsing(msgDisplay, character, 'normal', idx, translated)}

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import { getCustomBackground, getEmotion } from "../../ts/util";
import { DataBase } from "../../ts/storage/database";
import { DBState } from "../../ts/storage/database.svelte";
import { CharEmotion, ShowVN, selectedCharID } from "../../ts/stores";
import ResizeBox from './ResizeBox.svelte'
import DefaultChatScreen from "./DefaultChatScreen.svelte";
@@ -16,17 +16,17 @@
const wallPaper = `background: url(${defaultWallpaper})`
const externalStyles =
("background: " + ($DataBase.textScreenColor ? ($DataBase.textScreenColor + '80') : "rgba(0,0,0,0.8)") + ';\n')
+ ($DataBase.textBorder ? "text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;" : '')
+ ($DataBase.textScreenRounded ? "border-radius: 2rem; padding: 1rem;" : '')
+ ($DataBase.textScreenBorder ? `border: 0.3rem solid ${$DataBase.textScreenBorder};` : '')
("background: " + (DBState.db.textScreenColor ? (DBState.db.textScreenColor + '80') : "rgba(0,0,0,0.8)") + ';\n')
+ (DBState.db.textBorder ? "text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;" : '')
+ (DBState.db.textScreenRounded ? "border-radius: 2rem; padding: 1rem;" : '')
+ (DBState.db.textScreenBorder ? `border: 0.3rem solid ${DBState.db.textScreenBorder};` : '')
let bgImg= $state('')
let lastBg = $state('')
$effect.pre(() => {
(async () =>{
if($DataBase.customBackground !== lastBg){
lastBg = $DataBase.customBackground
bgImg = await getCustomBackground($DataBase.customBackground)
if(DBState.db.customBackground !== lastBg){
lastBg = DBState.db.customBackground
bgImg = await getCustomBackground(DBState.db.customBackground)
}
})()
});
@@ -34,48 +34,48 @@
{#if $ShowVN}
<VisualNovelMain />
{:else if $DataBase.theme === ''}
{:else if DBState.db.theme === ''}
<div class="flex-grow h-full min-w-0 relative justify-center flex">
<SideBarArrow />
<BackgroundDom />
<div style={bgImg} class="h-full w-full" class:max-w-6xl={$DataBase.classicMaxWidth}>
<div style={bgImg} class="h-full w-full" class:max-w-6xl={DBState.db.classicMaxWidth}>
{#if $selectedCharID >= 0}
{#if $DataBase.characters[$selectedCharID].viewScreen !== 'none' && ($DataBase.characters[$selectedCharID].type === 'group' || (!$DataBase.characters[$selectedCharID].inlayViewScreen))}
{#if DBState.db.characters[$selectedCharID].viewScreen !== 'none' && (DBState.db.characters[$selectedCharID].type === 'group' || (!DBState.db.characters[$selectedCharID].inlayViewScreen))}
<ResizeBox />
{/if}
{/if}
<DefaultChatScreen customStyle={bgImg.length > 2 ? `${externalStyles}`: ''} bind:openChatList bind:openModuleList/>
</div>
</div>
{:else if $DataBase.theme === 'waifu'}
{:else if DBState.db.theme === 'waifu'}
<div class="flex-grow h-full flex justify-center relative" style="{bgImg.length < 4 ? wallPaper : bgImg}">
<SideBarArrow />
<BackgroundDom />
{#if $selectedCharID >= 0}
{#if $DataBase.characters[$selectedCharID].viewScreen !== 'none'}
<div class="h-full mr-10 flex justify-end halfw" style:width="{42 * ($DataBase.waifuWidth2 / 100)}rem">
<TransitionImage classType="waifu" src={getEmotion($DataBase, $CharEmotion, 'plain')}/>
{#if DBState.db.characters[$selectedCharID].viewScreen !== 'none'}
<div class="h-full mr-10 flex justify-end halfw" style:width="{42 * (DBState.db.waifuWidth2 / 100)}rem">
<TransitionImage classType="waifu" src={getEmotion(DBState.db, $CharEmotion, 'plain')}/>
</div>
{/if}
{/if}
<div class="h-full w-2xl" style:width="{42 * ($DataBase.waifuWidth / 100)}rem" class:halfwp={$selectedCharID >= 0 && $DataBase.characters[$selectedCharID].viewScreen !== 'none'}>
<div class="h-full w-2xl" style:width="{42 * (DBState.db.waifuWidth / 100)}rem" class:halfwp={$selectedCharID >= 0 && DBState.db.characters[$selectedCharID].viewScreen !== 'none'}>
<DefaultChatScreen customStyle={`${externalStyles}backdrop-filter: blur(4px);`} bind:openChatList bind:openModuleList/>
</div>
</div>
{:else if $DataBase.theme === 'waifuMobile'}
{:else if DBState.db.theme === 'waifuMobile'}
<div class="flex-grow h-full relative" style={bgImg.length < 4 ? wallPaper : bgImg}>
<SideBarArrow />
<BackgroundDom />
<div class="w-full absolute z-10 bottom-0 left-0"
class:per33={$selectedCharID >= 0 && $DataBase.characters[$selectedCharID].viewScreen !== 'none'}
class:h-full={!($selectedCharID >= 0 && $DataBase.characters[$selectedCharID].viewScreen !== 'none')}
class:per33={$selectedCharID >= 0 && DBState.db.characters[$selectedCharID].viewScreen !== 'none'}
class:h-full={!($selectedCharID >= 0 && DBState.db.characters[$selectedCharID].viewScreen !== 'none')}
>
<DefaultChatScreen customStyle={`${externalStyles}backdrop-filter: blur(4px);`} bind:openChatList bind:openModuleList/>
</div>
{#if $selectedCharID >= 0}
{#if $DataBase.characters[$selectedCharID].viewScreen !== 'none'}
{#if DBState.db.characters[$selectedCharID].viewScreen !== 'none'}
<div class="h-full w-full absolute bottom-0 left-0 max-w-full">
<TransitionImage classType="mobile" src={getEmotion($DataBase, $CharEmotion, 'plain')}/>
<TransitionImage classType="mobile" src={getEmotion(DBState.db, $CharEmotion, 'plain')}/>
</div>
{/if}
{/if}

View File

@@ -5,7 +5,7 @@
import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, ImagePlusIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, PackageIcon, Plus, RefreshCcwIcon, ReplyIcon, Send, StepForwardIcon } from "lucide-svelte";
import { selectedCharID, CurrentShowMemoryLimit, PlaygroundStore, UserIconProtrait, createSimpleCharacter } from "../../ts/stores";
import Chat from "./Chat.svelte";
import { DataBase, type Message, type character, type groupChat } from "../../ts/storage/database";
import { DBState, type Message, type character, type groupChat } from "../../ts/storage/database.svelte";
import { getCharImage } from "../../ts/characters";
import { chatProcessStage, doingChat, sendChat } from "../../ts/process/index";
import { findCharacterbyId, messageForm, sleep } from "../../ts/util";
@@ -37,7 +37,7 @@
let rerollid = -1
let lastCharId = -1
let doingChatInputTranslate = false
let currentCharacter:character|groupChat = $state($DataBase.characters[$selectedCharID])
let currentCharacter:character|groupChat = $state(DBState.db.characters[$selectedCharID])
let toggleStickers:boolean = $state(false)
let fileInput:string[] = $state([])
@@ -58,7 +58,7 @@
rerollid = -1
}
let cha = $DataBase.characters[selectedChar].chats[$DataBase.characters[selectedChar].chatPage].message
let cha = DBState.db.characters[selectedChar].chats[DBState.db.characters[selectedChar].chatPage].message
if(messageInput.startsWith('/')){
const commandProcessed = await processMultiCommand(messageInput)
@@ -76,20 +76,20 @@
}
if(messageInput === ''){
if($DataBase.characters[selectedChar].type !== 'group'){
if(DBState.db.characters[selectedChar].type !== 'group'){
if(cha.length === 0 || cha[cha.length - 1].role !== 'user'){
if($DataBase.useSayNothing){
if(DBState.db.useSayNothing){
cha.push({
role: 'user',
data: '*says nothing*',
name: $ConnectionOpenStore ? $DataBase.username : null
name: $ConnectionOpenStore ? DBState.db.username : null
})
}
}
}
}
else{
const char = $DataBase.characters[selectedChar]
const char = DBState.db.characters[selectedChar]
if(char.type === 'character'){
let triggerResult = await runTrigger(char,'input', {chat: char.chats[char.chatPage]})
if(triggerResult){
@@ -100,7 +100,7 @@
role: 'user',
data: await processScript(char,messageInput,'editinput'),
time: Date.now(),
name: $ConnectionOpenStore ? $DataBase.username : null
name: $ConnectionOpenStore ? DBState.db.username : null
})
}
else{
@@ -108,13 +108,13 @@
role: 'user',
data: messageInput,
time: Date.now(),
name: $ConnectionOpenStore ? $DataBase.username : null
name: $ConnectionOpenStore ? DBState.db.username : null
})
}
}
messageInput = ''
messageInputTranslate = ''
$DataBase.characters[selectedChar].chats[$DataBase.characters[selectedChar].chatPage].message = cha
DBState.db.characters[selectedChar].chats[DBState.db.characters[selectedChar].chatPage].message = cha
rerolls = []
await sleep(10)
updateInputSizeAll()
@@ -130,33 +130,33 @@
rerolls = []
rerollid = -1
}
const genId = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
const genId = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
if(genId){
const r = Prereroll(genId)
if(r){
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].data = r
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length - 1].data = r
return
}
}
if(rerollid < rerolls.length - 1){
if(Array.isArray(rerolls[rerollid + 1])){
let db = $DataBase
let db = DBState.db
rerollid += 1
let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msgs = db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i]
}
db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msgs
$DataBase = db
db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msgs
DBState.db = db
}
return
}
if(rerolls.length === 0){
rerolls.push(structuredClone([$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)]))
rerolls.push(structuredClone([DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.at(-1)]))
rerollid = rerolls.length - 1
}
let cha = structuredClone($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message)
let cha = structuredClone(DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message)
if(cha.length === 0 ){
return
}
@@ -175,7 +175,7 @@
return
}
}
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = cha
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = cha
await sendChatMain()
}
@@ -187,11 +187,11 @@
rerolls = []
rerollid = -1
}
const genId = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
const genId = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
if(genId){
const r = PreUnreroll(genId)
if(r){
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].data = r
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length - 1].data = r
return
}
}
@@ -199,15 +199,15 @@
return
}
if(Array.isArray(rerolls[rerollid - 1])){
let db = $DataBase
let db = DBState.db
rerollid -= 1
let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
let msgs = db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message
for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i]
}
db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msgs
$DataBase = db
db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message = msgs
DBState.db = db
}
}
@@ -215,7 +215,7 @@
async function sendChatMain(continued:boolean = false) {
let previousLength = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length
let previousLength = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length
messageInput = ''
abortController = new AbortController()
try {
@@ -223,8 +223,8 @@
signal:abortController.signal,
continue:continued
})
if(previousLength < $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length){
rerolls.push(structuredClone($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message).slice(previousLength))
if(previousLength < DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length){
rerolls.push(structuredClone(DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message).slice(previousLength))
rerollid = rerolls.length - 1
}
} catch (error) {
@@ -233,7 +233,7 @@
}
lastCharId = $selectedCharID
$doingChat = false
if($DataBase.playMessage){
if(DBState.db.playMessage){
const audio = new Audio(sendSound);
audio.play();
}
@@ -396,7 +396,7 @@
}
$effect.pre(() => {
currentCharacter = $DataBase.characters[$selectedCharID]
currentCharacter = DBState.db.characters[$selectedCharID]
});
</script>
<!-- svelte-ignore a11y_click_events_have_key_events -->
@@ -414,25 +414,25 @@
<div class="h-full w-full flex flex-col-reverse overflow-y-auto relative default-chat-screen" onscroll={(e) => {
//@ts-ignore
const scrolled = (e.target.scrollHeight - e.target.clientHeight + e.target.scrollTop)
if(scrolled < 100 && $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length > loadPages){
if(scrolled < 100 && DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length > loadPages){
loadPages += 15
}
}}>
<div class="flex items-stretch mt-2 mb-2 w-full">
{#if $DataBase.useChatSticker && currentCharacter.type !== 'group'}
{#if DBState.db.useChatSticker && currentCharacter.type !== 'group'}
<div onclick={()=>{toggleStickers = !toggleStickers}}
class={"ml-4 bg-textcolor2 flex justify-center items-center w-12 h-12 rounded-md hover:bg-green-500 transition-colors "+(toggleStickers ? 'text-green-500':'text-textcolor')}>
<Laugh/>
</div>
{/if}
{#if !$DataBase.useAdvancedEditor}
{#if !DBState.db.useAdvancedEditor}
<textarea class="peer focus:border-textcolor transition-colors outline-none text-textcolor p-2 min-w-0 border border-r-0 bg-transparent rounded-md rounded-r-none input-text text-xl flex-grow ml-4 border-darkborderc resize-none overflow-y-hidden overflow-x-hidden max-w-full"
bind:value={messageInput}
bind:this={inputEle}
onkeydown={(e) => {
if(e.key.toLocaleLowerCase() === "enter" && (!e.shiftKey) && !e.isComposing){
if($DataBase.sendWithEnter){
if(DBState.db.sendWithEnter){
send()
e.preventDefault()
}
@@ -469,7 +469,7 @@
<Send />
</button>
{/if}
{#if $DataBase.characters[$selectedCharID]?.chaId !== '§playground'}
{#if DBState.db.characters[$selectedCharID]?.chaId !== '§playground'}
<button
onclick={(e) => {
openMenu = !openMenu
@@ -482,11 +482,11 @@
</button>
{:else}
<div onclick={(e) => {
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.push({
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.push({
role: 'char',
data: ''
})
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage] = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage]
}}
class="peer-focus:border-textcolor mr-2 flex border-y border-r border-darkborderc justify-center items-center text-gray-100 p-3 rounded-r-md hover:bg-blue-500 transition-colors"
style:height={inputHeight}
@@ -495,7 +495,7 @@
</div>
{/if}
</div>
{#if $DataBase.useAutoTranslateInput && !$DataBase.useAdvancedEditor && $DataBase.characters[$selectedCharID]?.chaId !== '§playground'}
{#if DBState.db.useAutoTranslateInput && !DBState.db.useAdvancedEditor && DBState.db.characters[$selectedCharID]?.chaId !== '§playground'}
<div class="flex items-center mt-2 mb-2">
<label for='messageInputTranslate' class="text-textcolor ml-4">
<LanguagesIcon />
@@ -505,7 +505,7 @@
bind:this={inputTranslateEle}
onkeydown={(e) => {
if(e.key.toLocaleLowerCase() === "enter" && (!e.shiftKey)){
if($DataBase.sendWithEnter){
if(DBState.db.sendWithEnter){
send()
e.preventDefault()
}
@@ -550,28 +550,28 @@
</div>
{/if}
{#if $DataBase.useAutoSuggestions}
{#if DBState.db.useAutoSuggestions}
<Suggestion messageInput={(msg)=>messageInput=(
($DataBase.subModel === "textgen_webui" || $DataBase.subModel === "mancer" || $DataBase.subModel.startsWith('local_')) && $DataBase.autoSuggestClean
(DBState.db.subModel === "textgen_webui" || DBState.db.subModel === "mancer" || DBState.db.subModel.startsWith('local_')) && DBState.db.autoSuggestClean
? msg.replace(/ +\(.+?\) *$| - [^"'*]*?$/, '')
: msg
)} {send}/>
{/if}
{#each messageForm($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message, loadPages) as chat, i}
{#each messageForm(DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message, loadPages) as chat, i}
{#if chat.role === 'char'}
{#if $DataBase.characters[$selectedCharID].type !== 'group'}
{#if DBState.db.characters[$selectedCharID].type !== 'group'}
<Chat
idx={chat.index}
name={$DataBase.characters[$selectedCharID].name}
name={DBState.db.characters[$selectedCharID].name}
message={chat.data}
img={getCharImage($DataBase.characters[$selectedCharID].image, 'css')}
img={getCharImage(DBState.db.characters[$selectedCharID].image, 'css')}
rerollIcon={i === 0}
onReroll={reroll}
unReroll={unReroll}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
largePortrait={$DataBase.characters[$selectedCharID].largePortrait}
isLastMemory={DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={createSimpleCharacter(DBState.db.characters[$selectedCharID])}
largePortrait={DBState.db.characters[$selectedCharID].largePortrait}
messageGenerationInfo={chat.generationInfo}
/>
{:else}
@@ -583,7 +583,7 @@
onReroll={reroll}
unReroll={unReroll}
img={getCharImage(findCharacterbyId(chat.saying).image, 'css')}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
isLastMemory={DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={chat.saying}
largePortrait={findCharacterbyId(chat.saying).largePortrait}
messageGenerationInfo={chat.generationInfo}
@@ -591,32 +591,32 @@
{/if}
{:else}
<Chat
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
character={createSimpleCharacter(DBState.db.characters[$selectedCharID])}
idx={chat.index}
name={chat.name ?? $DataBase.username}
name={chat.name ?? DBState.db.username}
message={chat.data}
img={$ConnectionOpenStore ? '' : getCharImage($DataBase.userIcon, 'css')}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
img={$ConnectionOpenStore ? '' : getCharImage(DBState.db.userIcon, 'css')}
isLastMemory={DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
largePortrait={$UserIconProtrait}
messageGenerationInfo={chat.generationInfo}
/>
{/if}
{/each}
{#if $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length <= loadPages}
{#if $DataBase.characters[$selectedCharID].type !== 'group' }
{#if DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length <= loadPages}
{#if DBState.db.characters[$selectedCharID].type !== 'group' }
<Chat
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
name={$DataBase.characters[$selectedCharID].name}
message={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].fmIndex === -1 ? $DataBase.characters[$selectedCharID].firstMessage :
$DataBase.characters[$selectedCharID].alternateGreetings[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].fmIndex]}
img={getCharImage($DataBase.characters[$selectedCharID].image, 'css')}
character={createSimpleCharacter(DBState.db.characters[$selectedCharID])}
name={DBState.db.characters[$selectedCharID].name}
message={DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].fmIndex === -1 ? DBState.db.characters[$selectedCharID].firstMessage :
DBState.db.characters[$selectedCharID].alternateGreetings[DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].fmIndex]}
img={getCharImage(DBState.db.characters[$selectedCharID].image, 'css')}
idx={-1}
altGreeting={$DataBase.characters[$selectedCharID].alternateGreetings.length > 0}
largePortrait={$DataBase.characters[$selectedCharID].largePortrait}
altGreeting={DBState.db.characters[$selectedCharID].alternateGreetings.length > 0}
largePortrait={DBState.db.characters[$selectedCharID].largePortrait}
firstMessage={true}
onReroll={() => {
const cha = $DataBase.characters[$selectedCharID]
const chat = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
const cha = DBState.db.characters[$selectedCharID]
const chat = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage]
if(cha.type !== 'group'){
if (chat.fmIndex >= (cha.alternateGreetings.length - 1)){
chat.fmIndex = -1
@@ -625,11 +625,11 @@
chat.fmIndex += 1
}
}
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = chat
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage] = chat
}}
unReroll={() => {
const cha = $DataBase.characters[$selectedCharID]
const chat = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
const cha = DBState.db.characters[$selectedCharID]
const chat = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage]
if(cha.type !== 'group'){
if (chat.fmIndex === -1){
chat.fmIndex = (cha.alternateGreetings.length - 1)
@@ -638,18 +638,18 @@
chat.fmIndex -= 1
}
}
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = chat
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage] = chat
}}
isLastMemory={false}
/>
{#if !$DataBase.characters[$selectedCharID].removedQuotes && $DataBase.characters[$selectedCharID].creatorNotes.length >= 2}
<CreatorQuote quote={$DataBase.characters[$selectedCharID].creatorNotes} onRemove={() => {
const cha = $DataBase.characters[$selectedCharID]
{#if !DBState.db.characters[$selectedCharID].removedQuotes && DBState.db.characters[$selectedCharID].creatorNotes.length >= 2}
<CreatorQuote quote={DBState.db.characters[$selectedCharID].creatorNotes} onRemove={() => {
const cha = DBState.db.characters[$selectedCharID]
if(cha.type !== 'group'){
cha.removedQuotes = true
}
$DataBase.characters[$selectedCharID] = cha
DBState.db.characters[$selectedCharID] = cha
}} />
{/if}
{/if}
@@ -659,7 +659,7 @@
<div class="absolute right-2 bottom-16 p-5 bg-darkbg flex flex-col gap-3 text-textcolor rounded-md" onclick={(e) => {
e.stopPropagation()
}}>
{#if $DataBase.characters[$selectedCharID].type === 'group'}
{#if DBState.db.characters[$selectedCharID].type === 'group'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={runAutoMode}>
<DicesIcon />
<span class="ml-2">{language.autoMode}</span>
@@ -668,7 +668,7 @@
<!-- svelte-ignore block_empty -->
{#if $DataBase.characters[$selectedCharID].ttsMode === 'webspeech' || $DataBase.characters[$selectedCharID].ttsMode === 'elevenlab'}
{#if DBState.db.characters[$selectedCharID].ttsMode === 'webspeech' || DBState.db.characters[$selectedCharID].ttsMode === 'elevenlab'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
stopTTS()
}}>
@@ -678,9 +678,9 @@
{/if}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors"
class:text-textcolor2={($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length < 2) || ($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')}
class:text-textcolor2={(DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length < 2) || (DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')}
onclick={() => {
if(($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length < 2) || ($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')){
if((DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length < 2) || (DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message[DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')){
return
}
sendContinue();
@@ -691,7 +691,7 @@
</div>
{#if $DataBase.showMenuChatList}
{#if DBState.db.showMenuChatList}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
openChatList = true
openMenu = false
@@ -701,9 +701,9 @@
</div>
{/if}
{#if $DataBase.translator !== ''}
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} onclick={() => {
$DataBase.useAutoTranslateInput = !$DataBase.useAutoTranslateInput
{#if DBState.db.translator !== ''}
<div class={"flex items-center cursor-pointer "+ (DBState.db.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} onclick={() => {
DBState.db.useAutoTranslateInput = !DBState.db.useAutoTranslateInput
}}>
<GlobeIcon />
<span class="ml-2">{language.autoTranslateInput}</span>
@@ -734,8 +734,8 @@
</div>
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoSuggestions ? 'text-green-500':'lg:hover:text-green-500')} onclick={async () => {
$DataBase.useAutoSuggestions = !$DataBase.useAutoSuggestions
<div class={"flex items-center cursor-pointer "+ (DBState.db.useAutoSuggestions ? 'text-green-500':'lg:hover:text-green-500')} onclick={async () => {
DBState.db.useAutoSuggestions = !DBState.db.useAutoSuggestions
}}>
<ReplyIcon />
<span class="ml-2">{language.autoSuggest}</span>
@@ -743,7 +743,7 @@
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].modules ??= []
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].modules ??= []
openModuleList = true
openMenu = false
}}>
@@ -751,7 +751,7 @@
<span class="ml-2">{language.modules}</span>
</div>
{#if $DataBase.sideMenuRerollButton}
{#if DBState.db.sideMenuRerollButton}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={reroll}>
<RefreshCcwIcon />
<span class="ml-2">{language.reroll}</span>

View File

@@ -1,10 +1,10 @@
<script>
import { DataBase } from '../../ts/storage/database';
import { DBState } from '../../ts/storage/database.svelte';
import { CharEmotion } from '../../ts/stores';
import { getEmotion } from '../../ts/util';
</script>
{#await getEmotion($DataBase,$CharEmotion, 'contain') then images}
{#await getEmotion(DBState.db,$CharEmotion, 'contain') then images}
{#each images as image, i}
<div style={image + `width:${(100 / images.length)}%;bottom:0;left:${100 / images.length * i}%`} class="h-full bg-center absolute"></div>

View File

@@ -4,7 +4,7 @@
import EmotionBox from './EmotionBox.svelte';
import TransitionImage from './TransitionImage.svelte';
import { getEmotion } from '../../ts/util';
import { DataBase } from '../../ts/storage/database';
import { DBState } from '../../ts/storage/database.svelte';
let box = $state();
let isResizing = false;
@@ -85,7 +85,7 @@
<div class="box bg-darkbg bg-opacity-70" bind:this="{box}" style="width: {$ViewBoxsize.width}px; height: {$ViewBoxsize.height}px;">
<!-- Your content here -->
<TransitionImage classType='risu' src={getEmotion($DataBase, $CharEmotion, 'plain')}/>
<TransitionImage classType='risu' src={getEmotion(DBState.db, $CharEmotion, 'plain')}/>
<div
class="resize-handle"
onmousedown={handleStart}

View File

@@ -1,7 +1,7 @@
<script lang="ts">
import { requestChatData } from "src/ts/process/request";
import { doingChat, type OpenAIChat } from "../../ts/process/index";
import { DataBase, setDatabase, type character, type Message, type groupChat, type Database } from "../../ts/storage/database";
import { DBState, setDatabase, type character, type Message, type groupChat, type Database } from "../../ts/storage/database.svelte";
import { selectedCharID } from "../../ts/stores";
import { translate } from "src/ts/translator/translator";
import { CopyIcon, LanguagesIcon, RefreshCcwIcon } from "lucide-svelte";
@@ -18,9 +18,9 @@
}
let { send, messageInput }: Props = $props();
let suggestMessages:string[] = $state($DataBase.characters[$selectedCharID]?.chats[$DataBase.characters[$selectedCharID].chatPage]?.suggestMessages)
let suggestMessages:string[] = $state(DBState.db.characters[$selectedCharID]?.chats[DBState.db.characters[$selectedCharID].chatPage]?.suggestMessages)
let suggestMessagesTranslated:string[] = $state()
let toggleTranslate:boolean = $state($DataBase.autoTranslate)
let toggleTranslate:boolean = $state(DBState.db.autoTranslate)
let progress:boolean = $state();
let progressChatPage=-1;
let abortController:AbortController;
@@ -32,7 +32,7 @@
progress=false
abortController?.abort()
}
let currentChar = $DataBase.characters[$selectedCharID];
let currentChar = DBState.db.characters[$selectedCharID];
suggestMessages = currentChar?.chats[currentChar.chatPage].suggestMessages
}
}
@@ -45,7 +45,7 @@
suggestMessages = []
}
if(!v && $selectedCharID > -1 && (!suggestMessages || suggestMessages.length === 0) && !progress){
let currentChar:character|groupChat = $DataBase.characters[$selectedCharID];
let currentChar:character|groupChat = DBState.db.characters[$selectedCharID];
let messages:Message[] = []
messages = [...messages, ...currentChar.chats[currentChar.chatPage].message];
@@ -55,7 +55,7 @@
let promptbody:OpenAIChat[] = [
{
role:'system',
content: replacePlaceholders($DataBase.autoSuggestPrompt, currentChar.name)
content: replacePlaceholders(DBState.db.autoSuggestPrompt, currentChar.name)
}
,{
role: 'user',
@@ -63,11 +63,11 @@
}
]
if($DataBase.subModel === "textgen_webui" || $DataBase.subModel === 'mancer' || $DataBase.subModel.startsWith('local_')){
if(DBState.db.subModel === "textgen_webui" || DBState.db.subModel === 'mancer' || DBState.db.subModel.startsWith('local_')){
promptbody = [
{
role: 'system',
content: replacePlaceholders($DataBase.autoSuggestPrompt, currentChar.name)
content: replacePlaceholders(DBState.db.autoSuggestPrompt, currentChar.name)
},
...lastMessages.map(({ role, data }) => ({
role: role === "user" ? "user" as const : "assistant" as const,
@@ -86,7 +86,7 @@
}, 'submodel', abortController.signal).then(rq2=>{
if(rq2.type !== 'fail' && rq2.type !== 'streaming' && rq2.type !== 'multiline' && progress){
var suggestMessagesNew = rq2.result.split('\n').filter(msg => msg.startsWith('-')).map(msg => msg.replace('-','').trim())
const db:Database = get(DataBase);
const db:Database = DBState.db;
db.characters[$selectedCharID].chats[currentChar.chatPage].suggestMessages = suggestMessagesNew
setDatabase(db)
suggestMessages = suggestMessagesNew
@@ -112,7 +112,7 @@
$effect.pre(() => {
$selectedCharID
//FIXME add selectedChatPage for optimize render
chatPage = $DataBase.characters[$selectedCharID].chatPage
chatPage = DBState.db.characters[$selectedCharID].chatPage
updateSuggestions()
});
$effect.pre(() => {translateSuggest(toggleTranslate, suggestMessages)});
@@ -125,7 +125,7 @@
<div>{language.creatingSuggestions}</div>
</div>
{:else if !$doingChat}
{#if $DataBase.translator !== ''}
{#if DBState.db.translator !== ''}
<div class="flex mr-2 mb-2">
<button class={"bg-textcolor2 hover:bg-darkbutton font-bold py-2 px-4 rounded " + (toggleTranslate ? 'text-green-500' : 'text-textcolor')}
onclick={() => {
@@ -160,7 +160,7 @@
messageInput(suggest)
send()
}}>
{#await ParseMarkdown(($DataBase.translator !== '' && toggleTranslate && suggestMessagesTranslated && suggestMessagesTranslated.length > 0) ? suggestMessagesTranslated[i]??suggest : suggest) then md}
{#await ParseMarkdown((DBState.db.translator !== '' && toggleTranslate && suggestMessagesTranslated && suggestMessagesTranslated.length > 0) ? suggestMessagesTranslated[i]??suggest : suggest) then md}
{@html md}
{/await}
</button>