From 11fc26390db1d45a10ec69a1ec6f8a1fbe79df24 Mon Sep 17 00:00:00 2001 From: Luiz Gustavo Costa Date: Wed, 4 Nov 2026 17:33:30 -0300 Subject: [PATCH] =?UTF-8?q?feat(autosave):=20grava=20por=20ociosidade=20(1?= =?UTF-8?q?0s=20padr=C3=A3o,=20configur=C3=A1vel)=20e=20em=20sil=C3=AAncio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - debounce de 1,5s → 10s SEM nenhuma alteração (cada tecla reinicia); seletor 5/10/30/60s no diálogo de Preferências (autosaveDelay, clamp 5–120) - autosave silencioso: sem toast, só o status 'salvando…/salvo'; Ctrl+S manual mantém o toast com o hash da revisão - flush de pendências ao trocar de aba do app e em visibilitychange=hidden /pagehide (melhor esforço) — nada se perde ao sair antes do idle - README atualizado --- README.md | 9 ++++++--- web/index.html | 9 ++++++++- web/js/app.js | 26 +++++++++++++++++++++----- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c200538..bae53c0 100644 --- a/README.md +++ b/README.md @@ -100,9 +100,12 @@ ocupa a tela inteira; menus e toolbar rolam horizontalmente com botões só de automaticamente o diálogo *Conflito de edição* (recarregar | salvar por cima). A própria sessão que salvou ignora o evento; reconexão do `EventSource` é automática e o fallback continua sendo a checagem no foco da janela. -- **Autosave**: ligado por padrão — após ~1,5 s sem digitar, a alteração é salva como revisão - `autosave` (rascunho novo vira nota criada automaticamente; status *"salvando…"* na barra). - Desligável em Preferências. Conflitos durante autosave pausam o ciclo até a resolução. +- **Autosave por ociosidade**: só grava após um período **sem nenhuma alteração** — padrão + **10 s**, configurável (5/10/30/60 s em Preferências); cada tecla reinicia a contagem, então + digitação contínua nunca é interrompida por gravações. Silencioso (sem toast — apenas o + status *"salvando…/salvo"*; toast continua no `Ctrl+S` manual). A gravação também é feita + ao **trocar de aba do app** ou ao **minimizar/trocar de janela** (`visibilitychange`/ + `pagehide`), para não perder edição pendente. Conflitos pausam o ciclo até a resolução. - **Sincronia entre dispositivos** (celular + desktop no mesmo servidor): - Cada aba lembra o hash em que se baseia (`base_hash`). Ao salvar, se o servidor mudou desde então, a API responde **409** e a UI abre o diálogo **Conflito de edição** com as duas saídas: diff --git a/web/index.html b/web/index.html index b5bb63a..ff070ff 100644 --- a/web/index.html +++ b/web/index.html @@ -34,7 +34,14 @@ - +