mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-04-17 13:23:04 +10:00
Remove old updating mechanism
We have our own updating already and don't plan to use old one. There is no need to keep it around.
This commit is contained in:
@@ -4,7 +4,6 @@
|
||||
|
||||
#include <stdafx.h>
|
||||
#include "resource.h"
|
||||
#include "..\Setup\UpdateBin\resource.h"
|
||||
#include "DownloadHelper.h"
|
||||
#include "Settings.h"
|
||||
#include "SettingsUIHelper.h"
|
||||
@@ -371,60 +370,6 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
|
||||
data.bNewVersion=(data.newVersion>curVersion);
|
||||
data.bIgnoreVersion=(data.bNewVersion && data.newVersion<=remindedVersion);
|
||||
}
|
||||
{
|
||||
wchar_t languages[100]={0};
|
||||
CString language2=GetSettingString(L"Language");
|
||||
if (!language2.IsEmpty())
|
||||
{
|
||||
Strcpy(languages,_countof(languages)-1,language2);
|
||||
}
|
||||
else
|
||||
{
|
||||
ULONG size=0;
|
||||
ULONG len=_countof(languages);
|
||||
GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,&size,languages,&len);
|
||||
}
|
||||
|
||||
bool bNewLanguage=false;
|
||||
for (wchar_t *lang=languages;*lang;lang+=Strlen(lang)+1)
|
||||
{
|
||||
if (_wcsicmp(lang,L"en")==0 || _wcsnicmp(lang,L"en-",3)==0)
|
||||
break; // English
|
||||
DWORD dllVersion=0, dllBuild=0;
|
||||
HINSTANCE resInstance=LoadTranslationDll(lang);
|
||||
if (resInstance)
|
||||
{
|
||||
dllVersion=GetVersionEx(resInstance,&dllBuild);
|
||||
FreeLibrary(resInstance);
|
||||
}
|
||||
|
||||
DWORD newVersion=0, newBuild=0;
|
||||
for (std::vector<LanguageVersionData>::const_iterator it=data.languages.begin();it!=data.languages.end();++it)
|
||||
{
|
||||
if (_wcsicmp(it->language,lang)==0)
|
||||
{
|
||||
newVersion=it->version;
|
||||
newBuild=it->build;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newVersion==0)
|
||||
continue;
|
||||
|
||||
if (newVersion>dllVersion || (newVersion==dllVersion && newBuild>dllBuild))
|
||||
{
|
||||
// a new DLL for this language exists
|
||||
data.bNewLanguage=true;
|
||||
data.newLanguage=lang;
|
||||
data.encodedLangVersion=(newVersion&0xFFFF0000)|((newVersion&0xFF)<<8)|(newBuild&0xFF);
|
||||
DWORD remindedVersion;
|
||||
if (regKey.QueryDWORDValue(L"RemindedLangVersion",remindedVersion)!=ERROR_SUCCESS)
|
||||
remindedVersion=0;
|
||||
data.bIgnoreLanguage=(data.encodedLangVersion<=remindedVersion);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
data.bValid=true;
|
||||
if (params.check==CHECK_UPDATE)
|
||||
@@ -433,7 +378,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
|
||||
g_bCheckingVersion=false;
|
||||
return 1;
|
||||
}
|
||||
if ((data.bNewVersion && !data.bIgnoreVersion) || (data.bNewLanguage && !data.bIgnoreLanguage))
|
||||
if (data.bNewVersion && !data.bIgnoreVersion)
|
||||
params.callback(data);
|
||||
g_bCheckingVersion=false;
|
||||
return 0;
|
||||
@@ -576,39 +521,6 @@ static CString LoadStringEx( HMODULE hModule, int stringId, int langId )
|
||||
return res;
|
||||
}
|
||||
|
||||
static BOOL CALLBACK EnumStringLanguages( HMODULE hModule, LPCTSTR lpszType, LPCTSTR lpszName, WORD wIDLanguage, LONG_PTR lParam )
|
||||
{
|
||||
VersionData &data=*(VersionData*)lParam;
|
||||
CString url=LoadStringEx(hModule,IDS_LNG_URL,wIDLanguage);
|
||||
if (url.IsEmpty()) return TRUE;
|
||||
CString ver=LoadStringEx(hModule,IDS_LNG_VERSION,wIDLanguage);
|
||||
if (ver.IsEmpty()) return TRUE;
|
||||
CString crc=LoadStringEx(hModule,IDS_LNG_CRC,wIDLanguage);
|
||||
if (crc.IsEmpty()) return TRUE;
|
||||
|
||||
LanguageVersionData langData;
|
||||
langData.bBasic=(ver[ver.GetLength()-1]=='*');
|
||||
|
||||
int v1, v2, v3, v4;
|
||||
if (swscanf_s(ver,L"%d.%d.%d.%d",&v1,&v2,&v3,&v4)==4)
|
||||
{
|
||||
wchar_t buf[100];
|
||||
if (GetLocaleInfo(wIDLanguage,LOCALE_SNAME,buf,_countof(buf)))
|
||||
{
|
||||
langData.languageId=wIDLanguage;
|
||||
langData.language=buf;
|
||||
langData.version=(v1<<24)|(v2<<16)|v3;
|
||||
langData.build=v4;
|
||||
langData.url=url;
|
||||
wchar_t *q;
|
||||
langData.hash=wcstoul(crc,&q,16);
|
||||
data.languages.push_back(langData);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signer )
|
||||
{
|
||||
// verify the certificate
|
||||
@@ -710,38 +622,24 @@ static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signe
|
||||
void VersionData::Clear( void )
|
||||
{
|
||||
bValid=false;
|
||||
newVersion=encodedLangVersion=0;
|
||||
newVersion=0;
|
||||
downloadUrl.Empty();
|
||||
downloadSigner.Empty();
|
||||
news.Empty();
|
||||
updateLink.Empty();
|
||||
languageLink.Empty();
|
||||
altUrl.Empty();
|
||||
bNewVersion=bIgnoreVersion=bNewLanguage=bIgnoreLanguage=false;
|
||||
newLanguage.Empty();
|
||||
for (std::vector<LanguageVersionData>::iterator it=languages.begin();it!=languages.end();++it)
|
||||
if (it->bitmap)
|
||||
DeleteObject(it->bitmap);
|
||||
languages.clear();
|
||||
updateLink="https://github.com/Open-Shell/Open-Shell-Menu/releases";
|
||||
bNewVersion=bIgnoreVersion=false;
|
||||
}
|
||||
|
||||
void VersionData::Swap( VersionData &data )
|
||||
{
|
||||
std::swap(bValid,data.bValid);
|
||||
std::swap(newVersion,data.newVersion);
|
||||
std::swap(encodedLangVersion,data.encodedLangVersion);
|
||||
std::swap(downloadUrl,data.downloadUrl);
|
||||
std::swap(downloadSigner,data.downloadSigner);
|
||||
std::swap(news,data.news);
|
||||
std::swap(updateLink,data.updateLink);
|
||||
std::swap(languageLink,data.languageLink);
|
||||
std::swap(altUrl,data.altUrl);
|
||||
std::swap(bNewVersion,data.bNewVersion);
|
||||
std::swap(bIgnoreVersion,data.bIgnoreVersion);
|
||||
std::swap(bNewLanguage,data.bNewLanguage);
|
||||
std::swap(bIgnoreLanguage,data.bIgnoreLanguage);
|
||||
std::swap(newLanguage,data.newLanguage);
|
||||
std::swap(languages,data.languages);
|
||||
}
|
||||
|
||||
std::vector<char> DownloadUrl(const wchar_t* url)
|
||||
@@ -850,69 +748,6 @@ VersionData::TLoadResult VersionData::Load(bool official)
|
||||
}
|
||||
}
|
||||
|
||||
VersionData::TLoadResult VersionData::Load( const wchar_t *fname, bool bLoadFlags )
|
||||
{
|
||||
Clear();
|
||||
if (!VerifyDigitalCertificate(fname,L"Ivaylo Beltchev"))
|
||||
return LOAD_BAD_FILE;
|
||||
|
||||
HMODULE hModule=LoadLibraryEx(fname,NULL,LOAD_LIBRARY_AS_DATAFILE|LOAD_LIBRARY_AS_IMAGE_RESOURCE);
|
||||
if (!hModule) return LOAD_BAD_FILE;
|
||||
|
||||
if (GetVersionEx(hModule)!=GetVersionEx(g_Instance))
|
||||
{
|
||||
FreeLibrary(hModule);
|
||||
return LOAD_BAD_VERSION;
|
||||
}
|
||||
|
||||
wchar_t defLang[100]=L"";
|
||||
{
|
||||
CRegKey regKeyLng;
|
||||
if (regKeyLng.Open(HKEY_LOCAL_MACHINE,L"Software\\OpenShell\\OpenShell",KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
|
||||
{
|
||||
ULONG size=_countof(defLang);
|
||||
if (regKeyLng.QueryStringValue(L"DefaultLanguage",defLang,&size)!=ERROR_SUCCESS)
|
||||
defLang[0]=0;
|
||||
}
|
||||
}
|
||||
|
||||
const int DEFAULT_LANGUAGE=0x409;
|
||||
|
||||
int defLangId;
|
||||
if (!defLang[0] || !GetLocaleInfoEx(defLang,LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER,(LPWSTR)&defLangId,4))
|
||||
defLangId=DEFAULT_LANGUAGE;
|
||||
|
||||
downloadUrl=LoadStringEx(hModule,IDS_INSTALL_URL,defLangId);
|
||||
// these are always in en-US
|
||||
downloadSigner=LoadStringEx(hModule,IDS_INSTALL_SIGNER,DEFAULT_LANGUAGE);
|
||||
CString strVer=LoadStringEx(hModule,IDS_VERSION,defLangId);
|
||||
if (strVer.IsEmpty())
|
||||
strVer=LoadStringEx(hModule,IDS_VERSION,DEFAULT_LANGUAGE);
|
||||
updateLink=LoadStringEx(hModule,IDS_UPDATE_LINK,DEFAULT_LANGUAGE);
|
||||
languageLink=LoadStringEx(hModule,IDS_LANGUAGE_LINK,DEFAULT_LANGUAGE);
|
||||
altUrl=LoadStringEx(hModule,IDS_ALT_URL,DEFAULT_LANGUAGE);
|
||||
|
||||
int v1, v2, v3;
|
||||
if (!downloadUrl.IsEmpty() && swscanf_s(strVer,L"%d.%d.%d",&v1,&v2,&v3)==3)
|
||||
{
|
||||
newVersion=(v1<<24)|(v2<<16)|v3;
|
||||
news=LoadStringEx(hModule,IDS_NEWS,defLangId);
|
||||
if (news.IsEmpty())
|
||||
news=LoadStringEx(hModule,IDS_NEWS,DEFAULT_LANGUAGE);
|
||||
|
||||
EnumResourceLanguages(hModule,RT_STRING,MAKEINTRESOURCE((IDS_LNG_URL>>4)+1),EnumStringLanguages,(LONG_PTR)this);
|
||||
for (std::vector<LanguageVersionData>::iterator it=languages.begin();it!=languages.end();++it)
|
||||
it->bitmap=(HBITMAP)LoadImage(hModule,MAKEINTRESOURCE(it->languageId),IMAGE_BITMAP,22,27,LR_CREATEDIBSECTION);
|
||||
}
|
||||
|
||||
FreeLibrary(hModule);
|
||||
|
||||
if (newVersion && !downloadUrl.IsEmpty() && !news.IsEmpty())
|
||||
return LOAD_OK;
|
||||
Clear();
|
||||
return LOAD_ERROR;
|
||||
}
|
||||
|
||||
struct DownloadFileParams
|
||||
{
|
||||
// input
|
||||
@@ -989,82 +824,6 @@ static DWORD WINAPI ThreadDownloadFile( void *param )
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD DownloadLanguageDll( HWND owner, TSettingsComponent component, const LanguageVersionData &data, CString &error )
|
||||
{
|
||||
// download file
|
||||
wchar_t path[_MAX_PATH]=L"%ALLUSERSPROFILE%\\OpenShell\\Languages";
|
||||
DoEnvironmentSubst(path,_countof(path));
|
||||
SHCreateDirectory(NULL,path);
|
||||
wchar_t fname[_MAX_PATH];
|
||||
Sprintf(fname,_countof(fname),L"%s.dll",data.language);
|
||||
|
||||
CProgressDlg progress;
|
||||
progress.Create(owner,LoadStringEx(IDS_PROGRESS_TITLE_DOWNLOAD));
|
||||
|
||||
DownloadFileParams params;
|
||||
params.url=data.url;
|
||||
params.signer=NULL;
|
||||
params.hash=data.hash;
|
||||
params.path=path;
|
||||
params.fname=fname;
|
||||
params.progress=&progress;
|
||||
params.bAcceptCached=true;
|
||||
params.component=component;
|
||||
|
||||
HANDLE hThread=CreateThread(NULL,0,ThreadDownloadFile,¶ms,0,NULL);
|
||||
|
||||
while (1)
|
||||
{
|
||||
DWORD wait=MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
|
||||
if (wait!=WAIT_OBJECT_0+1)
|
||||
break;
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg,0,0,0,PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
progress.DestroyWindow();
|
||||
CloseHandle(hThread);
|
||||
|
||||
if (params.downloadRes==DOWNLOAD_CANCEL)
|
||||
return 2;
|
||||
if (params.downloadRes==DOWNLOAD_INTERNET)
|
||||
{
|
||||
error=LoadStringEx(IDS_INTERNET_FAIL);
|
||||
return 0;
|
||||
}
|
||||
else if (params.downloadRes==DOWNLOAD_START)
|
||||
{
|
||||
error=LoadStringEx(IDS_INITIATE_FAIL);
|
||||
return 0;
|
||||
}
|
||||
else if (params.downloadRes==DOWNLOAD_FAIL)
|
||||
{
|
||||
error=LoadStringEx(IDS_LANG_DOWNLOAD_FAIL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (params.saveRes)
|
||||
{
|
||||
wchar_t msg[256];
|
||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,params.saveRes,0,msg,_countof(msg),NULL);
|
||||
error.Format(LoadStringEx(IDS_LANG_SAVE_FAIL),params.fname);
|
||||
error+="\r\n";
|
||||
error+=msg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!params.valid)
|
||||
{
|
||||
error=LoadStringEx(IDS_LANG_DOWNLOAD_FAIL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
DWORD DownloadNewVersion( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error )
|
||||
{
|
||||
CComString pPath;
|
||||
|
||||
@@ -15,37 +15,16 @@ enum TVersionCheck
|
||||
|
||||
enum TSettingsComponent;
|
||||
|
||||
struct LanguageVersionData
|
||||
{
|
||||
CString language;
|
||||
CString url;
|
||||
DWORD version;
|
||||
DWORD build;
|
||||
DWORD hash;
|
||||
bool bBasic;
|
||||
WORD languageId;
|
||||
HBITMAP bitmap;
|
||||
|
||||
LanguageVersionData( void ) { bBasic=false; bitmap=NULL; }
|
||||
};
|
||||
|
||||
struct VersionData
|
||||
{
|
||||
bool bValid = false;
|
||||
DWORD newVersion = 0;
|
||||
DWORD encodedLangVersion = 0;
|
||||
CString downloadUrl;
|
||||
CString downloadSigner;
|
||||
CString news;
|
||||
CString updateLink;
|
||||
CString languageLink;
|
||||
CString altUrl;
|
||||
bool bNewVersion = false;
|
||||
bool bIgnoreVersion = false;
|
||||
bool bNewLanguage = false;
|
||||
bool bIgnoreLanguage = false;
|
||||
CString newLanguage;
|
||||
std::vector<LanguageVersionData> languages;
|
||||
|
||||
~VersionData( void ) { Clear(); }
|
||||
void Clear( void );
|
||||
@@ -60,7 +39,6 @@ struct VersionData
|
||||
};
|
||||
|
||||
TLoadResult Load(bool official);
|
||||
TLoadResult Load( const wchar_t *fname, bool bLoadFlags );
|
||||
private:
|
||||
void operator=( const VersionData& );
|
||||
};
|
||||
@@ -69,5 +47,4 @@ typedef void (*tNewVersionCallback)( VersionData &data );
|
||||
|
||||
// 0 - fail, 1 - success, 2 - cancel
|
||||
DWORD CheckForNewVersion( HWND owner, TSettingsComponent component, TVersionCheck check, tNewVersionCallback callback );
|
||||
DWORD DownloadLanguageDll( HWND owner, TSettingsComponent component, const LanguageVersionData &data, CString &error );
|
||||
DWORD DownloadNewVersion( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error );
|
||||
|
||||
@@ -68,17 +68,13 @@ public:
|
||||
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
|
||||
MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
|
||||
MESSAGE_HANDLER( WM_SIZE, OnSize )
|
||||
COMMAND_ID_HANDLER( IDC_BUTTONCHECK, OnCheckUpdates )
|
||||
NOTIFY_HANDLER( IDC_LISTLANGUAGE, LVN_ITEMCHANGED, OnSelChange )
|
||||
NOTIFY_HANDLER( IDC_LISTLANGUAGE, LVN_ITEMCHANGING, OnSelChanging )
|
||||
NOTIFY_HANDLER( IDC_LISTLANGUAGE, NM_CUSTOMDRAW, OnCustomDraw )
|
||||
NOTIFY_HANDLER( IDC_LINKDOWNLOAD, NM_CLICK, OnDownload )
|
||||
END_MSG_MAP()
|
||||
|
||||
BEGIN_RESIZE_MAP
|
||||
RESIZE_CONTROL(IDC_LISTLANGUAGE,MOVE_SIZE_X|MOVE_SIZE_Y)
|
||||
RESIZE_CONTROL(IDC_BUTTONCHECK,MOVE_MOVE_Y)
|
||||
RESIZE_CONTROL(IDC_LINKDOWNLOAD,MOVE_SIZE_X|MOVE_MOVE_Y)
|
||||
END_RESIZE_MAP
|
||||
|
||||
void SetGroup( CSetting *pGroup );
|
||||
@@ -92,11 +88,9 @@ protected:
|
||||
LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
|
||||
LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
|
||||
LRESULT OnSize( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
|
||||
LRESULT OnCheckUpdates( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
||||
LRESULT OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
|
||||
LRESULT OnSelChanging( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
|
||||
LRESULT OnCustomDraw( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
|
||||
LRESULT OnDownload( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
|
||||
|
||||
private:
|
||||
CSetting *m_pSetting;
|
||||
@@ -114,17 +108,12 @@ private:
|
||||
bool operator<( const LangInfo &info ) { return _wcsicmp(name,info.name)<0; }
|
||||
};
|
||||
std::vector<LangInfo> m_LanguageIDs; // the order matches the items in the listbox
|
||||
static VersionData s_VersionData;
|
||||
static void NewVersionCallback( VersionData &data );
|
||||
|
||||
void UpdateFlags( void );
|
||||
void UpdateLink( const wchar_t *language );
|
||||
|
||||
void AddFlag( const wchar_t *langName, int langId, HBITMAP bmp );
|
||||
};
|
||||
|
||||
VersionData CLanguageSettingsDlg::s_VersionData;
|
||||
|
||||
void CLanguageSettingsDlg::AddFlag( const wchar_t *langName, int langId, HBITMAP bmp )
|
||||
{
|
||||
int idx=1;
|
||||
@@ -156,39 +145,6 @@ void CLanguageSettingsDlg::AddFlag( const wchar_t *langName, int langId, HBITMAP
|
||||
|
||||
void CLanguageSettingsDlg::UpdateFlags( void )
|
||||
{
|
||||
// add flags from s_VersionData
|
||||
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
|
||||
{
|
||||
if (it->bitmap)
|
||||
{
|
||||
BITMAPINFO bi={0};
|
||||
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
|
||||
bi.bmiHeader.biWidth=m_bLargeFlags?32:24;
|
||||
bi.bmiHeader.biHeight=m_bLargeFlags?16:11;
|
||||
bi.bmiHeader.biPlanes=1;
|
||||
bi.bmiHeader.biBitCount=32;
|
||||
|
||||
HDC hdc=CreateCompatibleDC(NULL);
|
||||
HBITMAP bmp=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,NULL,NULL,0);
|
||||
HGDIOBJ bmp0=SelectObject(hdc,bmp);
|
||||
HDC hsrc=CreateCompatibleDC(hdc);
|
||||
HGDIOBJ bmp02=SelectObject(hsrc,it->bitmap);
|
||||
SetDCBrushColor(hdc,0xFF00FF);
|
||||
RECT rc={0,0,bi.bmiHeader.biWidth,bi.bmiHeader.biHeight};
|
||||
FillRect(hdc,&rc,(HBRUSH)GetStockObject(DC_BRUSH));
|
||||
if (m_bLargeFlags)
|
||||
BitBlt(hdc,3,0,22,16,hsrc,0,11,SRCCOPY);
|
||||
else
|
||||
BitBlt(hdc,2,0,16,11,hsrc,0,0,SRCCOPY);
|
||||
SelectObject(hsrc,bmp02);
|
||||
DeleteDC(hsrc);
|
||||
SelectObject(hdc,bmp0);
|
||||
DeleteDC(hdc);
|
||||
AddFlag(it->language,it->languageId,bmp);
|
||||
DeleteObject(bmp);
|
||||
}
|
||||
}
|
||||
|
||||
// add flags from dlls
|
||||
for (int pass=0;pass<2;pass++)
|
||||
{
|
||||
@@ -288,7 +244,6 @@ LRESULT CLanguageSettingsDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
ListView_SetExtendedListViewStyleEx(list,LVS_EX_DOUBLEBUFFER,LVS_EX_DOUBLEBUFFER);
|
||||
LVCOLUMN column={LVCF_WIDTH,0,rc.right-rc.left};
|
||||
ListView_InsertColumn(list,0,&column);
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,L"");
|
||||
|
||||
m_LanguageIDs.resize(_countof(g_LanguageIDs)+1);
|
||||
{
|
||||
@@ -331,11 +286,6 @@ LRESULT CLanguageSettingsDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
ListView_InsertItem(list,&item);
|
||||
}
|
||||
|
||||
// parse update.ver in data and add all flags
|
||||
wchar_t path[_MAX_PATH]=L"%ALLUSERSPROFILE%\\OpenShell\\update.ver";
|
||||
DoEnvironmentSubst(path,_countof(path));
|
||||
s_VersionData.bValid=(s_VersionData.Load(path,true)==VersionData::LOAD_OK);
|
||||
|
||||
UpdateFlags();
|
||||
|
||||
m_Tooltip.Create(TOOLTIPS_CLASS,m_hWnd,NULL,NULL,WS_POPUP|TTS_NOPREFIX);
|
||||
@@ -359,40 +309,6 @@ LRESULT CLanguageSettingsDlg::OnSize( UINT uMsg, WPARAM wParam, LPARAM lParam, B
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CLanguageSettingsDlg::NewVersionCallback( VersionData &data )
|
||||
{
|
||||
s_VersionData.Swap(data);
|
||||
}
|
||||
|
||||
LRESULT CLanguageSettingsDlg::OnCheckUpdates( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
||||
{
|
||||
DWORD res=CheckForNewVersion(m_hWnd,m_Component,CHECK_UPDATE,NewVersionCallback);
|
||||
if (res==2) return 0;
|
||||
if (res)
|
||||
{
|
||||
UpdateFlags();
|
||||
CString language=GetSettingString(L"Language");
|
||||
CWindow list=GetDlgItem(IDC_LISTLANGUAGE);
|
||||
for (int idx=0;idx<(int)m_LanguageIDs.size();idx++)
|
||||
{
|
||||
const wchar_t *name=idx>0?m_LanguageIDs[idx].name.GetString():L"";
|
||||
if (_wcsicmp(language,name)==0)
|
||||
{
|
||||
ListView_SetItemState(list,idx,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
|
||||
ListView_EnsureVisible(list,idx,FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
UpdateLink(language);
|
||||
}
|
||||
else
|
||||
{
|
||||
s_VersionData.Clear();
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,LoadStringEx(IDS_LANGUAGE_FAIL));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CLanguageSettingsDlg::OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHandled )
|
||||
{
|
||||
// set setting
|
||||
@@ -411,7 +327,6 @@ LRESULT CLanguageSettingsDlg::OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHand
|
||||
m_pSetting->flags|=CSetting::FLAG_DEFAULT;
|
||||
else
|
||||
m_pSetting->flags&=~CSetting::FLAG_DEFAULT;
|
||||
UpdateLink(name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -448,41 +363,6 @@ static HRESULT CALLBACK TaskDialogCallbackProc( HWND hwnd, UINT uNotification, W
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
LRESULT CLanguageSettingsDlg::OnDownload( int idCtrl, LPNMHDR pnmh, BOOL& bHandled )
|
||||
{
|
||||
CString language=GetSettingString(L"Language");
|
||||
if (language.IsEmpty())
|
||||
language=m_LanguageIDs[0].name;
|
||||
|
||||
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
|
||||
{
|
||||
if (_wcsicmp(it->language,language)==0)
|
||||
{
|
||||
CString error;
|
||||
DWORD res=DownloadLanguageDll(m_hWnd,m_Component,*it,error);
|
||||
if (res==2)
|
||||
return 0;
|
||||
if (res)
|
||||
MessageBox(LoadStringEx(it->bBasic?IDS_LANGUAGE_SUCCESS2:IDS_LANGUAGE_SUCCESS),LoadStringEx(IDS_UPDATE_TITLE),MB_OK|(it->bBasic?MB_ICONWARNING:MB_ICONINFORMATION));
|
||||
else
|
||||
{
|
||||
if (!s_VersionData.languageLink.IsEmpty())
|
||||
error+=L" "+LoadStringEx(IDS_DOWNLOAD_TIP)+L"\r\n\r\n"+s_VersionData.languageLink;
|
||||
TASKDIALOGCONFIG task={sizeof(task),m_hWnd,NULL,TDF_ENABLE_HYPERLINKS|TDF_ALLOW_DIALOG_CANCELLATION|TDF_USE_HICON_MAIN,TDCBF_OK_BUTTON};
|
||||
CString title=LoadStringEx(IDS_UPDATE_TITLE);
|
||||
task.pszWindowTitle=title;
|
||||
task.pszContent=error;
|
||||
task.hMainIcon=LoadIcon(NULL,IDI_ERROR);
|
||||
task.pfCallback=TaskDialogCallbackProc;
|
||||
TaskDialogIndirect(&task,NULL,NULL,NULL);
|
||||
}
|
||||
UpdateLink(language);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
|
||||
{
|
||||
m_bLocked=false;
|
||||
@@ -504,7 +384,6 @@ void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
|
||||
break;
|
||||
}
|
||||
}
|
||||
UpdateLink(m_pSetting->value.bstrVal);
|
||||
m_bLocked=m_pSetting->IsLocked();
|
||||
|
||||
TOOLINFO tool={sizeof(tool),0,m_hWnd,'CLSH'};
|
||||
@@ -517,52 +396,6 @@ void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
|
||||
ListView_SetBkColor(list,GetSysColor(m_bLocked?COLOR_BTNFACE:COLOR_WINDOW));
|
||||
}
|
||||
|
||||
void CLanguageSettingsDlg::UpdateLink( const wchar_t *language )
|
||||
{
|
||||
TOOLINFO tool={sizeof(tool),TTF_SUBCLASS|TTF_IDISHWND,m_hWnd,'CLSH'};
|
||||
tool.uId=(UINT_PTR)GetDlgItem(IDC_LINKDOWNLOAD).m_hWnd;
|
||||
m_Tooltip.SendMessage(TTM_DELTOOL,0,(LPARAM)&tool);
|
||||
|
||||
if (!s_VersionData.bValid)
|
||||
{
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,L"");
|
||||
return;
|
||||
}
|
||||
if (!*language)
|
||||
language=m_LanguageIDs[0].name;
|
||||
|
||||
wchar_t text[1024];
|
||||
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
|
||||
{
|
||||
if (_wcsicmp(it->language,language)==0)
|
||||
{
|
||||
DWORD dllVersion=0, dllBuild=0;
|
||||
HINSTANCE resInstance=LoadTranslationDll(language);
|
||||
if (resInstance)
|
||||
{
|
||||
dllVersion=GetVersionEx(resInstance,&dllBuild);
|
||||
FreeLibrary(resInstance);
|
||||
}
|
||||
if (it->version>dllVersion || (it->version==dllVersion && it->build>dllBuild))
|
||||
{
|
||||
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_DOWNLOAD),language);
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,text);
|
||||
|
||||
tool.lpszText=(LPWSTR)(LPCWSTR)it->url;
|
||||
m_Tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
||||
}
|
||||
else
|
||||
{
|
||||
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_UPDATED),language);
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,text);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_MISSING),language);
|
||||
SetDlgItemText(IDC_LINKDOWNLOAD,text);
|
||||
}
|
||||
|
||||
class CLanguageSettingsPanel: public ISettingsPanel
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -98,8 +98,6 @@ FONT 9, "Segoe UI", 400, 0, 0x0
|
||||
BEGIN
|
||||
CONTROL "",IDC_LISTLANGUAGE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,18,302,99
|
||||
LTEXT "Select a language for the user interface:",IDC_STATICHINT,7,7,131,8
|
||||
PUSHBUTTON "&Check for Updates",IDC_BUTTONCHECK,7,123,75,14
|
||||
CONTROL "download link goes here",IDC_LINKDOWNLOAD,"SysLink",WS_TABSTOP,85,126,224,10
|
||||
END
|
||||
|
||||
IDD_CUSTOMTREE DIALOGEX 0, 0, 365, 183
|
||||
@@ -279,20 +277,12 @@ BEGIN
|
||||
IDS_SETTING_SEARCH "Search Results"
|
||||
IDS_WEBSITE_TIP "Visit Open-Shell on the web - https://open-shell.github.io/Open-Shell-Menu"
|
||||
IDS_LOCATE_SETTING "Locate setting"
|
||||
IDS_LANGUAGE_UPDATED "The language %s is up to date."
|
||||
IDS_LANGUAGE_MISSING "Update for language %s is not available."
|
||||
IDS_LANGUAGE_DOWNLOAD "New update for language %s is available. <a>Click here to install it.</a>"
|
||||
IDS_LANGUAGE_SUCCESS "The language file was installed successfully.\nYou need to log off and back on for the update to take effect."
|
||||
IDS_LANGUAGE_SUCCESS2 "The language file was installed successfully.\nYou need to log off and back on for the update to take effect.\n\nNote: This update provides only basic translations. It supports only the main text found in the start menu and in Explorer. The settings will not be translated."
|
||||
IDS_LANGUAGE_FAIL "Failed to check for updates."
|
||||
IDS_INTERNET_FAIL "Failed to connect to the Internet."
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_INITIATE_FAIL "Failed to initiate the download."
|
||||
IDS_LANG_DOWNLOAD_FAIL "Failed to download the language file."
|
||||
IDS_LANG_SAVE_FAIL "Failed to save language file '%s'."
|
||||
IDS_UPDATE_TITLE "Open-Shell Update"
|
||||
IDS_INST_DOWNLOAD_FAIL "Failed to download the new version."
|
||||
IDS_INST_SAVE_FAIL "Failed to save file '%s'."
|
||||
@@ -308,11 +298,6 @@ BEGIN
|
||||
IDS_UNSAVED_TITLE "Unsaved changes"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_VERSION_URL "http://www.classicshell.net/files/updates/update_"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user