Author: ashaposhnikov
Date: Thu Aug 24 22:04:44 2017
New Revision: 75662

URL: http://svn.reactos.org/svn/reactos?rev=75662&view=rev
Log:
[RAPPS]
Changes in the update process:
- Made UpdateAppsDB() functions static and added ForceUpdateAppsDB()
- EnumAvailableApplications() doesn't update DB on it's own
- Force updating now done only if bUpdateAtStart set or if no settings loaded 
(first run)
- Minor cleanup

Modified:
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp
    branches/GSoC_2017/rapps/reactos/base/applications/rapps/winmain.cpp

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp      
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp      
[iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -201,15 +201,28 @@
 // CAvailableApplicationInfo 
 
 // CAvailableApps
-CAvailableApps::CAvailableApps()
-{
-    //set all paths
-    if (GetStorageDirectory(m_szPath))
+ATL::CStringW CAvailableApps::m_szPath;
+ATL::CStringW CAvailableApps::m_szCabPath;
+ATL::CStringW CAvailableApps::m_szAppsPath;
+ATL::CStringW CAvailableApps::m_szSearchPath;
+
+BOOL CAvailableApps::InitializeStaticStrings()
+{
+    //FIXME: maybe provide a fallback?
+    if (m_szPath.IsEmpty() && GetStorageDirectory(m_szPath))
     {
         m_szAppsPath = m_szPath + L"\\rapps\\";
         m_szCabPath = m_szPath + L"\\rappmgr.cab";
         m_szSearchPath = m_szAppsPath + L"*.txt";
-    }
+        return TRUE;
+    }
+    return FALSE;
+}
+
+CAvailableApps::CAvailableApps()
+{
+    //set all paths
+    InitializeStaticStrings();
 }
 
 VOID CAvailableApps::FreeCachedEntries()
@@ -235,7 +248,6 @@
     if (m_szPath.IsEmpty())
         return;
 
-    DeleteFileW(m_szCabPath.GetString());
     hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
 
     if (hFind != INVALID_HANDLE_VALUE)
@@ -248,50 +260,62 @@
         } while (FindNextFileW(hFind, &FindFileData) != 0);
         FindClose(hFind);
     }
+
+    RemoveDirectoryW(m_szAppsPath);
+    RemoveDirectoryW(m_szPath);
 }
 
 BOOL CAvailableApps::UpdateAppsDB()
