session saving

This commit is contained in:
2026-02-24 18:35:03 +10:00
parent 1cbef965af
commit ee048084b0
8 changed files with 224 additions and 22 deletions

View File

@@ -6,6 +6,7 @@ const DRAFT_ROOT =
process.env.DRAFT_PATH ?? '/Users/pori/WebstormProjects/hohoff/draft'
const ORDER_FILE = join(DRAFT_ROOT, '.order.json')
const SESSION_FILE = join(DRAFT_ROOT, '.session.json')
const PART_ORDER = ['Prologue', 'Content Warning', 'Part I', 'Part II', 'Part III', 'Part IV', 'Epilogue', 'The first time']
@@ -30,6 +31,18 @@ export async function saveOrderFile(order: Record<string, string[]>): Promise<vo
await writeFile(ORDER_FILE, JSON.stringify(order, null, 2), 'utf-8')
}
export async function readSession(): Promise<Record<string, unknown>> {
try {
return JSON.parse(await readFile(SESSION_FILE, 'utf-8'))
} catch {
return {}
}
}
export async function writeSession(data: Record<string, unknown>): Promise<void> {
await writeFile(SESSION_FILE, JSON.stringify(data), 'utf-8')
}
function applyOrder(nodes: FileNode[], savedNames: string[]): FileNode[] {
const map = new Map(nodes.map((n) => [n.name, n]))
const ordered = savedNames.filter((n) => map.has(n)).map((n) => map.get(n)!)

View File

@@ -1,5 +1,5 @@
import { ipcMain } from 'electron'
import { listDraftFiles, readMarkdownFile, writeMarkdownFile, getProjectWordCount, saveOrderFile } from './fileSystem'
import { listDraftFiles, readMarkdownFile, writeMarkdownFile, getProjectWordCount, saveOrderFile, readSession, writeSession } from './fileSystem'
import { streamMessage } from './aiService'
import type { AIPayload } from '../renderer/types/editor'
@@ -24,6 +24,14 @@ export function registerIpcHandlers(): void {
await saveOrderFile(order)
})
ipcMain.handle('session:read', async () => {
return await readSession()
})
ipcMain.handle('session:write', async (_event, data: Record<string, unknown>) => {
await writeSession(data)
})
ipcMain.handle('ai:streamMessage', async (event, payload: AIPayload) => {
try {
await streamMessage(payload, (chunk: string) => {