From b4c6acccc6dfc5beeb191d2e1ee3c03e8930444b Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 8 Mar 2024 15:02:17 +0800 Subject: [PATCH] feat: optimize auto-save logic --- src/renderer/services/document.ts | 67 ++++++++++++++++++------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/src/renderer/services/document.ts b/src/renderer/services/document.ts index 88033fe8..d3951a70 100644 --- a/src/renderer/services/document.ts +++ b/src/renderer/services/document.ts @@ -559,37 +559,46 @@ export async function ensureCurrentFileSaved () { try { const autoSave = !isEncrypted(currentFile) && getSetting('auto-save', 2000) if (autoSave) { - await saveContent() - } else { - const confirm = await useModal().confirm({ - title: t('save-check-dialog.title'), - content: t('save-check-dialog.desc'), - action: h(Fragment, [ - h('button', { - onClick: async () => { - await saveContent() - useModal().ok() - } - }, t('save')), - h('button', { - onClick: () => useModal().ok() - }, t('discard')), - h('button', { - onClick: () => useModal().cancel() - }, t('cancel')), - ]) - }) - - checkFile() - - if (confirm) { - if (!store.getters.isSaved && currentFile.content) { - store.state.currentContent = currentFile.content! - } - } else { - throw new Error('Document not saved') + try { + await saveContent() + return + } catch (error: any) { + useToast().show('warning', error.message) } } + + const confirm = await useModal().confirm({ + title: t('save-check-dialog.title'), + content: t('save-check-dialog.desc'), + action: h(Fragment, [ + h('button', { + onClick: async () => { + await saveContent().catch(error => { + useToast().show('warning', error.message) + throw error + }) + + useModal().ok() + } + }, t('save')), + h('button', { + onClick: () => useModal().ok() + }, t('discard')), + h('button', { + onClick: () => useModal().cancel() + }, t('cancel')), + ]) + }) + + checkFile() + + if (confirm) { + if (!store.getters.isSaved && currentFile.content) { + store.state.currentContent = currentFile.content! + } + } else { + throw new Error('Document not saved') + } } catch (error: any) { useToast().show('warning', error.message) throw error