// CAvailableApplicationInfo
CAvailableApplicationInfo::CAvailableApplicationInfo(const ATL::CStringW& sFileNameParam)
- : m_IsInstalled(FALSE), m_HasLanguageInfo(FALSE), m_HasInstalledVersion(FALSE), m_Parser(sFileNameParam)
+ : m_IsSelected(FALSE), m_LicenseType(LICENSE_NONE), m_sFileName(sFileNameParam),
+ m_IsInstalled(FALSE), m_HasLanguageInfo(FALSE), m_HasInstalledVersion(FALSE)
{
- m_LicenseType = LICENSE_NONE;
-
- m_sFileName = sFileNameParam;
-
RetrieveGeneralInfo();
}
// Lazily load general info from the file
VOID CAvailableApplicationInfo::RetrieveGeneralInfo()
{
- m_Category = m_Parser.GetInt(L"Category");
+ m_Parser = new CConfigParser(m_sFileName);
+
+ m_Category = m_Parser->GetInt(L"Category");
if (!GetString(L"Name", m_szName)
|| !GetString(L"URLDownload", m_szUrlDownload))
{
+ delete m_Parser;
return;
}
{
RetrieveInstalledVersion();
}
+
+ delete m_Parser;
}
VOID CAvailableApplicationInfo::RetrieveInstalledStatus()
ATL::CStringW szBuffer;
// TODO: Get multiline parameter
- if (!m_Parser.GetString(L"Languages", szBuffer))
+ if (!m_Parser->GetString(L"Languages", szBuffer))
{
m_HasLanguageInfo = FALSE;
return;
VOID CAvailableApplicationInfo::RetrieveLicenseType()
{
- INT IntBuffer = m_Parser.GetInt(L"LicenseType");
+ INT IntBuffer = m_Parser->GetInt(L"LicenseType");
if (IsLicenseType(IntBuffer))
{
inline BOOL CAvailableApplicationInfo::GetString(LPCWSTR lpKeyName, ATL::CStringW& ReturnedString)
{
- if (!m_Parser.GetString(lpKeyName, ReturnedString))
+ if (!m_Parser->GetString(lpKeyName, ReturnedString))
{
ReturnedString.Empty();
return FALSE;
}
return TRUE;
}
-// CAvailableApplicationInfo
+// CAvailableApplicationInfo
-// CAvailableApps
-ATL::CStringW CAvailableApps::m_szPath;
-ATL::CStringW CAvailableApps::m_szCabPath;
-ATL::CStringW CAvailableApps::m_szAppsPath;
-ATL::CStringW CAvailableApps::m_szSearchPath;
-
-BOOL CAvailableApps::InitializeStaticStrings()
+// AvailableStrings
+AvailableStrings::AvailableStrings()
{
-
- if (!m_szPath.IsEmpty())
- {
- // strings are filled
- return TRUE;
- }
-
//FIXME: maybe provide a fallback?
- if (GetStorageDirectory(m_szPath))
+ if (GetStorageDirectory(szPath))
{
- m_szAppsPath = m_szPath + L"\\rapps\\";
- m_szCabPath = m_szPath + L"\\rappmgr.cab";
- m_szSearchPath = m_szAppsPath + L"*.txt";
- return TRUE;
+ szAppsPath = szPath + L"\\rapps\\";
+ szCabName = L"rappmgr.cab";
+ szCabDir = szPath;
+ szCabPath = (szCabDir + L"\\") + szCabName;
+ szSearchPath = szAppsPath + L"*.txt";
}
-
- return FALSE;
}
+// AvailableStrings
+
+// CAvailableApps
+AvailableStrings CAvailableApps::m_Strings;
CAvailableApps::CAvailableApps()
{
- //set all paths
- InitializeStaticStrings();
}
VOID CAvailableApps::FreeCachedEntries()
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData;
- if (!InitializeStaticStrings())
- {
- return;
- }
-
- hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
+ hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
ATL::CStringW szTmp;
do
{
- szTmp = m_szAppsPath + FindFileData.cFileName;
+ szTmp = m_Strings.szAppsPath + FindFileData.cFileName;
DeleteFileW(szTmp.GetString());
} while (FindNextFileW(hFind, &FindFileData) != 0);
FindClose(hFind);
}
- RemoveDirectoryW(m_szAppsPath);
- RemoveDirectoryW(m_szPath);
+ RemoveDirectoryW(m_Strings.szAppsPath);
+ RemoveDirectoryW(m_Strings.szPath);
}
BOOL CAvailableApps::UpdateAppsDB()
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData;
- if (!InitializeStaticStrings())
- {
- return FALSE;
- }
-
- if (!CreateDirectoryW(m_szPath.GetString(), NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
+ if (!CreateDirectoryW(m_Strings.szPath, 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);
+ hFind = FindFirstFileW(m_Strings.szSearchPath, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
FindClose(hFind);
CDownloadManager::DownloadApplicationsDB(APPLICATION_DATABASE_URL);
- if (!ExtractFilesFromCab(m_szCabPath, m_szAppsPath))
+ if (!ExtractFilesFromCab(m_Strings.szCabName,
+ m_Strings.szCabDir,
+ m_Strings.szAppsPath))
{
return FALSE;
}
- DeleteFileW(m_szCabPath.GetString());
+ DeleteFileW(m_Strings.szCabPath);
return TRUE;
}
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW FindFileData;
- hFind = FindFirstFileW(m_szSearchPath.GetString(), &FindFileData);
+ hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
m_InfoList.AddTail(Info);
skip_if_cached:
- if (Info->m_Category == FALSE)
- continue;
-
- if (EnumType != Info->m_Category && EnumType != ENUM_ALL_AVAILABLE)
- continue;
-
- Info->RefreshAppInfo();
-
- if (lpEnumProc)
- lpEnumProc(static_cast<CAvailableApplicationInfo*>(Info), m_szAppsPath.GetString());
+ if (EnumType == Info->m_Category
+ || EnumType == ENUM_ALL_AVAILABLE
+ || (EnumType == ENUM_CAT_SELECTED && Info->m_IsSelected))
+ {
+ Info->RefreshAppInfo();
+ if (lpEnumProc)
+ lpEnumProc(Info, m_Strings.szAppsPath.GetString());
+ }
} while (FindNextFileW(hFind, &FindFileData) != 0);
FindClose(hFind);
return result;
}
-const ATL::CStringW& CAvailableApps::GetFolderPath() const
-{
- return m_szPath;
-}
-
-const ATL::CStringW& CAvailableApps::GetAppPath() const
+ATL::CSimpleArray<CAvailableApplicationInfo> CAvailableApps::GetSelected() const
{
- return m_szAppsPath;
-}
+ ATL::CSimpleArray<CAvailableApplicationInfo> result;
+ POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
+ CAvailableApplicationInfo* Info;
-const ATL::CStringW& CAvailableApps::GetCabPath() const
-{
- return m_szCabPath;
+ while (CurrentListPosition != NULL)
+ {
+ Info = m_InfoList.GetNext(CurrentListPosition);
+ if (Info->m_IsSelected)
+ {
+ result.Add(*Info);
+ }
+ }
+ return result;
}
-LPCWSTR CAvailableApps::GetFolderPathString() const
+const ATL::CStringW& CAvailableApps::GetFolderPath() const
{
- return m_szPath.GetString();
+ return m_Strings.szPath;
}
-LPCWSTR CAvailableApps::GetAppPathString() const
+const ATL::CStringW& CAvailableApps::GetAppPath() const
{
- return m_szPath.GetString();
+ return m_Strings.szAppsPath;
}
-LPCWSTR CAvailableApps::GetCabPathString() const
+const ATL::CStringW& CAvailableApps::GetCabPath() const
{
- return m_szPath.GetString();
+ return m_Strings.szCabPath;
}
// CAvailableApps