function post_install() {
# Corpo do pós-instalação. O nfpm embrulha este arquivo na função de cada
# formato (postinst do deb, %post do rpm, post_install() do pacote do Arch), e
# é por isso que ele fica escrito uma vez só.

# Roda como root e **sem sessão gráfica**: aqui só cabe o que é do sistema. A
# integração com o ambiente do usuário (fixar no dock e pôr --x11 nos atalhos de
# teclado) é do próprio aplicativo, disparada pela entrada que ele instala em
# /etc/xdg/autostart na primeira sessão depois da instalação.
#
# As três chamadas abaixo são opcionais: os pacotes que as fornecem trazem
# gatilhos próprios, e o gerenciador pode já ter feito o serviço. Falhar aqui não
# deve abortar a instalação.
command -v update-desktop-database >/dev/null 2>&1 &&
    update-desktop-database -q /usr/share/applications 2>/dev/null

command -v gtk-update-icon-cache >/dev/null 2>&1 &&
    gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor 2>/dev/null

# Uma instalação anterior em /usr/local continua ganhando desta, e o sintoma é
# confuso: o comando "pinguprint" abre a versão antiga (janela e layout de
# antes), porque /usr/local/bin vem **antes** de /usr/bin no PATH. Era o caso de
# quem já tinha rodado "sudo ./instalar.sh --prefixo /usr/local".
#
# O laço passa pelos nomes que o programa já teve — o de hoje, o da versão
# anterior (EasyScreenshot) e o mais antigo (screenshotcapture). Sem ele, quem
# tinha a instalação por fonte com o nome antigo ficaria com o atalho antigo
# apontando para um binário que não existe mais, a entrada do menu dele e os
# ícones dele no tema.
for nome in pinguprint easyscreenshot screenshotcapture; do
    if [ -f "/usr/local/lib/$nome/$nome" ] || [ -h "/usr/local/bin/$nome" ]; then
        rm -f "/usr/local/bin/$nome"
        rm -rf "/usr/local/lib/$nome"
        echo "PinguPrint: removida a instalação anterior em /usr/local ($nome)."
    fi

    rm -f "/usr/local/share/applications/$nome.desktop"

    for tamanho in 48 128 256 512; do
        rm -f "/usr/local/share/icons/hicolor/${tamanho}x${tamanho}/apps/$nome.png"
    done
done

# Tirar os ícones do prefixo antigo **não basta**: o gtk-update-icon-cache que o
# instalar.sh rodou lá deixou um icon-theme.cache que ainda **lista** os ícones
# removidos. Como /usr/local/share vem antes de /usr/share na busca do tema, quem
# procura o ícone pelo nome o encontra no cache, tenta abrir o arquivo que não
# existe mais e **não cai** para o de /usr/share — o aplicativo aparece no menu de
# aplicativos sem ícone (a janela, a barra de tarefas e a bandeja continuam
# certas, porque essas não dependem do tema). Refazendo o cache sem os nossos
# ícones (ou apagando-o, se não houver o gtk-update-icon-cache), o tema é
# resolvido de novo e o ícone de /usr/share aparece.
if ! (command -v gtk-update-icon-cache >/dev/null 2>&1 &&
      gtk-update-icon-cache -q -t -f /usr/local/share/icons/hicolor 2>/dev/null); then
    rm -f /usr/local/share/icons/hicolor/icon-theme.cache
fi

command -v update-desktop-database >/dev/null 2>&1 &&
    update-desktop-database -q /usr/local/share/applications 2>/dev/null

# O fecho precisa dar certo: quem decide o código de saída é o último comando do
# bloco, e um post_install que sai diferente de zero falha a instalação. Nada de
# "exit" — no pacote do Arch esta função é chamada de dentro do script do pacman,
# e um exit encerraria o pacman no meio.
:

}

function post_remove() {
# Corpo do pós-remoção. Como o postinstall.sh, este arquivo é embrulhado pelo
# nfpm na função de cada formato (postrm do deb, %postun do rpm, post_remove()
# do pacote do Arch).

# Ao remover o pacote o menu e o cache de ícones ficam com entradas órfãs.
command -v update-desktop-database >/dev/null 2>&1 &&
    update-desktop-database -q /usr/share/applications 2>/dev/null

command -v gtk-update-icon-cache >/dev/null 2>&1 &&
    gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor 2>/dev/null

# As escolhas do usuário ficam onde estavam: ~/.config/pinguprint/config.json
# (inclusive os atalhos e o marcador da integração). Desinstalar o programa não é
# motivo para apagar a configuração de alguém — quem quiser some com ela à mão.
#
# O fecho precisa dar certo (ver o comentário no postinstall.sh): nada de "exit".
:

}

