Skip to content

Commit

Permalink
Caixas de mensagem
Browse files Browse the repository at this point in the history
  • Loading branch information
GuiBrandt committed Feb 27, 2019
1 parent 81b88d1 commit 5c505fe
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 4 deletions.
2 changes: 2 additions & 0 deletions __main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import god.interactive
import god.cli as cli
import god.log as log
import god.version as version
import god.quotes as quotes
import god.config as config
import god.updater as updater
Expand Down Expand Up @@ -60,6 +61,7 @@ def load_phrases():
def main():
"""Procedimento principal"""

cli.title(f"God {version.current()}")
cli.clear()
cli.header()

Expand Down
8 changes: 8 additions & 0 deletions god/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
from colorama import init as color_init
from pyfiglet import Figlet

import win32console

import god
import god.config as config
import god.quotes as quotes
Expand All @@ -23,6 +25,12 @@
color_init(autoreset=True)


def title(text):
"""Define o título da janela"""

win32console.SetConsoleTitle(text)


def width():
"""Obtém a largura da janela do terminal"""

Expand Down
88 changes: 88 additions & 0 deletions god/gui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
"""Gerenciador de interface do usuário
Esse módulo tem funções para gerenciar a interface com o usuário, incluindo CLI
e GUI.
"""

import win32con
import win32console
from win32gui import MessageBox


def confirm(text, title="God"):
"""Pede confirmação para o usuário na forma de popup
Parâmetros
----------
text : str
Texto da caixa de mensagem
title : str
Título da caixa de mensagem (Padrão: God)
Retorno
-------
True caso o usuário confirme, False se não
"""

res = MessageBox(win32console.GetConsoleWindow(),
text, title,
win32con.MB_YESNO | win32con.MB_ICONINFORMATION)
return res == win32con.IDYES


def info(text, title="God"):
"""Mostra uma caixa de mensagem de informação
Parâmetros
----------
text : str
Texto da caixa de mensagem
title : str
Título da caixa de mensagem (Padrão: God)
"""

MessageBox(win32console.GetConsoleWindow(),
text, title,
win32con.MB_OK | win32con.MB_ICONINFORMATION)


def error(text, title="God"):
"""Mostra uma caixa de mensagem de erro
Parâmetros
----------
text : str
Texto da caixa de mensagem
title : str
Título da caixa de mensagem (Padrão: God)
"""

MessageBox(win32console.GetConsoleWindow(),
text, title,
win32con.MB_OK | win32con.MB_ICONERROR)


def warning(text, title="God"):
"""Mostra uma caixa de mensagem de aviso
Parâmetros
----------
text : str
Texto da caixa de mensagem
title : str
Título da caixa de mensagem (Padrão: God)
"""

MessageBox(win32console.GetConsoleWindow(),
text, title,
win32con.MB_OK | win32con.MB_ICONWARNING)
30 changes: 26 additions & 4 deletions god/updater.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Gerenciador de atualização
Esse módulo faz o pareamento com a última versão disponível no GitHub,
Esse módulo faz o pareamento com a última versão disponível no GitHub,
e faz a atualização de forma automática.
"""
Expand All @@ -16,6 +16,7 @@
import requests

import god.cli as cli
import god.gui as gui
import god.log as log
import god.version as version

Expand All @@ -32,8 +33,9 @@ def check_updates():
try:
latest_release = _fetch_latest_release()
except RuntimeError as ex:
gui.error("Falha na atualização." +
"Verifique sua conexão com a internet.")
log.error("fetch-releases", ex)
cli.error("Falha. Verifique sua conexão com a internet.")
return

cli.info("Encontrado: " + latest_release['tag_name'])
Expand All @@ -44,7 +46,7 @@ def check_updates():

cli.error("O god está desatualizado!")

if cli.yesno("Atualizar?"):
if _confirm(latest_release):
update_dir = _download_update(latest_release)
_install_update(update_dir)

Expand All @@ -55,6 +57,9 @@ def check_updates():

os.system("start python apply_update.py")
sys.exit(0)
else:
cli.warning("Ignorando atualização. " +
"Cuidado, isso geralmente dá ruim.")


def _fetch_latest_release():
Expand Down Expand Up @@ -95,6 +100,21 @@ def _download_update(release):
return tmp_dir


def _confirm(latest_release):
"""Faz a confirmação de atualização via janela de mensagem"""

return gui.confirm(
f"Versão atual: {version.current()}\r\n" +
f"Versão encontrada: {latest_release['tag_name']}\r\n" +
"\r\n" +
"Changelog\r\n" +
"--------------\r\n" +
latest_release['body'] + "\r\n" +
"\r\n" +
"Atualizar?",
title="Atualização disponível")


def _install_update(update_dir):
"""Faz a instalação de uma atualização
Expand All @@ -111,7 +131,9 @@ def _install_update(update_dir):
if result == 0:
cli.success("OK")
else:
cli.error("Falha na instalação. Abortando atualização...")
gui.error("Falha na instalação. Abortando atualização...\r\n" +
"\r\n" +
"Veja o arquivo `error.log' para mais informações.")
log.error("update", "Falha na instação das dependências")
return

Expand Down

0 comments on commit 5c505fe

Please sign in to comment.