[RAPPS] Simplified string creation in CAvailableApps

Created a struct that fills itself upon creation.
This makes it easy to include in CAvailableApps without additional weirdness.
This commit is contained in:
Alexander Shaposhnikov 2018-01-02 02:07:12 +02:00
parent b20280a0f9
commit 8d436d9bb5
No known key found for this signature in database
GPG key ID: 2BC6459908479EFC
2 changed files with 34 additions and 71 deletions

View file

@ -209,37 +209,24 @@ inline BOOL CAvailableApplicationInfo::GetString(LPCWSTR lpKeyName, ATL::CString
} }
// CAvailableApplicationInfo // CAvailableApplicationInfo
// CAvailableApps // AvailableStrings
ATL::CStringW CAvailableApps::m_szPath; AvailableStrings::AvailableStrings()
ATL::CStringW CAvailableApps::m_szCabPath;
ATL::CStringW CAvailableApps::m_szAppsPath;
ATL::CStringW CAvailableApps::m_szSearchPath;
BOOL CAvailableApps::InitializeStaticStrings()
{ {
if (!m_szPath.IsEmpty())
{
// strings are filled
return TRUE;
}
//FIXME: maybe provide a fallback? //FIXME: maybe provide a fallback?
if (GetStorageDirectory(m_szPath)) if (GetStorageDirectory(szPath))
{ {
m_szAppsPath = m_szPath + L"\\rapps\\"; szAppsPath = szPath + L"\\rapps\\";
m_szCabPath = m_szPath + L"\\rappmgr.cab"; szCabPath = szPath + L"\\rappmgr.cab";
m_szSearchPath = m_szAppsPath + L"*.txt"; szSearchPath = szAppsPath + L"*.txt";
return TRUE;
} }
return FALSE;
} }
// AvailableStrings
// CAvailableApps
AvailableStrings CAvailableApps::m_Strings;
CAvailableApps::CAvailableApps() CAvailableApps::CAvailableApps()
{ {
//set all paths
InitializeStaticStrings();
} }
VOID CAvailableApps::FreeCachedEntries() VOID CAvailableApps::FreeCachedEntries()
@ -261,26 +248,21 @@ VOID CAvailableApps::DeleteCurrentAppsDB()
HANDLE hFind = INVALID_HANDLE_VALUE; HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData; WIN32_FIND_DATAW FindFileData;
if (!InitializeStaticStrings()) hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
{
return;
}
hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) if (hFind != INVALID_HANDLE_VALUE)
{ {
ATL::CStringW szTmp; ATL::CStringW szTmp;
do do
{ {
szTmp = m_szAppsPath + FindFileData.cFileName; szTmp = m_Strings.szAppsPath + FindFileData.cFileName;
DeleteFileW(szTmp.GetString()); DeleteFileW(szTmp.GetString());
} while (FindNextFileW(hFind, &FindFileData) != 0); } while (FindNextFileW(hFind, &FindFileData) != 0);
FindClose(hFind); FindClose(hFind);
} }
RemoveDirectoryW(m_szAppsPath); RemoveDirectoryW(m_Strings.szAppsPath);
RemoveDirectoryW(m_szPath); RemoveDirectoryW(m_Strings.szPath);
} }
BOOL CAvailableApps::UpdateAppsDB() BOOL CAvailableApps::UpdateAppsDB()
@ -288,18 +270,13 @@ BOOL CAvailableApps::UpdateAppsDB()
HANDLE hFind = INVALID_HANDLE_VALUE; HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData; WIN32_FIND_DATAW FindFileData;
if (!InitializeStaticStrings()) if (!CreateDirectoryW(m_Strings.szPath, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
{
return FALSE;
}
if (!CreateDirectoryW(m_szPath.GetString(), NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
{ {
return FALSE; return FALSE;
} }
//if there are some files in the db folder - we're good //if there are some files in the db folder - we're good
hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData); hFind = FindFirstFileW(m_Strings.szSearchPath, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) if (hFind != INVALID_HANDLE_VALUE)
{ {
FindClose(hFind); FindClose(hFind);
@ -308,12 +285,12 @@ BOOL CAvailableApps::UpdateAppsDB()
CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL); CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL);
if (!ExtractFilesFromCab(m_szCabPath, m_szAppsPath)) if (!ExtractFilesFromCab(m_Strings.szCabPath, m_Strings.szAppsPath))
{ {
return FALSE; return FALSE;
} }
DeleteFileW(m_szCabPath.GetString()); DeleteFileW(m_Strings.szCabPath);
return TRUE; return TRUE;
} }
@ -330,7 +307,7 @@ BOOL CAvailableApps::Enum(INT EnumType, AVAILENUMPROC lpEnumProc)
HANDLE hFind = INVALID_HANDLE_VALUE; HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData; WIN32_FIND_DATAW FindFileData;
hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData); hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) if (hFind == INVALID_HANDLE_VALUE)
{ {
@ -387,7 +364,7 @@ skip_if_cached:
Info->RefreshAppInfo(); Info->RefreshAppInfo();
if (lpEnumProc) if (lpEnumProc)
lpEnumProc(Info, m_szAppsPath.GetString()); lpEnumProc(Info, m_Strings.szAppsPath.GetString());
} while (FindNextFileW(hFind, &FindFileData) != 0); } while (FindNextFileW(hFind, &FindFileData) != 0);
@ -432,31 +409,16 @@ ATL::CSimpleArray<CAvailableApplicationInfo> CAvailableApps::FindInfoList(const
const ATL::CStringW& CAvailableApps::GetFolderPath() const const ATL::CStringW& CAvailableApps::GetFolderPath() const
{ {
return m_szPath; return m_Strings.szPath;
} }
const ATL::CStringW& CAvailableApps::GetAppPath() const const ATL::CStringW& CAvailableApps::GetAppPath() const
{ {
return m_szAppsPath; return m_Strings.szAppsPath;
} }
const ATL::CStringW& CAvailableApps::GetCabPath() const const ATL::CStringW& CAvailableApps::GetCabPath() const
{ {
return m_szCabPath; return m_Strings.szCabPath;
}
LPCWSTR CAvailableApps::GetFolderPathString() const
{
return m_szPath.GetString();
}
LPCWSTR CAvailableApps::GetAppPathString() const
{
return m_szPath.GetString();
}
LPCWSTR CAvailableApps::GetCabPathString() const
{
return m_szPath.GetString();
} }
// CAvailableApps // CAvailableApps

View file

@ -79,15 +79,19 @@ private:
typedef BOOL(CALLBACK *AVAILENUMPROC)(CAvailableApplicationInfo *Info, LPCWSTR szFolderPath); typedef BOOL(CALLBACK *AVAILENUMPROC)(CAvailableApplicationInfo *Info, LPCWSTR szFolderPath);
struct AvailableStrings
{
ATL::CStringW szPath;
ATL::CStringW szCabPath;
ATL::CStringW szAppsPath;
ATL::CStringW szSearchPath;
AvailableStrings();
};
class CAvailableApps class CAvailableApps
{ {
static ATL::CStringW m_szPath; static AvailableStrings m_Strings;
static ATL::CStringW m_szCabPath;
static ATL::CStringW m_szAppsPath;
static ATL::CStringW m_szSearchPath;
static BOOL InitializeStaticStrings();
ATL::CAtlList<CAvailableApplicationInfo*> m_InfoList; ATL::CAtlList<CAvailableApplicationInfo*> m_InfoList;
public: public:
@ -106,7 +110,4 @@ public:
const ATL::CStringW& GetFolderPath() const; const ATL::CStringW& GetFolderPath() const;
const ATL::CStringW& GetAppPath() const; const ATL::CStringW& GetAppPath() const;
const ATL::CStringW& GetCabPath() const; const ATL::CStringW& GetCabPath() const;
LPCWSTR GetFolderPathString() const;
LPCWSTR GetAppPathString() const;
LPCWSTR GetCabPathString() const;
}; };