https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4900dd3d87531c6ae411dad376188cb9e1b229de
commit 4900dd3d87531c6ae411dad376188cb9e1b229de Author: Marcus Boillat <[email protected]> AuthorDate: Tue May 24 11:20:52 2022 +0200 Commit: GitHub <[email protected]> CommitDate: Tue May 24 12:20:52 2022 +0300 [RAPPS] Improve localized display of installation date (#4498) Parse InstallDate registry key in "YYYYMMDD" format. CORE-17422 Signed-off-by: Marcus Boillat <[email protected]> Reviewed-by: Mark Jansen <[email protected]> Reviewed-by: Hermès Bélusca-Maïto <[email protected]> Reviewed-by: Stanislav Motylkov <[email protected]> --- base/applications/rapps/installed.cpp | 49 ++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/base/applications/rapps/installed.cpp b/base/applications/rapps/installed.cpp index 3528c2c3aaa..7162f471b50 100644 --- a/base/applications/rapps/installed.cpp +++ b/base/applications/rapps/installed.cpp @@ -45,30 +45,43 @@ void CInstalledApplicationInfo::EnsureDetailsLoaded() GetApplicationRegString(L"Contact", szContact); GetApplicationRegString(L"URLUpdateInfo", szURLUpdateInfo); GetApplicationRegString(L"URLInfoAbout", szURLInfoAbout); - if (GetApplicationRegString(L"InstallDate", szInstallDate) == FALSE) + + DWORD dwInstallTimeStamp; + SYSTEMTIME InstallLocalTime; + if (GetApplicationRegString(L"InstallDate", szInstallDate)) { - // It might be a DWORD (Unix timestamp). try again. - DWORD dwInstallTimeStamp; - if (GetApplicationRegDword(L"InstallDate", &dwInstallTimeStamp)) + ZeroMemory(&InstallLocalTime, sizeof(InstallLocalTime)); + // Check if we have 8 characters to parse the datetime. + // Maybe other formats exist as well? + szInstallDate = szInstallDate.Trim(); + if (szInstallDate.GetLength() == 8) { - FILETIME InstallFileTime; - SYSTEMTIME InstallSystemTime, InstallLocalTime; + InstallLocalTime.wYear = wcstol(szInstallDate.Left(4).GetString(), NULL, 10); + InstallLocalTime.wMonth = wcstol(szInstallDate.Mid(4, 2).GetString(), NULL, 10); + InstallLocalTime.wDay = wcstol(szInstallDate.Mid(6, 2).GetString(), NULL, 10); + } + } + // It might be a DWORD (Unix timestamp). try again. + else if (GetApplicationRegDword(L"InstallDate", &dwInstallTimeStamp)) + { + FILETIME InstallFileTime; + SYSTEMTIME InstallSystemTime; - UnixTimeToFileTime(dwInstallTimeStamp, &InstallFileTime); - FileTimeToSystemTime(&InstallFileTime, &InstallSystemTime); + UnixTimeToFileTime(dwInstallTimeStamp, &InstallFileTime); + FileTimeToSystemTime(&InstallFileTime, &InstallSystemTime); - // convert to localtime - SystemTimeToTzSpecificLocalTime(NULL, &InstallSystemTime, &InstallLocalTime); + // convert to localtime + SystemTimeToTzSpecificLocalTime(NULL, &InstallSystemTime, &InstallLocalTime); + } - // convert to readable date string - int cchTimeStrLen = GetDateFormatW(LOCALE_USER_DEFAULT, 0, &InstallLocalTime, NULL, 0, 0); + // convert to readable date string + int cchTimeStrLen = GetDateFormatW(LOCALE_USER_DEFAULT, 0, &InstallLocalTime, NULL, 0, 0); + + GetDateFormatW( + LOCALE_USER_DEFAULT, // use default locale for current user + 0, &InstallLocalTime, NULL, szInstallDate.GetBuffer(cchTimeStrLen), cchTimeStrLen); + szInstallDate.ReleaseBuffer(); - GetDateFormatW( - LOCALE_USER_DEFAULT, // use default locale for current user - 0, &InstallLocalTime, NULL, szInstallDate.GetBuffer(cchTimeStrLen), cchTimeStrLen); - szInstallDate.ReleaseBuffer(); - } - } GetApplicationRegString(L"InstallLocation", szInstallLocation); GetApplicationRegString(L"InstallSource", szInstallSource); DWORD dwWindowsInstaller = 0;
