Commit 95e4b2e649cc7ccbd3293621c3f2f024259ac760
1 parent
78850984
Exists in
master
Adciona vlibras update e faz modificações
Showing
17 changed files
with
1268 additions
and
24 deletions
Show diff stats
Makefile
1 | 1 | ############################## MAKEFILE VLIBRAS ############################ |
2 | 2 | # # |
3 | 3 | # Bruno Santos # |
4 | -# brunosantos@lavid.ufpb.br # | |
4 | +# brunosantos@lavid.ufpb.br # | |
5 | +# Ezequiel Silva # | |
6 | +# ezequielsilva@lavid.ufpb.br # | |
5 | 7 | # # |
6 | 8 | ############################################################################ |
7 | 9 | |
8 | 10 | # Includes |
9 | -CFLAGS = -I C:\Python27\include -I include | |
11 | +CFLAGS = -I C:\Python27\include -I include -I "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" | |
10 | 12 | |
11 | 13 | # Link com as libs utilizadas |
12 | 14 | LFLAGS = -link C:\Python27\libs\python27.lib |
... | ... | @@ -17,11 +19,14 @@ CC = cl |
17 | 19 | # Nome do arquivo de saída |
18 | 20 | OUT = testLibras |
19 | 21 | |
22 | + | |
23 | + | |
24 | + | |
20 | 25 | # Arquivos de implementação |
21 | -FILES = src\pyTradutor.cpp src\pyClip.cpp | |
26 | +FILES = src\pyTradutor.cpp src\pyClip.cpp src\util.cpp | |
22 | 27 | |
23 | 28 | #Headers |
24 | -INCLUDES = include\pyTradutor.h include\pyClip.h | |
29 | +INCLUDES = include\pyTradutor.h include\pyClip.h include\util.h | |
25 | 30 | |
26 | 31 | CLEAN_OBJ = del -q *.obj |
27 | 32 | |
... | ... | @@ -29,13 +34,13 @@ HOME = %homepath% |
29 | 34 | |
30 | 35 | #Gera executável testLibras |
31 | 36 | all: $(FILES) $(INCLUDES) src\testLibras.cpp |
32 | - $(CC) -Fe$(OUT) -EHsc src\testLibras.cpp $(FILES) $(CFLAGS) $(LFLAGS) | |
37 | + $(CC) -Fe$(OUT) -clr src\testLibras.cpp $(FILES) $(CFLAGS) $(LFLAGS) | |
33 | 38 | $(CLEAN_OBJ) |
34 | 39 | |
35 | 40 | #Gera dll na arquitetura x86 |
36 | 41 | plugin-x86: $(FILES) $(INCLUDES) |
37 | 42 | IF NOT EXIST plugin\Plugin-x86 mkdir plugin\Plugin-x86 |
38 | - $(CC) -Feplugin\Plugin-x86\CorePlugin -EHsc -LD plugin\corePlugin.cpp $(FILES) -I plugin\corePlugin.h $(CFLAGS) $(LFLAGS) | |
43 | + $(CC) -Feplugin\Plugin-x86\CorePlugin -LD plugin\corePlugin.cpp $(FILES) -I plugin\corePlugin.h -clr $(CFLAGS) $(LFLAGS) | |
39 | 44 | $(CLEAN_OBJ) |
40 | 45 | |
41 | 46 | #Gera dll na arquitetura x64 | ... | ... |
icon/icon_vlibras.ico
No preview for this file type
... | ... | @@ -0,0 +1,51 @@ |
1 | +#using <System.dll> | |
2 | +#using <System.Xml.dll> | |
3 | +#using <System.IO.Compression.FileSystem.dll> | |
4 | + | |
5 | +#include <iostream> | |
6 | +#include <string> | |
7 | +#include <vector> | |
8 | + | |
9 | + | |
10 | +using namespace std; | |
11 | +using namespace System; | |
12 | +using namespace System::ComponentModel; | |
13 | +using namespace System::Net; | |
14 | +using namespace System::IO; | |
15 | +using namespace System::Xml; | |
16 | +using namespace System::Threading; | |
17 | +using namespace System::IO::Compression; | |
18 | + | |
19 | + | |
20 | + | |
21 | + | |
22 | + | |
23 | + | |
24 | + | |
25 | + public ref class Util { | |
26 | + | |
27 | + private: | |
28 | + static string clrStringTostring(String^ strIn); | |
29 | + static vector <string> localVersion(void); | |
30 | + | |
31 | + public: | |
32 | + static bool down; | |
33 | + static WebClient^ myWebClient; | |
34 | + | |
35 | + Util(); | |
36 | + | |
37 | + bool downloading; | |
38 | + static bool saveNewXmlVersion(string playerVersion,string dictionaryVersion); | |
39 | + static string Download(DownloadProgressChangedEventHandler^ dpch ,string url, string fileName); | |
40 | + static bool checkNet(void); | |
41 | + static vector <string> checkVersion(bool atualize); | |
42 | + static bool extractZip(string zipFile, string outPath); | |
43 | + static bool backup(void); | |
44 | + static bool restore(void); | |
45 | + | |
46 | + }; | |
47 | + | |
48 | + | |
49 | + | |
50 | + | |
51 | + | ... | ... |
install/inno setup/user_install.iss
1 | 1 | ;################### INSTALADOR VLIBRAS WINDOWS ###################### |
2 | 2 | ;# Bruno Santos # |
3 | -;# brunosantos@lavid.ufpb.br # | |
3 | +;# brunosantos@lavid.ufpb.br # | |
4 | +;# Ezequiel Silva # | |
5 | +;# ezequielsilva@lavid.ufpb.br # | |
4 | 6 | ;##################################################################### |
5 | 7 | |
6 | 8 | #define MyAppName "VLibras" |
7 | 9 | #define MyAppVersion "beta" |
8 | 10 | #define MyAppPublisher "LAViD" |
9 | 11 | #define MyAppURL "http://vlibrasplayer.lavid.ufpb.br" |
10 | -#define MyAppExeName "Playerx86.exe" | |
12 | +#define MyAppExeName "VlibrasPlayer.exe" | |
13 | + | |
14 | + | |
11 | 15 | |
12 | 16 | [Setup] |
13 | 17 | AppId={{9AA2CD86-F136-47FA-9EFE-474057F0C45F} |
... | ... | @@ -20,14 +24,16 @@ AppUpdatesURL={#MyAppURL} |
20 | 24 | DefaultDirName={sd}\vlibras-libs |
21 | 25 | DisableDirPage=yes |
22 | 26 | DefaultGroupName={#MyAppName} |
27 | +OutputBaseFilename=vlibras_desktop_win_2.0.0 | |
23 | 28 | DisableProgramGroupPage=yes |
24 | -OutputDir="C:\Users\bruno\Desktop\output" | |
25 | -OutputBaseFilename=VLibras Installer | |
26 | -SetupIconFile="C:\Users\bruno\Desktop\user_install\icons\icon_vlibras.ico" | |
29 | +OutputDir="C:\Users\ezequiel\Desktop\vlibras_desktop_win_2.0.0" | |
30 | +SetupIconFile="C:\Users\ezequiel\Desktop\user_install\icons\icon_vlibras.ico" | |
27 | 31 | Compression=lzma |
28 | 32 | SolidCompression=yes |
29 | -WizardImageFile = "C:\Users\bruno\Desktop\user_install\icons\avatar.bmp" | |
30 | -WizardSmallImageFile = "C:\Users\bruno\Desktop\user_install\icons\small2.bmp" | |
33 | +WizardImageFile = "C:\Users\ezequiel\Desktop\user_install\icons\avatar.bmp" | |
34 | +WizardSmallImageFile = "C:\Users\ezequiel\Desktop\user_install\icons\player.bmp" | |
35 | + | |
36 | + | |
31 | 37 | |
32 | 38 | [Languages] |
33 | 39 | Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" |
... | ... | @@ -37,7 +43,12 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{ |
37 | 43 | Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0,6.1 |
38 | 44 | |
39 | 45 | [Files] |
40 | -Source: "C:\Users\bruno\Desktop\user_install\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | |
46 | +Source: "C:\Users\ezequiel\Desktop\vc_redist.x86.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall; | |
47 | +Source: "C:\Users\ezequiel\Desktop\dotNetFx40_Client_x86.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall; | |
48 | +Source: "C:\Users\ezequiel\Desktop\user_install\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | |
49 | + | |
50 | + | |
51 | + | |
41 | 52 | |
42 | 53 | [Icons] |
43 | 54 | Name: "{group}\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; IconFilename: "{app}\icons\icon_vlibras.ico" |
... | ... | @@ -47,5 +58,14 @@ Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; |
47 | 58 | Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; Tasks: quicklaunchicon; IconFilename: "{app}\icons\icon_vlibras.ico" |
48 | 59 | |
49 | 60 | [Run] |
50 | -Filename: {sd}\vlibras-libs\required\user_install.bat; Flags: runhidden | |
61 | +Filename: {tmp}\dotNetFx40_Client_x86.exe; Flags: runhidden; Parameters: /q /norestart; StatusMsg: Instalando .NET Framework 4.5 | |
62 | +Filename: {tmp}\vc_redist.x86.exe; Flags: runhidden; Parameters: /q /norestart; StatusMsg: Instalando Visual C++ ... | |
63 | +Filename: {sd}\vlibras-libs\required\user_install.bat; Flags: runhidden; StatusMsg: Instalando dependências... | |
64 | +Filename: {sd}\vlibras-libs\update\vlibras-up.exe; Parameters: silence; StatusMsg: Instalando atualização... | |
65 | + | |
66 | + | |
67 | + | |
68 | + | |
69 | + | |
70 | + | |
51 | 71 | ... | ... |
... | ... | @@ -0,0 +1,51 @@ |
1 | +;################### INSTALADOR VLIBRAS WINDOWS ###################### | |
2 | +;# Bruno Santos # | |
3 | +;# brunosantos@lavid.ufpb.br # | |
4 | +;##################################################################### | |
5 | + | |
6 | +#define MyAppName "VLibras" | |
7 | +#define MyAppVersion "beta" | |
8 | +#define MyAppPublisher "LAViD" | |
9 | +#define MyAppURL "http://vlibrasplayer.lavid.ufpb.br" | |
10 | +#define MyAppExeName "Playerx86.exe" | |
11 | + | |
12 | +[Setup] | |
13 | +AppId={{84B73167-EF7F-42BB-9CCD-E1A8E2C53659} | |
14 | +AppName={#MyAppName} | |
15 | +AppVersion={#MyAppVersion} | |
16 | +AppPublisher={#MyAppPublisher} | |
17 | +AppPublisherURL={#MyAppURL} | |
18 | +AppSupportURL={#MyAppURL} | |
19 | +AppUpdatesURL={#MyAppURL} | |
20 | +DefaultDirName={pf}\vlibras-libs | |
21 | +DisableDirPage=yes | |
22 | +DefaultGroupName={#MyAppName} | |
23 | +DisableProgramGroupPage=yes | |
24 | +OutputDir="C:\Users\ezequiel\Desktop\output" | |
25 | +OutputBaseFilename=VLibras Installer | |
26 | +SetupIconFile="C:\Users\ezequiel\vlibras-libs\icons\icon_vlibras.ico" | |
27 | +Compression=lzma | |
28 | +SolidCompression=yes | |
29 | +WizardImageFile = "C:\Users\ezequiel\vlibras-libs\icons\avatar.bmp" | |
30 | +WizardSmallImageFile = "C:\Users\ezequiel\vlibras-libs\icons\small2.bmp" | |
31 | + | |
32 | +[Languages] | |
33 | +Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" | |
34 | + | |
35 | +[Tasks] | |
36 | +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" | |
37 | +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0,6.1 | |
38 | + | |
39 | +[Files] | |
40 | +Source: "C:\vlibras-libs\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | |
41 | + | |
42 | +[Icons] | |
43 | +Name: "{group}\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; IconFilename: "{app}\icons\icon_vlibras.ico" | |
44 | +Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" | |
45 | +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" | |
46 | +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; Tasks: desktopicon; IconFilename: "{app}\icons\icon_vlibras.ico" | |
47 | +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\Player\{#MyAppExeName}"; Tasks: quicklaunchicon; IconFilename: "{app}\icons\icon_vlibras.ico" | |
48 | + | |
49 | +[Run] | |
50 | +Filename: {app}\vlibras-libs\required\user_install.bat; Flags: runhidden | |
51 | + | ... | ... |
plugin/corePlugin.cpp
... | ... | @@ -5,18 +5,27 @@ |
5 | 5 | #define EXPORT_API __declspec(dllimport) |
6 | 6 | #endif |
7 | 7 | |
8 | + | |
8 | 9 | #include "corePlugin.h" |
9 | 10 | |
11 | + | |
12 | + | |
10 | 13 | extern "C" |
11 | 14 | { |
15 | + | |
16 | + | |
17 | + | |
18 | + | |
19 | + | |
12 | 20 | EXPORT_API int coreInitialize() |
13 | 21 | { |
14 | 22 | //Objeto usado para traduzir |
15 | 23 | tradutor = new PyTradutor(); |
24 | + check =0; | |
16 | 25 | |
17 | 26 | //Objeto usado para copiar texto da área de transferência |
18 | 27 | clipboard.bdragOn(); |
19 | - | |
28 | + | |
20 | 29 | return 1; |
21 | 30 | } |
22 | 31 | |
... | ... | @@ -24,11 +33,58 @@ |
24 | 33 | { |
25 | 34 | //Copia área de transferência para input |
26 | 35 | char *input = clipboard.clip(); |
27 | - | |
36 | + | |
28 | 37 | //Retorna a tradução do texto para glosa |
29 | 38 | return tradutor->convertStringToGlosa(input); |
30 | 39 | } |
31 | 40 | |
41 | + | |
42 | + EXPORT_API int coreUpdateInstall_player() | |
43 | + { | |
44 | + System::Diagnostics::Process::Start("C:\\vlibras-libs\\update\\vlibras-up.exe"); | |
45 | + return 1; | |
46 | + } | |
47 | + | |
48 | + | |
49 | + EXPORT_API int coreUpdateInstall_dict() | |
50 | + { | |
51 | + System::Diagnostics::Process::Start("C:\\vlibras-libs\\update\\vlibras-up.exe"); | |
52 | + return 1; | |
53 | + } | |
54 | + | |
55 | + | |
56 | + | |
57 | + EXPORT_API int coreUpdateCheck() | |
58 | + { | |
59 | + | |
60 | + | |
61 | + vector<string> updates = Util::checkVersion(false); | |
62 | + if(updates.size()>2) | |
63 | + { | |
64 | + | |
65 | + switch (updates.size()) | |
66 | + { | |
67 | + case 3: | |
68 | + if(updates[0]=="playerVersion") | |
69 | + { | |
70 | + return 1; | |
71 | + } | |
72 | + else if(updates[0]=="dictionaryVersion") | |
73 | + { | |
74 | + return 2; | |
75 | + } | |
76 | + break; | |
77 | + case 6: | |
78 | + return 1; | |
79 | + | |
80 | + break; | |
81 | + } | |
82 | + | |
83 | + } else if(updates.size()==1) | |
84 | + return -1; | |
85 | + return 0; | |
86 | + } | |
87 | + | |
32 | 88 | EXPORT_API int coreFinalize() |
33 | 89 | { |
34 | 90 | clipboard.bdragOff(); | ... | ... |
plugin/corePlugin.h
... | ... | @@ -16,10 +16,11 @@ VLibras-Core |
16 | 16 | #ifndef _COREPLUGIN_H |
17 | 17 | #define _COREPLUGIN_H |
18 | 18 | |
19 | -#include <iostream> | |
19 | + | |
20 | 20 | #include "pyClip.h" |
21 | 21 | #include "pyTradutor.h" |
22 | 22 | #include <string.h> |
23 | +#include "Util.h" | |
23 | 24 | |
24 | 25 | using namespace std; |
25 | 26 | |
... | ... | @@ -27,18 +28,28 @@ extern "C" |
27 | 28 | { |
28 | 29 | //Usado para traduzir português para glosa |
29 | 30 | PyTradutor *tradutor; |
30 | - | |
31 | + int check; | |
31 | 32 | //Usado para copiar texto da área de transferência |
32 | 33 | PyClip clipboard; |
34 | + | |
33 | 35 | |
34 | 36 | //Inicializa Objetos |
35 | 37 | EXPORT_API int coreInitize(void); |
36 | 38 | |
37 | 39 | //Faz tradução de Português para glosa |
38 | 40 | EXPORT_API char* coreExecute(void); |
39 | - | |
41 | + | |
42 | + //faz atualização player | |
43 | + EXPORT_API int coreUpdateInstall_player(void); | |
44 | + | |
45 | + //faz atualização dicionário | |
46 | + EXPORT_API int coreUpdateInstall_dict(void); | |
47 | + //check atualização | |
48 | + EXPORT_API int coreUpdateCheck(void); | |
40 | 49 | //Libera Objetos utilizados |
41 | 50 | EXPORT_API int coreFinalize(void); |
51 | + | |
52 | + | |
42 | 53 | } |
43 | 54 | |
44 | 55 | #endif |
45 | 56 | \ No newline at end of file | ... | ... |
plugin/testPlugin.cpp
... | ... | @@ -12,6 +12,8 @@ metodo2 execute; |
12 | 12 | |
13 | 13 | typedef int (WINAPI*metodo3)(); |
14 | 14 | metodo3 finalize; |
15 | +typedef int (WINAPI*metodo4)(); | |
16 | +metodo4 update; | |
15 | 17 | |
16 | 18 | int main(int argc, char *argv[]) |
17 | 19 | { |
... | ... | @@ -27,19 +29,30 @@ int main(int argc, char *argv[]) |
27 | 29 | initialize=(metodo1)GetProcAddress((HMODULE)hDLL, "coreInitialize"); |
28 | 30 | execute=(metodo2)GetProcAddress((HMODULE)hDLL, "coreExecute"); |
29 | 31 | finalize=(metodo3)GetProcAddress((HMODULE)hDLL, "coreFinalize"); |
32 | + update=(metodo4)GetProcAddress((HMODULE)hDLL, "coreUpdate"); | |
30 | 33 | |
31 | 34 | //Executa coreInitialize |
32 | 35 | int init = initialize(); |
33 | 36 | cout <<"return initialize: " << init <<endl; |
37 | + | |
38 | + int in = update(); | |
39 | + cout <<"return update: " << in <<endl; | |
40 | + | |
41 | + //in = update(); | |
42 | + //cout <<"return update2: " << in <<endl; | |
43 | + | |
44 | + //in=0; | |
45 | + //in = update(); | |
46 | + //cout <<"return update3: " << in <<endl; | |
34 | 47 | |
35 | 48 | //Executa coreExecute |
36 | - char* exec = execute(); | |
37 | - cout << "return execute: " << exec <<endl; | |
38 | - | |
49 | + //char* exec = execute(); | |
50 | + //cout << "return execute: " << exec <<endl; | |
51 | +while(1); | |
39 | 52 | //Executa coreFinalize |
40 | 53 | int final = finalize(); |
41 | 54 | cout << "return finalize: " << final <<endl; |
42 | - | |
55 | + | |
43 | 56 | //Libera dll |
44 | 57 | FreeLibrary((HMODULE)hDLL); |
45 | 58 | ... | ... |
... | ... | @@ -0,0 +1,287 @@ |
1 | +#include <windows.h> | |
2 | +#include "util.h" | |
3 | + | |
4 | + | |
5 | + | |
6 | +Util::Util(){ | |
7 | + //downloading = true; | |
8 | + //downloading = down; | |
9 | +} | |
10 | + | |
11 | +string Util::clrStringTostring(String^ strIn) | |
12 | +{ | |
13 | + | |
14 | + char cStr[256]; | |
15 | + | |
16 | + | |
17 | + sprintf(cStr, "%s", strIn); | |
18 | + string stlString(cStr); | |
19 | + | |
20 | + return stlString; | |
21 | +} | |
22 | + | |
23 | + void DownloadProgressCallback(Object^ sender, | |
24 | + DownloadProgressChangedEventArgs^ e) | |
25 | + { | |
26 | + // Displays the operation identifier, and the transfer progress. | |
27 | + Console::WriteLine("{0} downloaded {1} of {2} bytes. {3} % complete...", | |
28 | + (String ^)e->UserState, | |
29 | + e->BytesReceived, | |
30 | + e->TotalBytesToReceive, | |
31 | + e->ProgressPercentage); | |
32 | + } | |
33 | + | |
34 | + void DownloadFileCallBack2(Object^ sender, AsyncCompletedEventArgs^ args) | |
35 | + { | |
36 | + cout<<"Terminou de baixar"<< endl; | |
37 | + | |
38 | + } | |
39 | + | |
40 | + | |
41 | +bool Util::checkNet() | |
42 | +{ | |
43 | + | |
44 | + try | |
45 | + { | |
46 | + | |
47 | + WebRequest^ request = WebRequest::Create( "http://vlibras.lavid.ufpb.br" ); | |
48 | + | |
49 | + // If required by the server, set the credentials. | |
50 | + //request->Credentials = CredentialCache::DefaultCredentials; | |
51 | + | |
52 | + // Get the response. | |
53 | + HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse()); | |
54 | + | |
55 | + if (response->StatusDescription == "OK"){ | |
56 | + | |
57 | + return true; | |
58 | + } | |
59 | + return false; | |
60 | + response->Close(); | |
61 | + } | |
62 | + catch ( WebException^ e ) | |
63 | + { | |
64 | + return false; | |
65 | + } | |
66 | + | |
67 | +} | |
68 | + | |
69 | + | |
70 | +vector<string> Util::checkVersion(bool atualize) | |
71 | +{ | |
72 | + XmlDocument^ xmlDoc; | |
73 | + XmlNodeList^ files; | |
74 | + XmlDocument^ xmlDocLocal; | |
75 | + XmlNodeList^ filesLocal; | |
76 | + vector<string> updates; | |
77 | + vector<string> localversion = localVersion(); | |
78 | + try | |
79 | + { | |
80 | + xmlDoc = (gcnew XmlDocument()); | |
81 | + xmlDocLocal = (gcnew XmlDocument()); | |
82 | + | |
83 | + | |
84 | + string url = "http://vlibras.lavid.ufpb.br/api/dicionario/"+localversion[3]+"?type=windows"; | |
85 | + WebRequest^ request = WebRequest::Create( gcnew String(url.c_str())); | |
86 | + // If required by the server, set the credentials. | |
87 | + request->Credentials = CredentialCache::DefaultCredentials; | |
88 | + // Get the response. | |
89 | + HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse()); | |
90 | + if (!(response->StatusDescription == "OK")) | |
91 | + goto erro; | |
92 | + // Get the stream containing content returned by the server. | |
93 | + Stream^ dataStream = response->GetResponseStream(); | |
94 | + // Open the stream using a StreamReader for easy access. | |
95 | + StreamReader^ reader = gcnew StreamReader( dataStream ); | |
96 | + // Read the content. | |
97 | + String^ responseFromServer = reader->ReadToEnd(); | |
98 | + xmlDoc->LoadXml(responseFromServer); | |
99 | + files = xmlDoc->GetElementsByTagName("version"); | |
100 | + | |
101 | + long numitems = files->Count; | |
102 | + | |
103 | + | |
104 | + | |
105 | + //for (int i=0;i<numitems;i++) | |
106 | + if(numitems>0) | |
107 | + { | |
108 | + String^ playerVersion = files[0]["playerVersion"]->InnerText; | |
109 | + String^ dictionaryVersion = files[0]["dictionaryVersion"]->InnerText; | |
110 | + | |
111 | + if(String::Compare( playerVersion, gcnew String(localversion[1].c_str()))) | |
112 | + { | |
113 | + updates.push_back("playerVersion"); | |
114 | + updates.push_back(clrStringTostring(playerVersion)); | |
115 | + updates.push_back(clrStringTostring(files[0]["playerUrl"]->InnerText)); | |
116 | + } | |
117 | + if(String::Compare(dictionaryVersion,gcnew String(localversion[3].c_str()))) | |
118 | + { | |
119 | + updates.push_back("dictionaryVersion"); | |
120 | + updates.push_back(clrStringTostring(dictionaryVersion)); | |
121 | + updates.push_back(clrStringTostring(files[0]["dictionaryUrl"]->InnerText)); | |
122 | + } | |
123 | + | |
124 | + //if(atualize) | |
125 | + //saveNewXmlVersion(playerVersion,dictionaryVersion); | |
126 | + | |
127 | + } | |
128 | + | |
129 | + erro: | |
130 | + // Cleanup the streams and the response. | |
131 | + reader->Close(); | |
132 | + dataStream->Close(); | |
133 | + }catch(Exception^ e) | |
134 | + { | |
135 | + updates.push_back("faill"); | |
136 | + return updates; | |
137 | + } | |
138 | + | |
139 | + return updates; | |
140 | +} | |
141 | + | |
142 | + | |
143 | +vector<string> Util::localVersion() | |
144 | +{ | |
145 | + XmlDocument^ xmlDocLocal; | |
146 | + XmlNodeList^ filesLocal; | |
147 | + vector<string> updates; | |
148 | + try | |
149 | + { | |
150 | + xmlDocLocal = (gcnew XmlDocument()); | |
151 | + //xml version local | |
152 | + StreamReader^ readerLocal = gcnew StreamReader("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
153 | + | |
154 | + String^ responseLocal = readerLocal->ReadToEnd(); | |
155 | + | |
156 | + xmlDocLocal->LoadXml(responseLocal); | |
157 | + | |
158 | + filesLocal = xmlDocLocal->GetElementsByTagName("version"); | |
159 | + | |
160 | + updates.push_back("playerVersion"); | |
161 | + String^ playerVersion = filesLocal[0]["playerVersion"]->InnerText; | |
162 | + updates.push_back(clrStringTostring(playerVersion)); | |
163 | + updates.push_back("dictionaryVersion"); | |
164 | + String^ dictionaryVersion = filesLocal[0]["dictionaryVersion"]->InnerText; | |
165 | + updates.push_back(clrStringTostring(dictionaryVersion)); | |
166 | + | |
167 | + // Cleanup the streams and the response. | |
168 | + readerLocal->Close(); | |
169 | + }catch(Exception^ e) | |
170 | + { | |
171 | + return updates; | |
172 | + } | |
173 | + | |
174 | + return updates; | |
175 | +} | |
176 | + | |
177 | + | |
178 | +string Util::Download(DownloadProgressChangedEventHandler^ dpch ,string url, string fileName) | |
179 | +{ | |
180 | + try | |
181 | + { | |
182 | + myWebClient = gcnew WebClient(); | |
183 | + Uri^ uri = gcnew Uri(gcnew String(url.c_str())); | |
184 | + myWebClient->DownloadProgressChanged += dpch; | |
185 | + myWebClient->DownloadFileCompleted += gcnew AsyncCompletedEventHandler( DownloadFileCallBack2 ); | |
186 | + String^ outPath = gcnew String(("c:\\vlibras-libs\\update\\"+fileName).c_str()); | |
187 | + myWebClient->DownloadFileAsync(uri, outPath); | |
188 | + }catch (Exception^ e) | |
189 | + { | |
190 | + return "FALHA"; | |
191 | + } | |
192 | + | |
193 | + return "OK"; | |
194 | + } | |
195 | + | |
196 | + | |
197 | + | |
198 | + bool Util::saveNewXmlVersion(string playerVersion,string dictionaryVersion) | |
199 | + { | |
200 | + | |
201 | + XmlDocument^ xmlDocLocal; | |
202 | + XmlNodeList^ filesLocal; | |
203 | + vector<string> updates; | |
204 | + try | |
205 | + { | |
206 | + xmlDocLocal = (gcnew XmlDocument()); | |
207 | + //xml version local | |
208 | + StreamReader^ readerLocal = gcnew StreamReader("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
209 | + | |
210 | + String^ responseLocal = readerLocal->ReadToEnd(); | |
211 | + | |
212 | + xmlDocLocal->LoadXml(responseLocal); | |
213 | + | |
214 | + filesLocal = xmlDocLocal->GetElementsByTagName("version"); | |
215 | + | |
216 | + if(!playerVersion.empty()) | |
217 | + filesLocal[0]["playerVersion"]->InnerText = gcnew String(playerVersion.c_str()); | |
218 | + | |
219 | + if(!dictionaryVersion.empty()) | |
220 | + filesLocal[0]["dictionaryVersion"]->InnerText = gcnew String(dictionaryVersion.c_str()); | |
221 | + | |
222 | + | |
223 | + // Cleanup the streams and the response. | |
224 | + readerLocal->Close(); | |
225 | + | |
226 | + xmlDocLocal->Save("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
227 | + }catch(Exception^ e) | |
228 | + { | |
229 | + | |
230 | + } | |
231 | + | |
232 | + return true; | |
233 | + } | |
234 | + | |
235 | + | |
236 | + bool Util::extractZip(string zipFile, string outPath) | |
237 | + { | |
238 | + try | |
239 | + { | |
240 | + String^ zipPath = gcnew String(zipFile.c_str()); | |
241 | + String^ extractPath = gcnew String(outPath.c_str()); | |
242 | + ZipFile::ExtractToDirectory(zipPath, extractPath); | |
243 | + | |
244 | + }catch(Exception^ e) | |
245 | + { | |
246 | + return false; | |
247 | + } | |
248 | + | |
249 | + return true; | |
250 | + } | |
251 | + | |
252 | +bool Util::backup() | |
253 | +{ | |
254 | + CHAR nome_atual[] = "c:\\vlibras-libs"; | |
255 | + // novo nome do diretório | |
256 | + CHAR nome_novo[] = "c:\\vlibras-libs-BK"; | |
257 | + | |
258 | + // renomear o diretório | |
259 | + if(MoveFile(nome_atual, nome_novo)){ | |
260 | + | |
261 | + } | |
262 | + else{ | |
263 | + return false; | |
264 | + } | |
265 | + return true; | |
266 | +} | |
267 | +bool Util::restore() | |
268 | +{ | |
269 | + CHAR nome_atual[] = "c:\\vlibras-libs-BK"; | |
270 | + // novo nome do diretório | |
271 | + CHAR nome_novo[] = "c:\\vlibras-libs"; | |
272 | + | |
273 | + // renomear o diretório | |
274 | + if(MoveFile(nome_atual, nome_novo)){ | |
275 | + return true; | |
276 | + } | |
277 | + else{ | |
278 | + return false; | |
279 | + //GetLastError() << endl; | |
280 | + } | |
281 | + return true; | |
282 | +} | |
283 | + | |
284 | + | |
285 | + | |
286 | + | |
287 | + | |
0 | 288 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,45 @@ |
1 | +############################## MAKEFILE VLIBRAS ############################ | |
2 | +# # | |
3 | +# Bruno Santos # | |
4 | +# brunosantos@lavid.ufpb.br # | |
5 | +# Ezequiel Silva # | |
6 | +# ezequielsilva@lavid.ufpb.br # # | |
7 | +# # | |
8 | +############################################################################ | |
9 | + | |
10 | +# Includes | |
11 | +CFLAGS = -I include | |
12 | + | |
13 | +# Link com as libs utilizadas | |
14 | +#LFLAGS = -link C:\Python27\libs\python27.lib | |
15 | + | |
16 | +# Compilador Nativo | |
17 | +CC = cl | |
18 | + | |
19 | +# Nome do arquivo de saída | |
20 | +OUT = vlibras-up | |
21 | + | |
22 | +# Arquivos de implementação | |
23 | +FILES = src\util.cpp src\janelaAtualizacao.cpp | |
24 | + | |
25 | +#Headers | |
26 | +INCLUDES = include\util.h include\janelaAtualizacao.h | |
27 | + | |
28 | +CLEAN_OBJ = del -q *.obj | |
29 | + | |
30 | +HOME = %homepath% | |
31 | + | |
32 | +#Gera executável testLibras | |
33 | +all: $(FILES) $(INCLUDES) | |
34 | + $(CC) -Fe$(OUT) -clr vlibrasUpdate.cpp $(FILES) $(CFLAGS) | |
35 | + $(CLEAN_OBJ) | |
36 | + | |
37 | + | |
38 | + | |
39 | + | |
40 | +#Limpa arquivos objetos e executáveis criados | |
41 | +clean: | |
42 | + del -q *.exe *.obj | |
43 | + rm -rf doc | |
44 | + | |
45 | + | ... | ... |
... | ... | @@ -0,0 +1,44 @@ |
1 | +#include <string> | |
2 | + | |
3 | +#using <System.dll> | |
4 | +#using <System.Windows.Forms.dll> | |
5 | +#using <System.Drawing.dll> | |
6 | + | |
7 | + | |
8 | +using namespace System::Windows::Forms; | |
9 | +using namespace System; | |
10 | +using namespace System::Drawing; | |
11 | +using namespace System::ComponentModel; | |
12 | +using namespace std; | |
13 | + | |
14 | +public ref class JanelaAtualizacao : public Form | |
15 | +{ | |
16 | + private: | |
17 | + | |
18 | + bool downloading; | |
19 | + RichTextBox^ richTextBox1; | |
20 | + Label^ lbInformacao; | |
21 | + Label^ topo; | |
22 | + int vez=0; | |
23 | + Bitmap^ animatedImage; | |
24 | + String^ informacao; | |
25 | + void btOKevent(Object^ sender, EventArgs^ e); | |
26 | + void XFormClosing(Object^ sender, FormClosingEventArgs^ e); | |
27 | + | |
28 | + public: | |
29 | + static ProgressBar^ progressBar1; | |
30 | + static Label^ lbInfDownload; | |
31 | + Button^ btOK; | |
32 | + JanelaAtualizacao(); | |
33 | + | |
34 | + void initializeComponent(); | |
35 | + void setInfoWhite(String^ info); | |
36 | + void setInfoGreen(String^ info); | |
37 | + void setInfoRed(String^ info); | |
38 | + void start(); | |
39 | + void EnableButton(); | |
40 | + | |
41 | + | |
42 | + | |
43 | +}; | |
44 | + | ... | ... |
... | ... | @@ -0,0 +1,51 @@ |
1 | +#using <System.dll> | |
2 | +#using <System.Xml.dll> | |
3 | +#using <System.IO.Compression.FileSystem.dll> | |
4 | + | |
5 | +#include <iostream> | |
6 | +#include <string> | |
7 | +#include <vector> | |
8 | + | |
9 | + | |
10 | +using namespace std; | |
11 | +using namespace System; | |
12 | +using namespace System::ComponentModel; | |
13 | +using namespace System::Net; | |
14 | +using namespace System::IO; | |
15 | +using namespace System::Xml; | |
16 | +using namespace System::Threading; | |
17 | +using namespace System::IO::Compression; | |
18 | + | |
19 | + | |
20 | + | |
21 | + | |
22 | + | |
23 | + | |
24 | + | |
25 | + public ref class Util { | |
26 | + | |
27 | + private: | |
28 | + static string clrStringTostring(String^ strIn); | |
29 | + static vector <string> localVersion(void); | |
30 | + | |
31 | + public: | |
32 | + static bool down; | |
33 | + static WebClient^ myWebClient; | |
34 | + | |
35 | + Util(); | |
36 | + | |
37 | + bool downloading; | |
38 | + static bool saveNewXmlVersion(string playerVersion,string dictionaryVersion); | |
39 | + static string Download(DownloadProgressChangedEventHandler^ dpch ,string url, string fileName); | |
40 | + static bool checkNet(void); | |
41 | + static vector <string> checkVersion(bool atualize); | |
42 | + static bool extractZip(string zipFile, string outPath); | |
43 | + static bool backup(void); | |
44 | + static bool restore(void); | |
45 | + | |
46 | + }; | |
47 | + | |
48 | + | |
49 | + | |
50 | + | |
51 | + | ... | ... |
... | ... | @@ -0,0 +1,151 @@ |
1 | +#include "janelaAtualizacao.h" | |
2 | +#include "Util.h" | |
3 | + | |
4 | + | |
5 | +JanelaAtualizacao::JanelaAtualizacao() | |
6 | +{ | |
7 | + initializeComponent(); | |
8 | +} | |
9 | + | |
10 | +void JanelaAtualizacao::initializeComponent() | |
11 | +{ | |
12 | + | |
13 | + this->downloading = true; | |
14 | + this->Size = System::Drawing::Size(500, 250); | |
15 | + this->progressBar1 = (gcnew ProgressBar()); | |
16 | + this->btOK = (gcnew Button()); | |
17 | + this->lbInfDownload = (gcnew Label()); | |
18 | + this->lbInformacao = (gcnew Label()); | |
19 | + this->Name = "Vlibras-Desktop-Update"; | |
20 | + this->Text = "Atualização - Vlibras-Desktop"; | |
21 | + this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; | |
22 | + this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; | |
23 | + //this->ControlBox = false; | |
24 | + this->MaximizeBox = false; | |
25 | + this->BackColor = Drawing::Color::White; | |
26 | + //this->MinimizeBox = false; | |
27 | + //this->BackgroundImage = Image::FromFile("c:\\vlibras-libs\\image\\background.png"); | |
28 | + //this->Opacity = 0.97; | |
29 | + Drawing::Icon^ IC = gcnew Drawing::Icon("c:\\vlibras-libs\\icons\\icon_vlibras.ico"); | |
30 | + this->Icon = IC; | |
31 | + this->SuspendLayout(); | |
32 | + //this->FormBorderStyle = ::FormBorderStyle::None; | |
33 | + this->FormClosing += gcnew FormClosingEventHandler(this, &JanelaAtualizacao::XFormClosing); | |
34 | + | |
35 | + // progressBar1 | |
36 | + // | |
37 | + this->progressBar1->Location = Point(7, 85); | |
38 | + this->progressBar1->Name = "progressBar1"; | |
39 | + this->progressBar1->Size = System::Drawing::Size(470, 30); | |
40 | + //this->progressBar1->TabIndex = 0; | |
41 | + this->progressBar1->Minimum = 0; | |
42 | + this->progressBar1->Maximum = 100; | |
43 | + //this->progressBar1->Style = ProgressBarStyle::Marquee; | |
44 | + //progressBar1->Visible = false; | |
45 | + //progressBar1->Enabled = false; | |
46 | + // | |
47 | + | |
48 | + // | |
49 | + this->lbInformacao->Location = Point(7, 15); | |
50 | + this->lbInformacao->Name = "label"; | |
51 | + this->lbInformacao->Size = System::Drawing::Size(470, 23); | |
52 | + this->lbInformacao->BackColor = Drawing::Color::Transparent; | |
53 | + //this->lbInformacao->ForeColor=Drawing::Color::White; | |
54 | + | |
55 | + // | |
56 | + this->lbInfDownload->Location = Point(7, 120); | |
57 | + this->lbInfDownload->Name = "labelDownload"; | |
58 | + this->lbInfDownload->Size = System::Drawing::Size(470, 23); | |
59 | + this->lbInfDownload->BackColor = Drawing::Color::Transparent; | |
60 | + //this->lbInfDownload->Font = gcnew System::Drawing::Font("Arial", 12); | |
61 | + //this->lbInfDownload->ForeColor=Drawing::Color::White; | |
62 | + | |
63 | + | |
64 | + // btOK | |
65 | + // | |
66 | + | |
67 | + this->btOK->Location = Point(390, this->Bottom-80); | |
68 | + this->btOK->Name = "btOK"; | |
69 | + this->btOK->Size = System::Drawing::Size(80, 30); | |
70 | + this->btOK->TabIndex = 1; | |
71 | + this->btOK->Text = "OK"; | |
72 | + this->btOK->UseVisualStyleBackColor = true; | |
73 | + this->btOK->Click += gcnew EventHandler(this, &JanelaAtualizacao::btOKevent); | |
74 | + //this->btOK | |
75 | + // | |
76 | + | |
77 | + // | |
78 | + //this->Controls->Add(this->topo); | |
79 | + this->Controls->Add(this->lbInformacao); | |
80 | + this->Controls->Add(this->lbInfDownload); | |
81 | + this->Controls->Add(this->progressBar1); | |
82 | + this->Controls->Add(this->btOK); | |
83 | + this->btOK->Enabled = false; | |
84 | + //this->Controls->Add(this->richTextBox1); | |
85 | + | |
86 | + //this->ResumeLayout(false); | |
87 | + | |
88 | +} | |
89 | + | |
90 | +void JanelaAtualizacao::setInfoWhite(String^ info) | |
91 | +{ | |
92 | + this->lbInformacao->Location = Point(7, 20); | |
93 | + this->lbInformacao->Font = gcnew System::Drawing::Font("Serif", 12); | |
94 | + this->lbInformacao->Text = info; | |
95 | + //this->lbInformacao->ForeColor=Drawing::Color::White; | |
96 | + this->lbInformacao->TextAlign = ContentAlignment::MiddleCenter; | |
97 | + | |
98 | +} | |
99 | + | |
100 | +void JanelaAtualizacao::setInfoGreen(String^ info) | |
101 | +{ | |
102 | + this->lbInformacao->Location = Point(7, 75); | |
103 | + this->lbInformacao->Font = gcnew System::Drawing::Font("Arial", 15); | |
104 | + this->lbInformacao->Text = info; | |
105 | + this->lbInformacao->ForeColor=Drawing::Color::Green; | |
106 | + this->lbInformacao->TextAlign = ContentAlignment::MiddleCenter; | |
107 | + | |
108 | +} | |
109 | +void JanelaAtualizacao::setInfoRed(String^ info) | |
110 | +{ | |
111 | + this->lbInformacao->Location = Point(7, 75); | |
112 | + this->lbInformacao->Font = gcnew System::Drawing::Font("Arial", 15); | |
113 | + this->lbInformacao->Text = info; | |
114 | + this->lbInformacao->ForeColor=Drawing::Color::Red; | |
115 | + this->lbInformacao->TextAlign = ContentAlignment::MiddleCenter; | |
116 | + | |
117 | +} | |
118 | + | |
119 | + | |
120 | + | |
121 | + | |
122 | +void JanelaAtualizacao::btOKevent(Object^ sender, EventArgs^ e) | |
123 | +{ | |
124 | + | |
125 | + this->Close(); | |
126 | + | |
127 | +} | |
128 | + | |
129 | + | |
130 | + | |
131 | +void JanelaAtualizacao::start() | |
132 | +{ | |
133 | + | |
134 | +} | |
135 | + | |
136 | + | |
137 | +void JanelaAtualizacao::EnableButton() | |
138 | +{ | |
139 | + btOK->Enabled = true; | |
140 | +} | |
141 | + | |
142 | + | |
143 | +void JanelaAtualizacao::XFormClosing(Object^ sender, FormClosingEventArgs^ e) | |
144 | +{ | |
145 | + | |
146 | +} | |
147 | + | |
148 | + | |
149 | + | |
150 | + | |
151 | + | |
0 | 152 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,287 @@ |
1 | +#include <windows.h> | |
2 | +#include "util.h" | |
3 | + | |
4 | + | |
5 | + | |
6 | +Util::Util(){ | |
7 | + //downloading = true; | |
8 | + //downloading = down; | |
9 | +} | |
10 | + | |
11 | +string Util::clrStringTostring(String^ strIn) | |
12 | +{ | |
13 | + | |
14 | + char cStr[256]; | |
15 | + | |
16 | + | |
17 | + sprintf(cStr, "%s", strIn); | |
18 | + string stlString(cStr); | |
19 | + | |
20 | + return stlString; | |
21 | +} | |
22 | + | |
23 | + void DownloadProgressCallback(Object^ sender, | |
24 | + DownloadProgressChangedEventArgs^ e) | |
25 | + { | |
26 | + // Displays the operation identifier, and the transfer progress. | |
27 | + Console::WriteLine("{0} downloaded {1} of {2} bytes. {3} % complete...", | |
28 | + (String ^)e->UserState, | |
29 | + e->BytesReceived, | |
30 | + e->TotalBytesToReceive, | |
31 | + e->ProgressPercentage); | |
32 | + } | |
33 | + | |
34 | + void DownloadFileCallBack2(Object^ sender, AsyncCompletedEventArgs^ args) | |
35 | + { | |
36 | + cout<<"Terminou de baixar"<< endl; | |
37 | + | |
38 | + } | |
39 | + | |
40 | + | |
41 | +bool Util::checkNet() | |
42 | +{ | |
43 | + | |
44 | + try | |
45 | + { | |
46 | + | |
47 | + WebRequest^ request = WebRequest::Create( "http://vlibras.lavid.ufpb.br" ); | |
48 | + | |
49 | + // If required by the server, set the credentials. | |
50 | + //request->Credentials = CredentialCache::DefaultCredentials; | |
51 | + | |
52 | + // Get the response. | |
53 | + HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse()); | |
54 | + | |
55 | + if (response->StatusDescription == "OK"){ | |
56 | + | |
57 | + return true; | |
58 | + } | |
59 | + return false; | |
60 | + response->Close(); | |
61 | + } | |
62 | + catch ( WebException^ e ) | |
63 | + { | |
64 | + return false; | |
65 | + } | |
66 | + | |
67 | +} | |
68 | + | |
69 | + | |
70 | +vector<string> Util::checkVersion(bool atualize) | |
71 | +{ | |
72 | + XmlDocument^ xmlDoc; | |
73 | + XmlNodeList^ files; | |
74 | + XmlDocument^ xmlDocLocal; | |
75 | + XmlNodeList^ filesLocal; | |
76 | + vector<string> updates; | |
77 | + vector<string> localversion = localVersion(); | |
78 | + try | |
79 | + { | |
80 | + xmlDoc = (gcnew XmlDocument()); | |
81 | + xmlDocLocal = (gcnew XmlDocument()); | |
82 | + | |
83 | + | |
84 | + string url = "http://vlibras.lavid.ufpb.br/api/dicionario/"+localversion[3]+"?type=windows"; | |
85 | + WebRequest^ request = WebRequest::Create( gcnew String(url.c_str())); | |
86 | + // If required by the server, set the credentials. | |
87 | + request->Credentials = CredentialCache::DefaultCredentials; | |
88 | + // Get the response. | |
89 | + HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse()); | |
90 | + if (!(response->StatusDescription == "OK")) | |
91 | + goto erro; | |
92 | + // Get the stream containing content returned by the server. | |
93 | + Stream^ dataStream = response->GetResponseStream(); | |
94 | + // Open the stream using a StreamReader for easy access. | |
95 | + StreamReader^ reader = gcnew StreamReader( dataStream ); | |
96 | + // Read the content. | |
97 | + String^ responseFromServer = reader->ReadToEnd(); | |
98 | + xmlDoc->LoadXml(responseFromServer); | |
99 | + files = xmlDoc->GetElementsByTagName("version"); | |
100 | + | |
101 | + long numitems = files->Count; | |
102 | + | |
103 | + | |
104 | + | |
105 | + //for (int i=0;i<numitems;i++) | |
106 | + if(numitems>0) | |
107 | + { | |
108 | + String^ playerVersion = files[0]["playerVersion"]->InnerText; | |
109 | + String^ dictionaryVersion = files[0]["dictionaryVersion"]->InnerText; | |
110 | + | |
111 | + MessageBox(0, "version local "+(gcnew String(localversion[1].c_str()))+" \n Server Version : "+playerVersion,"MessageBox caption", MB_OK); | |
112 | + if(String::Compare( playerVersion, gcnew String(localversion[1].c_str()))) | |
113 | + { | |
114 | + updates.push_back("playerVersion"); | |
115 | + updates.push_back(clrStringTostring(playerVersion)); | |
116 | + updates.push_back(clrStringTostring(files[0]["playerUrl"]->InnerText)); | |
117 | + } | |
118 | + if(String::Compare(dictionaryVersion,gcnew String(localversion[3].c_str()))) | |
119 | + { | |
120 | + updates.push_back("dictionaryVersion"); | |
121 | + updates.push_back(clrStringTostring(dictionaryVersion)); | |
122 | + updates.push_back(clrStringTostring(files[0]["dictionaryUrl"]->InnerText)); | |
123 | + } | |
124 | + | |
125 | + //if(atualize) | |
126 | + //saveNewXmlVersion(playerVersion,dictionaryVersion); | |
127 | + | |
128 | + } | |
129 | + | |
130 | + erro: | |
131 | + // Cleanup the streams and the response. | |
132 | + reader->Close(); | |
133 | + dataStream->Close(); | |
134 | + }catch(Exception^ e) | |
135 | + { | |
136 | + return updates; | |
137 | + } | |
138 | + | |
139 | + return updates; | |
140 | +} | |
141 | + | |
142 | + | |
143 | +vector<string> Util::localVersion() | |
144 | +{ | |
145 | + XmlDocument^ xmlDocLocal; | |
146 | + XmlNodeList^ filesLocal; | |
147 | + vector<string> updates; | |
148 | + try | |
149 | + { | |
150 | + xmlDocLocal = (gcnew XmlDocument()); | |
151 | + //xml version local | |
152 | + StreamReader^ readerLocal = gcnew StreamReader("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
153 | + | |
154 | + String^ responseLocal = readerLocal->ReadToEnd(); | |
155 | + | |
156 | + xmlDocLocal->LoadXml(responseLocal); | |
157 | + | |
158 | + filesLocal = xmlDocLocal->GetElementsByTagName("version"); | |
159 | + | |
160 | + updates.push_back("playerVersion"); | |
161 | + String^ playerVersion = filesLocal[0]["playerVersion"]->InnerText; | |
162 | + updates.push_back(clrStringTostring(playerVersion)); | |
163 | + updates.push_back("dictionaryVersion"); | |
164 | + String^ dictionaryVersion = filesLocal[0]["dictionaryVersion"]->InnerText; | |
165 | + updates.push_back(clrStringTostring(dictionaryVersion)); | |
166 | + | |
167 | + // Cleanup the streams and the response. | |
168 | + readerLocal->Close(); | |
169 | + }catch(Exception^ e) | |
170 | + { | |
171 | + return updates; | |
172 | + } | |
173 | + | |
174 | + return updates; | |
175 | +} | |
176 | + | |
177 | + | |
178 | +string Util::Download(DownloadProgressChangedEventHandler^ dpch ,string url, string fileName) | |
179 | +{ | |
180 | + try | |
181 | + { | |
182 | + myWebClient = gcnew WebClient(); | |
183 | + Uri^ uri = gcnew Uri(gcnew String(url.c_str())); | |
184 | + myWebClient->DownloadProgressChanged += dpch; | |
185 | + myWebClient->DownloadFileCompleted += gcnew AsyncCompletedEventHandler( DownloadFileCallBack2 ); | |
186 | + String^ outPath = gcnew String(("c:\\vlibras-libs\\update\\"+fileName).c_str()); | |
187 | + myWebClient->DownloadFileAsync(uri, outPath); | |
188 | + }catch (Exception^ e) | |
189 | + { | |
190 | + return "FALHA"; | |
191 | + } | |
192 | + | |
193 | + return "OK"; | |
194 | + } | |
195 | + | |
196 | + | |
197 | + | |
198 | + bool Util::saveNewXmlVersion(string playerVersion,string dictionaryVersion) | |
199 | + { | |
200 | + | |
201 | + XmlDocument^ xmlDocLocal; | |
202 | + XmlNodeList^ filesLocal; | |
203 | + vector<string> updates; | |
204 | + try | |
205 | + { | |
206 | + xmlDocLocal = (gcnew XmlDocument()); | |
207 | + //xml version local | |
208 | + StreamReader^ readerLocal = gcnew StreamReader("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
209 | + | |
210 | + String^ responseLocal = readerLocal->ReadToEnd(); | |
211 | + | |
212 | + xmlDocLocal->LoadXml(responseLocal); | |
213 | + | |
214 | + filesLocal = xmlDocLocal->GetElementsByTagName("version"); | |
215 | + | |
216 | + if(!playerVersion.empty()) | |
217 | + filesLocal[0]["playerVersion"]->InnerText = gcnew String(playerVersion.c_str()); | |
218 | + | |
219 | + if(!dictionaryVersion.empty()) | |
220 | + filesLocal[0]["dictionaryVersion"]->InnerText = gcnew String(dictionaryVersion.c_str()); | |
221 | + | |
222 | + | |
223 | + // Cleanup the streams and the response. | |
224 | + readerLocal->Close(); | |
225 | + | |
226 | + xmlDocLocal->Save("c:\\vlibras-libs\\update\\updateVersion.xml"); | |
227 | + }catch(Exception^ e) | |
228 | + { | |
229 | + | |
230 | + } | |
231 | + | |
232 | + return true; | |
233 | + } | |
234 | + | |
235 | + | |
236 | + bool Util::extractZip(string zipFile, string outPath) | |
237 | + { | |
238 | + try | |
239 | + { | |
240 | + String^ zipPath = gcnew String(zipFile.c_str()); | |
241 | + String^ extractPath = gcnew String(outPath.c_str()); | |
242 | + ZipFile::ExtractToDirectory(zipPath, extractPath); | |
243 | + | |
244 | + }catch(Exception^ e) | |
245 | + { | |
246 | + return false; | |
247 | + } | |
248 | + | |
249 | + return true; | |
250 | + } | |
251 | + | |
252 | +bool Util::backup() | |
253 | +{ | |
254 | + CHAR nome_atual[] = "c:\\vlibras-libs"; | |
255 | + // novo nome do diretório | |
256 | + CHAR nome_novo[] = "c:\\vlibras-libs-BK"; | |
257 | + | |
258 | + // renomear o diretório | |
259 | + if(MoveFile(nome_atual, nome_novo)){ | |
260 | + | |
261 | + } | |
262 | + else{ | |
263 | + return false; | |
264 | + } | |
265 | + return true; | |
266 | +} | |
267 | +bool Util::restore() | |
268 | +{ | |
269 | + CHAR nome_atual[] = "c:\\vlibras-libs-BK"; | |
270 | + // novo nome do diretório | |
271 | + CHAR nome_novo[] = "c:\\vlibras-libs"; | |
272 | + | |
273 | + // renomear o diretório | |
274 | + if(MoveFile(nome_atual, nome_novo)){ | |
275 | + return true; | |
276 | + } | |
277 | + else{ | |
278 | + return false; | |
279 | + //GetLastError() << endl; | |
280 | + } | |
281 | + return true; | |
282 | +} | |
283 | + | |
284 | + | |
285 | + | |
286 | + | |
287 | + | |
0 | 288 | \ No newline at end of file | ... | ... |
No preview for this file type
... | ... | @@ -0,0 +1,172 @@ |
1 | + | |
2 | +#include <Windows.h> | |
3 | +#include "util.h" | |
4 | +#include "janelaAtualizacao.h" | |
5 | +#include <iostream> | |
6 | + | |
7 | +using namespace std; | |
8 | +using namespace System::Threading; | |
9 | +using namespace System::Windows::Forms; | |
10 | + | |
11 | +void atualizarProgresbar(Object^ sender, DownloadProgressChangedEventArgs^ e){ | |
12 | + | |
13 | + JanelaAtualizacao::progressBar1->Value= e->ProgressPercentage; | |
14 | + int kbr = e->BytesReceived/1024; | |
15 | + int kbtotal = e->TotalBytesToReceive/1024; | |
16 | + JanelaAtualizacao::lbInfDownload->Text = gcnew String(kbr+" kb ("+kbr/1024+" MB) Baixado de "+kbtotal+" kb ("+kbtotal/1024+" MB) | "+ e->ProgressPercentage+"%"); | |
17 | + | |
18 | + | |
19 | +} | |
20 | + | |
21 | + | |
22 | +public ref class UpdateBack | |
23 | +{ | |
24 | + JanelaAtualizacao^ j; | |
25 | + bool isSilence; | |
26 | + String^ playerVersion; | |
27 | + String^ dictionaryVersion; | |
28 | + | |
29 | +public: | |
30 | + UpdateBack(JanelaAtualizacao^ jan,bool __isSilence) | |
31 | + { | |
32 | + j = jan; | |
33 | + isSilence = __isSilence; | |
34 | + } | |
35 | + void start() | |
36 | + { | |
37 | + j->setInfoWhite("Estabelecendo conexão com o servidor..."); | |
38 | + //JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Marquee; | |
39 | + | |
40 | + | |
41 | + if(Util::checkNet()) | |
42 | + { | |
43 | + j->setInfoWhite("Verificando versão..."); | |
44 | + | |
45 | + vector<string> versions = Util::checkVersion(true); | |
46 | + if(versions.size()>2) | |
47 | + { | |
48 | + | |
49 | + switch (versions.size()) | |
50 | + { | |
51 | + case 3: | |
52 | + if(versions[0]=="playerVersion") | |
53 | + { | |
54 | + installPlayer(versions[2],versions[1]); | |
55 | + } | |
56 | + else if(versions[0]=="dictionaryVersion") | |
57 | + { | |
58 | + installDicionario(versions[2],versions[1]); | |
59 | + | |
60 | + } | |
61 | + break; | |
62 | + case 6: | |
63 | + // if(versions[3]=="dictionaryVersion") | |
64 | + // { | |
65 | + // installDicionario(versions[5],versions[4]); | |
66 | + // //Util::extractZip() | |
67 | + // } | |
68 | + if(versions[0]=="playerVersion") | |
69 | + { | |
70 | + installPlayer(versions[2],versions[1]); | |
71 | + } | |
72 | + | |
73 | + break; | |
74 | + } | |
75 | + | |
76 | + } | |
77 | + else | |
78 | + { | |
79 | + JanelaAtualizacao::progressBar1->Visible = false; | |
80 | + j->setInfoGreen("Você já está com a versão mais atualizada!"); | |
81 | + j->EnableButton(); | |
82 | + } | |
83 | + | |
84 | + }else | |
85 | + { | |
86 | + JanelaAtualizacao::progressBar1->Visible = false; | |
87 | + j->setInfoRed("Não foi possível estabelecer conexão com o servidor!"); | |
88 | + | |
89 | + } | |
90 | + | |
91 | + if(isSilence) | |
92 | + j->Close(); | |
93 | + j->EnableButton(); | |
94 | + | |
95 | + } | |
96 | + | |
97 | + void installDicionario(string url, string version) | |
98 | + { | |
99 | + //JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Continuous; | |
100 | + //JanelaAtualizacao::progressBar1->Value=0; | |
101 | + Util::Download(gcnew DownloadProgressChangedEventHandler(atualizarProgresbar),url,"vlibrasDicionario.zip"); | |
102 | + j->setInfoWhite("Baixando nova versão do dicionário VLibras "); | |
103 | + while(JanelaAtualizacao::progressBar1->Value<100); | |
104 | + | |
105 | + j->setInfoWhite("Extraindo arquivos..."); | |
106 | + | |
107 | + //Sleep(3000); | |
108 | + Util::extractZip("C:\\vlibras-libs\\update\\vlibrasDicionario.zip","C:\\vlibras-libs\\Player\\VLibrasPlayer_Data\\Bundles"); | |
109 | + JanelaAtualizacao::progressBar1->Visible = false; | |
110 | + j->setInfoGreen("Atualização feita com sucesso!"); | |
111 | + Util::saveNewXmlVersion("",version); | |
112 | + j->EnableButton(); | |
113 | + } | |
114 | + | |
115 | + void installPlayer(string url, string version) | |
116 | + { | |
117 | + //j->EnableButton(); | |
118 | + //JanelaAtualizacao::progressBar1->Style = ProgressBarStyle::Continuous; | |
119 | + //JanelaAtualizacao::progressBar1->Value=0; | |
120 | + Util::Download(gcnew DownloadProgressChangedEventHandler(atualizarProgresbar),url,"vlibrasInstaller.exe"); | |
121 | + j->setInfoWhite("Baixando nova versão do Vlibras..."); | |
122 | + while(JanelaAtualizacao::progressBar1->Value<100); | |
123 | + | |
124 | + | |
125 | + | |
126 | + String^ installer = gcnew String("C:\\vlibras-libs\\update\\"); | |
127 | + installer+="vlibrasInstaller.exe"; | |
128 | + //Process::Start(installer); | |
129 | + System::Diagnostics::Process^ vlibrasinstall = gcnew System::Diagnostics::Process(); | |
130 | + vlibrasinstall->StartInfo->FileName = installer; | |
131 | + vlibrasinstall->StartInfo->Arguments = " /SILENT /SUPPRESSMSGBOXES /NORESTART "; | |
132 | + vlibrasinstall->Start(); | |
133 | + Util::saveNewXmlVersion(version,""); | |
134 | + j->Close(); | |
135 | + | |
136 | + } | |
137 | +}; | |
138 | + | |
139 | +[STAThread] | |
140 | +int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) | |
141 | +{ | |
142 | + UpdateBack^ updateBack; | |
143 | + JanelaAtualizacao^ updateView = gcnew JanelaAtualizacao(); | |
144 | + | |
145 | + if(__argv[1] != NULL) | |
146 | + { | |
147 | + char* silen = "silence"; | |
148 | + if(*__argv[1] == *silen) | |
149 | + updateBack = gcnew UpdateBack(updateView,true); | |
150 | + else | |
151 | + updateBack = gcnew UpdateBack(updateView,false); | |
152 | + } | |
153 | + else | |
154 | + updateBack = gcnew UpdateBack(updateView,false); | |
155 | + | |
156 | + Application::EnableVisualStyles(); | |
157 | + | |
158 | + //Thread^ t2 = gcnew Thread(gcnew ThreadStart(updateView, &JanelaAtualizacao::start)); | |
159 | + //t2->Start(); | |
160 | + | |
161 | + Thread^ t3 = gcnew Thread(gcnew ThreadStart(updateBack, &UpdateBack::start)); | |
162 | + t3->Start(); | |
163 | + | |
164 | + | |
165 | + updateView->ShowDialog(); | |
166 | + t3->Abort(); | |
167 | + | |
168 | + //Application::Run(updateView); | |
169 | + | |
170 | + return 0; | |
171 | + } | |
172 | + | ... | ... |