From: Alexander Shaposhnikov Date: Thu, 24 Aug 2017 22:04:44 +0000 (+0000) Subject: [RAPPS] X-Git-Tag: backups/GSoC_2017/rapps@75905~33 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=aa15934f235073e19e0e564a2ee861611ff7ffd2 [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 svn path=/branches/GSoC_2017/rapps/; revision=75662 --- diff --git a/reactos/base/applications/rapps/available.cpp b/reactos/base/applications/rapps/available.cpp index f4842605ec5..44a76535aee 100644 --- a/reactos/base/applications/rapps/available.cpp +++ b/reactos/base/applications/rapps/available.cpp @@ -201,15 +201,28 @@ inline BOOL CAvailableApplicationInfo::GetString(LPCWSTR lpKeyName, ATL::CString // CAvailableApplicationInfo // CAvailableApps -CAvailableApps::CAvailableApps() +ATL::CStringW CAvailableApps::m_szPath; +ATL::CStringW CAvailableApps::m_szCabPath; +ATL::CStringW CAvailableApps::m_szAppsPath; +ATL::CStringW CAvailableApps::m_szSearchPath; + +BOOL CAvailableApps::InitializeStaticStrings() { - //set all paths - if (GetStorageDirectory(m_szPath)) + //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 @@ VOID CAvailableApps::DeleteCurrentAppsDB() if (m_szPath.IsEmpty()) return; - DeleteFileW(m_szCabPath.GetString()); hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData); if (hFind != INVALID_HANDLE_VALUE) @@ -248,50 +260,62 @@ VOID CAvailableApps::DeleteCurrentAppsDB() } while (FindNextFileW(hFind, &FindFileData) != 0); FindClose(hFind); } + + RemoveDirectoryW(m_szAppsPath); + RemoveDirectoryW(m_szPath); } BOOL CAvailableApps::UpdateAppsDB() { - DeleteCurrentAppsDB(); + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATAW FindFileData; - CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL); + if (m_szPath.IsEmpty() && !InitializeStaticStrings()) + { + return FALSE; + } - if (m_szPath.IsEmpty()) + 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; - if (!CreateDirectoryW(m_szPath.GetString(), NULL) && - GetLastError() != ERROR_ALREADY_EXISTS) - { - return FALSE; - } - 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 diff --git a/reactos/base/applications/rapps/gui.cpp b/reactos/base/applications/rapps/gui.cpp index 343771a0008..d0a83461eea 100644 --- a/reactos/base/applications/rapps/gui.cpp +++ b/reactos/base/applications/rapps/gui.cpp @@ -1321,7 +1321,7 @@ private: break; case ID_RESETDB: - m_AvailableApps.UpdateAppsDB(); + CAvailableApps::ForceUpdateAppsDB(); UpdateApplicationsList(-1); break; diff --git a/reactos/base/applications/rapps/include/available.h b/reactos/base/applications/rapps/include/available.h index 1e20c4c6fb4..5c9fff0f6c4 100644 --- a/reactos/base/applications/rapps/include/available.h +++ b/reactos/base/applications/rapps/include/available.h @@ -107,16 +107,21 @@ private: class CAvailableApps { ATL::CAtlList 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 FindInfoList(const ATL::CSimpleArray &arrAppsNames); diff --git a/reactos/base/applications/rapps/loaddlg.cpp b/reactos/base/applications/rapps/loaddlg.cpp index 3d43bb70e08..d024d860541 100644 --- a/reactos/base/applications/rapps/loaddlg.cpp +++ b/reactos/base/applications/rapps/loaddlg.cpp @@ -565,7 +565,6 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) continue; } - // build the path for the download p = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'/'); q = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'?'); diff --git a/reactos/base/applications/rapps/unattended.cpp b/reactos/base/applications/rapps/unattended.cpp index 69836b1b646..5bcd169a4a3 100644 --- a/reactos/base/applications/rapps/unattended.cpp +++ b/reactos/base/applications/rapps/unattended.cpp @@ -56,6 +56,7 @@ BOOL CmdParser(LPWSTR lpCmdLine) } CAvailableApps apps; + CAvailableApps::UpdateAppsDB(); apps.EnumAvailableApplications(ENUM_ALL_AVAILABLE, NULL); ATL::CSimpleArray arrAppInfo = apps.FindInfoList(arrNames); if (arrAppInfo.GetSize() > 0) diff --git a/reactos/base/applications/rapps/winmain.cpp b/reactos/base/applications/rapps/winmain.cpp index 20e16d584ba..1e61c56d2da 100644 --- a/reactos/base/applications/rapps/winmain.cpp +++ b/reactos/base/applications/rapps/winmain.cpp @@ -128,6 +128,7 @@ INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi HANDLE hMutex; HACCEL KeyBrd; MSG Msg; + BOOL bFirstLaunch; InitializeAtlModule(hInstance, TRUE); @@ -149,8 +150,8 @@ INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi SetForegroundWindow(hWindow); return 1; } - - if (!LoadSettings()) + bFirstLaunch = LoadSettings(); + if (bFirstLaunch) { FillDefaultSettings(&SettingsInfo); } @@ -158,20 +159,20 @@ INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi 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));