ReactOS  0.4.15-dev-5120-gfb68e76
available.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Applications Manager
3  * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE: Classes for working with available applications
5  * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
6  * Copyright 2015 Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
7  * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
8  * Copyright 2020 He Yang (1160386205@qq.com)
9  */
10 
11 #include "rapps.h"
12 
13 #include "available.h"
14 #include "misc.h"
15 #include "dialogs.h"
16 
17 
18 // CAvailableApplicationInfo
20  : m_LicenseType(LICENSE_NONE), m_SizeBytes(0), m_sFileName(sFileNameParam),
21  m_IsInstalled(FALSE), m_HasLanguageInfo(FALSE), m_HasInstalledVersion(FALSE)
22 {
23  RetrieveGeneralInfo(AvlbStrings);
24 }
25 
27 {
29  {
30  RetrieveGeneralInfo(AvlbStrings);
31  }
32 }
33 
34 // Lazily load general info from the file
36 {
38 
39  // TODO: I temporarily use the file name (without suffix) as package name.
40  // It should be better to put this in a field of ini file.
41  // Consider writing a converter to do this and write a github action for
42  // rapps-db to ensure package_name is unique.
46 
47  m_Parser->GetInt(L"Category", m_Category);
48 
49  if (!GetString(L"Name", m_szName)
50  || !GetString(L"URLDownload", m_szUrlDownload))
51  {
52  delete m_Parser;
53  return;
54  }
55 
56  GetString(L"RegName", m_szRegName);
57  GetString(L"Version", m_szVersion);
58  GetString(L"License", m_szLicense);
59  GetString(L"Description", m_szDesc);
60  GetString(L"URLSite", m_szUrlSite);
61  GetString(L"SHA1", m_szSHA1);
62 
63  static_assert(MAX_SCRNSHOT_NUM < 10000, "MAX_SCRNSHOT_NUM is too big");
64  for (int i = 0; i < MAX_SCRNSHOT_NUM; i++)
65  {
66  CStringW ScrnshotField;
67  ScrnshotField.Format(L"Screenshot%d", i + 1);
68  CStringW ScrnshotLocation;
69  if (!GetString(ScrnshotField, ScrnshotLocation))
70  {
71  // We stop at the first screenshot not found,
72  // so screenshots _have_ to be consecutive
73  break;
74  }
75 
76  if (PathIsURLW(ScrnshotLocation.GetString()))
77  {
78  m_szScrnshotLocation.Add(ScrnshotLocation);
79  }
80  else
81  {
82  // TODO: Does the filename contain anything stuff like ":" "<" ">" ?
83  // these stuff may lead to security issues
84  ATL::CStringW ScrnshotName = AvlbStrings.szAppsPath;
85  PathAppendW(ScrnshotName.GetBuffer(MAX_PATH), L"screenshots");
86  BOOL bSuccess = PathAppendNoDirEscapeW(ScrnshotName.GetBuffer(), ScrnshotLocation.GetString());
87  ScrnshotName.ReleaseBuffer();
88  if (bSuccess)
89  {
90  m_szScrnshotLocation.Add(ScrnshotName);
91  }
92  }
93  }
94 
95  ATL::CStringW IconPath = AvlbStrings.szAppsPath;
96  PathAppendW(IconPath.GetBuffer(MAX_PATH), L"icons");
97 
98  // TODO: are we going to support specify an URL for an icon ?
100  if (GetString(L"Icon", IconLocation))
101  {
102  BOOL bSuccess = PathAppendNoDirEscapeW(IconPath.GetBuffer(), IconLocation.GetString());
103  IconPath.ReleaseBuffer();
104 
105  if (!bSuccess)
106  {
107  IconPath.Empty();
108  }
109  }
110  else
111  {
112  // inifile.ico
113  PathAppendW(IconPath.GetBuffer(), m_szPkgName);
114  IconPath.ReleaseBuffer();
115  IconPath += L".ico";
116  }
117 
118  if (!IconPath.IsEmpty())
119  {
121  {
123  }
124  }
125 
126  RetrieveSize();
130 
131  if (m_IsInstalled)
132  {
134  }
135 
136  delete m_Parser;
137 }
138 
140 {
143 }
144 
146 {
147  ATL::CStringW szNameVersion;
148  szNameVersion = m_szName + L" " + m_szVersion;
151  || ::GetInstalledVersion(&m_szInstalledVersion, szNameVersion);
152 }
153 
155 {
156  const WCHAR cDelimiter = L'|';
157  ATL::CStringW szBuffer;
158 
159  // TODO: Get multiline parameter
160  if (!m_Parser->GetString(L"Languages", szBuffer))
161  {
163  return;
164  }
165 
166  // Parse parameter string
167  ATL::CStringW m_szLocale;
168  INT iLCID;
169  for (INT i = 0; szBuffer[i] != UNICODE_NULL; ++i)
170  {
171  if (szBuffer[i] != cDelimiter && szBuffer[i] != L'\n')
172  {
173  m_szLocale += szBuffer[i];
174  }
175  else
176  {
177  if (StrToIntExW(m_szLocale.GetString(), STIF_DEFAULT, &iLCID))
178  {
179  m_LanguageLCIDs.Add(static_cast<LCID>(iLCID));
180  m_szLocale.Empty();
181  }
182  }
183  }
184 
185  // For the text after delimiter
186  if (!m_szLocale.IsEmpty())
187  {
188  if (StrToIntExW(m_szLocale.GetString(), STIF_DEFAULT, &iLCID))
189  {
190  m_LanguageLCIDs.Add(static_cast<LCID>(iLCID));
191  }
192  }
193 
195 }
196 
198 {
199  INT IntBuffer;
200 
201  m_Parser->GetInt(L"LicenseType", IntBuffer);
202 
203  if (IsLicenseType(IntBuffer))
204  {
205  m_LicenseType = static_cast<LicenseType>(IntBuffer);
206  }
207  else
208  {
210  }
211 }
212 
214 {
215  INT iSizeBytes;
216 
217  if (!m_Parser->GetInt(L"SizeBytes", iSizeBytes))
218  return;
219 
220  m_SizeBytes = iSizeBytes;
223 }
224 
226 {
227  if (!m_HasLanguageInfo)
228  {
229  return FALSE;
230  }
231 
232  //Find locale code in the list
233  const INT nLanguagesSize = m_LanguageLCIDs.GetSize();
234  for (INT i = 0; i < nLanguagesSize; ++i)
235  {
236  if (m_LanguageLCIDs[i] == what)
237  {
238  return TRUE;
239  }
240  }
241 
242  return FALSE;
243 }
244 
246 {
247  return m_HasLanguageInfo;
248 }
249 
251 {
253 }
254 
256 {
258 }
259 
261 {
262  return m_IsInstalled;
263 }
264 
266 {
267  return m_HasInstalledVersion;
268 }
269 
271 {
273 }
274 
276 {
277  if (Index >= (UINT)m_szScrnshotLocation.GetSize())
278  {
279  return FALSE;
280  }
281  ScrnshotLocation = m_szScrnshotLocation[Index];
282  return TRUE;
283 }
284 
286 {
288  {
289  return FALSE;
290  }
292  return TRUE;
293 }
294 
296 {
297  RtlCopyMemory(&m_ftCacheStamp, ftTime, sizeof(FILETIME));
298 }
299 
301 {
302  if (!m_Parser->GetString(lpKeyName, ReturnedString))
303  {
304  ReturnedString.Empty();
305  return FALSE;
306  }
307  return TRUE;
308 }
309 // CAvailableApplicationInfo
310 
311 // AvailableStrings
313 {
314  //FIXME: maybe provide a fallback?
316  {
317  szAppsPath = szPath;
320 
322  szCabDir = szPath;
326 
330  }
331 }
332 // AvailableStrings
333 
334 // CAvailableApps
336 
338 {
339 }
340 
342 {
343  POSITION InfoListPosition = m_InfoList.GetHeadPosition();
344 
345  /* loop and deallocate all the cached app infos in the list */
346  while (InfoListPosition)
347  {
348  CAvailableApplicationInfo* Info = m_InfoList.GetNext(InfoListPosition);
349  delete Info;
350  }
351 
353 }
354 
355 static void DeleteWithWildcard(const CStringW& DirWithFilter)
356 {
358  WIN32_FIND_DATAW FindFileData;
359 
360  hFind = FindFirstFileW(DirWithFilter, &FindFileData);
361 
362  if (hFind == INVALID_HANDLE_VALUE)
363  return;
364 
365  CStringW Dir = DirWithFilter;
367  Dir.ReleaseBuffer();
368 
369  do
370  {
371  ATL::CStringW szTmp = Dir + L"\\";
372  szTmp += FindFileData.cFileName;
373 
374  if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
375  {
377  }
378  } while (FindNextFileW(hFind, &FindFileData) != 0);
379  FindClose(hFind);
380 }
381 
383 {
384  // Delete icons
386  PathAppendW(IconPath.GetBuffer(MAX_PATH), L"icons");
387  IconPath.ReleaseBuffer();
388  DeleteWithWildcard(IconPath + L"\\*.ico");
389 
390  // Delete leftover screenshots
391  ATL::CStringW ScrnshotFolder = m_Strings.szAppsPath;
392  PathAppendW(ScrnshotFolder.GetBuffer(MAX_PATH), L"screenshots");
393  ScrnshotFolder.ReleaseBuffer();
394  DeleteWithWildcard(IconPath + L"\\*.tmp");
395 
396  // Delete data base files (*.txt)
398 
400  RemoveDirectoryW(ScrnshotFolder);
403 }
404 
406 {
408  WIN32_FIND_DATAW FindFileData;
409 
411  {
412  return FALSE;
413  }
414 
415  // If there are some files in the db folder, we're good
416  hFind = FindFirstFileW(m_Strings.szSearchPath, &FindFileData);
417  if (hFind != INVALID_HANDLE_VALUE)
418  {
419  FindClose(hFind);
420  return TRUE;
421  }
422 
425 
429  {
430  return FALSE;
431  }
432 
434 
435  return TRUE;
436 }
437 
439 {
441  return UpdateAppsDB();
442 }
443 
445 {
446  if (EnumType == ENUM_CAT_SELECTED)
447  {
448  CAvailableApplicationInfo *EnumAvlbInfo = NULL;
449 
450  // enum all object in m_SelectedList and invoke callback
454  {
455  EnumAvlbInfo->RefreshAppInfo(m_Strings);
456 
457  if (lpEnumProc)
458  lpEnumProc(EnumAvlbInfo, TRUE, param);
459  }
460  return TRUE;
461  }
462  else
463  {
465  WIN32_FIND_DATAW FindFileData;
466 
467  hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
468 
469  if (hFind == INVALID_HANDLE_VALUE)
470  {
471  //no db yet
472  return FALSE;
473  }
474 
475  do
476  {
477  // loop for all the cached entries
478  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
480 
481  while (CurrentListPosition != NULL)
482  {
483  POSITION LastListPosition = CurrentListPosition;
484  Info = m_InfoList.GetNext(CurrentListPosition);
485 
486  // do we already have this entry in cache?
487  if (Info->m_sFileName == FindFileData.cFileName)
488  {
489  // is it current enough, or the file has been modified since our last time here?
490  if (CompareFileTime(&FindFileData.ftLastWriteTime, &Info->m_ftCacheStamp) == 1)
491  {
492  // recreate our cache, this is the slow path
493  m_InfoList.RemoveAt(LastListPosition);
494 
495  // also remove this in selected list (if exist)
497 
498  delete Info;
499  Info = NULL;
500  break;
501  }
502  else
503  {
504  // speedy path, compare directly, we already have the data
505  goto skip_if_cached;
506  }
507  }
508  }
509 
510  // create a new entry
511  Info = new CAvailableApplicationInfo(FindFileData.cFileName, m_Strings);
512 
513  // set a timestamp for the next time
514  Info->SetLastWriteTime(&FindFileData.ftLastWriteTime);
515 
516  /* Check if we have the download URL */
517  if (Info->m_szUrlDownload.IsEmpty())
518  {
519  /* Can't use it, delete it */
520  delete Info;
521  continue;
522  }
523 
525 
526  skip_if_cached:
527  if (EnumType == Info->m_Category
528  || EnumType == ENUM_ALL_AVAILABLE)
529  {
530  Info->RefreshAppInfo(m_Strings);
531 
532  if (lpEnumProc)
533  {
534  if (m_SelectedList.Find(Info))
535  {
536  lpEnumProc(Info, TRUE, param);
537  }
538  else
539  {
540  lpEnumProc(Info, FALSE, param);
541  }
542  }
543  }
544  } while (FindNextFileW(hFind, &FindFileData));
545 
546  FindClose(hFind);
547  return TRUE;
548  }
549 }
550 
552 {
553  return m_SelectedList.AddTail(AvlbInfo) != 0;
554 }
555 
557 {
558  POSITION Position = m_SelectedList.Find(AvlbInfo);
559  if (Position)
560  {
562  return TRUE;
563  }
564  return FALSE;
565 }
566 
568 {
570  return;
571 }
572 
574 {
575  return m_SelectedList.GetCount();
576 }
577 
579 {
580  if (m_InfoList.IsEmpty())
581  {
582  return NULL;
583  }
584 
585  // linear search
586  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
588  while (CurrentListPosition != NULL)
589  {
590  info = m_InfoList.GetNext(CurrentListPosition);
591  if (info->m_szPkgName.CompareNoCase(szPkgName) == 0)
592  {
593  return info;
594  }
595  }
596  return NULL;
597 }
598 
600 {
602  for (INT i = 0; i < PkgNameList.GetSize(); ++i)
603  {
605  if (Info)
606  {
607  result.Add(*Info);
608  }
609  }
610  return result;
611 }
612 // CAvailableApps
VOID RetrieveGeneralInfo(AvailableStrings &m_Strings)
Definition: available.cpp:35
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
ATL::CStringW m_sFileName
Definition: available.h:63
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2380
POSITION GetHeadPosition() const
Definition: atlcoll.h:549
#define MAKELCID(lgid, srtid)
ATL::CStringW m_szPkgName
Definition: available.h:58
BOOL ExtractFilesFromCab(const ATL::CStringW &szCabName, const ATL::CStringW &szCabDir, const ATL::CStringW &szOutputDir)
Definition: cabinet.cpp:281
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
ATL::CStringW m_szLicense
Definition: available.h:50
#define APPLICATION_DATABASE_URL
Definition: defines.h:32
BOOL Add(const T &t)
Definition: atlsimpcoll.h:58
#define STIF_DEFAULT
Definition: shlwapi.h:1451
GLuint64EXT * result
Definition: glext.h:11304
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
BOOL GetInstalledVersion(ATL::CStringW *pszVersion, const ATL::CStringW &szRegName)
Definition: misc.cpp:285
#define TRUE
Definition: types.h:120
static COORD Position
Definition: mouse.c:34
VOID RemoveAllSelected()
Definition: available.cpp:567
ATL::CSimpleArray< ATL::CStringW > m_szScrnshotLocation
Definition: available.h:56
#define SUBLANG_DEFAULT
Definition: nls.h:168
BOOL HasInstalledVersion() const
Definition: available.cpp:265
VOID DownloadApplicationsDB(LPCWSTR lpUrl, BOOL IsOfficial)
Definition: loaddlg.cpp:1070
ATL::CStringW m_szUrlSite
Definition: available.h:53
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
VOID SetLastWriteTime(FILETIME *ftTime)
Definition: available.cpp:295
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
DWORD LCID
Definition: nls.h:13
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:772
BOOL GetInt(const ATL::CStringW &KeyName, INT &iResult)
CAvailableApplicationInfo * FindAppByPkgName(const ATL::CStringW &szPkgName) const
Definition: available.cpp:578
BOOL IsLicenseType(INT x)
Definition: available.h:24
char szTmp[518]
static BOOL UpdateAppsDB()
Definition: available.cpp:405
int GetSize() const
Definition: atlsimpcoll.h:104
int32_t INT
Definition: typedefs.h:58
static BOOLEAN bSuccess
Definition: drive.cpp:430
WCHAR szSourceURL[INTERNET_MAX_URL_LENGTH]
Definition: settings.h:24
BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
Definition: url.c:2432
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
BOOL GetString(LPCWSTR lpKeyName, ATL::CStringW &ReturnedString)
Definition: available.cpp:300
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:683
ATL::CStringW m_szDesc
Definition: available.h:51
BOOL bUseSource
Definition: settings.h:23
static void DeleteWithWildcard(const CStringW &DirWithFilter)
Definition: available.cpp:355
#define L(x)
Definition: ntvdm.h:50
ATL::CStringW szCabPath
Definition: available.h:32
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
#define FALSE
Definition: types.h:117
#define UNICODE_NULL
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
ATL::CStringW m_szUrlDownload
Definition: available.h:54
unsigned int BOOL
Definition: ntddk_ex.h:94
static struct _test_info info[]
Definition: SetCursorPos.c:19
ULONG CurrentPosition
Definition: patchapi.h:57
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
ATL::CStringW m_szSize
Definition: available.h:52
VOID FreeCachedEntries()
Definition: available.cpp:341
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
size_t GetCount() const
Definition: atlcoll.h:537
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
BOOL FindInLanguages(LCID what) const
Definition: available.cpp:225
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
ATL::CSimpleArray< CAvailableApplicationInfo > FindAppsByPkgNameList(const ATL::CSimpleArray< ATL::CStringW > &arrAppsNames) const
Definition: available.cpp:599
BOOL HasEnglishLanguage() const
Definition: available.cpp:255
E & GetNext(_Inout_ POSITION &pos)
Definition: atlcoll.h:561
ATL::CSimpleArray< LCID > m_LanguageLCIDs
Definition: available.h:55
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:20
BOOL Enum(INT EnumType, AVAILENUMPROC lpEnumProc, PVOID param)
Definition: available.cpp:444
static AvailableStrings m_Strings
Definition: available.h:112
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SORT_DEFAULT
_In_ WDFCOLLECTION _In_ ULONG Index
ATL::CStringW m_szVersion
Definition: available.h:49
GLfloat param
Definition: glext.h:5796
#define MAX_PATH
Definition: compat.h:34
PCXSTR GetString() const
Definition: atlsimpstr.h:361
ATL::CStringW m_szInstalledVersion
Definition: available.h:68
static VOID DeleteCurrentAppsDB()
Definition: available.cpp:382
BOOL GetStorageDirectory(ATL::CStringW &lpDirectory)
Definition: misc.cpp:141
void RemoveAll()
Definition: atlcoll.h:725
VOID RefreshAppInfo(AvailableStrings &m_Strings)
Definition: available.cpp:26
BOOL WINAPI StrToIntExW(LPCWSTR lpszStr, DWORD dwFlags, LPINT lpiRet)
Definition: string.c:970
#define LANG_ENGLISH
Definition: nls.h:52
#define MAX_SCRNSHOT_NUM
Definition: available.h:12
E & GetAt(_In_ POSITION pos)
Definition: atlcoll.h:593
ATL::CStringW m_szRegName
Definition: available.h:48
int GetSelectedCount()
Definition: available.cpp:573
BOOL AddSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:551
BOOL HasLanguageInfo() const
Definition: available.cpp:245
ATL::CStringW m_szName
Definition: available.h:47
BOOL(CALLBACK * AVAILENUMPROC)(CAvailableApplicationInfo *Info, BOOL bInitialCheckState, PVOID param)
Definition: available.h:104
static BOOL ForceUpdateAppsDB()
Definition: available.cpp:438
ATL::CStringW szCabDir
Definition: available.h:36
ATL::CAtlList< CAvailableApplicationInfo * > m_SelectedList
Definition: available.h:109
ATL::CAtlList< CAvailableApplicationInfo * > m_InfoList
Definition: available.h:108
bool IsEmpty() const
Definition: atlsimpstr.h:379
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:624
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
ATL::CStringW szPath
Definition: available.h:31
BOOL RetrieveIcon(ATL::CStringW &IconLocation) const
Definition: available.cpp:285
CConfigParser * m_Parser
Definition: available.h:90
ATL::CStringW m_szIconLocation
Definition: available.h:57
BOOL GetString(const ATL::CStringW &KeyName, ATL::CStringW &ResultString)
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
ATL::CStringW szAppsPath
Definition: available.h:33
static const WCHAR IconPath[]
Definition: install.c:51
BOOL PathAppendNoDirEscapeW(LPWSTR pszPath, LPCWSTR pszMore)
Definition: misc.cpp:294
#define APPLICATION_DATABASE_NAME
Definition: defines.h:33
#define MAKELANGID(p, s)
Definition: nls.h:15
void RemoveAt(_In_ POSITION pos)
Definition: atlcoll.h:746
LicenseType m_LicenseType
Definition: available.h:46
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
POSITION Find(INARGTYPE element, _In_opt_ POSITION posStartAfter=NULL) const
Definition: atlcoll.h:771
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
int Compare(_In_z_ PCXSTR psz) const
Definition: cstringt.h:690
ATL::CStringW m_szSHA1
Definition: available.h:67
ATL::CStringW szSearchPath
Definition: available.h:34
ATL::CStringW szCabName
Definition: available.h:35
BOOL RemoveSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:556
bool IsEmpty() const
Definition: atlcoll.h:543
BOOL RetrieveScrnshot(UINT Index, ATL::CStringW &ScrnshotLocation) const
Definition: available.cpp:275
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL HasNativeLanguage() const
Definition: available.cpp:250
CAvailableApplicationInfo(const ATL::CStringW &sFileNameParam, AvailableStrings &m_Strings)
Definition: available.cpp:19
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502