vlibrasUpdate.cpp 4.49 KB

#include <Windows.h>
#include "util.h" 
#include "janelaAtualizacao.h"
#include <iostream>

using namespace std;
using namespace System::Threading;
using namespace System::Windows::Forms; 

void atualizarProgresbar(Object^ sender, DownloadProgressChangedEventArgs^ e){	
	
	JanelaAtualizacao::progressBar1->Value= e->ProgressPercentage;
	int kbr = e->BytesReceived/1024;
	int kbtotal = e->TotalBytesToReceive/1024;
	JanelaAtualizacao::lbInfDownload->Text = gcnew String(kbr+" kb  ("+kbr/1024+" MB) Baixado de  "+kbtotal+" kb ("+kbtotal/1024+" MB) | "+ e->ProgressPercentage+"%");
	

}


public ref class UpdateBack
{
	JanelaAtualizacao^ j;
	bool isSilence;
	String^ playerVersion;
	String^ dictionaryVersion;

public:
	UpdateBack(JanelaAtualizacao^ jan,bool __isSilence)
	{
		j = jan;
		isSilence = __isSilence;
	}
	void start()
	{	
		j->setInfoWhite("Estabelecendo conexão com o servidor...");
		//JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Marquee;
		
		
		if(Util::checkNet())
		{
				j->setInfoWhite("Verificando versão...");			
		
				vector<string> versions = Util::checkVersion(true);					
			if(versions.size()>2)
			{
				
				switch (versions.size())
				{
					case 3:
						if(versions[0]=="playerVersion")
						{								
							installPlayer(versions[2],versions[1]);
						}
						else if(versions[0]=="dictionaryVersion")
						{							
							installDicionario(versions[2],versions[1]);							
								
						}
						break;
					case 6:
						// if(versions[3]=="dictionaryVersion")
						// {
						// 	installDicionario(versions[5],versions[4]);
						// 	//Util::extractZip()							
						// }
						if(versions[0]=="playerVersion")
						{								
							installPlayer(versions[2],versions[1]);					
						}
						 
					break;
				}
				
			}
			else
			{
				JanelaAtualizacao::progressBar1->Visible = false;
				j->setInfoGreen("Você já está com a versão mais atualizada!");				
				j->EnableButton();
			}

		}else
		{
			JanelaAtualizacao::progressBar1->Visible = false;
			j->setInfoRed("Não foi possível estabelecer conexão com o servidor!");
			
		}
		
		if(isSilence)
			j->Close();	
		j->EnableButton();
		
	}

	void installDicionario(string url, string version)
	{		
		//JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Continuous;
		//JanelaAtualizacao::progressBar1->Value=0;
		Util::Download(gcnew DownloadProgressChangedEventHandler(atualizarProgresbar),url,"vlibrasDicionario.zip");
		j->setInfoWhite("Baixando nova versão do dicionário VLibras ");
		while(JanelaAtualizacao::progressBar1->Value<100);
			
		j->setInfoWhite("Extraindo arquivos...");

		//Sleep(3000);
		Util::extractZip("C:\\vlibras-libs\\update\\vlibrasDicionario.zip","C:\\vlibras-libs\\Player\\VLibrasPlayer_Data\\Bundles");
		JanelaAtualizacao::progressBar1->Visible = false;
		j->setInfoGreen("Atualização feita com sucesso!");
		Util::saveNewXmlVersion("",version);
		j->EnableButton();
	}

	void installPlayer(string url, string version)
	{
		//j->EnableButton();
		//JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Continuous;
		//JanelaAtualizacao::progressBar1->Value=0;
		Util::Download(gcnew DownloadProgressChangedEventHandler(atualizarProgresbar),url,"vlibrasInstaller.exe");
		j->setInfoWhite("Baixando nova versão do Vlibras...");
		while(JanelaAtualizacao::progressBar1->Value<100);
			
		

		String^ installer = gcnew String("C:\\vlibras-libs\\update\\");
		installer+="vlibrasInstaller.exe";
		//Process::Start(installer);
		System::Diagnostics::Process^ vlibrasinstall = gcnew System::Diagnostics::Process();
		vlibrasinstall->StartInfo->FileName = installer;
		vlibrasinstall->StartInfo->Arguments = " /SILENT /SUPPRESSMSGBOXES /NORESTART ";
		vlibrasinstall->Start();
		Util::saveNewXmlVersion(version,""); 
		j->Close();
		
	}
};

[STAThread]
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
	UpdateBack^ updateBack;
	 JanelaAtualizacao^ updateView = gcnew JanelaAtualizacao(); 

	if(__argv[1] != NULL)
	{
		char* silen = "silence";
		if(*__argv[1] == *silen)
			updateBack = gcnew UpdateBack(updateView,true);
		else
			updateBack = gcnew UpdateBack(updateView,false);
	}		
	else
		updateBack = gcnew UpdateBack(updateView,false);

	Application::EnableVisualStyles();
    	
	//Thread^ t2 = gcnew Thread(gcnew ThreadStart(updateView, &JanelaAtualizacao::start));
	//t2->Start();

	Thread^ t3 = gcnew Thread(gcnew ThreadStart(updateBack, &UpdateBack::start));
	 t3->Start();


	 updateView->ShowDialog();
	 t3->Abort();

	//Application::Run(updateView);
	
	return 0;
 }