4
4
5
5
#include < stdafx.h>
6
6
#include " resource.h"
7
- #include " ..\Setup\UpdateBin\resource.h"
8
7
#include " DownloadHelper.h"
9
8
#include " Settings.h"
10
9
#include " SettingsUIHelper.h"
@@ -371,60 +370,6 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
371
370
data.bNewVersion =(data.newVersion >curVersion);
372
371
data.bIgnoreVersion =(data.bNewVersion && data.newVersion <=remindedVersion);
373
372
}
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
- }
428
373
429
374
data.bValid =true ;
430
375
if (params.check ==CHECK_UPDATE)
@@ -433,7 +378,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
433
378
g_bCheckingVersion=false ;
434
379
return 1 ;
435
380
}
436
- if (( data.bNewVersion && !data.bIgnoreVersion ) || (data. bNewLanguage && !data. bIgnoreLanguage ) )
381
+ if (data.bNewVersion && !data.bIgnoreVersion )
437
382
params.callback (data);
438
383
g_bCheckingVersion=false ;
439
384
return 0 ;
@@ -576,39 +521,6 @@ static CString LoadStringEx( HMODULE hModule, int stringId, int langId )
576
521
return res;
577
522
}
578
523
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
-
612
524
static bool VerifyDigitalCertificate ( const wchar_t *fname, const wchar_t *signer )
613
525
{
614
526
// verify the certificate
@@ -710,38 +622,24 @@ static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signe
710
622
void VersionData::Clear ( void )
711
623
{
712
624
bValid=false ;
713
- newVersion=encodedLangVersion= 0 ;
625
+ newVersion=0 ;
714
626
downloadUrl.Empty ();
715
627
downloadSigner.Empty ();
716
628
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 ;
726
631
}
727
632
728
633
void VersionData::Swap ( VersionData &data )
729
634
{
730
635
std::swap (bValid,data.bValid );
731
636
std::swap (newVersion,data.newVersion );
732
- std::swap (encodedLangVersion,data.encodedLangVersion );
733
637
std::swap (downloadUrl,data.downloadUrl );
734
638
std::swap (downloadSigner,data.downloadSigner );
735
639
std::swap (news,data.news );
736
640
std::swap (updateLink,data.updateLink );
737
- std::swap (languageLink,data.languageLink );
738
- std::swap (altUrl,data.altUrl );
739
641
std::swap (bNewVersion,data.bNewVersion );
740
642
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 );
745
643
}
746
644
747
645
std::vector<char > DownloadUrl (const wchar_t * url)
@@ -850,69 +748,6 @@ VersionData::TLoadResult VersionData::Load(bool official)
850
748
}
851
749
}
852
750
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
-
916
751
struct DownloadFileParams
917
752
{
918
753
// input
@@ -989,82 +824,6 @@ static DWORD WINAPI ThreadDownloadFile( void *param )
989
824
return 0 ;
990
825
}
991
826
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
-
1068
827
DWORD DownloadNewVersion ( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error )
1069
828
{
1070
829
CComString pPath;
0 commit comments