Skip to content

Configurações acompanham o perfil entre dispositivos (storage.sync) - #46

Open
juansilvadesign wants to merge 1 commit into
joaogfc:mainfrom
juansilvadesign:feat/settings-sync
Open

Configurações acompanham o perfil entre dispositivos (storage.sync)#46
juansilvadesign wants to merge 1 commit into
joaogfc:mainfrom
juansilvadesign:feat/settings-sync

Conversation

@juansilvadesign

Copy link
Copy Markdown
Contributor

Descrição da mudança

As chaves de preferência — settings do motor, lastMode, memória por canal (channelMemory/channelModes) e tema — passam a viver em chrome.storage.sync: quem usa o mesmo perfil do navegador em mais de um computador encontra o ZeroDelay do jeito que deixou.

Como foi feito:

  • Fachada em common.js (settingsArea/getSettings/setSettings): todos os consumidores (content, popup, background) leem/escrevem por ela. getSettings tem leitura de reserva no storage.local enquanto a migração não aconteceu — usuário existente nunca vê um flash de padrões.
  • Migração única e idempotente (ensureSettingsMigrated, executada no boot do worker e na abertura do popup): copia local→sync e limpa o local; se outro dispositivo migrou primeiro, o sync vence. O plano da migração é uma função pura (planSyncMigration) coberta por testes para os três cenários.
  • Ficam locais de propósito: chaves donate* (uso é por dispositivo; sincronizar contaria em dobro), goLiveSignal (one-shot transitório) e currentChannelId (é literalmente "a aba vista NESTE dispositivo").
  • De quebra, corrige um detalhe do contador de uso da doação: ele lia enabled direto do storage.local, então após a migração leria undefined e contaria tempo de uso mesmo com a extensão desligada — agora lê pela fachada.

Quota do sync é folgada para esses dados (o maior item é o channelModes com teto de 50 canais, ~2 KB, contra 8 KB/item do sync).

Tipo de mudança

  • Correção de bug (não quebra nada existente)
  • Novo recurso (não quebra nada existente)
  • Mudança que quebra compatibilidade (comportamento existente muda)
  • Documentação / tooling (sem alteração no código da extensão)

Impacto em storage

  • Não mexe em chaves de storage
  • Adiciona uma chave nova (não renomeia nem remove as existentes)
  • Atenção: renomeia/remove uma chave existente (explique a migração abaixo)

Nenhuma chave é renomeada ou tem o formato alterado (inclusive skipThreathold fica exatamente como está) — o que muda é a área: as chaves de preferência migram de storage.local para storage.sync, uma única vez, com plano puro testado (planSyncMigration) e leitura de reserva no local até lá. Se a escrita no sync falhar (quota/offline), o local é preservado e a migração tenta de novo no próximo boot. Downgrade da extensão: a versão antiga volta a ler o local (limpo) e encontra os padrões — nunca dado corrompido.

Testes

  • Rodei npm run lint sem erros
  • Rodei npm test sem falhas (53 testes, incluindo 4 novos da migração)
  • Testei manualmente em uma live real do YouTube — Sim
    • Navegador testado: sessão local (perfil com dados existentes migrou sem anomalias)

Também: npm run check:locales, npm run build, npm run build:firefox e web-ext lint (0 erros / 0 avisos — o storage.sync funciona no Gecko MV3).

Screenshots

Sem mudança visual — comportamento de storage apenas.

Checklist final

  • O código segue o estilo do projeto (ESLint passa)
  • Atualizei a documentação relevante (README, CHANGELOG, etc.) quando aplicável
  • Estou de acordo com a licença GPL-3.0-or-later do projeto

🤖 Generated with Claude Code

https://claude.ai/code/session_01AiLQznJ15KbuK73b9YxAjS

…storage.sync)

As chaves de preferência — settings do motor, lastMode, memória por canal e
tema — passam a viver em chrome.storage.sync, atrás de uma fachada em
common.js (settingsArea/getSettings/setSettings). Migração local→sync única e
idempotente (planSyncMigration, pura e testada; executada no boot do worker e
na abertura do popup), com leitura de reserva no storage.local até ela rodar —
usuário existente nunca vê um flash de padrões. Nenhuma chave é renomeada.

Ficam locais de propósito: donate* (uso por dispositivo; sincronizar contaria
em dobro), goLiveSignal (one-shot transitório), currentChannelId (é a aba
DESTE dispositivo) e lastSeenVersion (cada navegador encontra o update no seu
ritmo). De quebra, corrige o contador de uso da doação lendo `enabled` da
área roaming — pós-migração ele leria undefined no local e contaria uso mesmo
com a extensão desligada.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AiLQznJ15KbuK73b9YxAjS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant