feat(webmail): pastas próprias na barra lateral e regras em linguagem comum

Regras. A tela pedia um tipo de correspondência do Sieve pelo nome -
:contains, :is, :matches (regex) - e colava o valor escrito
diretamente num script. Punha uma linguagem de padrões à frente de
quem só queria dizer "o que vem do banco vai para Faturas", e bastava
uma aspa no valor para o script deixar de fazer parse, desativando
silenciosamente todas as regras de uma vez.

O vocabulário passa a ser o de quem escreve: um campo, uma condição em
português, um valor e uma ação. Os curingas são gerados a partir de
"começa com" e "termina com" - ninguém os escreve, e um asterisco
escrito por acaso continua a ser um asterisco. A pasta de destino é
escolhida de uma lista das pastas que existem mesmo, em vez de ser
escrita à mão: antes uma regra podia nomear uma pasta inexistente e
nunca disparar, sem dizer porquê.

A ordem passa a ser visível e alterável, porque a primeira regra que
arquiva uma mensagem decide para onde ela vai.

Um script que esta tela não consegue exprimir - escrito à mão, ou por
um cliente de secretária sobre ManageSieve - é mostrado tal como está,
em vez de ser reescrito na coisa mais parecida que este formulário sabe
dizer, o que mudaria em silêncio o que o correio de alguém faz.

Pastas próprias. Existiam na base de dados e as regras podiam arquivar
nelas, mas a barra lateral listava só as seis fixas, portanto não havia
como ver uma - nem como criar. Criar fica onde a vontade aparece, na
própria barra; apagar avisa que leva as mensagens junto, porque leva.

Encontrado a escrever isto: o motor tratava "\\*" como barra seguida de
curinga em vez de um asterisco literal. Como é esta tela que gera os
curingas, uma regra sobre um assunto com "50% *" teria correspondido a
todos os assuntos começados por "50% ". Corrigido no motor, com testes
dos dois lados.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Opus 5 committed 2026-08-22 13:48:10 -03:00
1 parent 42420a7de2
commit d403c47a71
12 files changed
+828 -80

No files matched your search

+24 -1
View File
@@ -257,7 +257,24 @@
"vacationIntro": "Responde automaticamente às mensagens recebidas enquanto você estiver ausente.",
"vacationSubjectLabel": "Assunto da resposta",
"vacationTitle": "Resposta automática de ausência",
"valuePlaceholder": "Valor a corresponder..."
"valuePlaceholder": "Valor a corresponder...",
"ruleField": "Campo",
"ruleCondition": "Condição",
"ruleValue": "Valor",
"ruleValuePlaceholder": "ex.: fatura",
"fieldTo": "Para",
"fieldCc": "Cc",
"condContains": "Contém",
"condIs": "É exatamente",
"condStartsWith": "Começa com",
"condEndsWith": "Termina com",
"condNotContains": "Não contém",
"actionMarkRead": "Marcar como lida",
"ruleMoveUp": "Mover para cima",
"ruleMoveDown": "Mover para baixo",
"ruleOrderNote": "As regras são aplicadas em ordem, e a primeira que arquiva uma mensagem decide onde ela fica.",
"foreignScriptTitle": "Regras escritas noutro sítio",
"foreignScriptIntro": "Estas regras foram escritas à mão ou por um cliente de e-mail e usam recursos que esta tela não consegue mostrar. Continuam a ser aplicadas ao seu correio. Editá-las aqui mudaria o que fazem, por isso são mostradas como estão."
},
"ui": {
"accountLocked": "Bloqueada",
@@ -337,5 +354,11 @@
"underline": "Sublinhado",
"insertLink": "Link",
"insertImage": "Imagem"
},
"folders": {
"new": "Nova pasta",
"newPlaceholder": "Nova pasta…",
"delete": "Apagar {name}",
"deleteConfirm": "Apagar a pasta \"{name}\" e todas as mensagens nela? Isto não pode ser desfeito pela interface."
}
}