44
55#include < stdafx.h>
66#include " resource.h"
7- #include " ..\Setup\UpdateBin\resource.h"
87#include " DownloadHelper.h"
98#include " Settings.h"
109#include " SettingsUIHelper.h"
@@ -371,60 +370,6 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
371370 data.bNewVersion =(data.newVersion >curVersion);
372371 data.bIgnoreVersion =(data.bNewVersion && data.newVersion <=remindedVersion);
373372 }
374- {
375- wchar_t languages[100 ]={0 };
376- CString language2=GetSettingString (L" Language" );
377- if (!language2.IsEmpty ())
378- {
379- Strcpy (languages,_countof (languages)-1 ,language2);
380- }
381- else
382- {
383- ULONG size=0 ;
384- ULONG len=_countof (languages);
385- GetUserPreferredUILanguages (MUI_LANGUAGE_NAME,&size,languages,&len);
386- }
387-
388- bool bNewLanguage=false ;
389- for (wchar_t *lang=languages;*lang;lang+=Strlen (lang)+1 )
390- {
391- if (_wcsicmp (lang,L" en" )==0 || _wcsnicmp (lang,L" en-" ,3 )==0 )
392- break ; // English
393- DWORD dllVersion=0 , dllBuild=0 ;
394- HINSTANCE resInstance=LoadTranslationDll (lang);
395- if (resInstance)
396- {
397- dllVersion=GetVersionEx (resInstance,&dllBuild);
398- FreeLibrary (resInstance);
399- }
400-
401- DWORD newVersion=0 , newBuild=0 ;
402- for (std::vector<LanguageVersionData>::const_iterator it=data.languages .begin ();it!=data.languages .end ();++it)
403- {
404- if (_wcsicmp (it->language ,lang)==0 )
405- {
406- newVersion=it->version ;
407- newBuild=it->build ;
408- break ;
409- }
410- }
411- if (newVersion==0 )
412- continue ;
413-
414- if (newVersion>dllVersion || (newVersion==dllVersion && newBuild>dllBuild))
415- {
416- // a new DLL for this language exists
417- data.bNewLanguage =true ;
418- data.newLanguage =lang;
419- data.encodedLangVersion =(newVersion&0xFFFF0000 )|((newVersion&0xFF )<<8 )|(newBuild&0xFF );
420- DWORD remindedVersion;
421- if (regKey.QueryDWORDValue (L" RemindedLangVersion" ,remindedVersion)!=ERROR_SUCCESS)
422- remindedVersion=0 ;
423- data.bIgnoreLanguage =(data.encodedLangVersion <=remindedVersion);
424- }
425- break ;
426- }
427- }
428373
429374 data.bValid =true ;
430375 if (params.check ==CHECK_UPDATE)
@@ -433,7 +378,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
433378 g_bCheckingVersion=false ;
434379 return 1 ;
435380 }
436- if (( data.bNewVersion && !data.bIgnoreVersion ) || (data. bNewLanguage && !data. bIgnoreLanguage ) )
381+ if (data.bNewVersion && !data.bIgnoreVersion )
437382 params.callback (data);
438383 g_bCheckingVersion=false ;
439384 return 0 ;
@@ -576,39 +521,6 @@ static CString LoadStringEx( HMODULE hModule, int stringId, int langId )
576521 return res;
577522}
578523
579- static BOOL CALLBACK EnumStringLanguages ( HMODULE hModule, LPCTSTR lpszType, LPCTSTR lpszName, WORD wIDLanguage, LONG_PTR lParam )
580- {
581- VersionData &data=*(VersionData*)lParam;
582- CString url=LoadStringEx (hModule,IDS_LNG_URL,wIDLanguage);
583- if (url.IsEmpty ()) return TRUE ;
584- CString ver=LoadStringEx (hModule,IDS_LNG_VERSION,wIDLanguage);
585- if (ver.IsEmpty ()) return TRUE ;
586- CString crc=LoadStringEx (hModule,IDS_LNG_CRC,wIDLanguage);
587- if (crc.IsEmpty ()) return TRUE ;
588-
589- LanguageVersionData langData;
590- langData.bBasic =(ver[ver.GetLength ()-1 ]==' *' );
591-
592- int v1, v2, v3, v4;
593- if (swscanf_s (ver,L" %d.%d.%d.%d" ,&v1,&v2,&v3,&v4)==4 )
594- {
595- wchar_t buf[100 ];
596- if (GetLocaleInfo (wIDLanguage,LOCALE_SNAME,buf,_countof (buf)))
597- {
598- langData.languageId =wIDLanguage;
599- langData.language =buf;
600- langData.version =(v1<<24 )|(v2<<16 )|v3;
601- langData.build =v4;
602- langData.url =url;
603- wchar_t *q;
604- langData.hash =wcstoul (crc,&q,16 );
605- data.languages .push_back (langData);
606- }
607- }
608-
609- return TRUE ;
610- }
611-
612524static bool VerifyDigitalCertificate ( const wchar_t *fname, const wchar_t *signer )
613525{
614526 // verify the certificate
@@ -710,38 +622,24 @@ static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signe
710622void VersionData::Clear ( void )
711623{
712624 bValid=false ;
713- newVersion=encodedLangVersion= 0 ;
625+ newVersion=0 ;
714626 downloadUrl.Empty ();
715627 downloadSigner.Empty ();
716628 news.Empty ();
717- updateLink.Empty ();
718- languageLink.Empty ();
719- altUrl.Empty ();
720- bNewVersion=bIgnoreVersion=bNewLanguage=bIgnoreLanguage=false ;
721- newLanguage.Empty ();
722- for (std::vector<LanguageVersionData>::iterator it=languages.begin ();it!=languages.end ();++it)
723- if (it->bitmap )
724- DeleteObject (it->bitmap );
725- languages.clear ();
629+ updateLink=" https://github.com/Open-Shell/Open-Shell-Menu/releases" ;
630+ bNewVersion=bIgnoreVersion=false ;
726631}
727632
728633void VersionData::Swap ( VersionData &data )
729634{
730635 std::swap (bValid,data.bValid );
731636 std::swap (newVersion,data.newVersion );
732- std::swap (encodedLangVersion,data.encodedLangVersion );
733637 std::swap (downloadUrl,data.downloadUrl );
734638 std::swap (downloadSigner,data.downloadSigner );
735639 std::swap (news,data.news );
736640 std::swap (updateLink,data.updateLink );
737- std::swap (languageLink,data.languageLink );
738- std::swap (altUrl,data.altUrl );
739641 std::swap (bNewVersion,data.bNewVersion );
740642 std::swap (bIgnoreVersion,data.bIgnoreVersion );
741- std::swap (bNewLanguage,data.bNewLanguage );
742- std::swap (bIgnoreLanguage,data.bIgnoreLanguage );
743- std::swap (newLanguage,data.newLanguage );
744- std::swap (languages,data.languages );
745643}
746644
747645std::vector<char > DownloadUrl (const wchar_t * url)
@@ -850,69 +748,6 @@ VersionData::TLoadResult VersionData::Load(bool official)
850748 }
851749}
852750
853- VersionData::TLoadResult VersionData::Load ( const wchar_t *fname, bool bLoadFlags )
854- {
855- Clear ();
856- if (!VerifyDigitalCertificate (fname,L" Ivaylo Beltchev" ))
857- return LOAD_BAD_FILE;
858-
859- HMODULE hModule=LoadLibraryEx (fname,NULL ,LOAD_LIBRARY_AS_DATAFILE|LOAD_LIBRARY_AS_IMAGE_RESOURCE);
860- if (!hModule) return LOAD_BAD_FILE;
861-
862- if (GetVersionEx (hModule)!=GetVersionEx (g_Instance))
863- {
864- FreeLibrary (hModule);
865- return LOAD_BAD_VERSION;
866- }
867-
868- wchar_t defLang[100 ]=L" " ;
869- {
870- CRegKey regKeyLng;
871- if (regKeyLng.Open (HKEY_LOCAL_MACHINE,L" Software\\ OpenShell\\ OpenShell" ,KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
872- {
873- ULONG size=_countof (defLang);
874- if (regKeyLng.QueryStringValue (L" DefaultLanguage" ,defLang,&size)!=ERROR_SUCCESS)
875- defLang[0 ]=0 ;
876- }
877- }
878-
879- const int DEFAULT_LANGUAGE=0x409 ;
880-
881- int defLangId;
882- if (!defLang[0 ] || !GetLocaleInfoEx (defLang,LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER,(LPWSTR)&defLangId,4 ))
883- defLangId=DEFAULT_LANGUAGE;
884-
885- downloadUrl=LoadStringEx (hModule,IDS_INSTALL_URL,defLangId);
886- // these are always in en-US
887- downloadSigner=LoadStringEx (hModule,IDS_INSTALL_SIGNER,DEFAULT_LANGUAGE);
888- CString strVer=LoadStringEx (hModule,IDS_VERSION,defLangId);
889- if (strVer.IsEmpty ())
890- strVer=LoadStringEx (hModule,IDS_VERSION,DEFAULT_LANGUAGE);
891- updateLink=LoadStringEx (hModule,IDS_UPDATE_LINK,DEFAULT_LANGUAGE);
892- languageLink=LoadStringEx (hModule,IDS_LANGUAGE_LINK,DEFAULT_LANGUAGE);
893- altUrl=LoadStringEx (hModule,IDS_ALT_URL,DEFAULT_LANGUAGE);
894-
895- int v1, v2, v3;
896- if (!downloadUrl.IsEmpty () && swscanf_s (strVer,L" %d.%d.%d" ,&v1,&v2,&v3)==3 )
897- {
898- newVersion=(v1<<24 )|(v2<<16 )|v3;
899- news=LoadStringEx (hModule,IDS_NEWS,defLangId);
900- if (news.IsEmpty ())
901- news=LoadStringEx (hModule,IDS_NEWS,DEFAULT_LANGUAGE);
902-
903- EnumResourceLanguages (hModule,RT_STRING,MAKEINTRESOURCE ((IDS_LNG_URL>>4 )+1 ),EnumStringLanguages,(LONG_PTR)this );
904- for (std::vector<LanguageVersionData>::iterator it=languages.begin ();it!=languages.end ();++it)
905- it->bitmap =(HBITMAP)LoadImage (hModule,MAKEINTRESOURCE (it->languageId ),IMAGE_BITMAP,22 ,27 ,LR_CREATEDIBSECTION);
906- }
907-
908- FreeLibrary (hModule);
909-
910- if (newVersion && !downloadUrl.IsEmpty () && !news.IsEmpty ())
911- return LOAD_OK;
912- Clear ();
913- return LOAD_ERROR;
914- }
915-
916751struct DownloadFileParams
917752{
918753 // input
@@ -989,82 +824,6 @@ static DWORD WINAPI ThreadDownloadFile( void *param )
989824 return 0 ;
990825}
991826
992- DWORD DownloadLanguageDll ( HWND owner, TSettingsComponent component, const LanguageVersionData &data, CString &error )
993- {
994- // download file
995- wchar_t path[_MAX_PATH]=L" %ALLUSERSPROFILE%\\ OpenShell\\ Languages" ;
996- DoEnvironmentSubst (path,_countof (path));
997- SHCreateDirectory (NULL ,path);
998- wchar_t fname[_MAX_PATH];
999- Sprintf (fname,_countof (fname),L" %s.dll" ,data.language );
1000-
1001- CProgressDlg progress;
1002- progress.Create (owner,LoadStringEx (IDS_PROGRESS_TITLE_DOWNLOAD));
1003-
1004- DownloadFileParams params;
1005- params.url =data.url ;
1006- params.signer =NULL ;
1007- params.hash =data.hash ;
1008- params.path =path;
1009- params.fname =fname;
1010- params.progress =&progress;
1011- params.bAcceptCached =true ;
1012- params.component =component;
1013-
1014- HANDLE hThread=CreateThread (NULL ,0 ,ThreadDownloadFile,¶ms,0 ,NULL );
1015-
1016- while (1 )
1017- {
1018- DWORD wait=MsgWaitForMultipleObjects (1 ,&hThread,FALSE ,INFINITE,QS_ALLINPUT);
1019- if (wait!=WAIT_OBJECT_0+1 )
1020- break ;
1021- MSG msg;
1022- while (PeekMessage (&msg,0 ,0 ,0 ,PM_REMOVE))
1023- {
1024- TranslateMessage (&msg);
1025- DispatchMessage (&msg);
1026- }
1027- }
1028- progress.DestroyWindow ();
1029- CloseHandle (hThread);
1030-
1031- if (params.downloadRes ==DOWNLOAD_CANCEL)
1032- return 2 ;
1033- if (params.downloadRes ==DOWNLOAD_INTERNET)
1034- {
1035- error=LoadStringEx (IDS_INTERNET_FAIL);
1036- return 0 ;
1037- }
1038- else if (params.downloadRes ==DOWNLOAD_START)
1039- {
1040- error=LoadStringEx (IDS_INITIATE_FAIL);
1041- return 0 ;
1042- }
1043- else if (params.downloadRes ==DOWNLOAD_FAIL)
1044- {
1045- error=LoadStringEx (IDS_LANG_DOWNLOAD_FAIL);
1046- return 0 ;
1047- }
1048-
1049- if (params.saveRes )
1050- {
1051- wchar_t msg[256 ];
1052- FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL ,params.saveRes ,0 ,msg,_countof (msg),NULL );
1053- error.Format (LoadStringEx (IDS_LANG_SAVE_FAIL),params.fname );
1054- error+=" \r\n " ;
1055- error+=msg;
1056- return 0 ;
1057- }
1058-
1059- if (!params.valid )
1060- {
1061- error=LoadStringEx (IDS_LANG_DOWNLOAD_FAIL);
1062- return 0 ;
1063- }
1064-
1065- return 1 ;
1066- }
1067-
1068827DWORD DownloadNewVersion ( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error )
1069828{
1070829 CComString pPath;
0 commit comments