diff --git a/vite/public/assets/combine/Q5-4.mp3 b/vite/public/assets/combine/Q5-4.mp3 index 28467ee..fd18bb4 100644 Binary files a/vite/public/assets/combine/Q5-4.mp3 and b/vite/public/assets/combine/Q5-4.mp3 differ diff --git a/vite/public/assets/combine/Q5-5.mp3 b/vite/public/assets/combine/Q5-5.mp3 index 2e06d93..58329ef 100644 Binary files a/vite/public/assets/combine/Q5-5.mp3 and b/vite/public/assets/combine/Q5-5.mp3 differ diff --git a/vite/public/assets/debug-1.mp3 b/vite/public/assets/debug-1.mp3 new file mode 100644 index 0000000..b5b0ad4 Binary files /dev/null and b/vite/public/assets/debug-1.mp3 differ diff --git a/vite/public/assets/debug-2.mp3 b/vite/public/assets/debug-2.mp3 new file mode 100644 index 0000000..de0d7f1 Binary files /dev/null and b/vite/public/assets/debug-2.mp3 differ diff --git a/vite/public/cuelist_0923.json b/vite/public/cuelist_0923.json index 862407f..184a902 100644 --- a/vite/public/cuelist_0923.json +++ b/vite/public/cuelist_0923.json @@ -54,18 +54,17 @@ "id": 4.1, "name": "Q4.1", "type": "phone", - "description": "撥打音效", + "description": "輸入完成,請描述腦中的記憶畫面", "auto": false, "audioFile": "assets/combine/Q4-1_撥打音效.mp3", "loop": true, - "nextcue": 4.11, - "fadeout":true + "nextcue": 4.11 }, { "id": 4.11, "name": "Q4.11", "type": "phone", - "description": "裝置啟動", + "description": "裝置啟動音效", "auto": true, "audioFile": "assets/combine/Q4-1-1.mp3", "nextcue": 4.2, @@ -141,7 +140,7 @@ "audioFile": "assets/combine/Q5-4.mp3", "callback":"numpad", "numpad_type":"password", - "hint":"請設定一組四位數密碼\n確定輸入後,請按#", + "hint":"請輸入四位數密碼\n確定輸入後,請按#", "hint_time": 7800, "default_password":"0000" }, @@ -155,7 +154,7 @@ "audioFile": "assets/combine/Q5-5.mp3", "callback":"numpad", "numpad_type":"password", - "hint":"請設定一組四位數密碼\n確定輸入後,請按#", + "hint":"請輸入四位數密碼\n確定輸入後,請按#", "hint_time": 7900, "default_password":"0000" }, @@ -177,7 +176,6 @@ "auto": false, "audioFile": "assets/combine/Q6_管家announce_0919.mp3", "layer":"announce", - "fadeoutBg":true, "fadeout": true }, { @@ -187,6 +185,33 @@ "description": "Ending", "status":"end", "callback":"fadeout" + }, + { + "id": 101, + "name": "Q101", + "type": "debug", + "description": "DEBUG_MODE", + "audioFile": "assets/debug-1.mp3", + "loop": true, + "status":"intro", + "callback":"numpad", + "nextcue": 102, + "numpad_type":"password" + }, + { + "id": 102, + "name": "Q102", + "type": "debug", + "description": "DEBUG_MODE", + "audioFile": "assets/debug-2.mp3", + "auto": true, + "nextcue": 103 + }, + { + "id": 103, + "name": "Q103", + "type": "chat", + "description": "DEBUG_MODE_CHAT" } ] } diff --git a/vite/src-tauri/capabilities/default.json b/vite/src-tauri/capabilities/default.json index ab09def..a9f8e6b 100644 --- a/vite/src-tauri/capabilities/default.json +++ b/vite/src-tauri/capabilities/default.json @@ -24,6 +24,8 @@ "url": "http://**/" },{ "url":"https://script.google.com/macros/s/AKfycbxpXbWhMdd4nv0KHhSzeFTKIV0tqsh-HBKCdlaOT34sh2vl1H5aoa36QnimhQg8I2aKRw/exec" + },{ + "url":"https://script.google.com/macros/s/AKfycbx-Ytlql0yAdVsENNbcaCdXglerX7sNLpNggtusqp4TxebiA3C7V0xjGe4jaI4m1sVjWQ/exec" } ] }, diff --git a/vite/src/pages/flow_free.jsx b/vite/src/pages/flow_free.jsx index ccdd8a1..ea5e135 100644 --- a/vite/src/pages/flow_free.jsx +++ b/vite/src/pages/flow_free.jsx @@ -60,6 +60,8 @@ export function FreeFlow(){ const [padInput, setPadInput] = useState(null); + const [showMessage, setShowMessage] = useState(false); + const { userId, setUserId, getFileId, setPassword, reset:resetUser, uploadHistory, setSummary, summary,setChoice,choice, getUploadFolder,getDataId, writeSheet } = useUser(); const refTimer=useRef(); @@ -83,6 +85,7 @@ export function FreeFlow(){ const refHintTimeout=useRef(); const refFadeOutInterval=useRef(); + const refVolDownInterval=useRef(); const { history, status, reset, sendMessage, setStatus, audioOutput, setAudioOutput, stop:stopChat, audioUrl }=useChat(); @@ -183,6 +186,26 @@ export function FreeFlow(){ refAudioAnnounce.current.play().catch(error => { console.error("Audio announce playback error:", error); }); + + + // lower audio + if(refAudio.current) { + // fade out current audio + if(refVolDownInterval.current){ + clearInterval(refVolDownInterval.current); + } + + const dest=0.5; + let fadeOutInterval = setInterval(() => { + if (refAudio.current.volume > dest) { + refAudio.current.volume =Math.max(dest, refAudio.current.volume - 1.0/(AUDIO_FADE_TIME/100)); // Decrease volume gradually + } else { + clearInterval(fadeOutInterval); + } + }, 100); + refVolDownInterval.current=fadeOutInterval; + } + return; } @@ -659,6 +682,11 @@ export function FreeFlow(){ }); } + function blurText(text) { + if(!text) return ''; + return text.replace(/./g, '*'); + } + useEffect(()=>{ if(audioInput && isMicrophoneAvailable) { @@ -894,18 +922,18 @@ export function FreeFlow(){ -
-
+
+
{history?.map((msg, index) => (
-
{msg.content}
- {msg.prompt &&
{msg.prompt}
} +
{blurText(msg.content)}
+ {msg.prompt &&
{blurText(msg.prompt)}
}
))} {summary &&
{summary}
}
diff --git a/vite/src/util/backend.js b/vite/src/util/backend.js index 6eb0b39..a424475 100644 --- a/vite/src/util/backend.js +++ b/vite/src/util/backend.js @@ -36,25 +36,31 @@ export async function updateUser(id, data){ } +const APPSCRIPT_URL='https://script.google.com/macros/s/AKfycbx-Ytlql0yAdVsENNbcaCdXglerX7sNLpNggtusqp4TxebiA3C7V0xjGe4jaI4m1sVjWQ/exec'; +// const APPSCRIPT_URL='https://script.google.com/macros/s/AKfycbxpXbWhMdd4nv0KHhSzeFTKIV0tqsh-HBKCdlaOT34sh2vl1H5aoa36QnimhQg8I2aKRw/exec'; + export async function writeToGoogleSheet(date, session, userId, password){ if(!date || !session) { console.error("Invalid data for writeToGoogleSheet"); return; } + + let tosend={ + "date":date, + "session":session, + "userId":userId?.toString(), + "password":password?.toString(), + "createdTime": new Date().toLocaleString() + }; + console.log("Data to send to Google Sheet: ", tosend); try{ - await fetch(`https://script.google.com/macros/s/AKfycbxpXbWhMdd4nv0KHhSzeFTKIV0tqsh-HBKCdlaOT34sh2vl1H5aoa36QnimhQg8I2aKRw/exec`, { + await fetch(APPSCRIPT_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - "date":date, - "session":session, - "userId":userId?.toString(), - "password":password?.toString(), - "createdTime": new Date().toLocaleString() - }) + body: JSON.stringify(tosend) }); console.log("Data successfully sent to Google Sheet!");