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;

Reply via email to