VlibrasUpdateInstallDict.py 4.65 KB

# -*- coding: utf-8 -*-

import wx
import subprocess
import time
import os.path
from wx.lib.pubsub import pub
from DownloadFile import *
from VlibrasCheckVersion import *
import zipfile
import Util



##PATH_RESOURCE = 'C:/vlibras-libs/update/'
##DICTIONARY_NAME = 'download/vlibras_dicionario.zip'
##INSTALL_PLAYER_NAME = 'download/Vlibras_Up.exe'
##DICTIONARY_EXTRACT_PATH = 'C:/vlibras-libs/Player/VLibrasPlayer_Data/Bundles'
##JSON_LOCAL_NAME = PATH_RESOURCE+'version/version.json'
##JSON_API_NAME = PATH_RESOURCE+'download/versionApi.json'

class UpdateView(wx.Frame):

    def __init__(self,_listUrlDictVersionFull):

        self.length_dict = 0;
        self.listDictVersionDictLength = Util.checkDictVersion()
        if self.listDictVersionDictLength == 2:
           self.length_dict =listDictVersionDictLength[1]
           
        self.listUrlDictVersionFull = _listUrlDictVersionFull
        
        style = wx.SYSTEM_MENU | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX
        wx.Frame.__init__(self, None, title='Atualização do VLibras', style=style,size=(480,250))
        self.SetIcon(wx.Icon("c:/vlibras-libs/icons/icon_vlibras.ico", wx.BITMAP_TYPE_ICO))
        self.myPanel = wx.Panel(self, -1)
        self.myPanel.SetBackgroundColour('#F5F5F5')
        btnCancel = wx.Button(self.myPanel, label="Cancelar",pos=(365, 180), size=(80, 25))
        self.myText = wx.StaticText(self.myPanel, -1, pos=(5,105))
        self.myText.SetForegroundColour('#000000')
        self.progress = wx.Gauge(self.myPanel, range=100,pos=(5,80),size=(463,25))
        self.Center() 
        
	# Anexa um evento ao botão
        self.Bind(wx.EVT_BUTTON, self.onBtnCancelClick, btnCancel)
        self.__close_callback = None
        self.Bind(wx.EVT_CLOSE, self._when_closed)

        #registra listeners na classe DownloadFile
        pub.subscribe(self.downloadSucess, "downloadSucess")
        pub.subscribe(self.erroDeConexao, "erroDeConexao")
        pub.subscribe(self.updateProgress, "updateProgress")
        self.percentDownload = 0;


        #inicia o download do arquivo
        self.downloadFile = DownloadFile2(listUrlDictVersionFull[0], Util.DICTIONARY_ZIP_PATH)
        self.downloadFile.start()
        self.myText.SetLabel('Baixando dicionário')

    def erroDeConexao(self, msg):
        wx.MessageBox('Ocorreu um erro ao tentar fazer atualização. \n Por favor tente mais tarde.', 'Informação',wx.OK | wx.ICON_INFORMATION)
        self.Destroy()
        
    def register_close_callback(self, callback):
        self.__close_callback = callback

    def _when_closed(self, event):
            self.OnCloseFrame(event);


    def onBtnCancelClick(self, event):
        self.OnCloseFrame(event);   
        
        
    def downloadSucess(self, msg):     
        self.percentDownload = 100.0
        time.sleep( 2 )
        
        with zipfile.ZipFile(Util.DICTIONARY_ZIP_PATH, "r") as z:
            z.extractall(Util.DICTIONARY_EXTRACT_PATH)
        if Util.checkDictSucess(self.lenght_dict):
            self.ShowMessage('Vlibras Atualizado com sucesso!') 
            Util.updateFileDictVersion(listUrlDictVersionFull[1])
        else:
            self.ShowMessageError('Houve um erro ao atualizar dicionário!')
        
        self.downloadFile.stop()
        self.Destroy()
        
           
    def updateProgress(self, msg):
        value = msg
        self.percentDownload = value
        self.progress.SetValue(value)

    def ShowMessage(self, mesagem):
        wx.MessageBox(mesagem, 'Informação',
                      wx.OK | wx.ICON_INFORMATION)
    def ShowMessageError(self, mesagem):
        wx.MessageBox(mesagem, 'Informação',
                      wx.OK | wx.ICON_ERROR)
        self.downloadFile.stop()
        self.Destroy()
            
            



    # monitora a interação do usuário no botão de fechar
    def OnCloseFrame(self, event):
        if(self.percentDownload>= 100):
            self.downloadFile.stop()
            self.Destroy()
        dialog = wx.MessageDialog(self, message = "Tem certeza que deseja cancelar a atualização?", caption = "Cancelar Atualização",
                                  style = wx.YES_NO | wx.ICON_QUESTION)
        response = dialog.ShowModal()

        if (response == wx.ID_YES):
            self.downloadFile.stop()
           
            self.Destroy()
        else:
            event.StopPropagation()
            


if __name__ == '__main__':
    
    listUrlDictVersionFull = Util.getUrlDict()
    if len(listUrlDictVersionFull)== 2:
        app = wx.App(False)
        frame = UpdateView(listUrlDictVersionFull)
        frame.register_close_callback(lambda: True)
        frame.Show()
        app.MainLoop()