From b53183e9316021cf44587dede21734eabf7de2fb Mon Sep 17 00:00:00 2001 From: huty Date: Sun, 23 Nov 2025 22:01:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=B30.5.0=5F20251123?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.tsx | 150 ++++++++++---------- components/ErrorBoundary.tsx | 70 +++++++++ index.tsx | 6 +- releases/HTY1024-APP-SKR-0.5.0_20251123.zip | Bin 0 -> 87330 bytes services/geminiService.ts | 38 +++-- 5 files changed, 179 insertions(+), 85 deletions(-) create mode 100644 components/ErrorBoundary.tsx create mode 100644 releases/HTY1024-APP-SKR-0.5.0_20251123.zip diff --git a/App.tsx b/App.tsx index cbf1b92..20e0cbd 100644 --- a/App.tsx +++ b/App.tsx @@ -27,31 +27,44 @@ const STORAGE_KEYS = { HAS_SEEN_ONBOARDING: 'sakura_has_seen_onboarding' }; +// Robust helper for safe JSON parsing +const safeJSONParse = (key: string, fallback: T): T => { + try { + const item = localStorage.getItem(key); + if (!item) return fallback; + const parsed = JSON.parse(item); + + // Validate Array type consistency if fallback is an array + if (Array.isArray(fallback)) { + return Array.isArray(parsed) ? (parsed as unknown as T) : fallback; + } + return parsed as T; + } catch (e) { + console.warn(`Failed to load ${key}, falling back to default.`, e); + return fallback; + } +}; + const App: React.FC = () => { const [currentView, setCurrentView] = useState(AppMode.CHAT); - // Default to 'zh' (Chinese) - const [language, setLanguage] = useState(() => (localStorage.getItem(STORAGE_KEYS.LANGUAGE) as Language) || 'zh'); - const [chatSessions, setChatSessions] = useState(() => { - try { - const stored = localStorage.getItem(STORAGE_KEYS.CHAT_SESSIONS); - if (stored) return JSON.parse(stored); - } catch (e) { console.error("Failed to load chat sessions", e); } - return []; + + // Safe Language Initialization + const [language, setLanguage] = useState(() => { + // Cast to string to prevent TS from inferring the literal type 'zh' from fallback + const lang = safeJSONParse(STORAGE_KEYS.LANGUAGE, 'zh') as string; + if (lang === 'en' || lang === 'ja' || lang === 'zh') return lang as Language; + return 'zh'; }); - const [activeSessionId, setActiveSessionId] = useState(() => localStorage.getItem(STORAGE_KEYS.ACTIVE_SESSION) || ''); - const [translationHistory, setTranslationHistory] = useState(() => { - const s = localStorage.getItem(STORAGE_KEYS.TRANSLATION_HISTORY); return s ? JSON.parse(s) : []; - }); - const [readingHistory, setReadingHistory] = useState(() => { - const s = localStorage.getItem(STORAGE_KEYS.READING_HISTORY); return s ? JSON.parse(s) : []; - }); - const [listeningHistory, setListeningHistory] = useState(() => { - const s = localStorage.getItem(STORAGE_KEYS.LISTENING_HISTORY); return s ? JSON.parse(s) : []; - }); - const [ocrHistory, setOcrHistory] = useState(() => { - const s = localStorage.getItem(STORAGE_KEYS.OCR_HISTORY); return s ? JSON.parse(s) : []; - }); - const [selectedModel, setSelectedModel] = useState(() => localStorage.getItem(STORAGE_KEYS.SELECTED_MODEL) || AVAILABLE_CHAT_MODELS[0].id); + + // Safe History Initialization + const [chatSessions, setChatSessions] = useState(() => safeJSONParse(STORAGE_KEYS.CHAT_SESSIONS, [])); + const [activeSessionId, setActiveSessionId] = useState(() => safeJSONParse(STORAGE_KEYS.ACTIVE_SESSION, '')); + const [translationHistory, setTranslationHistory] = useState(() => safeJSONParse(STORAGE_KEYS.TRANSLATION_HISTORY, [])); + const [readingHistory, setReadingHistory] = useState(() => safeJSONParse(STORAGE_KEYS.READING_HISTORY, [])); + const [listeningHistory, setListeningHistory] = useState(() => safeJSONParse(STORAGE_KEYS.LISTENING_HISTORY, [])); + const [ocrHistory, setOcrHistory] = useState(() => safeJSONParse(STORAGE_KEYS.OCR_HISTORY, [])); + + const [selectedModel, setSelectedModel] = useState(() => safeJSONParse(STORAGE_KEYS.SELECTED_MODEL, AVAILABLE_CHAT_MODELS[0].id)); const [hasSeenOnboarding, setHasSeenOnboarding] = useState(() => !!localStorage.getItem(STORAGE_KEYS.HAS_SEEN_ONBOARDING)); const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [isSidebarOpen, setIsSidebarOpen] = useState(false); @@ -65,7 +78,8 @@ const App: React.FC = () => { isOpen: false, title: '', message: '', onConfirm: () => {} }); - const t = translations[language]; + // Ensure 't' is always valid even if language switch glitches + const t = translations[language] || translations['zh']; // Safe Storage Helper to prevent white screen on QuotaExceededError const saveToStorage = (key: string, data: any) => { @@ -73,45 +87,30 @@ const App: React.FC = () => { const json = JSON.stringify(data); localStorage.setItem(key, json); } catch (e: any) { - // Check for QuotaExceededError if (e.name === 'QuotaExceededError' || e.message?.includes('exceeded the quota')) { console.warn(`Storage quota exceeded for key: ${key}`); - addToast('error', translations[language].common.storageFull); + addToast('error', t.common.storageFull); - // Attempt to recover by stripping heavy data (e.g., audioUrl from chats, base64 images from OCR) + // Strategy: Try to strip audioUrl/imagePreview from bulky items if (key === STORAGE_KEYS.CHAT_SESSIONS && Array.isArray(data)) { try { - // Create a lightweight version by removing audioUrl base64 strings const leanData = (data as ChatSession[]).map(s => ({ ...s, messages: s.messages.map(m => ({ ...m, - metadata: { - ...m.metadata, - audioUrl: undefined // Remove cached audio to save space - } + metadata: { ...m.metadata, audioUrl: undefined } // Remove audio cache })) })); localStorage.setItem(key, JSON.stringify(leanData)); - addToast('info', translations[language].common.storageOptimized); - } catch (retryError) { - console.error("Failed to save even lean chat data", retryError); - } + addToast('info', t.common.storageOptimized); + } catch (err) {} } else if (key === STORAGE_KEYS.OCR_HISTORY && Array.isArray(data)) { try { - // Create lightweight version by removing imagePreview - const leanData = (data as OCRRecord[]).map(r => ({ - ...r, - imagePreview: '' // Remove heavy base64 image - })); + const leanData = (data as OCRRecord[]).map(r => ({ ...r, imagePreview: '' })); // Remove image localStorage.setItem(key, JSON.stringify(leanData)); - addToast('info', translations[language].common.storageOptimized); - } catch (retryError) { - console.error("Failed to save even lean OCR data", retryError); - } + addToast('info', t.common.storageOptimized); + } catch (err) {} } - } else { - console.error("LocalStorage save failed", e); } } }; @@ -126,11 +125,14 @@ const App: React.FC = () => { useEffect(() => { saveToStorage(STORAGE_KEYS.SELECTED_MODEL, selectedModel); }, [selectedModel]); useEffect(() => { - const activeSession = chatSessions.find(s => s.id === activeSessionId); - if (activeSession && activeSession.messages.length === 1 && activeSession.messages[0].role === Role.MODEL) { - const newWelcome = translations[language].chat.welcome; - const newTitle = translations[language].chat.newChat; - setChatSessions(prev => prev.map(s => s.id === activeSessionId ? { ...s, title: newTitle, messages: [{ ...s.messages[0], content: newWelcome }] } : s)); + // Only update welcome message if session is empty/default + if (activeSessionId) { + const activeSession = chatSessions.find(s => s.id === activeSessionId); + if (activeSession && activeSession.messages.length === 1 && activeSession.messages[0].role === Role.MODEL) { + const newWelcome = t.chat.welcome; + const newTitle = t.chat.newChat; + setChatSessions(prev => prev.map(s => s.id === activeSessionId ? { ...s, title: newTitle, messages: [{ ...s.messages[0], content: newWelcome }] } : s)); + } } }, [language]); @@ -149,7 +151,7 @@ const App: React.FC = () => { if (!storedKey && (!envKey || envKey.length === 0)) { setIsSettingsOpen(true); - setTimeout(() => addToast('info', translations[language].settings.apiKeyMissing), 500); + setTimeout(() => addToast('info', t.settings.apiKeyMissing), 500); } hasInitialized.current = true; } @@ -157,8 +159,8 @@ const App: React.FC = () => { const createNewSession = () => { const newId = Date.now().toString(); - const welcomeMsg: ChatMessage = { id: 'welcome', role: Role.MODEL, type: MessageType.TEXT, content: translations[language].chat.welcome, timestamp: Date.now() }; - setChatSessions(prev => [{ id: newId, title: translations[language].chat.newChat, messages: [welcomeMsg], createdAt: Date.now(), updatedAt: Date.now() }, ...prev]); + const welcomeMsg: ChatMessage = { id: 'welcome', role: Role.MODEL, type: MessageType.TEXT, content: t.chat.welcome, timestamp: Date.now() }; + setChatSessions(prev => [{ id: newId, title: t.chat.newChat, messages: [welcomeMsg], createdAt: Date.now(), updatedAt: Date.now() }, ...prev]); setActiveSessionId(newId); }; @@ -187,8 +189,8 @@ const App: React.FC = () => { const deleteSession = (sessionId: string) => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].chat.deleteConfirm, + title: t.common.confirm, + message: t.chat.deleteConfirm, onConfirm: () => { const remaining = chatSessions.filter(s => s.id !== sessionId); setChatSessions(remaining); @@ -204,8 +206,8 @@ const App: React.FC = () => { const clearAllChatSessions = () => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.clearHistoryConfirm, + title: t.common.confirm, + message: t.common.clearHistoryConfirm, onConfirm: () => { setChatSessions([]); createNewSession(); @@ -217,8 +219,8 @@ const App: React.FC = () => { const deleteReadingLesson = (id: string) => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.deleteItemConfirm, + title: t.common.confirm, + message: t.common.deleteItemConfirm, onConfirm: () => { setReadingHistory(prev => prev.filter(item => item.id !== id)); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -229,8 +231,8 @@ const App: React.FC = () => { const clearReadingHistory = () => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.clearHistoryConfirm, + title: t.common.confirm, + message: t.common.clearHistoryConfirm, onConfirm: () => { setReadingHistory([]); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -241,8 +243,8 @@ const App: React.FC = () => { const deleteListeningLesson = (id: string) => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.deleteItemConfirm, + title: t.common.confirm, + message: t.common.deleteItemConfirm, onConfirm: () => { setListeningHistory(prev => prev.filter(item => item.id !== id)); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -253,8 +255,8 @@ const App: React.FC = () => { const clearListeningHistory = () => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.clearHistoryConfirm, + title: t.common.confirm, + message: t.common.clearHistoryConfirm, onConfirm: () => { setListeningHistory([]); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -265,8 +267,8 @@ const App: React.FC = () => { const deleteOCRRecord = (id: string) => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.deleteItemConfirm, + title: t.common.confirm, + message: t.common.deleteItemConfirm, onConfirm: () => { setOcrHistory(prev => prev.filter(item => item.id !== id)); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -277,8 +279,8 @@ const App: React.FC = () => { const clearOCRHistory = () => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.clearHistoryConfirm, + title: t.common.confirm, + message: t.common.clearHistoryConfirm, onConfirm: () => { setOcrHistory([]); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -289,8 +291,8 @@ const App: React.FC = () => { const deleteTranslationRecord = (id: string) => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.deleteItemConfirm, + title: t.common.confirm, + message: t.common.deleteItemConfirm, onConfirm: () => { setTranslationHistory(prev => prev.filter(item => item.id !== id)); setConfirmState(prev => ({ ...prev, isOpen: false })); @@ -301,8 +303,8 @@ const App: React.FC = () => { const clearTranslationHistory = () => { setConfirmState({ isOpen: true, - title: translations[language].common.confirm, - message: translations[language].common.clearHistoryConfirm, + title: t.common.confirm, + message: t.common.clearHistoryConfirm, onConfirm: () => { setTranslationHistory([]); setConfirmState(prev => ({ ...prev, isOpen: false })); diff --git a/components/ErrorBoundary.tsx b/components/ErrorBoundary.tsx new file mode 100644 index 0000000..1830c7b --- /dev/null +++ b/components/ErrorBoundary.tsx @@ -0,0 +1,70 @@ + +import React, { Component, ErrorInfo, ReactNode } from "react"; +import { AlertCircle, RefreshCw, Trash2 } from 'lucide-react'; + +interface Props { + children: ReactNode; +} + +interface State { + hasError: boolean; + error: Error | null; +} + +export class ErrorBoundary extends Component { + public state: State = { + hasError: false, + error: null + }; + + public static getDerivedStateFromError(error: Error): State { + return { hasError: true, error }; + } + + public componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error("Uncaught error:", error, errorInfo); + } + + public render() { + if (this.state.hasError) { + return ( +
+
+
+ +
+

Something went wrong

+

+ {this.state.error?.message || "An unexpected error occurred."} +

+ +
+ + + +
+ +

+ * If reloading doesn't work, try clearing data. +

+
+
+ ); + } + + return this.props.children; + } +} diff --git a/index.tsx b/index.tsx index cbffc8d..4e1d92d 100644 --- a/index.tsx +++ b/index.tsx @@ -1,6 +1,8 @@ + import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; +import { ErrorBoundary } from './components/ErrorBoundary'; const rootElement = document.getElementById('root'); if (!rootElement) { @@ -10,7 +12,9 @@ if (!rootElement) { const root = ReactDOM.createRoot(rootElement); root.render( - + + + ); diff --git a/releases/HTY1024-APP-SKR-0.5.0_20251123.zip b/releases/HTY1024-APP-SKR-0.5.0_20251123.zip new file mode 100644 index 0000000000000000000000000000000000000000..0bddf35615b41878f2c9728f595cfd53dc6ff3d0 GIT binary patch literal 87330 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

P`)f1ozZ>a4v6+dpfw6(J!N1!~C5}fHSOF&Z zBipd~DG_*H0RReBagi``Y%4&$oA0tM81)crJHX1GCe|Mqw6O6q!;ZyQ2T%wyV~8@; z#yy)=f65TW+o#*_5X1~yI|L0XW__mToB=N*0!>9TO*8hC%&d|t_1A~^OZ zy?4w*nkZ_jIE4_>1yTWPLrHyf`gkZu*|qdNLsFPe8)AWUIGnQwnP<(!{CU76q#HC{ zM#=blTfx0W=@azRO>Kq7ba%DK7IxZBJgKG4hvqBrD`}_7(Eilb`4#rRTZq#HC;{xR zbx!_%|H1fITQdt=cRHiLK=409%0^+!Hi!YnC$HJBzLNKHwbZL>*vQWaX_CNS!JdeV zV12#Ur=Xs(St9~9&uEM{0^=HH=;I1jxQSu_AzSW`5)-lGiPB;W;02QnH94Up^VBS; zd`*3#WRrq2(NiT!Bdq1;6ZvnX21XhW`ttde{FNGcJqW82gzn2~35+H7c zCXNl@j>QCqPdfDbsO_uYp;&6kg61dlMzNzL$kP{95-8pxkPVLg9+PekPzxekiO*-p z$pfHntXoU8!uV+gjuoGcQY)XT%EYWE=btCAwBW~w#J&qt6?pp(fqqI!B$z|95=$vfKK0>^I zp;3D^CZR*I2W9blGEZDKysAhA3p5s>qH3ovSBR-hFQ->JWrQ-s5SDpLl-1;XI~OEJ zsOKG1#AVKYw4flCm^O44O9GKP;2uKZ@`V0^lWyzI8cbI zK4WZKFZ=U>)lx1SpOK41L9(w4u36x+wL9nZ33v|2D(5LM{7R4Az>Vkt7kjlQ|CCNS z&}7IlY{)*dLO0ul@27V;WmHDeIiyYP!4i zvTLo4LDH&QW5-^%wel4zGA-s&F4@7)0AcB%`CfqD)lj+os$6Z79gyR7hw)JNMg5{g z79f|PP}?O)7b6KM(QRPhZHMoP7bqJdoj3ytvqMS3An&NBVOc>N>tOy1Fv@nljnsks zju4dxTQPGB$;iQpEAkK`6uuF7%}83_^kN(KiTg?oNTtN$E+#T%)!Uc?qHCh_pt0;% zI}ImjWRp~&RKJlyV$R>I6V5cW;W_4;6j(E|E|Ej+4#|yj)@3ibKc?$#=N&d>?yhfs zI8*7%5=ftHJG`)e9MUL(Y#3)QFjAY~f7E{i_Qr!B?bw*WaYPh6+^M5=2zK%BC_J*j z84B^nQkV*~D#(^Vy*T18LQ+Jo8*;{YzWd9QnLx~LueLi`N==dc+{WJglpMuK& zpdkAHUH5;LQxeEvyAAxk2Eoz(kMOpCE@x(9V_|Ed^k0GT_rCF;5pl)6<%lijdh;2{ zCTRkry6>NCeFerc5@N1dNSgo!`O9HKvysspfELcQ-iZ)YseJNU?wB-%`-C(_ZoN-p zMRoTX-BEV0)XNlLx4Em4x>?%Lv{Nq6>3#bHX7$w>jU2OsXzs`zr|}QX`BmFQmAkl5 z?#xy(Umjy4K@mxA;;7x2p}g5N(ImE(mFfKjN$fqvKFg8ABdpO7AnfecF=@;wCvFoP zr=jzB(VbLkse>_H-|r$s_0eOE=HH z96Zmr#!TCZi>MjgKyRT$kh(^+h)UDeb{PNtOGP&@o?@@6rdP-^^2)*g`V zIP@1|$-swpZ`VeH?=~!1O~u4$gvi|*@@Z$CB^!w!;5MR!iCib8JRS-%0D^PGpko>| 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 literal 0 HcmV?d00001 diff --git a/services/geminiService.ts b/services/geminiService.ts index 47fc995..f196ec6 100644 --- a/services/geminiService.ts +++ b/services/geminiService.ts @@ -1,5 +1,4 @@ - import { GoogleGenAI, Modality, Type } from "@google/genai"; import { PronunciationFeedback, Language, ReadingLesson, ReadingDifficulty, OCRAnalysis, ListeningLesson } from "../types"; import { base64ToUint8Array, uint8ArrayToBase64 } from "../utils/audioUtils"; @@ -63,7 +62,7 @@ const LANGUAGE_MAP = { class GeminiService { private getAi() { const userKey = localStorage.getItem(USER_API_KEY_STORAGE); - const userBaseUrl = localStorage.getItem(USER_BASE_URL_STORAGE); + let userBaseUrl = localStorage.getItem(USER_BASE_URL_STORAGE); const envKey = process.env.API_KEY; const keyToUse = (userKey && userKey.trim().length > 0) ? userKey : envKey; @@ -73,8 +72,11 @@ class GeminiService { } const config: any = { apiKey: keyToUse }; + if (userBaseUrl && userBaseUrl.trim().length > 0) { - config.baseUrl = userBaseUrl.trim(); + // Sanitize Base URL: remove quotes and trailing slashes + let cleanUrl = userBaseUrl.trim().replace(/['"]/g, '').replace(/\/+$/, ''); + config.baseUrl = cleanUrl; } return new GoogleGenAI(config); @@ -92,11 +94,19 @@ class GeminiService { try { return await operation(); } catch (error: any) { + const errorMsg = error?.message || ''; + + // Check for Network/CORS/Proxy errors specifically + if (errorMsg.includes('Failed to fetch') || errorMsg.includes('NetworkError')) { + console.error("Network Error Detected:", error); + throw new Error("Network connection failed. Please check your Base URL (Proxy) settings or internet connection."); + } + const isOverloaded = error?.status === 503 || error?.response?.status === 503 || - error?.message?.includes('503') || - error?.message?.includes('overloaded'); + errorMsg.includes('503') || + errorMsg.includes('overloaded'); if (isOverloaded && retries > 0) { console.warn(`Model overloaded (503). Retrying...`); @@ -118,10 +128,14 @@ class GeminiService { ): Promise<{ text: string, model: string }> { const ai = this.getAi(); + // Ensure model name is clean let modelName = useThinking ? 'gemini-3-pro-preview' : (imageBase64 ? 'gemini-3-pro-preview' : (modelOverride || 'gemini-2.5-flash')); + // Extra safety: strip quotes just in case + modelName = modelName.replace(/['"]/g, ''); + const targetLangName = LANGUAGE_MAP[language]; const parts: any[] = []; @@ -191,7 +205,7 @@ class GeminiService { return response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data || null; } catch (e) { console.error("TTS Chunk Error", e); - return null; + throw e; // Throw to retryOperation to handle network errors } }); } @@ -203,7 +217,11 @@ class GeminiService { // If text is short, process directly if (text.length <= MAX_CHUNK_LENGTH) { - return this._generateSpeechChunk(text); + try { + return await this._generateSpeechChunk(text); + } catch (e) { + return null; + } } // Split text into chunks by sentence to avoid breaking words @@ -284,7 +302,7 @@ class GeminiService { return bytes ? `data:image/jpeg;base64,${bytes}` : null; } catch (e) { console.error("Image Gen Error", e); - return null; + throw e; } }); } @@ -310,7 +328,7 @@ class GeminiService { return null; } catch (e) { console.error("Image Edit Error", e); - return null; + throw e; } }); } @@ -540,4 +558,4 @@ class GeminiService { } } -export const geminiService = new GeminiService(); \ No newline at end of file +export const geminiService = new GeminiService();