Add error handling, enhance syncing, and refactor deletion logic

- Introduce new error messages for syncing and book deletion in `en.json`.
- Update `DeleteBook` to support local-only deletion and synced book management.
- Refine offline/online behavior with `deleteLocalToo` checkbox and update related state handling.
- Extend repository and IPC methods to handle optional IDs for updates.
- Add `SyncQueueContext` for queueing offline changes and improving synchronization workflows.
- Enhance refined text generation logic in `DraftCompanion` and `GhostWriter` components.
- Replace PUT with PATCH for world updates to align with API expectations.
- Streamline `AlertBox` by integrating dynamic translation keys for deletion prompts.
This commit is contained in:
natreex
2026-01-10 15:50:03 -05:00
parent 060693f152
commit 7f34421212
26 changed files with 506 additions and 100 deletions

View File

@@ -107,7 +107,7 @@ export default function GhostWriter() {
infoMessage(t("ghostWriter.abortSuccess"));
}
}
async function handleGenerateGhostWriter(): Promise<void> {
setIsGenerating(true);
setIsTextGenerated(false);
@@ -187,21 +187,20 @@ export default function GhostWriter() {
totalCost?: number;
totalPrice?: number;
useYourKey?: boolean;
aborted?: boolean;
} = JSON.parse(dataStr);
if ('totalCost' in data && 'useYourKey' in data && 'totalPrice' in data) {
if ('content' in data && data.content) {
accumulatedText += data.content;
setTextGenerated(accumulatedText);
}
else if ('useYourKey' in data && 'totalPrice' in data) {
if (data.useYourKey) {
setTotalPrice((prev: number): number => prev + data.totalPrice!);
} else {
setTotalCredits(data.totalPrice!);
}
} else if ('content' in data && data.content && data.content !== 'starting') {
accumulatedText += data.content;
setTextGenerated(accumulatedText);
}
} catch (e: unknown) {
console.error('Error parsing SSE data:', e);
errorMessage(t('ghostWriter.errorProcessingData'));
}
}
}
@@ -209,7 +208,7 @@ export default function GhostWriter() {
break;
}
}
setIsGenerating(false);
setIsTextGenerated(true);
setAbortController(null);