ReactOS  0.4.15-dev-1367-g07cc0b5
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 write a converter to do this and write a github action for rapps-db to ensure package_name is unique.
45 
46  m_Parser->GetInt(L"Category", m_Category);
47 
48  if (!GetString(L"Name", m_szName)
49  || !GetString(L"URLDownload", m_szUrlDownload))
50  {
51  delete m_Parser;
52  return;
53  }
54 
55  GetString(L"RegName", m_szRegName);
56  GetString(L"Version", m_szVersion);
57  GetString(L"License", m_szLicense);
58  GetString(L"Description", m_szDesc);
59  GetString(L"URLSite", m_szUrlSite);
60  GetString(L"SHA1", m_szSHA1);
61 
62  static_assert(MAX_SCRNSHOT_NUM < 10000, "MAX_SCRNSHOT_NUM is too big");
63  for (int i = 0; i < MAX_SCRNSHOT_NUM; i++)
64  {
65  CStringW ScrnshotField;
66  ScrnshotField.Format(L"Screenshot%d", i + 1);
67  CStringW ScrnshotLocation;
68  if (!GetString(ScrnshotField, ScrnshotLocation))
69  {
70  // We stop at the first screenshot not found,
71  // so screenshots _have_ to be consecutive
72  break;
73  }
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  {
219  // fall back to "Size" string
220  GetString(L"Size", m_szSize);
221  return;
222  }
223 
224  m_SizeBytes = iSizeBytes;
227 }
228 
230 {
231  if (!m_HasLanguageInfo)
232  {
233  return FALSE;
234  }
235 
236  //Find locale code in the list
237  const INT nLanguagesSize = m_LanguageLCIDs.GetSize();
238  for (INT i = 0; i < nLanguagesSize; ++i)
239  {
240  if (m_LanguageLCIDs[i] == what)
241  {
242  return TRUE;
243  }
244  }
245 
246  return FALSE;
247 }
248 
250 {
251  return m_HasLanguageInfo;
252 }
253 
255 {
257 }
258 
260 {
262 }
263 
265 {
266  return m_IsInstalled;
267 }
268 
270 {
271  return m_HasInstalledVersion;
272 }
273 
275 {
277 }
278 
280 {
281  if (Index >= (UINT)m_szScrnshotLocation.GetSize())
282  {
283  return FALSE;
284  }
285  ScrnshotLocation = m_szScrnshotLocation[Index];
286  return TRUE;
287 }
288 
290 {
292  {
293  return FALSE;
294  }
296  return TRUE;
297 }
298 
300 {
301  RtlCopyMemory(&m_ftCacheStamp, ftTime, sizeof(FILETIME));
302 }
303 
305 {
306  if (!m_Parser->GetString(lpKeyName, ReturnedString))
307  {
308  ReturnedString.Empty();
309  return FALSE;
310  }
311  return TRUE;
312 }
313 // CAvailableApplicationInfo
314 
315 // AvailableStrings
317 {
318  //FIXME: maybe provide a fallback?
320  {
321  szAppsPath = szPath;
324 
326  szCabDir = szPath;
330 
334  }
335 }
336 // AvailableStrings
337 
338 // CAvailableApps
340 
342 {
343 }
344 
346 {
347  POSITION InfoListPosition = m_InfoList.GetHeadPosition();
348 
349  /* loop and deallocate all the cached app infos in the list */
350  while (InfoListPosition)
351  {
352  CAvailableApplicationInfo* Info = m_InfoList.GetNext(InfoListPosition);
353  delete Info;
354  }
355 
357 }
358 
359 static void DeleteWithWildcard(const CStringW& DirWithFilter)
360 {
362  WIN32_FIND_DATAW FindFileData;
363 
364  hFind = FindFirstFileW(DirWithFilter, &FindFileData);
365 
366  if (hFind == INVALID_HANDLE_VALUE)
367  return;
368 
369  CStringW Dir = DirWithFilter;
371  Dir.ReleaseBuffer();
372 
373  do
374  {
375  ATL::CStringW szTmp = Dir + L"\\";
376  szTmp += FindFileData.cFileName;
377 
378  if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
379  {
381  }
382  } while (FindNextFileW(hFind, &FindFileData) != 0);
383  FindClose(hFind);
384 }
385 
387 {
388  // Delete icons
390  PathAppendW(IconPath.GetBuffer(MAX_PATH), L"icons");
391  IconPath.ReleaseBuffer();
392  DeleteWithWildcard(IconPath + L"\\*.ico");
393 
394  // Delete leftover screenshots
395  ATL::CStringW ScrnshotFolder = m_Strings.szAppsPath;
396  PathAppendW(ScrnshotFolder.GetBuffer(MAX_PATH), L"screenshots");
397  ScrnshotFolder.ReleaseBuffer();
398  DeleteWithWildcard(IconPath + L"\\*.tmp");
399 
400  // Delete data base files (*.txt)
402 
404  RemoveDirectoryW(ScrnshotFolder);
407 }
408 
410 {
412  WIN32_FIND_DATAW FindFileData;
413 
415  {
416  return FALSE;
417  }
418 
419  //if there are some files in the db folder - we're good
420  hFind = FindFirstFileW(m_Strings.szSearchPath, &FindFileData);
421  if (hFind != INVALID_HANDLE_VALUE)
422  {
423  FindClose(hFind);
424  return TRUE;
425  }
426 
429 
433  {
434  return FALSE;
435  }
436 
438 
439  return TRUE;
440 }
441 
443 {
445  return UpdateAppsDB();
446 }
447 
449 {
450  if (EnumType == ENUM_CAT_SELECTED)
451  {
452  CAvailableApplicationInfo *EnumAvlbInfo = NULL;
453 
454  // enum all object in m_SelectedList and invoke callback
458  {
459  EnumAvlbInfo->RefreshAppInfo(m_Strings);
460 
461  if (lpEnumProc)
462  lpEnumProc(EnumAvlbInfo, TRUE, param);
463  }
464  return TRUE;
465  }
466  else
467  {
469  WIN32_FIND_DATAW FindFileData;
470 
471  hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
472 
473  if (hFind == INVALID_HANDLE_VALUE)
474  {
475  //no db yet
476  return FALSE;
477  }
478 
479  do
480  {
481  // loop for all the cached entries
482  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
484 
485  while (CurrentListPosition != NULL)
486  {
487  POSITION LastListPosition = CurrentListPosition;
488  Info = m_InfoList.GetNext(CurrentListPosition);
489 
490  // do we already have this entry in cache?
491  if (Info->m_sFileName == FindFileData.cFileName)
492  {
493  // is it current enough, or the file has been modified since our last time here?
494  if (CompareFileTime(&FindFileData.ftLastWriteTime, &Info->m_ftCacheStamp) == 1)
495  {
496  // recreate our cache, this is the slow path
497  m_InfoList.RemoveAt(LastListPosition);
498 
499  // also remove this in selected list (if exist)
501 
502  delete Info;
503  Info = NULL;
504  break;
505  }
506  else
507  {
508  // speedy path, compare directly, we already have the data
509  goto skip_if_cached;
510  }
511  }
512  }
513 
514  // create a new entry
515  Info = new CAvailableApplicationInfo(FindFileData.cFileName, m_Strings);
516 
517  // set a timestamp for the next time
518  Info->SetLastWriteTime(&FindFileData.ftLastWriteTime);
520 
521  skip_if_cached:
522  if (EnumType == Info->m_Category
523  || EnumType == ENUM_ALL_AVAILABLE)
524  {
525  Info->RefreshAppInfo(m_Strings);
526 
527  if (lpEnumProc)
528  {
529  if (m_SelectedList.Find(Info))
530  {
531  lpEnumProc(Info, TRUE, param);
532  }
533  else
534  {
535  lpEnumProc(Info, FALSE, param);
536  }
537  }
538  }
539  } while (FindNextFileW(hFind, &FindFileData));
540 
541  FindClose(hFind);
542  return TRUE;
543  }
544 }
545 
547 {
548  return m_SelectedList.AddTail(AvlbInfo) != 0;
549 }
550 
552 {
553  POSITION Position = m_SelectedList.Find(AvlbInfo);
554  if (Position)
555  {
557  return TRUE;
558  }
559  return FALSE;
560 }
561 
563 {
565  return;
566 }
567 
569 {
570  return m_SelectedList.GetCount();
571 }
572 
574 {
575  if (m_InfoList.IsEmpty())
576  {
577  return NULL;
578  }
579 
580  // linear search
581  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
583  while (CurrentListPosition != NULL)
584  {
585  info = m_InfoList.GetNext(CurrentListPosition);
586  if (info->m_szPkgName.CompareNoCase(szPkgName) == 0)
587  {
588  return info;
589  }
590  }
591  return NULL;
592 }
593 
595 {
597  for (INT i = 0; i < PkgNameList.GetSize(); ++i)
598  {
600  if (Info)
601  {
602  result.Add(*Info);
603  }
604  }
605  return result;
606 }
607 
609 {
610  return m_Strings.szPath;
611 }
612 
614 {
615  return m_Strings.szAppsPath;
616 }
617 
619 {
620  return m_Strings.szCabPath;
621 }
622 // 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:62
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2380
POSITION GetHeadPosition() const
Definition: atlcoll.h:549
#define MAKELCID(lgid, srtid)
const ATL::CStringW & GetAppPath() const
Definition: available.cpp:613
ATL::CStringW m_szPkgName
Definition: available.h:57
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:624
ATL::CStringW m_szLicense
Definition: available.h:49
#define APPLICATION_DATABASE_URL
Definition: defines.h:33
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:310
#define TRUE
Definition: types.h:120
static COORD Position
Definition: mouse.c:34
VOID RemoveAllSelected()
Definition: available.cpp:562
ATL::CSimpleArray< ATL::CStringW > m_szScrnshotLocation
Definition: available.h:55
#define SUBLANG_DEFAULT
Definition: nls.h:168
BOOL HasInstalledVersion() const
Definition: available.cpp:269
VOID DownloadApplicationsDB(LPCWSTR lpUrl, BOOL IsOfficial)
Definition: loaddlg.cpp:1037
ATL::CStringW m_szUrlSite
Definition: available.h:52
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
VOID SetLastWriteTime(FILETIME *ftTime)
Definition: available.cpp:299
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:716
DWORD LCID
Definition: nls.h:13
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:768
BOOL GetInt(const ATL::CStringW &KeyName, INT &iResult)
Definition: misc.cpp:392
CAvailableApplicationInfo * FindAppByPkgName(const ATL::CStringW &szPkgName) const
Definition: available.cpp:573
BOOL IsLicenseType(INT x)
Definition: available.h:23
char szTmp[518]
static BOOL UpdateAppsDB()
Definition: available.cpp:409
int GetSize() const
Definition: atlsimpcoll.h:104
int32_t INT
Definition: typedefs.h:58
static BOOLEAN bSuccess
Definition: drive.cpp:419
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:121
BOOL GetString(LPCWSTR lpKeyName, ATL::CStringW &ReturnedString)
Definition: available.cpp:304
_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:50
BOOL bUseSource
Definition: settings.h:23
static void DeleteWithWildcard(const CStringW &DirWithFilter)
Definition: available.cpp:359
ATL::CStringW szCabPath
Definition: available.h:31
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:818
ATL::CStringW m_szUrlDownload
Definition: available.h:53
unsigned int BOOL
Definition: ntddk_ex.h:94
ULONG CurrentPosition
Definition: patchapi.h:57
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
ATL::CStringW m_szSize
Definition: available.h:51
VOID FreeCachedEntries()
Definition: available.cpp:345
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1756
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:229
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
ATL::CSimpleArray< CAvailableApplicationInfo > FindAppsByPkgNameList(const ATL::CSimpleArray< ATL::CStringW > &arrAppsNames) const
Definition: available.cpp:594
const ATL::CStringW & GetFolderPath() const
Definition: available.cpp:608
BOOL HasEnglishLanguage() const
Definition: available.cpp:259
E & GetNext(_Inout_ POSITION &pos)
Definition: atlcoll.h:561
ATL::CSimpleArray< LCID > m_LanguageLCIDs
Definition: available.h:54
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:448
static AvailableStrings m_Strings
Definition: available.h:111
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SORT_DEFAULT
_In_ WDFCOLLECTION _In_ ULONG Index
ATL::CStringW m_szVersion
Definition: available.h:48
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:67
static VOID DeleteCurrentAppsDB()
Definition: available.cpp:386
BOOL GetStorageDirectory(ATL::CStringW &lpDirectory)
Definition: misc.cpp:180
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
struct _test_info info[]
Definition: SetCursorPos.c:19
#define MAX_SCRNSHOT_NUM
Definition: available.h:11
E & GetAt(_In_ POSITION pos)
Definition: atlcoll.h:593
ATL::CStringW m_szRegName
Definition: available.h:47
int GetSelectedCount()
Definition: available.cpp:568
static const WCHAR L[]
Definition: oid.c:1250
BOOL AddSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:546
BOOL HasLanguageInfo() const
Definition: available.cpp:249
ATL::CStringW m_szName
Definition: available.h:46
BOOL(CALLBACK * AVAILENUMPROC)(CAvailableApplicationInfo *Info, BOOL bInitialCheckState, PVOID param)
Definition: available.h:103
static BOOL ForceUpdateAppsDB()
Definition: available.cpp:442
ATL::CStringW szCabDir
Definition: available.h:35
ATL::CAtlList< CAvailableApplicationInfo * > m_SelectedList
Definition: available.h:108
ATL::CAtlList< CAvailableApplicationInfo * > m_InfoList
Definition: available.h:107
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:30
BOOL RetrieveIcon(ATL::CStringW &IconLocation) const
Definition: available.cpp:289
CConfigParser * m_Parser
Definition: available.h:89
ATL::CStringW m_szIconLocation
Definition: available.h:56
BOOL GetString(const ATL::CStringW &KeyName, ATL::CStringW &ResultString)
Definition: misc.cpp:354
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
ATL::CStringW szAppsPath
Definition: available.h:32
static const WCHAR IconPath[]
Definition: install.c:51
BOOL PathAppendNoDirEscapeW(LPWSTR pszPath, LPCWSTR pszMore)
Definition: misc.cpp:414
#define APPLICATION_DATABASE_NAME
Definition: defines.h:34
#define MAKELANGID(p, s)
Definition: nls.h:15
void RemoveAt(_In_ POSITION pos)
Definition: atlcoll.h:746
LicenseType m_LicenseType
Definition: available.h:45
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
const ATL::CStringW & GetCabPath() const
Definition: available.cpp:618
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:653
ATL::CStringW m_szSHA1
Definition: available.h:66
ATL::CStringW szSearchPath
Definition: available.h:33
ATL::CStringW szCabName
Definition: available.h:34
BOOL RemoveSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:551
bool IsEmpty() const
Definition: atlcoll.h:543
BOOL RetrieveScrnshot(UINT Index, ATL::CStringW &ScrnshotLocation) const
Definition: available.cpp:279
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL HasNativeLanguage() const
Definition: available.cpp:254
CAvailableApplicationInfo(const ATL::CStringW &sFileNameParam, AvailableStrings &m_Strings)
Definition: available.cpp:19
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502