Files
ai-app-skg/services/storage.ts
2025-12-26 16:03:17 +08:00

70 lines
1.9 KiB
TypeScript

import { UserSettings, ChatSession, AppLanguage } from "../types";
import { DEFAULT_LANGUAGE } from "../constants";
const KEYS = {
SETTINGS: "sociopal_settings",
SESSIONS: "sociopal_sessions",
CURRENT_SESSION: "sociopal_current_session_id"
};
export const loadSettings = (): UserSettings => {
const stored = localStorage.getItem(KEYS.SETTINGS);
if (stored) return JSON.parse(stored);
return {
language: DEFAULT_LANGUAGE,
theme: 'auto'
};
};
export const saveSettings = (settings: UserSettings) => {
localStorage.setItem(KEYS.SETTINGS, JSON.stringify(settings));
};
export const loadSessions = (): ChatSession[] => {
const stored = localStorage.getItem(KEYS.SESSIONS);
return stored ? JSON.parse(stored) : [];
};
export const saveSessions = (sessions: ChatSession[]) => {
localStorage.setItem(KEYS.SESSIONS, JSON.stringify(sessions));
};
export const exportData = () => {
const data = {
settings: loadSettings(),
sessions: loadSessions(),
timestamp: Date.now()
};
const blob = new Blob([JSON.stringify(data, null, 2)], { type: "application/json" });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `sociopal_backup_${new Date().toISOString().slice(0, 10)}.json`;
a.click();
};
export const importData = async (file: File): Promise<boolean> => {
return new Promise((resolve) => {
const reader = new FileReader();
reader.onload = (e) => {
try {
const data = JSON.parse(e.target?.result as string);
if (data.settings) saveSettings(data.settings);
if (data.sessions) saveSessions(data.sessions);
resolve(true);
} catch (err) {
console.error("Import failed", err);
resolve(false);
}
};
reader.readAsText(file);
});
};
export const clearData = () => {
localStorage.removeItem(KEYS.SETTINGS);
localStorage.removeItem(KEYS.SESSIONS);
localStorage.removeItem(KEYS.CURRENT_SESSION);
};