-{
-    DeleteCurrentAppsDB();
-
-    CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL);
-
-    if (m_szPath.IsEmpty())
-        return FALSE;
-
-    if (!ExtractFilesFromCab(m_szCabPath, m_szAppsPath))
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-BOOL CAvailableApps::EnumAvailableApplications(INT EnumType, AVAILENUMPROC 
lpEnumProc)
 {
     HANDLE hFind = INVALID_HANDLE_VALUE;
     WIN32_FIND_DATAW FindFileData;
 
-    if (!CreateDirectoryW(m_szPath.GetString(), NULL) &&
-        GetLastError() != ERROR_ALREADY_EXISTS)
-    {
-        return FALSE;
-    }
-
+    if (m_szPath.IsEmpty() && !InitializeStaticStrings())
+    {
+        return FALSE;
+    }
+
+    if (!CreateDirectoryW(m_szPath.GetString(), NULL) && GetLastError() != 
ERROR_ALREADY_EXISTS)
+    {
+        return FALSE;
+    }
+
+    //if there are some files in the db folder - we're good
     hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
+    if (hFind != INVALID_HANDLE_VALUE)
+    {
+        return TRUE;
+    }
+
+    CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL);
+
+    if (!ExtractFilesFromCab(m_szCabPath, m_szAppsPath))
+    {
+        return FALSE;
+    }
+
+    DeleteFileW(m_szCabPath.GetString());
+
+    return TRUE;
+}
+
+BOOL CAvailableApps::ForceUpdateAppsDB()
+{
+    DeleteCurrentAppsDB();
+    return UpdateAppsDB();
+}
+
+BOOL CAvailableApps::EnumAvailableApplications(INT EnumType, AVAILENUMPROC 
lpEnumProc)
+{
+    HANDLE hFind = INVALID_HANDLE_VALUE;
+    WIN32_FIND_DATAW FindFileData;
+
+    hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
 
     if (hFind == INVALID_HANDLE_VALUE)
     {
-        if(!UpdateAppsDB()) {
-            return FALSE;
-        }
-
-        hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
-
-        if (hFind == INVALID_HANDLE_VALUE)
-        {
-            return FALSE;
-        }
+        //no db yet
+        return FALSE;
     }
 
     do

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp    
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp    
[iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -1321,7 +1321,7 @@
             break;
 
         case ID_RESETDB:
-            m_AvailableApps.UpdateAppsDB();
+            CAvailableApps::ForceUpdateAppsDB();
             UpdateApplicationsList(-1);
             break;
 

Modified: 
branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- 
branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h    
    [iso-8859-1] (original)
+++ 
branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h    
    [iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -107,16 +107,21 @@
 class CAvailableApps
 {
     ATL::CAtlList<CAvailableApplicationInfo*> m_InfoList;
-    ATL::CStringW m_szPath;
-    ATL::CStringW m_szCabPath;
-    ATL::CStringW m_szAppsPath;
-    ATL::CStringW m_szSearchPath;
+    static ATL::CStringW m_szPath;
+    static ATL::CStringW m_szCabPath;
+    static ATL::CStringW m_szAppsPath;
+    static ATL::CStringW m_szSearchPath;
+
+    static BOOL InitializeStaticStrings();
 
 public:
     CAvailableApps();
+
+    static BOOL UpdateAppsDB();
+    static BOOL ForceUpdateAppsDB();
+
     VOID FreeCachedEntries();
-    VOID DeleteCurrentAppsDB();
-    BOOL UpdateAppsDB();
+    static VOID DeleteCurrentAppsDB();
     BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc);
     const PAPPLICATION_INFO FindInfo(const ATL::CStringW& szAppName);
     ATL::CSimpleArray<PAPPLICATION_INFO> FindInfoList(const 
ATL::CSimpleArray<ATL::CStringW> &arrAppsNames);

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp        
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp        
[iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -565,7 +565,6 @@
             continue;
         }
 
-
         // build the path for the download
         p = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'/');
         q = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'?');

Modified: 
branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp     
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp     
[iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -56,6 +56,7 @@
     }
 
     CAvailableApps apps;
+    CAvailableApps::UpdateAppsDB();
     apps.EnumAvailableApplications(ENUM_ALL_AVAILABLE, NULL);
     ATL::CSimpleArray<PAPPLICATION_INFO> arrAppInfo = 
apps.FindInfoList(arrNames);
     if (arrAppInfo.GetSize() > 0)

Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/winmain.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/applications/rapps/winmain.cpp?rev=75662&r1=75661&r2=75662&view=diff
==============================================================================
--- branches/GSoC_2017/rapps/reactos/base/applications/rapps/winmain.cpp        
[iso-8859-1] (original)
+++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/winmain.cpp        
[iso-8859-1] Thu Aug 24 22:04:44 2017
@@ -128,6 +128,7 @@
     HANDLE hMutex;
     HACCEL KeyBrd;
     MSG Msg;
+    BOOL bFirstLaunch;
 
     InitializeAtlModule(hInstance, TRUE);
 
@@ -149,8 +150,8 @@
         SetForegroundWindow(hWindow);
         return 1;
     }
-
-    if (!LoadSettings())
+    bFirstLaunch = LoadSettings();
+    if (bFirstLaunch)
     {
         FillDefaultSettings(&SettingsInfo);
     }
@@ -158,19 +159,19 @@
     InitLogs();
     InitCommonControls();
 
-    //skip window creation if there were some keys
+    // skip window creation if there were some keys
     if (!CmdParser(lpCmdLine))
     {
+        if (SettingsInfo.bUpdateAtStart || bFirstLaunch)
+            CAvailableApps::ForceUpdateAppsDB();
+
         hMainWnd = CreateMainWindow();
+
         if (hMainWnd)
         {
             /* Maximize it if we must */
-            ShowWindow(hMainWnd, (SettingsInfo.bSaveWndPos && 
SettingsInfo.Maximized ? SW_MAXIMIZE : nShowCmd));
+            ShowWindow(hMainWnd, ((SettingsInfo.bSaveWndPos && 
SettingsInfo.Maximized) ? SW_MAXIMIZE : nShowCmd));
             UpdateWindow(hMainWnd);
-
-            //TODO: get around the ugliness
-            if (SettingsInfo.bUpdateAtStart)
-                GetAvailableApps()->UpdateAppsDB();
 
             /* Load the menu hotkeys */
             KeyBrd = LoadAcceleratorsW(NULL, MAKEINTRESOURCEW(HOTKEYS));


Reply via email to