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

@@ -151,7 +151,12 @@
"serverOnly": "Server only",
"toSyncFromServer": "Download from server",
"toSyncToServer": "Upload to server",
"sync": "Sync"
"sync": "Sync",
"uploadError": "Error uploading book.",
"downloadError": "Error downloading book.",
"syncFromServerError": "Error syncing from server.",
"syncToServerError": "Error syncing to server.",
"refreshError": "Error refreshing books."
},
"scribeTopBar": {
"logoAlt": "Logo",
@@ -873,7 +878,11 @@
"lastChapterError": "Error retrieving last chapter",
"localDataError": "Unable to load local data",
"encryptionKeyError": "Encryption key not found",
"offlineModeError": "Error initializing offline mode"
"offlineModeError": "Error initializing offline mode",
"offlineInitError": "Error initializing offline mode",
"syncError": "Error syncing data",
"dbInitError": "Error initializing local database",
"offlineError": "Error checking offline mode"
}
},
"shortStoryGenerator": {
@@ -975,5 +984,14 @@
"setupFailed": "Error configuring PIN"
}
}
},
"deleteBook": {
"title": "Delete book",
"message": "You are about to permanently delete your book.",
"confirm": "Delete",
"cancel": "Cancel",
"deleteLocalToo": "Also delete local version",
"deleteLocalWarning": "Warning: This action will delete the book from the server AND your device. This action is irreversible.",
"errorUnknown": "An unknown error occurred while deleting the book."
}
}

View File

@@ -151,7 +151,12 @@
"serverOnly": "Sur le serveur uniquement",
"toSyncFromServer": "Télécharger depuis le serveur",
"toSyncToServer": "Envoyer vers le serveur",
"sync": "Synchroniser"
"sync": "Synchroniser",
"uploadError": "Erreur lors du téléversement du livre.",
"downloadError": "Erreur lors du téléchargement du livre.",
"syncFromServerError": "Erreur lors de la synchronisation depuis le serveur.",
"syncToServerError": "Erreur lors de la synchronisation vers le serveur.",
"refreshError": "Erreur lors du rafraîchissement des livres."
},
"scribeTopBar": {
"logoAlt": "Logo",
@@ -874,7 +879,11 @@
"lastChapterError": "Erreur lors de la récupération du dernier chapitre",
"localDataError": "Impossible de charger les données locales",
"encryptionKeyError": "Clé de chiffrement non trouvée",
"offlineModeError": "Erreur lors de l'initialisation du mode hors ligne"
"offlineModeError": "Erreur lors de l'initialisation du mode hors ligne",
"offlineInitError": "Erreur lors de l'initialisation du mode hors ligne",
"syncError": "Erreur lors de la synchronisation des données",
"dbInitError": "Erreur lors de l'initialisation de la base de données locale",
"offlineError": "Erreur lors de la vérification du mode hors ligne"
}
},
"shortStoryGenerator": {
@@ -976,5 +985,14 @@
"setupFailed": "Erreur lors de la configuration du PIN"
}
}
},
"deleteBook": {
"title": "Suppression du livre",
"message": "Vous êtes sur le point de supprimer votre livre définitivement.",
"confirm": "Supprimer",
"cancel": "Annuler",
"deleteLocalToo": "Supprimer également la version locale",
"deleteLocalWarning": "Attention : Cette action supprimera le livre du serveur ET de votre appareil. Cette action est irréversible.",
"errorUnknown": "Une erreur inconnue est survenue lors de la suppression du livre."
}
}