File size: 2,040 Bytes
2695555
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""5.2 (F4, contexto do programa em uso): uma sugestão pelo programa ativo, como no mock-up aprovado em 20/10 ("Você está
escrevendo um e-mail. Quer que eu revise a ortografia?"). Só o nome do programa e o título da janela, lidos na hora e
nunca gravados nem enviados; ligado por padrão desde 24/10 (Configurações > Assistente). O histórico da tela estilo Recall fica fora,
por privacidade. Sem Qt."""
import unicodedata

import tars_i18n

# (sugestão, o programa ou o site no título, o que no título diz que é a janela de escrever)
REGRAS = (
    ("email", ("thunderbird", "outlook", "geary", "evolution", "mailspring", "mail", "correio", "gmail", "proton"),
     ("escrever", "nova mensagem", "new message", "compose", "write", "responder", "reply", "rascunho", "draft", "re:",
      "fwd:", "encaminhar", "forward")),
)


def _normal(texto):
    return unicodedata.normalize("NFKD", str(texto or "")).encode("ascii", "ignore").decode().lower()


def programa(classe):
    """O nome do programa na classe da janela ("Thunderbird thunderbird", "Mail", "Notepad notepad")."""
    partes = str(classe or "").split()
    return (partes[-1] if partes else "").lower()


def sugestao(titulo, classe):
    """A sugestão para esta janela ("email") ou None."""
    titulo_n, classe_n = _normal(titulo), _normal(classe)
    for nome, programas, janelas in REGRAS:
        if any(p in classe_n or p in titulo_n for p in programas) and any(j in titulo_n for j in janelas):
            return nome
    return None


def ligado():
    return bool(tars_i18n.ler_config().get("sugestoes_programa"))


def ligar(valor):
    tars_i18n.salvar_config(sugestoes_programa=bool(valor))


def silenciado(nome_programa):
    return nome_programa in (tars_i18n.ler_config().get("sugestoes_silenciadas") or [])


def silenciar(nome_programa):
    lista = list(tars_i18n.ler_config().get("sugestoes_silenciadas") or [])
    if nome_programa and nome_programa not in lista:
        tars_i18n.salvar_config(sugestoes_silenciadas=lista + [nome_programa])