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:
1 parent
42420a7de2
commit
d403c47a71
12 files changed
+828
-80
No files matched your search
@@ -257,7 +257,24 @@
|
||||
"vacationIntro": "Reply automatically to incoming mail while you are away.",
|
||||
"vacationSubjectLabel": "Reply subject",
|
||||
"vacationTitle": "Out-of-office auto-reply",
|
||||
"valuePlaceholder": "Value to match..."
|
||||
"valuePlaceholder": "Value to match...",
|
||||
"ruleField": "Field",
|
||||
"ruleCondition": "Condition",
|
||||
"ruleValue": "Value",
|
||||
"ruleValuePlaceholder": "e.g. invoice",
|
||||
"fieldTo": "To",
|
||||
"fieldCc": "Cc",
|
||||
"condContains": "Contains",
|
||||
"condIs": "Is exactly",
|
||||
"condStartsWith": "Starts with",
|
||||
"condEndsWith": "Ends with",
|
||||
"condNotContains": "Does not contain",
|
||||
"actionMarkRead": "Mark as read",
|
||||
"ruleMoveUp": "Move up",
|
||||
"ruleMoveDown": "Move down",
|
||||
"ruleOrderNote": "Rules are applied in order, and the first one that files a message decides where it goes.",
|
||||
"foreignScriptTitle": "Rules written elsewhere",
|
||||
"foreignScriptIntro": "These rules were written by hand or by a desktop client and use features this screen cannot show. They are still applied to your mail. Editing them here would change what they do, so they are shown as they are."
|
||||
},
|
||||
"ui": {
|
||||
"accountLocked": "Locked",
|
||||
@@ -337,5 +354,11 @@
|
||||
"underline": "Underline",
|
||||
"insertLink": "Link",
|
||||
"insertImage": "Image"
|
||||
},
|
||||
"folders": {
|
||||
"new": "New folder",
|
||||
"newPlaceholder": "New folder…",
|
||||
"delete": "Delete {name}",
|
||||
"deleteConfirm": "Delete the folder \"{name}\" and every message in it? This cannot be undone from the interface."
|
||||
}
|
||||
}
|
||||
@@ -257,7 +257,24 @@
|
||||
"vacationIntro": "Responde automáticamente al correo entrante mientras esté ausente.",
|
||||
"vacationSubjectLabel": "Asunto de la respuesta",
|
||||
"vacationTitle": "Respuesta automática de ausencia",
|
||||
"valuePlaceholder": "Valor a coincidir..."
|
||||
"valuePlaceholder": "Valor a coincidir...",
|
||||
"ruleField": "Campo",
|
||||
"ruleCondition": "Condición",
|
||||
"ruleValue": "Valor",
|
||||
"ruleValuePlaceholder": "p. ej. factura",
|
||||
"fieldTo": "Para",
|
||||
"fieldCc": "Cc",
|
||||
"condContains": "Contiene",
|
||||
"condIs": "Es exactamente",
|
||||
"condStartsWith": "Empieza por",
|
||||
"condEndsWith": "Termina en",
|
||||
"condNotContains": "No contiene",
|
||||
"actionMarkRead": "Marcar como leída",
|
||||
"ruleMoveUp": "Subir",
|
||||
"ruleMoveDown": "Bajar",
|
||||
"ruleOrderNote": "Las reglas se aplican en orden, y la primera que archiva un mensaje decide dónde va.",
|
||||
"foreignScriptTitle": "Reglas escritas en otro sitio",
|
||||
"foreignScriptIntro": "Estas reglas se escribieron a mano o desde un cliente de correo y usan funciones que esta pantalla no puede mostrar. Se siguen aplicando. Editarlas aquí cambiaría lo que hacen, por eso se muestran tal cual."
|
||||
},
|
||||
"ui": {
|
||||
"accountLocked": "Bloqueada",
|
||||
@@ -337,5 +354,11 @@
|
||||
"underline": "Subrayado",
|
||||
"insertLink": "Enlace",
|
||||
"insertImage": "Imagen"
|
||||
},
|
||||
"folders": {
|
||||
"new": "Nueva carpeta",
|
||||
"newPlaceholder": "Nueva carpeta…",
|
||||
"delete": "Eliminar {name}",
|
||||
"deleteConfirm": "¿Eliminar la carpeta \"{name}\" y todos sus mensajes? Esto no se puede deshacer desde la interfaz."
|
||||
}
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user