mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[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
This commit is contained in:
parent
f65f506032
commit
aa15934f23
6 changed files with 70 additions and 40 deletions
|
@ -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;
|
||||
|
||||
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 (m_szPath.IsEmpty())
|
||||
return FALSE;
|
||||
|
||||
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
|
||||
|
|
|
@ -1321,7 +1321,7 @@ private:
|
|||
break;
|
||||
|
||||
case ID_RESETDB:
|
||||
m_AvailableApps.UpdateAppsDB();
|
||||
CAvailableApps::ForceUpdateAppsDB();
|
||||
UpdateApplicationsList(-1);
|
||||
break;
|
||||
|
||||
|
|
|
@ -107,16 +107,21 @@ private:
|
|||
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);
|
||||
|
|
|
@ -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'?');
|
||||
|
|
|
@ -56,6 +56,7 @@ BOOL CmdParser(LPWSTR lpCmdLine)
|
|||
}
|
||||
|
||||
CAvailableApps apps;
|
||||
CAvailableApps::UpdateAppsDB();
|
||||
apps.EnumAvailableApplications(ENUM_ALL_AVAILABLE, NULL);
|
||||
ATL::CSimpleArray<PAPPLICATION_INFO> arrAppInfo = apps.FindInfoList(arrNames);
|
||||
if (arrAppInfo.GetSize() > 0)
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
Loading…
Reference in a new issue