diff --git a/android/app/assets/carinha.html b/android/app/assets/carinha.html index b4c3c12..49be5e5 100644 --- a/android/app/assets/carinha.html +++ b/android/app/assets/carinha.html @@ -613,6 +613,7 @@ if (MODO_PAINEL) { const m = e.data; if (m.tipo === 'ordem' && typeof m.ordem === 'string') trata(m.ordem); else if (m.tipo === 'config' && m.config) configurarApp(m.config); + else if (m.tipo === 'sono' && !!m.dormindo !== r.dormindo) trata(m.dormindo ? 'dormir' : 'acordar'); else if (m.tipo === 'legenda' && typeof m.texto === 'string' && window.MotorRosto) window.MotorRosto.faixa('legenda', { texto: m.texto }); }); } else if (new URLSearchParams(location.search).get('espelho') === '1') setInterval(aplicarAparencia, 1000); diff --git a/carinha.html b/carinha.html index b4c3c12..49be5e5 100644 --- a/carinha.html +++ b/carinha.html @@ -613,6 +613,7 @@ if (MODO_PAINEL) { const m = e.data; if (m.tipo === 'ordem' && typeof m.ordem === 'string') trata(m.ordem); else if (m.tipo === 'config' && m.config) configurarApp(m.config); + else if (m.tipo === 'sono' && !!m.dormindo !== r.dormindo) trata(m.dormindo ? 'dormir' : 'acordar'); else if (m.tipo === 'legenda' && typeof m.texto === 'string' && window.MotorRosto) window.MotorRosto.faixa('legenda', { texto: m.texto }); }); } else if (new URLSearchParams(location.search).get('espelho') === '1') setInterval(aplicarAparencia, 1000); diff --git a/web/src/lib/componentes/RostoPrevia.svelte b/web/src/lib/componentes/RostoPrevia.svelte index bafb06e..43957d7 100644 --- a/web/src/lib/componentes/RostoPrevia.svelte +++ b/web/src/lib/componentes/RostoPrevia.svelte @@ -7,7 +7,8 @@ import { onDestroy } from 'svelte'; import { estado, ouvir } from '../estado.svelte'; - let { titulo = 'Prévia do rosto' }: { titulo?: string } = $props(); + /** espelharSono: dorme/acorda junto com o celular (ele adormece sozinho no silêncio). */ + let { titulo = 'Prévia do rosto', espelharSono = true }: { titulo?: string; espelharSono?: boolean } = $props(); let quadro: HTMLIFrameElement; let pronto = $state(false); @@ -20,6 +21,13 @@ if (estado.appConfig) enviar({ tipo: 'config', config: $state.snapshot(estado.appConfig) }); } + // Sono que o celular decidiu sozinho (silêncio, toque, barulho) não passa pelo SSE de ordens: + // vem na telemetria. Sem celular online, a prévia fica como está. + const dormindoNoCelular = $derived(estado.celularOnline ? !!estado.app?.estado?.dormindo : null); + $effect(() => { + if (espelharSono && pronto && dormindoNoCelular !== null) enviar({ tipo: 'sono', dormindo: dormindoNoCelular }); + }); + let ultimaConversa = estado.conversa?.ultima?.id; const cancelar = [ ouvir('expressao', (d) => enviar({ tipo: 'ordem', ordem: d.ordem })), diff --git a/web/src/telas/Reacoes.svelte b/web/src/telas/Reacoes.svelte index ecabd45..fdc13d8 100644 --- a/web/src/telas/Reacoes.svelte +++ b/web/src/telas/Reacoes.svelte @@ -249,7 +249,7 @@ diff --git a/web/src/telas/Rosto.svelte b/web/src/telas/Rosto.svelte index 8e2714e..3bebce2 100644 --- a/web/src/telas/Rosto.svelte +++ b/web/src/telas/Rosto.svelte @@ -70,7 +70,7 @@
-
+
{nomeRosto(atual).toUpperCase()}{aceitaFormato ? ' · ' + (FORMATOS_INFO[formatoAtual] ?? formatoAtual).toUpperCase() : ''}